推荐一些关于C语言数组的练习。

2006年南开计算机问题

1:问题1中M个人的分数存储在分数数组中。请写fun这个函数,它的作用是返回平均分较低的人作为函数值,把平均分较低的人放在下面指定的函数里。

答案:int fun (int score [],int m,int below [])

{

int i,k=0,aver = 0;

for(I = 0;I < m;i++)

aver+= score[I];

aver/= m;

for(I = 0;I < m;i++)

if(分数[i]

{

低于[k]=分数[I];

k++;

}

返回k;

}

2.问题2,请写函数fun,它的作用是:在1到100范围内找出所有能被北7或11整除,但不能同时被北7和11整除的证书,放入A表示的数组中,用n返回这些数的个数。

答案:void fun(int *a,int *n)

{

int i,j = 0;

for(I = 2;I < 1000;i++)

if((I % 7 = = 0 | | I % 11 = = 0)& amp;& amp我%77!=0)

a[j++]= I;

* n = j;

}

3.问题3:请写函数void fun(int x,int pp[],int *n),它的作用是:找出所有能被x整除且不是偶数的整数,从小到大放入pp指向的数组中,通过形参n返回这些除数的个数..

答案:void fun(int x,int pp[ ],int *n)

{

int i=1,j = 0;k=0,* t = pp

for(I = 0;I < = x;i++)

如果(i%2!=0)

{

t[j]= I;

j++;

}

for(I = 0;I < j;i++)

if(x%t[i]==0)

{

PP[k]= t[I];

k++;

}

* n = k;

}

4.问题4:请写一个函数void fun(char *tt,int pp[])统计字母“a”到“z”26在tt字符中出现的次数,依次放入pp指向的数组中。

答案:void fun(char *tt,int pp[])

{

int I;

for(I = 0;i < 26i++)

PP[I]= 0;

而(*tt)

{

开关(*tt)

{

案例“a”:PP[0]++;打破;

案例“b”:PP[1]++;打破;

情况“c”:PP[2]++;打破;

案例“d”:PP[3]++;打破;

情况“e”:PP[4]++;打破;

格“f”:PP[5]++;打破;

格“g”:PP[6]++;打破;

格“h”:PP[7]++;打破;

案例“I”:PP[8]++;打破;

案例“j”:PP[9]++;打破;

案例“k”:PP[10]++;打破;

案例“l”:PP[11]++;打破;

案例“m”:PP[12]++;打破;

案例“n”:PP[12]++;打破;

案例“o”:PP[14]++;打破;

案例“p”:PP[15]++;打破;

案例“q”:PP[16]++;打破;

案例“r”:PP[17]++;打破;

案例:PP[18]++;打破;

案例“t”:PP[19]++;打破;

格“u”:PP[20]++;打破;

格“v”:PP[21]++;打破;

格“w”:PP[22]++;打破;

案例“x”:PP[23]++;打破;

案例“y”:PP[24]++;打破;

案例“z”:PP[25]++;打破;

}

TT ++;

}

}

5.问题5:请写一个函数void fun(int m,int k,int xx[])。这个函数的作用是将大于整数m,接近m的k个素数存储到xx表示的数组中。

答案:void fun(int m,int k,int xx[])

{

int g=0,I,j,flag = 1;

for(I = m+1;i < m * mi++)

{

for(j = 0;j < I;j++)

{

如果(我%j!=0)

flag = 1;

其他

{

flag = 0;

打破;

}

}

if(flag = = 1 & amp;& ampj & gt=i)

{

if(k & gt;=0)

{

xx[g++]= I;

k-;

}

其他

打破;

}

}

}

6.问题6:请写一个函数void fun(char a[],char[],int n),函数的作用是删除每个字符串中指定了下标的字符。其中a指向原字符串,删除的字符串存放在b指向的数组中,指定的下标存放在n中。

答案:void fun(char a[],char b[],int n)

{

int I,j = 0;

for(I = 0;i < LENi++)

如果(我!=n)

{

b[j]= a[I];

j++;

}

b[j]= ' \ 0 ';

}

7:问题7:请写一个函数int fun(int *s,int t,int *k)除以数组最大元素的下标,存放在k表示的存储单元中。

答案:void fun (int *s,int t,int *k)

{

int I,max

max = s[0];

for(I = 0;I < t;i++)

if(s[I]& gt;最大)

{

max = s[I];

* k = I;

}

}

8:在问题8中写函数fun,函数是:根据下面的进攻计算S,计算结果作为函数值返回;n通过形参传入。s = 1+1/(1+2)+1/(1+2+3)+……。+1/(1+2+3+4+……+n)

答案:float fun (int n)

{

int I;

浮点数s=1.0,t = 1.0;

for(I = 2;I < = n;i++)

{

t = t+I;

s = s+1/t;

}

返回s;

}

9.问题9写一个函数fun,它的作用是根据下面的公式求p的值,结果由函数值带回来。m和n是两个正整数,m >;n .p=m!/n!(m-n)!

答案:float fun(int m,int n)

{

float p,t = 1.0;

int I;

for(I = 1;I < = m;i++)

t = t * I;

p = t;

for(t=1.0,I = 1;I < = n;i++)

t = t * I;

p = p/t;

for(t=1.0,I = 1;I < = m-n;i++)

t = t * I;

p = p/t;

返回p;

}

10:在问题10中写函数fun。它的作用是用下面的简单迭代法求方程cos(x)-x=0的实根。

迭代步骤如下:(1)取x1的初始值为0.0;(2)x0=x1,将x1的值赋给x0;

(3)x1=cos(x0),求新的x 1;

(4)如果x0-x1的绝对值小于0.000001,则执行步骤(5),否则执行步骤(2);

(5) x1是方程cos(x)-x=0的实根,作为函数值返回。

程序将输出root=0.739085。

答案:飘趣()

{

float x1=0.0,x0;

{

x0 = x 1;

x 1 = cos(x0);

}

while(fabs(x0-x1)>1e-6);

返回x 1;

}

11:问题11下面的程序定义了一个n×n的二维数组,并在main函数中自动赋值。请编写函数fun(int a[][n]),它的作用是将数组左下三角形元素中的值全部设置为0。

答案:int fun(int a[][N])

{

int I,j;

for(I = 0;I < N;i++)

for(j = 0;j < = I;j++)

a[I][j]= 0;

}

12:问题12下面的程序定义了一个n×n的二维数组,并在main函数中赋值。请写fun这个函数,它的作用是求数组周围元素的平均值,在主函数中作为函数值返回给S。

答案:double fun(int w[][N])

{

int I,j,k = 0;

双s = 0.0

for(j = 0;j < N;j++)

{

s+= w[0][j];

k++;

}

for(j = 0;j < N;j++)

{

s+= w[N-1][j];

k++;

}

for(I = 1;I < = N-2;i++)

{

s+= w[I][0];

k++;

}

for(I = 1;I < = N-2;i++)

{

s+= w[I][N-1];

k++;

}

返回s/= k;

}

13:问题13,请写一个函数Voidfun (int TT [m] [n],int pp [n]),TT指向一个m行n列的二维函数组,找出二维函数组每列中最小的元素,依次放入pp指定的一维数组中。二维数组中的数字已经在main函数中给出。

答案:void fun(int tt[M][N],int pp[N])

{

int I,j,min

for(j = 0;j < N;j++)

{

min = TT[0][j];

for(I = 0;I < M;i++)

{

if (tt[i][j]

min = TT[I][j];

}

PP[j]= min;

}

}

14:问题14,请不要写函数fun。函数的作用是求二维数组周围元素的和,作为函数值返回。二维数组中的值在main函数中给出。

答案:int fun(int a[M][N])

{

int I,j,s = 0;

for(j = 0;j < N;j++)

{

s+= a[0][j];

s+= a[M-1][j];

}

for(I = 1;I < = M-2;i++)

{

s+= a[I][0];

s+= a[I][N-1];

}

返回s;

}

15:问题15,请写一个函数unsigned fun (unsigned w),其中w是大于10的无符号整数。如果w是n(n≥2)的整数,那么函数会找到w后面的n-1的个数,并作为函数值返回。

答案:无符号的乐趣(无符号的w)

{

无符号t,s=0,s1=1,p = 0;

t = w;

while(t & gt;10)

{

如果(t/10)

p = t % 10;

s = s+p * s 1;

s 1 = s 1 * 10;

t = t/10;

}

返回s;

}

16:问题16,请写一个函数float fun(双h)。函数的作用是使变量h中的值保持一个2位树,对第三位进行四舍五入(指定h中的值为正)。

答案:浮趣(浮h)

{

长t;

float s;

h = h * 1000;

t =(h+5)/10;

s =(float)t/100.0;

返回s;

}

17:问题17,请写一个函数fun(char *s),函数的作用是使字符串的内容近似。

答案:虚空乐趣(char *s)

{

char ch

int I,m,n;

I = 0;

m = n = strlen(s)-1;

while(i<(n+1)/2)

{

ch = s[I];

s[I]= s[m];

s[m]= ch;

i++;

m-;

}

}

18:针对问题18编写程序,实现矩阵的转置(3行3列)(即行列互换)。

答案:void fun(int array[3][3])

{

int I,j,temp

for(I = 0;I < 3;i++)

for(j = 0;j

{

temp = array[I][j];

array[I][j]= array[j][I];

array[j][I]= temp;

}

}

19:在问题19中写函数fun。这个函数的作用是从字符中删除指定的字符,将同一个字母的大小写视为不同的字符。

答案:void fun(char s[],int c)

{

int I = 0;

char * p;

p = s;

while(*p)

{

if(*p!=c)

{

s[I]= * p;

i++;

}

p++;

}

s[I]= ' \ 0 ';

}

20:问题20写函数int fun(int lim,int aa[max]),函数的作用是找出所有小于等于lim的素数,放入aa数组,函数返回所求素数的个数。

答案:int fun(int lim,int aa[MAX])

{

int k=0,I,j;

for(I = lim;我& gt1;我-)

{

for(j = 2;j < I;j++)

如果(i%j==0)

打破;

其他

继续;

if(j & gt;=i)

{

aa[k]= I;

k++;

}

}

返回k++;

}

21:问题21,请写函数fun。对于长度为7个字符的字符串,除了第一个和最后一个字符,其他5个字符按照ascii码降序排列。

答案:void fun(char *s,int num)

{

char t;

int I,j;

for(I = 1;I < num-2;i++)

for(j = I+1;j < num-1;j++)

if(s[i]

{

t = s[I];

s[I]= s[j];

s[j]= t;

}

}

22:问题22已经将n个学生的成绩放入一个链表结构中,主函数中有前导节点,H指向链表的头节点。请写fun这个函数,它的作用是找出学生的最高分,按函数值返回。

答案:双重乐趣(STREC *h)

{

双倍max

STREC * q = h;

max = h-& gt;s;

{

如果(q->;s & gt最大)

max = q-& gt;s;

q = q-& gt;接下来;

}

而(q!=0);

返回max

}

23:问题23,请写函数fun,它的作用是判断字符串是否回文。如果是,函数返回1,主函数输出Yes;否则,它返回0,主函数输出No..回文指的是向前和向后阅读的同一个字符串。

答案:int fun(char *str)

{

int I,n = 0;fg = 1;

char * p = str

while (*p)

{

n++;

p++;

}

for(I = 0;I < n/2;i++)

if(str[I]= = str[n-1-I]);

其他

{

fg = 0;

打破;

}

返回fg;

}

问题24:请写一个fun函数,它的作用是将一个字符串转换成整数(C语言提供的将字符串转换成整数的函数是不允许的)。

答案:长趣(char *p)

{

长s=0,t;

int i=0,j,n=strlen(p),k,s 1;

if(p[0]=='-')

i++;

for(j = I;j < = n-1;j++)

{

t = p[j]-' 0 ';

s 1 = 10;

for(k = j;k < n-1;k++)

t * = s 1;

s+= t;

}

if(p[0]=='-')

return–s;

其他

返回s;

}

25:问题25,请写一个函数fun,它的作用是比较两个字符串的长度(C语言提供的求字符串长度的函数是不允许的),函数返回一个更长的字符串。如果两个字符串长度相同,则返回第一个字符串。

答案:char *fun(char *s,char *t)

{

char *p,*t1=t,* s 1 = s;

int n = 0;m = 0;

while (*s1)

{

n++;

s 1++;

}

while(*t1)

{

m++;

t 1++;

}

如果(n & gt=m)

p = s;

其他

p = t;

返回p;

}

26:问题26,请写一个函数fun,它的作用是根据下面的公式求x的值(要求满足0.0005的精度,即当某项小于0.0005时停止迭代):

x/2 = 1+1/3+1×2/3×5+1×2×3/3×5×7+1×2×3×4/3×5×7×9+…+1×2×3×…×n/3×5×7×(2n+1)

程序运行后,如果输入精度为0.0005,程序输出为3.14。

答案:双倍乐趣(双倍eps)

{

双s;

浮点数n,t,pi;

t = 1;pi = 0;n = 1.0;s = 1.0;

while((晶圆厂))& gt=eps)

{

pi+= s;

t = n/(2 * n+1);

s * = t;

n++;

}

pi = pi * 2;

返回pi;

}

27:问题27,请写一个函数fun。它的作用是从1到M(包括M)中找出所有能被北7或11整除的整数放入数组A中,通过n返回这些数的个数。

答案:void fun(int m,int *a,int *n)

{

int I,j = 0;* n = 0;

for(I = 1;I < = m;i++)

if (i%7==0 || i%11 ==0)

{

a[j]= I;

j++;

}

* n = j;

}

28:问题28,请写一个函数fun,它的作用是找出一维整数数组元素中的最大值及其下标,最大值及其下标通过形参返回。数组元素中的值已经在main函数中赋值。在main函数中,x是数组名,n是x中的数据个数,max存储最大值,index存储最大值所在元素的下标。

答案:Voidfun (int a [],int n,int * max,int * d)

{

int I;

* max = a[0];

* d = 0;

for(I = 0;I < n;i++)

if(a[I]& gt;*最大)

{

* max = a[I];

* d = I;

}

}

29:问题29,请写一个函数fun,它的作用是将ss引用的字符串中奇数位置的所有字母转换成大写(如果位置不是字母,则不转换)。

答案:虚空乐趣(char *ss)

{

int I,n;

n = strlen(ss);

for(I = 1;I < n;i+=2)

if(ss[I]& gt;= ' a ' & amp& ampss[i]<='z ')

ss[I]= ss[I]-32;

}

问题30:请写一个fun函数,它的作用是将一个2×m整数二维数组中最大元素的值相除,并将这个值返回给调用函数。

答案:int fun(int a[][M])

{

int I,j,max

max = a[0][0];

for(I = 0;I < 2;i++)

for(j = 0;j < M;j++)

if(a[I][j]& gt;最大)

max = a[I][j];

返回max

}

31:问题31,请写函数fun,其作用是删除S所指字符串中除下标为偶数且ascii值为偶数的字符外的所有字符;由字符串中的剩余字符组成的新字符串被放入t指向的数组中。

答案:void fun(char *s,char t[])

{

int I,j=0,n;

n = strlen(s);

for(I = 0;I,n;i++)

if(I % 2 = = 0 & amp;& amps[i]%2==0)

{

t[j]= s[I];

j++;

}

t[j]= ' \ 0 ';

}

32:问题32:请写函数fun,它的作用是删除S表示的字符串中除下标为奇数且ascii值也为奇数的字符外的所有字符,并将字符串中剩余字符组成的新字符串放入t表示的数组中。

答案:void fun(char *s,char t[])

{

int I,j=0,n;

n = strlen(s);

for(I = 0;I,n;i++)

如果(i%2!= 0 & amp& amps[i]%2!=0)

{

t[j]= s[I];

j++;

}

t[j]= ' \ 0 ';

}

33:问题33假设输入字符串只包含字母和*。请写函数fun,它的作用是:使字符串末尾的*号个数不超过n;如果多于n个,则删除多于*;如果小于或等于n,则什么都不做,字符串中间和前面的*号不会被删除。

答案:void fun(char *a,int n)

{

int I = 0;k = 0;

char *p,* t;

p = t = a;

while (*t)

t++;

t-;

while(*t=='* ')

{

k++;

t-;

}

t++;

if(k & gt;n)

{

while(* p & amp;& ampp

{

a[I]= * p;

i++;

p++;

}

a[I]= ' \ 0 ';

}

}

34:问题34学生记录由学号和成绩组成。n个学生的数据已经放入主函数中的结构数组S中。请写函数fun,它的作用是把分数最高的学生数据放到h表示的数组中,注意分数最高的学生可能不止一个,函数返回分数最高的学生人数。

答案:int fun (STREC *a,STREC *b)

{

int I,j=0,n=0,max

max=a[0]。s;

for(I = 0;I < N;i++)

如果(a[i]。s & gt最大)

max=a[i]。s;

for(I = 0;I < N;i++)

如果(a[i]。s==max)

{

*(b+j)= a[I];

j++;

n++;

}

返回n;

}

问题35:请写一个函数删除字符串中的所有空格。

答案:void fun(char *str)

{

int I = 0;

char * p = str

while (*p)

{

if(*p!='')

{

str[I]= * p;

i++;

}

p++;

}

str[I]= ' \ 0 ';

}

36:问题36假设输入字符串只包含字母和*。请编写函数fun,它的作用是将字符串中所有前导*号移动到字符串末尾。

答案:虚空乐趣(char *a)

{

int i=0,n = 0;

char * p;

p = a;

while (*p=='* ')

{

n++;

p++;

}

while (*p)

{

a[I]= * p;

i++;

p++;

}

而(n!=0)

{

a[I]= ' * ';

i++;

n-;

}

a[I]= ' \ 0 ';

}

37:问题37一个学生的记录由学号、八门课程成绩和平均分组成。学生编号和八门课程的分数已经在主函数中给出。请写函数fun,它的作用是求学生的平均分,放入记录的ave成员中。请自行定义正确的参数。

答案:虚空乐趣(STREC *p)

{

双av = 0.0

int i:

for(I = 0;I < N;i++)

av+= p-& gt;s[I];

av/= N;

p->;ave = av

}