self二级C上机南开题答案.doc_第1页
self二级C上机南开题答案.doc_第2页
self二级C上机南开题答案.doc_第3页
self二级C上机南开题答案.doc_第4页
self二级C上机南开题答案.doc_第5页
已阅读5页,还剩96页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

计算机二级C语言上机南开100题答案1: 第1题 m个人的成绩存放在score数组中,请编写函数fun,它的功能是:将低于平均分的人数作为函数值返回,将低于平均分的所有分数放在below所指定的数组中。 #include /*-参数:float *a,int m 传递score数组的首地址和长度float *below 传递 存放低于平均分的所有分数的数组的首地址返回值:低于平均分的人数-*/int fun(float *a,int m,float *below) float aver=0; int i, n; for(i=0;im;i+) aver+=ai; aver/=m; for(i=0,n=0;iai)belown+=ai; printf(%.1f %dn,aver,n); return n;void print(float *a,int n)int i; for(i=0;in;i+)printf(%.1f ,ai); printf(n);/=主函数void main ()float score10=85,95,65,84,68,98,68,93,92,50,b10;int n; n=fun(score,10,b);print(b,n);2: 第2题 请编写函数fun,它的功能是:求出1到100之内能被7或者11整除,但不能同时被7和11整除的所有整数,并将他们放在a所指的数组中,通过n返回这些数的个数。 #include /*-参数:int *a,传递存放结果数据的数组的首地址int *传递 存放 结果数据个数的整型变量的地址-*/void fun(int *a,int *n) int i,k; for(i=1,k=0;i100;i+) if( (i%7=0 & i%11!=0) | (i%7!=0 & i%11=0) ) ak+=i; *n=k;void print(int *a,int n)int i; for(i=0;in;i+) if(i%10=0) printf(n);printf(%5d,ai); printf(n);/=主函数void main ()int a40,n;fun(a,&n);print(a,n);3: 第3题 请编写函数void fun(int x,int pp,int *n),它的功能是:求出能整除x且不是偶数的各整数,并按从小到大的顺序放在pp所指的数组中,这些除数的个数通过形参n返回。 #include void fun(int x,int pp,int *n) int i,k; for(i=1,k=0;ix/3;i+=2) if( x%i=0 ) ppk+=i; *n=k;void print(int *a,int n)int i; for(i=0;in;i+) if(i%10=0) printf(n);printf(%5d,ai); printf(n);/=主函数void main ()int x=1000,a40,n;fun(x,a,&n);print(a,n);4: 第4题 请编写一个函数void fun(char *tt,int pp),统计在tt字符中a到z26各字母各自出现的次数,并依次放在pp所指的数组中。#include void fun(char *tt,int pp) int i;for(i=0;i=a&*tt=z)pp*tt-a+;void print(int *a)int i; for(i=0;i26;i+) if(ai)printf(%c: %4dn,a+i,ai);/=主函数void main ()int pp26;char s100= jdfkj kjerf 845689anderdjdk;fun(s,pp);puts(s);print(pp);5: 第5题 请编写一个函数void fun(int m,int k,int xx),该函数的功能是:将大于整数m且紧靠m的k个素数存入xx所指的数组中。#include void fun(int m,int k,int xx) int i,j,n;for(i=m+1,n=0;nk;i+)for(j=2;j=i/2)xxn+=i;void print(int *a,int n)int i; for(i=0;in;i+) if(i%10=0) printf(n);printf(%4d,ai); printf(n);/=主函数void main ()int m=200,k=20,xx500;fun(m,k,xx);print(xx,k); 6: 第6题 请编写一个函数void fun(char a,char b,int n),其功能是:删除一个字符串中指定下标的字符。其中,a指向原字符串,删除后的字符串存放在b所指的数组中,n中存放指定的下标。 #include void fun(char a,char b,int n)int i,j;for(i=j=0;ai;i+)if(i!=n)bj+=ai;bj=0;/=主函数void main ()char a100=sdnfe683746,b100,n=4;fun(a,b,n);puts(a);puts(b);7: 第7题 请编写一个函数int fun(int *s,int t,int *k),用来求出数组的最大元素在数组中的下标并存放在k所指的储存单元中。 #include int fun(int *s,int t,int *k)int i,m=0,max=s0;for(i=1;imax)max=si;m=i;*k=m;return max;/=主函数void main ()int a20=12,54,6,1,2,4,7,23,6,90,1,2,4,6,1,-9,3,1,7,10,max,i;max=fun(a,20,&i);printf(max=%d i=%dn,max,i);8: 第8题 编写函数fun,功能是:根据以下公式计算s,计算结果作为函数值返回;n通过形参传入。S=1+1/(1+2)+1/(1+2+3)+.+1/(1+2+3+4+n) #include double fun(int n)double i,sum=0,t=0;for(i=1;in。 p=m!/n!(m-n)! /*-分析:为了避免数据超界溢出,用如下递归公式求组合数:c(m,n)=c(m-1,n-1)+c(m-1,n)-*/#include int fun(int m,int n)if(mn) return 0;else if(m=n) return 1;else if(n=1) return m;else return fun(m-1,n-1)+ fun(m-1,n);double ff(int n)/为了验证结果double y=1;int i;for(i=2;i=n;i+)y*=i;return y;/=主函数void main ()int n=5,m=20,y,t;if(mn)t=m;m=n;n=t;y=fun(m,n);printf(y=%dn,y);y=ff(m)/(ff(n)*ff(m-n);printf(y=%dn,y);10: 第10题 编写函数fun,它的功能是:利用以下的简单迭代方法求方程cos(x)-x=0的一个实根。迭代步骤如下:(1)取x1初值为0.0; (2)x0=x1,把x1的值赋各x0;(3)x1=cos(x0),求出一个新的x1;(4)若x0-x1的绝对值小于0.000001,则执行步骤(5),否则执行步骤(2);(5)所求x1就是方程cos(x)-x=0的一个实根,作为函数值返回。程序将输出root=0.739085。/*-分析:给出方程:x=f(x)简单迭代方法: x(n+1)=f(xn),x0=0若x(n+1)-xn的绝对值小于0.000001,则x(n+1)为x=f(x)的近似根。-*/#include #include double fun(void)double x0=0,x1;x1=cos(x0);while(fabs(x1-x0)0.000001)x0=x1;x1=cos(x0);return x1;/=主函数void main ()double root;root=fun();printf(root=%lfn,root);11: 第11题 下列程序定义了nn的二维数组,并在主函数中自动赋值。请编写函数 fun(int an),该函数的功能是:使数组左下半三角元素中的值全部置成0。#include #define n 5void fun(int an)int i,j;for(i=0;in;i+)for(j=0;ji;j+)aij=0;void print2(int an)int i,j;for(i=0;in;i+)for(j=0;jn;j+)printf(%4d,aij);printf(n);printf(n);/=主函数void main ()int ann,i,j,k=1;for(i=0;in;i+)for(j=0;jn;j+)aij=k+;print2(a);fun(a);print2(a);12: 第12题 下列程序定义了nn的二维数组,并在主函数中赋值。请编写函数fun,函数的功能使求出数组周边元素的平均值并作为函数值返回给主函数中的s。#include #define n 5double fun(int an)int i,j;double sum=0;for(i=0;in;i+)for(j=0;jn;j+)if(i=0|j=0|i=n-1|j=n-1)sum+=aij;return sum/(4*(n-1);void print2(int an)int i,j;for(i=0;in;i+)for(j=0;jn;j+)printf(%4d,aij);printf(n);printf(n);/=主函数void main ()int ann,i,j,k=1;double aver;for(i=0;in;i+)for(j=0;jn;j+)aij=k+;print2(a);aver=fun(a);printf(aver=%lfn,aver); 13: 第13题 请编写一个函数void fun(int ttmn,int ppn),tt指向一个m行n列的二维函数组,求出二维函数组每列中最小元素,并依次放入pp所指定一维数组中。二维数组中的数已在主函数中赋予。 #include #define m 3#define n 5void fun(int ttmn,int ppn)int i,j,min;for(j=0;jn;j+)min=tt0j;for(i=1;im;i+)if(ttijmin)min=ttij;ppj=min;void print2(int an)int i,j;for(i=0;im;i+)for(j=0;jn;j+)printf(%4d,aij);printf(n);printf(n);/=主函数void main ()int amn,ppn,i,j,k=1;for(i=0;im;i+)for(j=0;jn;j+)aij=k+;print2(a);fun(a,pp);for(i=0;in;i+)printf(%4d,ppi);printf(n);14: 第14题 请别写函数fun,函数的功能使求出二维数组周边元素之和,作为函数值返回。二维数组中的值在主函数中赋予。 #include #define m 4#define n 5int fun(int an)int i,j,sum=0;for(i=0;im;i+)for(j=0;jn;j+)if(i=0|j=0|i=m-1|j=n-1)sum+=aij;return sum;void print2(int an)int i,j;for(i=0;im;i+)for(j=0;jn;j+)printf(%4d,aij);printf(n);printf(n);/=主函数void main ()int amn,i,j,k=1,sum;for(i=0;im;i+)for(j=0;jn;j+)aij=k+;print2(a);sum=fun(a);printf(sum=%dn,sum); 15: 第15题 请编写一个函数unsigned fun(unsigned w),w是一个大于10的无符号整数,若w使n(n2)位的整数,则函数求出w后n1位的数作为函数值返回。 #include unsigned fun(unsigned w)int s=1,n=1;unsigned w0=w;if(w10)n+;w=w/10;s=s*10;return w0%s;/=主函数void main ()unsigned w=12345,s;s=fun(w);printf(w=%4dns=%4dn,w,s);16: 第16题 请编写一个函数float fun(double h),函数的功能使对变量h中的值保留2位小数,并对第三位进行四舍五入(规定h中的值为正数)。 #include float fun(double h)return (int)(h*100+0.5)/100.0;/=主函数void main ()double h=12.4567,s;s=fun(h);printf(h=%lfn,h);printf(s=%lfn,s);h=12.4547;s=fun(h);printf(h=%lfn,h);printf(s=%lfn,s);17: 第17题 请编写一个函数fun(char *s),该函数的功能使把字符串中的内容逆置。#include void fun(char *s)int i,j;char c;for(j=0;sj;j+);j-;for(i=0;ij;i+,j-)c=si;si=sj;sj=c;/=主函数void main ()char s80=How are you?;puts(s);fun(s);puts(s); 18: 第18题 编写程序,实现矩阵(3行3列)的转置(即行列互换)。 #include #define n 3void fun(int an)int i,j,t;for(i=0;in;i+)for(j=0;ji;j+)t=aij;aij=aji;aji=t;void print2(int an)int i,j;for(i=0;in;i+)for(j=0;jn;j+)printf(%4d,aij);printf(n);printf(n);/=主函数void main ()int ann,i,j,k=1;for(i=0;in;i+)for(j=0;jn;j+)aij=k+;print2(a);fun(a);print2(a);19: 第19题 编写函数fun,该函数的功能是:从字符中删除指定的字符,同一字母的大、小写按不同字符处理。 #include void fun(char *s,char ch)int i,j;for(i=0,j=0;si;i+)if(si!=ch)sj+=si;sj=0;/=主函数void main ()char s100=aaabbb ccc aba ddda,ch=a;printf(ch=%cn%sn,ch,s);fun(s,ch);puts(s);20: 第20题 编写函数int fun(int lim,int aamax),该函数的功能是求出小于或等于lim的所有素数并放在aa数组中,该函数返回所求的素数的个数。#include #include int fun(int lim,int aa)int m,i,k,n=0;if(lim=2)aan+=2;for(m=3;m=lim;m+=2)k=sqrt(m);for(i=2;i=k;i+)if(m%i=0)break;if(i=k+1)aan+=m;return n;void print(int *a,int n)int i; for(i=0;in;i+) if(i%10=0) printf(n);printf(%4d,ai); printf(n);/=主函数void main ()int lim=200,aa500,n;n=fun(lim,aa);print(aa,n); 21: 第21题 请编写函数fun,对长度为7个字符的字符串,除首尾字符外,将其余5个字符按ascii码降序排列。 #include void fun(char *s)char *i,*j,*k,t;for(t=0,i=s;*i;t+,i+);if(t!=7)return;for(i=s+1;is+6;i+)k=i;for(j=i+1;js+6;j+)if(*k*j)k=j;if(k!=i)t=*k;*k=*i;*i=t;/=主函数void main ()char s10=agrbdjz;puts(s);fun(s);puts(s);22: 第22题 n名学生的成绩已在主函数中放入一个带头结点的链表结构中,h指向链表的头结点。请编写函数fun,它的功能是:找出学生的最高分,由函数值返回。 #include #include struct studentint num;float score;struct student *next;float fun(struct student *h)struct student *p;float max;if(h=NULL|h-next=NULL)return 0;p=h-next;max=p-score;p=p-next;while(p!=NULL)if(maxscore)max=p-score;p=p-next;return max;/*- 函数功能:建立学生信息的链表 入口参数:无 返回值: 链表的头指针-*/struct student *create(void) struct student *head,*p1, /p1总是指向新结点*p2; /p2总是指向新表尾float a10=0,85,96,100,65,53,75,68,74,99;int i;head=NULL;for(i=0;inum=i; p1-score=ai; if(i=0)head=p1; /连接新结点 else p2-next=p1; p2=p1; /让p2指向新的表尾p2-next=NULL; return head;/*- 函数功能:输出学生信息的链表 入口参数: 链表的头指针 返回值: 无 -*/void print(struct student *head) struct student *p; printf(nnt学号t分数n); /表头 p=head-next; /p从表头开始遍历链表 while(p!=NULL) printf(t%dt%.1fn,p-num,p-score); p=p-next; /前进指针 printf(n);/=主函数void main ()struct student *head;float max;head=create();print(head);max=fun(head);printf( max=%.1fn,max); 23: 第23题 请编写函数fun,该函数的功能是:判断字符串是否为回文?若是则函数返回1,主函数中输出yes,否则返回0,主函数中输出no。回文是指顺读和倒读都是一样的字符串。#include int fun(char *s)int i=0,j;for(j=0;sj;j+);j-;for(i=0;ij;i+,j-)if(si!=sj)return 0;return 1;/=主函数void main ()char *s=level;printf(s=%sn,s);if(fun(s)printf( Yesn);else printf( Non);s=Level;printf(s=%sn,s);if(fun(s)printf( Yesn);else printf( Non); 24: 第24题 请编写一个函数fun,它的功能是:将一个字符串转换为一个整数(不得调用c语言提供的将字符串转换为整数的函数)。#include int fun(char *s)int n=0,i=0,d=1; if(s0=-)d=-1;i=1;for(;si;i+)n=n*10+si-0;return n*d;/=主函数void main ()char *s=-12300;int n;n=fun(s);printf( n=%dn,n); 25: 第25题 请编写一个函数fun,它的功能是:比较两个字符串的长度,(不得调用c语言提供的求字符串长度的函数),函数返回较长的字符串。若两个字符串长度相同,则返回第一个字符串。 #include char *fun(char *a,char *b)int i;for(i=0;ai&bi;i+);if(bi)return b;else return a;/=主函数void main ()char *a=12300,*b=123456;puts(fun(a,b); 26: 第26题 请编写一个函数fun,它的功能是:根据以下公式求x的值(要求满足精度0.0005,即某项小于0.0005时停止迭代):x/2=1+1/3+12/35+123/357+1234/3579+123n/357(2n+1)程序运行后,如果输入精度0.0005,则程序输出为3.14。 #include double fun(double d)double i=1,x=1,m=1,n=3,t;t=m/n;while(t=d)x+=t;i+;m=m*i;n=n*(2*i+1);t=m/n;return 2*x;/=主函数void main ()double d=0.000001,pi;pi=fun(d);printf(pi=%.8lfn,pi); 27: 第27题 请编写一个函数fun,它的功能是:求除1到m之内(含m)能被7或11整除的所有整数放在数组a中,通过n返回这些数的个数。 #include void fun(int m,int *a,int*n)int i,k=0;for(i=7;i=m;i+) if( i%7=0 |i%11=0 ) ak+=i; *n=k;void print(int *a,int n)int i; for(i=0;in;i+) if(i%10=0) printf(n);printf(%5d,ai); printf(n);/=主函数void main ()int m=300,a500,n;fun(m,a,&n);print(a,n);printf( n=%dn,n);28: 第28题 请编写一个函数fun,它的功能是:找出一维整型数组元素中最大的值和它所在的下标,最大的值和它所在的下标通过形参传回。数组元素中的值已在主函数中赋予。主函数中x是数组名,n 是x中的数据个数,max存放最大值,index存放最大值所在元素的下标。 #include void fun(int *a, int n,int *max,int *index)int i;*max=a0;*index=0;for(i=1;i*max ) *max=ai;*index=i; void print(int *a,int n)int i; for(i=0;in;i+) if(i%10=0) printf(n);printf(%5d,ai); printf(n);/=主函数void main ()int x10=23,5,2,7,9,5,67,90,34,9,n=10,max,index;print(x,n);fun(x,n,&max,&index);printf(max=%d, index=%dn,max,index); 29: 第29题 请编写一个函数fun,它的功能是:将ss所指字符串中所有下标为奇数位置上的字母转换为大写(若该位置上不是字母,则不转换)。 #include void fun(char *a)int i;for(i=1;ai;i+) if(i%2=1 & ai=a&ai=z )ai-=32;/=主函数void main ()char s80=dhgsye7364;puts(s);fun(s);puts(s);30: 第30题 请编写一个函数fun,它的功能是:求出一个2m整型二维数组中最大元素的值,并将此值返回调用函数。 #include #define m 2#define n 5int fun(int an)int i,j,max=a00;for(i=0;im;i+)for(j=0;jmax)max=aij;return max;void print2(int an)int i,j;for(i=0;im;i+)for(j=0;jn;j+)printf(%4d,aij);printf(n);printf(n);/=主函数void main ()int amn,i,j,k=1,max;for(i=0;im;i+)for(j=0;jn;j+)aij=k+;print2(a);max=fun(a);printf(max=%dn,max); 31: 第31题 请编写函数fun,其功能是:将s所指字符串中除了下标为偶数、同时ascii值也为偶数的字符外,其余的全都删除;串中剩余字符所形成的一个新串放在t所指的一个数组中。 #include void fun(char *s,char *t)int i,j;for(i=0,j=0;si;i+)if(i%2=0 & si%2=0)tj+=si;tj=0;/=主函数void main ()char s80=ghsyevhgygbyw,t80;puts(s);fun(s,t);puts(t); 32: 第32题 请编写函数fun,其功能是:将s所指字符串中除了下标为奇数、同时ascii值也为奇数的字符之外,其余的所有字符都删除,串中剩余字符所形成的一个新串放在t所指的一个数组中。 #include void fun(char *s,char *t)int i,j;for(i=0,j=0;si;i+)if(i%2=1 & si%2=1)tj+=si;tj=0;/=主函数void main ()char s80=ghsyevhgygbyw,t80;puts(s);fun(s,t);puts(t); 33: 第33题 假定输入的字符串中只包含字母和*号。请编写函数fun,它的功能是:使字符串中尾部的*号不得多于n个;若多于n个,则删除多于的*号;若少于或等于n个,则什么也不做,字符串中间和前面的*号不删除。 #include void fun(char *s,int n)int i,flag=0,m=0;for(i=0;si;i+);i-;for(;i=0;i-)if(si!=*)break;else m+;if(m=n)flag=1;if(flag)for(m=0;mn;m+)s+i=*;s+i=0;/=主函数void main ()char s80=*88gh*hg*byw*;int n=3;puts(s);fun(s,n);puts(s); 34: 第34题 学生的记录由学号和成绩组成,n名学生的数据已在主函数中放入结构体数组s中,请编写函数fun,它的功能使:把分数最高的学生数据放在h所指的数组中,注意:分数最高的学生可能不止一个,函数返回分数最高的学生的人数。 #include struct studentint num;int score;int fun(struct student *s,int n,struct student *h)struct student *p;int max,m=0;max=s0.score;for(p=s;pscoremax)max=p-score;for(p=s;pscore=max)hm+=*p;return m;void print(struct student *s,int n)struct student *p;for(p=s;pnum,p-score);printf(n);/=主函数void main ()struct student h10,s10=1,67,2,89,3,99,4,76,5,99,6,87,7,90,8,99,9,99,10,89;int n=10;print(s,n);n=fun(s,n,h);printf(n=%dn,n);print(h,n); 35: 第35题 请编写一个函数,用来删除字符串中的所有空格。 #include void fun(char *s)char i,j;for(i=j=0;si;i+)if(si!= )sj+=si;sj=0;/=主函数void main ()char s100= dhfj 8879 djfh ;puts(s);fun(s);puts(s); 36: 第36题 假定输入的字符串中只包含字母和*号。请编写函数fun,它的功能是:将字符串中的前导*号全部移到字符串的尾部。 #include void fun(char *s)char i,j,n=0,flag=0;for(i=j=0;si;i+)if(flag=0&si=*)n+;else if(si!=*)flag=1;if(flag=1)sj+=si;for(i=0;in;i+)sj+=*;sj=0;/=主函数void main ()char s100=*dhfj*8879*djfh*;puts(s);fun(s);puts(s); 37: 第37题 某学生的记录由学号、8门课程成绩和平均分组成,学号和8门课程的成绩已在主函数中给出。请编写函数fun,它的功能是:求出该学生的平均分放在记录的ave成员中。请自己定义正确的形参。 #include struct studentint num;floa

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论