二级C机试编程答案.doc_第1页
二级C机试编程答案.doc_第2页
二级C机试编程答案.doc_第3页
二级C机试编程答案.doc_第4页
二级C机试编程答案.doc_第5页
已阅读5页,还剩23页未读 继续免费阅读

下载本文档

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

文档简介

一类:两个数合并成一个数将a数的十位和个位数依次放在c数的百位和个位上,b数的十位和个位数依次放在c数的十位和千位上。viod fun (int a,int b ,long*c)*c=(b%10)*1000+(a/10)*100+(b/10)*10+a%1022、将a数的十位和个位数依次放在c数的个位和百位上,b数的十位和个位依次放在c数的十位和千位上。 void fun (int a,int b,long*c) *c=(b%10)*1000+(a%10)*100+(b/10)10+(a/10);33、将a数的十位和个位数依次放在c数的十位和千位上,b数的十位和个位数依次放在c数的百位和个位上。viod fun (int a,int b ,long*c) *c=(a%10)*1000+(b/10)*100+(a/10)*10+(b%10);56、将a数的十位和个位数依次放在c数的个位和百位上,b数的十位和个位数依次放在c数的千位和十位上。viod fun (int a,int b ,long*c) *c=(b/10)*1000+(a%10)*100+(b%10)*10+(a/10); 64、将a数的十位和个位数依次放在c数的十位和千位上,b数的十位和个位数依次放在c数的个位和百位上。viod fun (int a,int b ,long*c) *c=(a%10)*1000+(b%10)*100+(a/10)*10+(b/10);80、将a数的十位和个位数依次放在c数的千位和十位上,b数的十位和个位数依次放在c数的个位和百位上。viod fun (int a,int b ,long*c) *c=(a/10)*1000+(b%10)*100+(a%10)*10+(b/10);83、将a数的十位和个位数依次放在c数的百位和个位上,b数的十位和个位数依次放在c数的千位和十位上。viod fun (int a,int b ,long*c) *c=(b/10)*1000+(a/10)*100+(b%10)*10+(a%10);85、将a数的十位的个位数依次放在c数的千位和十位上,b数的十位和个位数依次放在c数的百位和个位上。viod fun (int a,int b ,long*c) *c=(a/10)*1000+(b/10)*100+(a%10)*10+(b*10);二类:删字符串中的字符18、将a所指的字符串中ASCII值为奇数的字符删除,串中剩余字符形成一个新串放在t所指的数组中。 int i, j = 0 ; for(i = 0 ; i strlen(s); i+) if(si % 2=0) tj+ = si ; tj = 0 ;25、将s所指字符串中ASCII值为偶数的字符删除,串中剩余字符形成一个新串放在t所指的数组中。 void fun(char *s, char t) int i, j = 0 ; for(i = 0 ; i strlen(s); i+) if(si % 2) tj+ = si ; tj = 0 ;36、将s所指的字符串中除了下标为偶数、同时ASCII值也为偶数的字符外,其余的全部都删除: int i, j = 0 ; for(i = 0 ; i strlen(s) ; i += 2) if(si % 2 = 0) tj+ = si ; tj = 0 ; 54、将s所指的字符串中下标为偶数的字符删除,串中剩余字符形成的新串放在t所指数组中。 int i, j = 0 ; for(i = 1 ; i strlen(s); i+=2) tj+ = si ; tj = 0 ;71、将s所指字符串中下标为偶数同时ASCII值为奇数的字符删除,s中剩余的字符形成的新串放在t所指的数组中。 int i, j = 0 ; for(i = 0 ; i strlen(s) ; i+) if(!(i % 2) =0 & (si % 2) tj+ = si ; tj = 0 ;72、将上所知字符串中除了下标为奇数、同时ASCII值也为奇数的字符之外,其余的所有字符都删除,串中剩余字符所形成的一个新串放在t所指的数组中。 int i, j = 0 ; for(i = 1 ; i 0;n-) *q+=*; *q=0; 32、规定输入的字符串中只包含字母和*号。使字符串最前面连接的*号不得多于n个;若多余n个,则删除多余的*号;若少于或等于n个,则什么也不做,字符串中间和尾数的*号不删除。 int i=0,j,k=0; while(ak=*) k+; if(kn) i=n;j=k; for(; aj !=0 ; j+) ai+=aj; ai = 0; 37、规定输入的字符串中只包含字母和*号。只删除字符串前后连接的*号,串中字母之间的*号都不删除。 char *p=a ; int j=0,len=0; while(*p) p+; len+; while(jlen-h-e) aj=ah+j; j+; aj=0;38、规定输入的字符串中只包含字母和*号。删除字符中的所有的*号。在编写函数时,不得使用c语言提供的字符串函数。 int j =0 ; char *p=a; while(*p) if(*p != *) aj+=*p ; p+ ; aj=0;39、规定输入的字符串中只包含字母和*号。除了前面连接的*号之外,见串中其他*号全部删除。 int i=0,k; while(ai=*) i+; k=i; while(ai!=0) if(ai != *) ak+=ai; i+; ak=0;43、规定输入的字符串中只包含字母和*号。将字符串尾部连接的*号全部删除,前面和中间的*号不删除。 char *p = a ; while(*p) p+ ; p- ; while(*p = *) p- ; p+ ; *p = 0 ;45、规定输入的字符串中只包含字母和*号。使字符串中的尾部连接的*号不得多于n个;若多于n个,则删除多余的*号;若少于或等于n个,则什么都不做,字符串中间和尾部的*号不删除。char *p=a ; int j=0; while(*p) p+; p-; while(*p = *) p-; p+; while(jn & *p) p+ ; j+; *p = 0 ;50、规定输入的字符串中只包含字母和*号。将字符串前面连接的*号全部删除,中间和尾部的*号不删除。 int j=0; char *p = a ; while(*p = *) p+ ; while(*p) aj+ = *p ; p+; aj=0 ;78、规定输入的字符串中只包含字母和*号。除了尾部连接的*号之外,将字符串中其他*号全部删除。形参p已指向字符串最后一个字母。 char *q=a; int j=0; while(*q & qp) if(*q != *) aj+ = *q ; q+ ; while(*p) aj+=*p+; aj=0;95、规定输入的字符串中只包含字母和*号。除了字符串前后连接的*号之外,将串中其他*号全部删除。形参h已指向字符串中的第一个字母,形参p已指向字符串中最后一个字母。 int j=0; char *q=a; while(*q & q h) aj+ = *q+ ; while(*h & *p & h p) if(*h != *) aj+ = *h ; h+; while(*p) aj+ = *p+ ; aj = 0 ;四类:移动字符串2.将M行N列的二维数组中的字符数据按列的顺序一次放到一个字符串中 void fun(char sN, char *b) int i,j,n=0; for(i=0; i N;i+) /* 请填写相应语句完成其功能 */ for(j = 0 ; j M ; j+) bn = sji ; n = i * M + j + 1; bn=0;11.将放在字符串数组中的的M个字符串(每串的长度不超过N),按顺序合并组成一个新的字符串void fun(char aMN, char *b) /* 以下代码仅供参考 */ int i; *b=0; for(i = 0 ; i M ; i+) strcat(b, ai) ;6. 把第1到第M个字符平移到字符串的最后,把第M+1到最后的字符移到字符串字符串的前部void fun1(char *w) /* 本函数的功能是将字符串中字符循环左移一个位置 */ int i; char t; t=w0; for(i=0;istrlen(w)-1;i+) wi=wi+1; wstrlen(w)-1=t;void fun(char *w, int m) /* 可调用fun1函数左移字符 */ int i; for(i = 0 ; i m ; i+) fun1(w);9.移动一维数组中的内容::若数组中有n个整数,要求把下标从0到p(含p,p小于等于n-1)的数组元素平移到数组的最后 int i, j = 0, bN ; for(i = p + 1 ; i n ; i+) bj+ = wi ; for(i = 0 ; i = p ; i+) bj+ = wi ; for(i = 0 ; i n ; i+) wi= bi ;五类:二维数组变形放入一维数组中12.请编写函数fun,将M行N列的二维数组中的数据按列的顺序一次放到一维数组中 /* 以下代码仅供参考 */ int i,j,np=0; /* np用作b数组下标 */ for(i = 0 ; i nn ; i+) for(j = 0 ; j mm ; j+) bnp = sji ; np = i * mm + j + 1; *n=np;13.将M行N列的二维数组中的数据按行的顺序一次放到一维数组中,一维数组中数据的个数存放在形参n所指的存储单元中 int i, j, k ; for(i = 0 ; i mm ; i+) for(j = 0 ; j nn ; j+) k = i * nn + j ; bk = sij ; *n = mm * nn ;六类:整除问题26.求出1到m之内(含m)能被7或11整除的所有整数放在数组a中,通过a返回这些数的个数。void fun ( int m, int *a , int *n ) int i ; *n=0 ; for(i=7 ; i=m; i+) if(i % 7 = 0) | (i % 11 = 0) a(*n)+=i ;28.求出1到1000之内能被7或者11整除,但不能同时被7和11整除的所有整数并他们放在a所指的数组中,通过n返回这些数的个数。void fun (int *a, int *n) int i ; *n = 0 ; for(i = 7 ; i 1000 ; i+) if(i % 7) = 0 | (i % 11) = 0) & (i % 77) != 0) a(*n)+ = i ;34.计算并输出n(包括n)以内能被5或9整除的所有自然数的倒数之和double fun(int n) int i; double sum=0.0; for(i=1; i=n; i+) if(i%5 = 0 | i%9 = 0) /* 被5或9整除 */ sum+=1.0/i; return sum;48.求n以内(不包括n)同时能被3与7整除的所有自然数之和的平方根s,并作为函数值返回double fun( int n) double sum=0.0; int i; for(i=21; i=n; i+) if(i % 3=0) & (i % 7=0) sum+=i; return sqrt(sum) ;58请编写函数fun,求出能整除形参x且不是偶数的各整数,并按从小到大的顺序放在pp所指的数组中这些除数的个数通过形参n返回void fun ( int x, int pp, int *n ) int i; *n=0; for(i=1; i =eps) s+=t; n+; t=t*n/(2.0*n+1); return (s*2.0);46.他的功能是计算下列级数和,和值由函数值返回long jc(int n) long s = 1 ; int i ; for(i = 1 ; i = n ; i+) s *= i ; return s ;double fun(double x , int n) double s = 1.0, y = x ; int i ; for(i = 1 ; i = n ; i+) s += y / (double)jc(i) ; y *= x ; return s ;47.计算并输出下列级数和double fun( int n ) double s = 0.0 ; int i ; for(i = 1 ; i nlong jc(int m) long s=1; int i ; for(i=1;i=m;i+) s=s*i ; return s;float fun(int m, int n) float p; p=1.0*jc(m)/jc(n)/jc(m-n) ; return p;53计算并输出当x0.97时下列多项式的值到|S(n)-S(n-1)|=0.000001)/*绝对值是否满足条件*/ xn=xn*x*(0.5-n+1)/n; /*表达式分解以后xn=(xn-1)*x*(0.5-n+1)/n*/ n+=1; sn+=xn; /*sn累加上xn*/ return(sn);84.计算并输出S=1+(1+20.5)+(1+20.5+30.5)+(1+20.5+30.5+n0.5)double fun(int n) int i; double fac=1.0; double sum=1.0; for(i=2;i=n;i+) fac+=sqrt(i); sum+=fac; return sum;87.编写函数fun 计算并输出下列多项式double fun(int n) double s=0, t=1; int i ; for(i=1; i1 & n=100) for(i=1; i=n; i+) sum+=1.0/(2*i-1)-1.0/(2*i); return sum;92.计算并输出给定10个数的方案double fun(double x10) int i; double avg=0.0, sum=0.0, abs=0.0, fc; for (i=0;i10;i+) sum+=xi; avg=sum/10; /* 计算平均值 */ for (i=0;i10;i+) abs+=(xi-avg)*(xi-avg); fc=sqrt(abs/10) ; return fc;94.计算并输出下列多项式的值: S=1+1/1!+1/2!+1/3!+1/4!+1/n!double fun(int n) double s=1 ; long t=1; int i; for(i=1; i=n; i+) t=t*i; /* 计算阶乘 */ s+=1./t; /* 计算每项的值并累加至变量s中 */ return s; /* 返回多项式的值 */96.计算:s=(In(1)+ In(2)+ In(3)+ In(m)0.5 s作为函数值返回 在c语言中可调用log函数的引用说明是; double long(double x)double fun( int m ) double s = 0.0 ; int i ; for(i = 1 ; i = m ; i+) s += log(1.0 * i) ; s = sqrt(s) ; return s ;100.根据以下公式计算s,计算结果作为函数值返回;n通过形参传入float fun(int n) int i,j,t; float s=0; for(i=1;i=n;i+) t=0; for(j=1;j=i;j+) t+=j; s=s+1./t; return s;八类:平均分问题40.计算n门课程的平均分,计算结果作为函数值返回。float fun ( float *a , int n ) int i; float ave=0.0; for(i=0; in; i+) ave=ave+ai ; ave=ave/n; return ave;57.某学生的记录由符号,8门课程成绩和平均分组成,学号和8门课程的成绩已在主函数中给出,求在该学生的平均分放在记录的ave成员中 请定义正确的形参。void fun(STREC *a) int i ; for(i = 0 ; i ave = a-ave + a-si ; a-ave /= N ;59.m个人的成绩存放在score数组中,将低于平均分的人数作为函数值返回。int fun(int score, int m, int below) float av=0.0 ; int i, j=0 ; for(i=0; im; i+) av += scorei ; av /= m; for(i=0; iscorei) belowj+=scorei; return j;91.计算并输出给定数组(长度为9)中每相邻两个元素之平均值的平方和根之和double fun(double x9) int i ; double avg=0.0,sum=0.0; for (i=0;i8;i+) avg=(xi+xi+1)/2; sum+=sqrt(avg); return sum; 九类:Fibonacci 数列52.求Fibonacci数列中大于t的最小的一个数,结果由函数返回.其中Fibonacci数列F(n)的定义为:F(0)=0,F(1)=1 F(n)=F(n-1)+F(n-2) int f0 = 0, f1 = 1, f ; do f = f0 + f1 ; f0 = f1 ; f1 = f ; while(f s; STREC *p; p=h-next; while(p) if(p-smax ) max=p-s; p=p-next; return max;17.学生的记录由学号和成绩组成,N名学生的数据已在主函数中放入结构体数组中, 把指定分数范围内的学生数据放在b所指的数组中,分数范围内的学生人数由函数值返回. int i,j = 0 ; for(i = 0 ; i = l & ai.s = h) bj+ = ai ; return j ;24.N名学生的数据已在主函数中放入结构体数组中,注意:分数最低的学生可能不止一个,函数返回分数最低的学生的人数.int i, j = 0, min=a0.s ; for(i = 0 ; i ai.s) j = 0 ; bj+ = ai ; min = ai.s ; else if(min = ai.s) bj+ = ai ; return j ;29. 把高于等于平均分的学生数据放在b 所指的数组中,高于等于平均分的学生人数通过行参n传回,平均分数通过函数值返回.double t=0 ; int i ; *n = 0 ; for(i = 0 ; i N ; i+) t = t + ai.s ; t = t / N ; for(i = 0 ; i t) b(*n)+ = ai ; return t ;44.N名学生的成绩已在主函数中放入一个带头节点的链表结构中,h指向链表的头节点.求出平均分,由函数值返回.double fun( STREC *h ) STREC *p=h-next; /* 由于头结点中没有存放数据 */ double av=0.0; /* 对计算成绩平均值的变量进行初始化 */ int n = 0 ; while(p!=NULL) /* 判断链表是否结束 */ av = av + p-s ; /* 对成绩进行累加 */ p=p-next; /* 到下一个结点位置 */ n+; /* 人数加1 */ av /= n ; /* 计算成绩平均值 */ return av ; /* 返回成绩平均值 */70.已知学生的记录由学号和学习成绩构成,N名学生的数据已存入a结构体数组中.找出成绩最低的学生记录,通过行参返回主函数fun( STU a, STU *s ) int i, min = a0.s, j = 0; for(i = 1 ; i ai.s) /* 如果最低分min仍大于当前分 */ j = i ; /* 记住位置 */ min = ai.s ; /* 把当前分赋值给min */ *s = aj ;74.N名学生的数据已存入a结构体数组中.找出成绩最高的学生记录,通过行参返回主函数fun( STU a, STU *s ) int i, max = a0.s, j = 0; for(i = 1 ; i N ; i+) if(max ai.s) j = i ; max = ai.s ; *s = aj ;82. N名学生的数据已在主函数中放入结构体数组s中, 按分数的高低排列学生的记录,高分在前.int fun( STREC a ) STREC tmp; int i,j; for(i = 0; i N; i+) for(j = i+1; j N; j+) if(ai.s aj.s) tmp = ai; ai = aj; aj = tmp; 88.把低于平均分的学生数据放在b所指的数组中,低于平均分的学生人数通过行参n传回double fun( STREC *a, STREC *b, int *n ) int i ; double ave = 0.0 ; *n = 0 ; for(i = 0 ; i N ; i+) ave = ave + ai.s ; ave /= N ; /* 计算平均值 */ for(i = 0 ; i N ; i+) if(ai.s ave) /* 把低于平均值的记录存放到b所指的数组中 */ b*n=ai ; (*n)+; /* 人数加1 */ return ave ; /* 返回平均值 */97.函数返回指定学号的学生数据,指定的学号在主函数中输入.若没有遭到指定学号,在结构体变量中给学号置空串,给成绩置-1,作为函数值返回.STREC fun( STREC *a, char *b ) STREC c ; int i ; c.num0 = 0 ; /* 置初始空串 */ c.s = -1 ; /* 置成绩为-1 */ for(i = 0 ; i N ; i+) if(strcmp(ai.num, b)=0) /* 判断学号是否相等 */ strcpy(c.num, ai.num) ; /* 相等,则对学号进行赋值 */ c.s=ai.s; /* 相等,则对成绩进行赋值 */ break ; /* 退出循环体 */ return c ; /* 返回结构体变量 */99.把分数最高的学生数据放在b所指的数组中,注意:分数最高的学生可能不止一个,函数返回分数最高的学生人数.int fun( STREC *a, STREC *b ) int i, max = a0.s, n=0; for(i = 1; i N; i+) if(max ai.s) max = ai.s ; /* 找出最高成绩 */ for(i = 0; i N; i+) if(max=ai.s) bn+ = ai ; /* 找相等的最高成绩并存入数组b中 */ return n; /* 返回符合条件的人数 */十一类:二维数周边元素问题20.求出二维数周边元素之和,作为函数值返回.二维数组中的值在主函数中赋予.int fun ( int aMN ) int tot = 0, i, j ; for(i = 0 ; i N ; i+) tot += a0i ; tot += aM-1i ; for(i = 1 ; i M - 1 ; i+) tot += ai0 ; tot += aiN-1 ; return tot ;21.求出数组周边元素的平均值并作为函数值返回给主函数中的s.double fun ( int wN ) int i, j, n=0; double sum=0; for ( i =0; iN; i+ ) sum+=w0i+wN-1i; n+=2; for ( i =1; iN - 1; i+ ) sum +=wi0+wiN-1; n+=2; return sum/n;十二类:素数问题23.编写函数int fun(int lim,int aaMAX),该函数的功能十求出小于lim的所有素数并放入aa数组中,int fun(int lim, int aaMAX) /* 以下代码仅供参考 */ int i,j,k=0; /* 其中变量k用于统计素数个数 */ for(i=2;i=lim;i+) /* 以下完成判断aa数组中小于或等于lim的素数并统计个数 */ for(j = 2 ; j (i/2) aak+ = i; return k;55.请编写一个函数void fun(int m,int k,int xx), 大于整数m且紧靠m的k个素数存入xx所指的数组中.void fun(int m, int k, int xx) /* 以下代码仅供参考 */ int i, j=1, t=m+1; while(j=k) /* 以下完成判断素数,并存放到数组xx中 */ for(i = 2 ; i t; i+) if(t % i=0) break; if(i=t) xxj-1 = i; j+; t+; 61.计算并输出给整数n的所有因子(不包括1与n自身)之和.规定的值不大于1000.int fun(int n) int s = 0, i ; for(i = 2 ; i n ; i+) if(n % i = 0) s +=i ; return s ;79.将所有大于1小于整数m的非素数存入xx所指数组中,非素数的个数通过k传回.int isP(int m) int j, tag = 0 ; for(j = 2 ; j m & !tag ; j+) if(m % j = 0) tag = 1 ; return tag ;void fun( int m, int *k, int xx ) int i, cnt = 0 ; for(i = 2 ; i m ; i+) if(isP(i) xxcnt+ = i ; *k = cnt ;86.计算并输出3到n之间所有素数的平方根之和.double fun(int n) int i,j=0; double s=0; for (i=3; i=n; i+) for (j=2; ji; j+) if (i%j = 0) break; if (j = i) s=s+sqrt(i); return s;十三类:数组中最大,最小元素及下标(包括每行,每列最小元素)51.请编写一个函数int fun(int*s,int t,int*k),用来求出数组的最大元素在数组中的下标,用k返回.int fun(int *s, int t, int *k) int i, pos = 0, max = *s ; for(i = 1 ; i t ; i+) if(max *(s + i) max = *(s + i) ; pos = i ; *k = pos ;66.void fun(int ttMN,int ppN),tt指出一个M行N列的二维数组,求出二维数组每列中最小元素,并依次放入pp所指一维数组中.void fun ( int ttMN, int ppN ) int i,j, min, k ; for(i = 0 ; i N ; i+) min = tt0i ; k = 0 ; for(j = 1 ; j ttji) min=ttji ; k = j ; ppi = ttki ; 73.求出一个2M整型二维数组中最大元素的值,fun (int aM) int i, j, max=a00; for(i=0; i2; i+) for(j=0; jM; j+) if(maxaij) max=aij; return max;76.找出一维整型数组元素中最大的值和它所在的下标,最大的值和它所在的下标通过行参传回.数组元素中的值已在主函数中赋予.主函数中x是数组名,n是x中的数据个数,max存放最大值,index存放最大值所在元素的下标.void fun(int a, int n , int *max, int *d ) int i ; *max=a0;*d = 0 ; /* 把数组的第1个元素值赋值给最大值变量*max */ for(i = 1; i n; i+) if(*max =0;j-)bi+ =s j;strcpy(s,b);十五类:矩阵逆置67、给定程序的功能是实现矩阵(3行3列)的转置(即行列互换)。int fun(int array33) int i,j,arr33 ; memcpy(arr, array, 9*sizeof(int) ; for(i = 0 ; i 3 ; i+) for(j = 0 ; j 3 ; j+) arrayij = arrji ;81、实现B=A+A即把矩阵A加上A的转置,存放在矩阵B中。计算结果在main函数中输出。void fun ( int a33, int b33) int c33 ; int i, j ; for(i = 0 ; i 3 ; i+) for(j = 0 ; j 0.000001); return x1;十七类:两个字符串的联接77实现两个字符串的连接(不使用库函数srcat)void fun(char p1, char p2) char *p=p1; while(*p)p+; while(*p2) *p+=*p2+; *p=0;.十八类:字符串大小写互换65、将ss所指字符串中所有下标为奇数位置上的字母转换为大写。 char *p = ss ; int i = 0 ; while(*p) if(i % 2) & (*p = a & *

温馨提示

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

评论

0/150

提交评论