推荐一些关于C语言数组的练习。
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 }