30到21次机试试题.docx
- 文档编号:13144029
- 上传时间:2023-06-11
- 格式:DOCX
- 页数:63
- 大小:43.05KB
30到21次机试试题.docx
《30到21次机试试题.docx》由会员分享,可在线阅读,更多相关《30到21次机试试题.docx(63页珍藏版)》请在冰点文库上搜索。
30到21次机试试题
第三十次
(第一套)(60分钟)
一、程序调试题(40分)
磁盘上有一个名为程序test1-1.c的C程序文件,其中有两个函数:
1)fun函数的功能是:
将N方阵中对角线元素和反向对角线元素互换;
2)main函数的功能是:
从已有文件test1-1.dat中读入N阶方阵的数据,然后调用fun函数,最后输出交换后的N阶方阵。
注意:
可以修改程序行,但不得增行或删行,不得更改程序结构。
源程序如下:
#include
#defineN4
voidfun(inta[][N])
{
inti,t;
for(i=0;i {t=a[i][i]; a[i][i]=a[i][N-i]; a[i][N-i]=t; } } voidmain() { inta[N][N],i,j; FILE*fp; fp=fopen("test1-1.dat","r"); if(fp==NULL) {printf("test1-1.datcannotopen.\n"); exit(0); } for(i=0;i for(j=0;j fscanf("%d",&a[i][j]); fclose(fp); fun(); printf("output: \n"); for(i=0;i {for(j=0;j printf("%5d",&a[i][j]); printf("\n"); } } 二、编写程序test1-2.c(60分) 请用函数调用方式编写程序test1-2.c,要求: 1.编写函数fun,其功能是: 生成某整型数组的前N(20)项。 该数组前两个数据分别为1和2,以后每个奇数下标(数组的下标从0开始)的项是前两项的和,偶数下标的项为前两项差的绝对值。 生成的N个数存在形参a指向的数组中。 函数fun的类型及其形参定义为voidfun(int*a) 2.编写main函数,其功能是: 调用fun函数,按一行4个输出N个数。 (第二套)(60分钟) 一、程序调试题(40分) 磁盘上有一个名为test2-1.c的C程序,其中有两个函数: 1)itoa函数的功能是: 将一个不超过5位数的正整数转换成字符串并输出。 2)main函数的功能是: 从已有文件test2-1.dat中读入一个不超过5位数的正整数,请改正程序中的错误,使其能输出正确的结果。 注意: 可以增加行,但不得删行和更改程序的结构。 源程序如下: #include"stdio.h" voidmain() { inti; FILE*fp; fp=fopen("test2-1.dat","r"); if(fp==NULL) {printf("test2-1.datcannotopen.\n"); exit(0); } fscanf(fp,"%d",&i); itoa(i); fclose(); } voiditoa(intk) {intn=0; charch1,ch2,ch3,ch4,ch5; ch5=k%10000; if(ch5>0)n++; ch5+='0'; ch4=(k%10000)/1000; if(ch4>0)n++; ch4+='0'; ch3=(k%1000)/100; if(ch3>0)n++; ch3+='0'; ch2=(k%100)/10; if(ch2>0)n++; ch2+='0'; ch1=k%10/10; n++; ch1+='0'; switch(k) {case5: printf("%c",ch5); case4: printf("%c",ch4); case3: printf("%c",ch3); case2: printf("%c",ch2); case1: printf("%c",ch1); } } 二、编写程序test2-2.c(60分) 编写程序test2-2.c,要求: 从键盘输入两个字符串,并从第2个字符串中删去任何在第1个字符串中出现过的字符,最后输出处理后的结果。 例如: 输入的两个字符串分别为: student和abcdefghijk。 则处理后输出的两个字符串分别为student和abcfghijk。 (第三套)(60分钟) 一、程序调试题(40分) 给定程序test3-1.c,其功能是: 将一个文本文件test3-1.dat逐行逆置复制到另一个文本文件中test3-1.out。 两个文件名在命令行中给出。 请改正程序中的错误,使其能输出正确的结果。 注意: 只能修改行,不得增加行或删除行,不得更改程序结构。 源程序如下: #include"stdio.h" voidrev(void) FILE*f1,*f2; voidmain(intargc,char*argv[]) { charch; if(argc>3) {printf("paramelersmissing! \n"); exit(0); } if((f1=fopen(*argv[1],"w"))==NULL) {printf("Cannotopenfile1! \n"); exit(0); } if((fp=fopen(argv[2],"r"))==NULL) {printf("Cannotopenfile2! \n"); exit(0); } while(! feof(f2)) {voidrev(); fputc('\n',f1); } fclose(f1); fclose(f2); } voidrev(void) { charc; if((! feof(f2))||((c=fgetc(f2))! ='\n')) {rev(); fputc(c,f1); } } 二、编写程序test3-2.c(60分) 请用函数调用方式编写程序test3-2.c,要求: 1.编写num函数,其功能是: 统计5个数中,有几个数满足各位数字均为偶数的条件,并将个数通过return语句返回到main函数。 2.编写main函数,其功能是: 从键盘上5个四位数的整数,然后调用num函数,最后输出符合条件数据个数和符合条件的数。 例如: 输入的5个数为4523,2684,4569,7423,2288 则符合条件数据个数为2,符合条件的数为2684和2288 (第四套)(60分钟) 一、程序调试题(40分) 给定程序test4-1.c的功能是: 统计文件test4-1.dat中字母和数字的个数,请改正程序中的错误,使其能输出正确的结果。 注意: 只能修改行,不得增加或删除行,不得更改程序的结构。 源程序如下: #include voidmain() { FILE*fp; intnum=0,digit=0; charch; if((fp=fopen("test4-1.dat","w"))==NULL) {printf("Cannotopenthefile! \n"); exit(0); } while(feof(fp)) { fgetc(fp); if(ch<='z'&&ch>='a'||ch<='Z'&&ch>='A') num++; if(ch<=9&&ch>=0) digit++; } fclose(); printf("Thenumbersofletters: %d\nThenumbersofnumbers: %d\n",num,digit); } 二、编写程序test4-2.c(60分) 请用函数调用方式编写程序test4-2.c,要求: 1.编写sort函数,其功能是: 对N个字符串排序。 2.编写main函数,其功能是: 从键盘上输入N个字符串(或采用初始化赋值),然后调用sort函数,最后输出排序以后的N个字符串。 例如: 输入5个字符串"China","Holland","German","America","Canada",按由小到大排序,输出结果为: America、Canada、China、German、Holland (第五套)(60分钟) 一、程序调试题(40分) 给定程序test5-1.c,函数fun的功能是求两个形参的乘积和商,其结果存入形参指针所指的地址中,函数io实现数据的输入和输出。 假设输入文件test5-1.in有数据61.82和12.65,则两个数的乘积和商分别为782.02300和4.886957。 main函数调用函数io。 请改正程序中的错误,使程序能得出正确结果。 、 注意: 不得增行或删行,也不得更改程序结构。 源程序如下: #include voidfun(doublea,b,*x,*y) {x=a*b;y=a/b; } io() {inti; doublea,b,c,d; file*rf,*wf; rf=fopen("test5-1.in","r"); wf=fopen("test5-1.out","w"); fscanf(rf,"%lf%lf",&a,&b); fun(a,b,c,d); fprintf("c=%lf\nn=%lf\n",c,d); printf("c=%lf\nn=%lf\n",c,d); fclose(rf); fclose(wf); } voidmain() { doublea,b,c,d; clrscr(); io(); } 二、编写程序test5-2.c(60分) 用函数调用方式编写程序。 要求实现: 在主函数中输入一个3×4的整型矩阵,调用函数covert对其进行转置并将结果存放在另一个二维数组中,最后在主函数中输出结果。 第二十九次 (第一套)(60分钟) 一、程序调试题(40分) 磁盘上有一程序test1-1.c,其中函数fun的功能是: 求出形参ss所指字符串数组中最长字符串的长度,其余字符串左边用字符*补齐,使其与最长的字符串等长。 字符串数组中共有M个字符串,且串长 请改正程序中的错误,使程序能得出正确的结果。 注意: 不得增行或删行,也不得更改程序结构。 源程序如下: #include #include #defineM5 #defineN20 voidfun(char(*ss)[N]) {inti,j,k=0,n,m,len; for(i=0;i {len=strlen(ss[i]); if(i=0)n=len; if(len {n=len; k=i; } } for(i=0;i if(i! =k) {m=n;len=strlen(ss); for(j=len;j>=0;j--) ss[i][m--]=ss[i][j]; for(j=0;j ss[i][j]='*'; } } voidmain() {charss[M][N]; inti; FILE*fp; fp=fopen("test1-1.in","r"); if(fp==NULL) {printf("Filecannotopen! \n"); exit(0); } for(i=0;i fscanf("%s",ss[i]); printf("\nTheoriginalstringsare: \n"); for(i=0;i printf("%s\n",ss[i]); printf("\n"); fun(ss); for(i=0;i printf("%s\n",ss[i]); fclose(fp); } 二、编写程序test1-2.c(60分) 程序的功能是: 删除一个字符串中指定的字符。 编写fun函数,其功能是删除一个字符串中指定的字符。 假设字符串为: turbocandborlandc++,指定要删除的字符为n,则删除后的字符串变为: turbocadborladc++。 如果输入的字符在字符串中不存在,则字符串照原样输出。 同一字母的大、小按不同字符处理。 在main函数中输入一个字符串(可以有空格)和一个要删除的字符,调用函数fun,最后输出结果。 (第二套)(60分钟) 一、程序调试题(40分) 磁盘上有一个名为test2-1.c的C程序,其中函数fun的功能是: 用下面的公式求 的近似值,直到最后一项的绝对值小于指定的数(参数num)为止: 例如,程序运行后,输入0.0001,则程序输出3.1414。 请改正程序中的错误,使程序能得出正确的结果。 注意: 不得增行或删行,也不得更改程序结构。 源程序如下: #include #include floatfun(floatnum) {ints; floatn,t,pi; t=1;pi=0;n=1;s=1; while(t>=num) {pi=pi+t;n=n+2;s=-s; t=s%n; } pi=pi*4; return; } main() { floatn1,n2; FILE*fp; fp=fopen("test2-1.out","r"); if(fp==NULL) {printf("\nFilecannotopen! \n"); exit(0); } printf("Enterafloatnumber: "); scanf("%f",&n1); n2=fun(); printf("%6.4f\n",n2); fprintf(fp,"Result=%6.4f\n",n2); fclose(fp); } 二、编写程序test2-2.c(60分) 编写函数fun,其功能是: 将形参指针a指向的字符顺序放入形指针c指向的字符串中,再把形参指针b指针的字符串逆序放入形参指针c指向的字符串中。 注: 不能使用字符串的复制和连接函数。 例如: a指向的字符串为adcb,b指向的字符串为213,则字符串c中的内容为adcb312。 (第三套)(60分钟) 一、程序调试题(40分) 磁盘上有一个名为test3-1.c的C程序文件,其中函数fun的功能是: 将数组a中n个整数进行移动,大于等于0的数放在数组的前面,小于0的数放在后面。 例如: 数组中的数为: 12-3456-9-10259-82490,移动后的结果为: 12562592490-34-9-10-8 在main函数中,从一文本文件test3-1.in中读取10个整数放入整型数组中,调用函数fun,并输出最后的结果。 请改正程序中的错误,使其能得到正确的结果。 注意: 不得增行或删行,也不得更改程序结构。 源程序如下: #include voidfun(inta[],intn) { inti,j=0,b[20]; for(i=0;i if(a[i]>=0) b[j]=a[i]; for(i=0;i if(a[i]>0) b[j++]=a[i]; for(i=0;i a[i]=b[i]; } voidmain() { inta[10],i; charfilename[20]; FILE*fp; printf("Inputfilename: "); scanf("%c",filename); if((fp=fopen(filename,"r"))==NULL){ printf("Cannotopenthefile.\n"); exit(0); } for(i=0;i<10;i++) fscanf(fp,"%d",a[i]); fun(a,10); for(i=0;i<10;i++) printf("%4d",a+i); fclose(fp); } 二、编写程序test3-2.c(60分) 编写函数fun,函数fun的功能是: 将字符串s最右边的n个字符赋值到新串t中,若n大于s的长度,则将s复制到t中。 注: 不能使用字符串的复制函数。 例如: 字符串s为abcdefgh,n=5,则字符串t为defgh。 main函数中输入一字符串s及n的值,调用fun函数并输出结果。 (第四套)(60分钟) 一、程序调试题(40分) 磁盘上有一个名为test4-4.c的C程序文件,其功能是: 在main函数中随机生成一个N*N的二维数组,fun函数使该数组左下半三角元素中的值乘以n。 例如n=3,当a数组中的值为: ,运行程序后a数组的值就变为: 在main函数中将运行结果输出到屏幕上和文件test4-4.out中。 请改正程序中的错误,使它能得出正确结果。 注意: 不得增行或删行,也不得更改程序结构。 源程序如下: #include"stdio.h" #defineN=3 intfun(inta[][N],n) { inti,j; for(i=0;i for(j=0;j if(i>=j) a[i][j]=*n; } main() { inta[N][N],n,i,j; FILE*fp; for(i=0;i {for(j=0;j {a[i][j]=rand()%10; printf("%4d",a[j][i]); } printf("\n"); } do n=rand()%10; while(n<=3) printf("n=%4d\n",n); fun(a,n); fp=fopen("test4-1.out","w"); if(fp==NULL) {printf("\nFilecannotopen! \n); exit(0); } for(i=0;i {for(j=0;j {printf("%4d",a[i][j]); fprintf(fp,"%4d",a[[i][j]); } printf("\n"); } fclose(fp); } 二、编写程序test4-2.c(60分) 假定输入的字符串只包含字母和*号。 请编写函数fun(),它的功能是: 只删除字符串前导和尾部的*号,串中字母之间的*号都不删除。 形参n给出字符串的长度,形参h给出字符串中前导*号的个数,形参e给出字符串中尾部*号的个数。 在编写函数时,不得使用C语言提供的字符串函数。 例如,若字符串中的内容****A*BC*DEF*G*******,删除后,字符串中的内容则应该是A*BC*DEF*G。 (第五套)(60分钟) 一、程序调试题(40分) 给定程序test5-1.c,函数fun的功能是求两个形参的乘积和商,其结果存入形参指针所指的地址中,函数io实现数据的输入和输出。 假设输入文件test5-1.in有数据61.82和12.65,则两个数的乘积和商分别为782.02300和4.886957。 main函数调用函数io。 请改正程序中的错误,使程序能得出正确结果。 注意: 不得增行或删行,也不得更改程序结构。 源程序如下: #include voidfun(doublea,b,*x,*y) {x=a*b;y=a/b; } io() {inti; doublea,b,c,d; file*rf,*wf; rf=fopen("test5-1.in","r"); wf=fopen("test5-1.out","w"); fscanf(rf,"%lf%lf",&a,&b); fun(a,b,c,d); fprintf("c=%lf\nn=%lf\n",c,d); printf("c=%lf\nn=%lf\n",c,d); fclose(rf); fclose(wf); } voidmain() { doublea,b,c,d; clrscr(); io(); } 二、编写程序test5-2.c(60分) 用函数调用方式编写程序。 要求实现: 在主函数中输入一个3×4的整型矩阵,调用函数covert对其进行转置并将结果存放在另一个二维数组中,最后在主函数中输出结果。 第二十八次 (第一套)(60分钟) 一、程序调试题(40分) 磁盘上有一C程序test1-1.c,其功能是: 将具有N个元素的数组的后m个元素移到前m个位置。 例如,若输入m=3,数组元素为: 12345678910,则输出结果为: 89101234567。 要求将结果显示在屏幕上并写入文件test1-1.dat中。 请更改程序中的错误,使程序能得出正确结果。 注意: 不得增行或删行,也不得更改程序结构。 源程序如下: #include"stdio.h" #defineN10 voidmain() {inta[N],k,m,r,*t; FILE*fp; fp=fopen(test1-1.dat,"w"); if(fp==NULL) {printf("Filecannotopen! \n"); exit(0); } printf("\nInputm: "); scanf("%d",m); printf("\nInput10numbers: \n"); for(k=0;k scanf("%d",a); for(r=0;r {t=a[N-1]; for(k=N-1;k>0;k--) a[k]=a[k-1]; a[k]=t; } for(k=0;k {printf("%4d",a[k]); fprintf(fp,"%4d",a[k]); } fclose(fp); } 二、编写程序test1-2.c(60分) 编写函数fun,函数fun的功能是: 求出满足“百位减十位等于个位”的所有三位整数,并按降序存入形参数组a中,满足条件下的三位数总个数作为函数值返回。 main函数中调用函数fun,并按一行5个数输出结果。 (第二套)(60分钟) 一、程序调试题(40分) 磁盘上有一个名为test2-1.c的C程序,其功能是将一个文本文件test2-1.in逐行逆置复制到另一个文件test2-1.ou
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 30 21 试试