24次机试试题.docx
- 文档编号:11511205
- 上传时间:2023-03-02
- 格式:DOCX
- 页数:16
- 大小:18.85KB
24次机试试题.docx
《24次机试试题.docx》由会员分享,可在线阅读,更多相关《24次机试试题.docx(16页珍藏版)》请在冰豆网上搜索。
24次机试试题
(第一套)
(60分钟)
一、程序调试题(文件名test1-1.c)(40分)
磁盘上有一个名为test1-1.c的C程序文件,其中函数spacenum的功能是统计符串中空格的个数,并将空格的个数存在形参n所指向的存储单元中。
调试程序使之能输出正确的结果。
注意:
不得增行或删行,也不得更改程序的结构。
源程序如下:
#include
voidspacenum(char*a,int*n)
{
inti;
n=0;
for(i=0;i if(*(a+i)='') n++; } main() { charstr[100]; intcount; puts(str); spacenum(str,count); printf("space=%d\n",count); } 二、编写程序(程序文件名取为test1-2.c)(60分) 请用函数调用方式编写程序,要求: 1、写一found函数,功能是: 找出1至99之间的全部同构数,入入数组a中,并返回同构数的个数n。 (若一个数出现在自己的平方数的右边就称为同构数,例如: 5的平方数是25,且5出现在25的右边,5是同构数;又如25出现在625的右边,也是同构数。 ) 2、在main函数中调用found函数,将满足条件的所有同构数输出到屏幕和文件test1-2.dat中,一行输出5个,将同构数的个数出输出到屏幕和文件test1-2.dat中。 (第二套) (60分钟) 一、程序调试题(文件名test2-1.c)(40分) 磁盘上有一个名为test2-1.c的C程序文件,其功能是: 统计一个无符号整数各位数值为零的个数,并把该无符号整数各位上最大的数值作为函数值返回。 例如: 若输入无符号整数30800,则数字值为零的个数为3,各位上数值最大的是8。 请改正程序中的错误,使其能输出正确结果。 注意: 不得增行或删行,也不得更改程序的结构。 源程序如下: #include intfun(unsignedn,intzero) { intcount=0,max=0,t; do {t=n/10; if(t=0) count++; if(max max=t; n=n%10; }while(n); zero=count; returnmax; } main() {unsignedn; intzero,max; printf("\nInputn: "); scanf("%d",&n); max=fun(n,&zero); printf("\nTheresult: max=%d,zero=%d\n",max,zero); } 二、编写程序(程序文件名取为test2-2.c)(60分) 磁盘上有一数据文件test2-2.dat,文件中的数据依次由: 准考证号、笔试成绩、上机成绩三项组成,中间由空格分开。 编程统计获得优秀(笔试成绩和上机成绩均大于等于90分的考生为优秀)的考生人数,以及优秀率(即优秀考生在总人数中占的百分比),并将获得优秀的考生信息(准考证号、笔试成绩、上机成绩),考生总人数,获得优秀的考生人数和优秀率输出到屏幕上同时写入到文件test2-2.out中。 (第三套) (60分钟) 一、程序调试题(文件名test3-1.c)(40分) 磁盘上有一个名为test3-1.c的C程序文件,其功能是: 从键盘输入一个字符串,将字符串中的所有字母改写成该字母在字母表的下一个字母,字母z改写成字母a。 要求大写字母仍为大写字母,小写字母仍为小写字母,其他字符不做改变。 最后将其结果输出到屏幕上。 请改正程序中的错误,使其能输出正确结果。 注意: 不得增行或删行,也不得更改程序的结构 源程序如下: #include #defineN81 voidfun1(chars) { while(*s) if(*s='z'||*s='Z') {*s-=26;s++;} elseif(*s>='a'&&*s<='y'&&*s>='A'&&*s<='Y') {*s+=1;s++;} else(*s)++; } main() { chara[N]; printf("Enterastring: "); gets(a); puts(a); fun1(a); puts(a); } 二、编写程序(程序文件名取为test3-2.c)(60分) 磁盘上有一数据文件test3-2.dat,编写程序实现: 在主函数中将test3-2.dat中的数据输入到一个3行4列的整型数组a中,调用函数covert对a进行转置运算,并将结果存放在另一个二维数组b中,最后在主函数中输出结果。 (第四套) (60分钟) 一、程序调试题(文件名test4-1.c)(40分) 磁盘上有一个名为test4-1.c的C程序文件,其功能是: 选出所有两位数中能被3整除且至少有一位数字是5的两位数,输出所有这样的数及其总个数。 请改正程序中的错误,使其能输出正确结果。 注意: 不得增行或删行,也不得更改程序的结构。 源程序如下: #include sub(k) { inta1,a2; a2=k%10; a1=k-a2*10; if((k%3==0&&a2==5)&&(k%3==0&&a1==5)) {printf("%4d",k); return1; } elsereturn-1; } main() { intn=0,k,m; for(k=10;k<=99;k++) {m=sub(k); if(m! =-1)n=m; } printf(\nn=%4d,n); } 二、编写程序(程序文件名取为test4-2.c)(60分) 已知磁盘上有的test4-2.txt文件中含有一个长度不超过80个字符的字符串,用函数调用方式编写程序。 要求实现: 1、在被调函数exchange中,将该字符串中偶数位置(从左起第1个字符为0位,视为偶数位置)上的小写字母转换成大写字母,奇数位置上的大写字母转换成小写字母。 不是英文字母的字符则不转换。 例如: 字符串student123HELLO! 转换后为StUdEnT123HeLlO! 2、在主函数中,完成字符串的读入,同时将转换后的字符串输出到屏幕。 24-1套参考答案: 一、程序调试题(文件名test1-1.c)(40分) #include voidspacenum(char*a,int*n) {inti; n=0;/*改为*n*/ for(i=0;i ='\0'*/ if(*(a+i)=='') *n++;/*改为(*n)++*/ } main() {charstr[100]; intcount; puts(str);/*改为gets(str)*/ spacenum(str,count);/*改为&count*/ printf("space=%d\n",count); } 评分标准: 每改对一处得8分 二、编写程序(程序文件名取为test1-2.c)(60分) 评分标准: 1.found函数编写30分: (1)函数定义、形参书写正确(10分) (2)函数中能正确求出同构数,并存入一维数组中,能正确返回函数值(20分) 2.main函数30分: (1)正确定义实参一维数组,并能正确调用found函数(10分) (2)文件打开和操作正确(10分) (3)输出结果正确(10分) 参考程序: #include intfound(inta[]) {inti; intn=0; for(i=1;i<100;i++) {if(i*i%10==i||i*i%100==i) {a[n]=i; n++; } } returnn; } voidmain() {inta[10]; intcount,i; FILE*fp; if((fp=fopen("test1_2.dat","w"))==NULL) {printf("Cannotopenthefile.\n"); exit(0); } count=found(a); for(i=0;i {printf("%4d",a[i]); fprintf(fp,"%4d",a[i]); if((i+1)%5==0) {printf("\n"); fprintf(fp,"\n"); } } printf("\n"); fprintf(fp,"\n"); printf("count=%d\n",count); fprintf(fp,"count=%d\n",count); fclose(fp); } 24-2套参考答案: 一、程序调试题(文件名test2-1.c)(40分) #include intfun(unsignedn,intzero)/*改为*zero*/ { intcount=0,max=0,t; do {t=n/10;/*改为n%10*/ if(t=0)/*改为t==0*/ count++; if(max max=t; n=n%10;/*改为n/10*/ }while(n); zero=count;/*改为*zero*/ returnmax; } main() {unsignedn; intzero,max; printf("\nInputn: "); scanf("%d",&n); max=fun(n,&zero); printf("\nTheresult: max=%d,zero=%d\n",max,zero); } 评分标准: 每改对一处得8分 二、编写程序(程序文件名取为test2-2.c)(60分) 评分标准: 1.文件指针定义、打开文件、关闭文件正确10分 2.读文件内容正确15分 3.统计考生总人数,获得优秀的考生人数方法正确10分 4.写入文件和屏幕输出正确15分 5.优秀率计算正确5分 6.程序结构正确5分 参考程序: #include main() {FILE*in,*out; charc1[20]; intcj1,cj2; intn=0,m=0; in=fopen("test2-2.dat","r"); out=fopen("test2-2.out","w"); while(! feof(in)) {fscanf(in,"%s",c1); fscanf(in,"%d",&cj1); fscanf(in,"%d",&cj2); if(cj1>=90&&cj2>=90) {printf("%s",c1); printf("%4d",cj1); printf("%4d\n",cj2); fprintf(out,"%s",c1); fprintf(out,"%4d",cj1); fprintf(out,"%4d\n",cj2); n++; } m++; } fclose(in); printf("Thetotal: %d\n",m); printf("Theexcellencenumber: %d\n",n); printf("Theexcellencerate: %.2f\n",(flaot)n/(float)m*100); fprintf(out,"Thetotal: %d\n",m); fprintf(out,"Theexcellencenumber: %d\n",n); fprintf(out,"Theexcellencerate: %.2f\n",(flaot)n/(float)m*100); fclose(out); } 24-3套参考答案: 一、程序调试题(文件名test3-1.c)(40分) #include #defineN81 voidfun1(chars)/*改为*s*/ { while(*s) if(*s='z'||*s='Z')/*改为*s=='z'||*s=='Z'*/ {*s-=26;s++;}/*改为25*/ elseif(*s>='a'&&*s<='y'&&*s>='A'&&*s<='Y')/*改为||*/ {*s+=1;s++;} else(*s)++;/*改为s++*/ } main() { chara[N]; printf("Enterastring: "); gets(a); puts(a); fun1(a); puts(a); } 评分标准: 每改对一处得8分 二、编写程序(程序文件名取为test3-2.c)(60分) 评分标准: 1.文件指针定义、打开文件、关闭文件正确10分2.读文件内容正确10分 3.转置运算算法正确10分4.被调函数定义以及参数传递正确15分 5.输出结果正确10分6.程序结构正确5分 参考程序: #include covert(inta[][4],intb[][3]) {inti,j; for(i=0;i<3;i++) for(j=0;j<4;j++) b[j][i]=a[i][j]; } voidmain() {inta[3][4],b[4][3]; inti,j; FILE*fp; fp=fopen("test3-2.dat","r"); for(i=0;i<3;i++) for(j=0;j<4;j++) fscanf(fp,"%d",&a[i][j]); fclose(fp); covert(a,b); for(i=0;i<4;i++) {for(j=0;j<3;j++) printf("%5d",b[i][j]); printf("\n"); } } (第四套) (60分钟) 一、程序调试题(文件名test4-1.c)(40分) #include sub(k)/*改为intk*/ {inta1,a2; a2=k%10;/*改为k/10*/ a1=k-a2*10; if((k%3==0&&a2==5)&&(k%3==0&&a1==5))/*改为||*/ {printf("%4d",k); return1; } elsereturn-1; } main() {intn=0,k,m; for(k=10;k<=99;k++) {m=sub(k); if(m! =-1)n=m;/*改为n++*/ } printf(\nn=%4d,n);/*改为"\nn=%4d"*/ } 评分标准: 每改对一处得8分 二、编写程序(程序文件名取为test4-2.c)(60分) 评分标准: 1.偶数位上的字母转换正确10分 2.基数位上的字母转换正确10分 3.其他字符不转换正确10分 4.文件打开和数据读入正确10分 5.函数调用及参数传递正确10分 6.屏幕输出正确10分 参考程序: #include #defineN80 voidexchange(char*s) { inti,j; char*s1,*s2; s1=s; s2=s+1; while(*s1||*s2) {if(*s1>='a'&&*s1<='z') {*s1-=32; s1+=2; } else {*s1=*s1; s1+=2; } if(*s2>='A'&&*s2<='Z') {*s2+=32; s2+=2; } else {*s2=*s2; s2+=2; } } } main() { charstr[N]; FILE*fp; if((fp=fopen("test4-2.txt","r"))==NULL) {printf("Cannotopenthefile.\n"); exit(0); } fgets(str,N,fp); puts("Theoriginalstringis: "); puts(str); exchange(str); puts("Thestringafternodifiedis: "); puts(str); fclose(fp); }
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 24 试试