您好,欢迎访问三七文档
当前位置:首页 > 临时分类 > 12套C语言上机试题及参考答案
第一套C语言上机试卷一、改错题【题目】本程序计算并输出二维数组a的每一列最小元素的值及其行号、列号,整个数组a中最小元素的值及其行号、列号。含有错误的源程序为:#includestdio.h#definen4#definem3inta[n][m],s[m];p(intj){intk,i,x;S[j]=x=a[0][j];i=0;for(k=1;kn;k++)if(a[k][j]x){i=k;s[j]=x=a[k][j];}returni;}main(){intindex[m],i,j,k;for(i=0;in;i++)for(j=0;jm;j++)scanf(%d,&a[i][j]);for(j=0;jm;j++){index[j]=p[j];printf(a[%d][%d]=%d\n,index[j],j,s[j]);}i=s[0];k=0;for(j=1;jm;j++)if(s[j]i){i=s[j];k=j;}printf(min=a[%d][%d]=%d,index[k],k,i);}注:调试程序时,可以随意输入测试数据,最后运行本程序时,必须从键盘输入下列数据:641697138181551219【要求】:1.将上述程序录入到文件myf1.c中,然后根据题目的要求以及程序中语句之间的逻辑关系对程序中的错误进行修改。2.改错时,可以修改语句中的一部分内容,调整语句次序,增加少量的变量说明或编译预处理语句,但不能增加其他语句,也不能删去整条语句。3.将改正后的源程序(文件名myf1.c)放在考试盘的根目录下,供阅卷用。二、编程题【题目】建立数组a[3][8],其中前两行元素产生方法是:用初值x1=26及公式xi+1=(25*xi+357)%1024,产生一个数列:x1,x2,…,x16。其中x1~x8作为a的第一行元素;x9~x16作为a的第二行元素;第三行的元素值取前两行同列元素的最大公约数。最后把数组a的元素写到文件myf2.out中,每写完a的一行元素要换行。【要求】1.将源程序取名为myf2.c输出结果文件取名为myf2.out。2.数据文件的打开、使用、关闭均按TURBOC文件操作实现。3.源程序文件和运行结果文件均需放在考试盘的根目录下,供阅卷用。4.不要将myf2.obj和myf2.exe保存到考试盘上。第二套C语言上机试卷一、改错题【题目】下面的程序判断一个正整数是否为降序数,再打印组成该整数的每个字符。设正整数m=d0d1d2d3…dk-1,若满足di=di+1,i=0,1,…,k-2,则m就是一个降序数,如21、433是两个降序数。含有错误的源程序如下:#includestdio.hvoidmain(){intnum,k,di,n,isdec;longm;chardigit[10];scanf(num=%d,&num);for(;num0;num--){n=0;isdec=1;k=0;scanf(%ld,&m);while(m!=0){di=m%10;digit[n++]=m%10+’0’;*数字字符与相应数字的转换*m=m/10;if(k=di)k=di;elseisdec=0;}for(n--;n=0;n--){putchar(digit[n]);putchar('');}*使用putchar要加#includeatdio.h*if(isdec)printf(isdecreaordernumber\n);elseprintf(isnotdecreaordernumber\n);}}【要求】1.将上述程序录入到文件myf1.c中,然后根据题目的要求以及程序中语句之间的逻辑关系对程序中的错误进行修改。2.改错时,可以修改语句中的一部分内容,调整语句的次序,增加少量的变量说明或编译预处理命令,但不能增加其他语句,也不能删去整条语句。3.改正后的源程序myf1.c保存在考试盘的根目录下,供阅卷用,否则不予评分。二、编程题【题目】程序功能:将一字符串做压缩处理。编程要求:1.编写一个函数intcompress(chars[]),将s中连续出现的多个相同字符压缩成一个字符,统计被删除的字符个数,并返回被删除的字符个数。2.编写主函数main。从键盘上读入一行字符数据放入一个字符型数组中,调用compress函数对该字符数组中的字符做压缩处理,将压缩后的字符串写入结果文件myf2.out中。3.用以下数据测试程序:@@@@@@Iwwillllsuccessful&&&&&&andyoutoo!!!!!!##########【要求】1.将源程序文件取名为myf2.c,输出结果文件取名为myf2.out。2.数据文件的打开、使用和关闭均用C语言标准库中缓冲文件系统的文件操作函数实现。3.源程序文件和运行结果文件均需保存在考试盘的根目录下,供阅卷用。4.不要复制扩展名为OBJ和EXE的文件到考试盘上。第三套C语言上机试卷一、改错题【题目】下面的程序能够从键盘上接受一个含有空格的字符串(scsnf遇到空格就停止输入,应用gets),然后按照字典序对所有字符排序,再删除重复出现的字符。含有错误的源程序如下:#includestdio.h#includestdio.hvoidmain(){charstr[100],*p,*q,*r,c;printf(Inputastring:);gets(str);for(p=str;*p;p++){for(q=r=p;*q;q++)if(*r*q)r=q;if(r!=p){c=*r;*r=*p;*p=c;}}for(p=str;*p;p++){for(q=p;*p==*q;q++);strcpy(p+1,q);*用strcmp要加#includestring.h*}printf(result:%s\n,str);}【要求】1.将上述程序录入到文件myf1.c中,然后根据题目的要求以及程序中语句之间的逻辑关系对程序中的错误进行修改。2.改错时,可以修改语句中的一部分内容,调整语句的次序,增加少量的变量说明或编译预处理命令,但不能增加其他语句,也不能删去整条语句。3.改正后的源程序myf1.c保存在考试盘的根目录下,供阅卷用,否则不予评分。二、编程题【题目】程序功能:将一个4×4二维数组中全部元素逆时针旋转90°。编程要求如下:1.编写函数introtate(inta[4][4],intb[4][4]),将数组a中元素逆时针旋转90°后的元素保存在数组b中,计算b数组主对角线上全部元素之和作为函数的返回值。2.编写主函数main,从键盘上读入16个数据放入一个二维数组中,调用rotate函数,将旋转后的二维数组全部元素按行写入到结果文件myf2.out中,最后将旋转后数组中主对角线上全部元素之和写入到结果文件myf2.out中。3.使用以下测试数据:旋转前:旋转后:1591313141516261014910111237111556784812161234【要求】1.将源程序文件取名为myf2.c,输出结果文件取名为myf2.out。2.数据文件的打开、使用和关闭均用C语言标准库中缓冲文件系统的文件操作函数实现。3.源程序文件和运行结果文件均需保存在考试盘的根目录下,供阅卷用。4.不要复制扩展名为OBJ和EXE的文件到考试盘上。第四套C语言上机试卷一、改错题【题目】使用Windows搜索工具在磁盘中查找文件时,在被查找的文件名文本框内允许出现含有通配符“*”和“?”的字符串,以达到搜索多个文件的目的,称这样一个字符串为模板。搜索的过程就是在已知的若干文件名字符串中查找与模板匹配的文件名。以下程序实现模板与字符串的匹配判断功能。给出一个模板pat及一个字符串str,模板中可能含有通配符“*”和“?”,其中“*”表示在该位置上有0个或多个任意字符,“?”表示在该位置上有一个任意字符。函数match对它们作匹配判断后,返回1表示匹配,返回0表示不匹配。例如,模板为“e*p?e”,若字符串为“example”,则两者是匹配的;若字符串为“europe”,则两者是不匹配的。程序正确时,当输入的模板为“e*p?e”,若输入字符串为“example”时,则输出“e*p?ematchexample”;若输入字符串为“europe”时,则输出“e*p?eunmatcheurope”。含有错误的源程序如下:voidmatch(char*pat,charstr){char*p=pat,*q=str;inti=0;while((*p!=NULL)&&(*q!=NULL))if(*p==*q||*p=='?')p++,q++;elseif(*p=='*'){p++;while(*q!=*p&&*q!=NULL)q++;}elsei=0;break;if(*p!=NULL||*q!=NULL)i=0;returni;}main(){chara[10],b[10];intyesno;gets(a);gets(b);yesno=match(a,b);printf(%s%s%s\n,a,yesno?match:unmatch,b);}【要求】1.将上述程序录入到文件myf1.c中,然后根据题目的要求以及程序中语句之间的逻辑关系对程序中的错误进行修改。2.改错时,可以修改语句中的一部分内容,调整语句的次序,增加少量的变量说明或编译预处理命令,但不能增加其他语句,也不能删去整条语句。3.改正后的源程序myf1.c保存在考试盘的根目录下,供阅卷用,否则不予评分。二、编程题【题目】有一些十进制整数对ab和cd具有如下特性:ab×cd=ba×dc,其中,a、b是不同的数字且c、d也是不同的数字。例如:12×42=21×24,12×63=21×36,12×84=21×48请按如下要求编程:1.编写函数intinv(intx),完成将两位数x的个位与十位对换,返回对换后新的两位数。2.主函数中找出m、n取值在30~50之间,且满足等式:m*n=inv(m)*inv(n)的所有m、n值,并按上述等式的格式写入到文件myf2.out中(每个等式一行,×可用*表示)。【要求】1.将源程序文件取名为myf2.c,输出结果文件取名为myf2.out。2.数据文件的打开、使用和关闭等操作均用C语言标准库中缓冲文件系统的文件操作函数实现。3.源程序文件和运行结果文件均需保存在考试盘的根目录下,供阅卷用。4.不要将myf2.obj和myf2.exe保存到考试盘上。第五套C语言上机试卷一、改错题【题目】某数列的前两项是3和2,其后续项根据前面最后两项的乘积,按下列规则生成:(1)若乘积为一位数,则该乘积即为数列的后续项;(2)若乘积为两位数,则该乘积的十位数字和个位数字依次作为数列的两个后续项。例如:该数列的前10项为:3、2、6、1、2、2、4、8、3、2。函数sum按要求生成数列的前n(n50)项,存入首指针为pa的数组中,计算并返回前n项的和。#includestdio.h#defineN50voidsum(intn,int*pa){intcount,total,temp;*pa=3;*++pa=2;total=5;count=2;while(count++n){temp=*(pa-1)**pa;if(temp10){total+=temp;*(++pa)=temp;}else{*++pa=temp/10;total+=*pa;if(countn){count++;*pa++=temp%10;total+=*pa;}}}returntotal;}main(){inttol,n,i,num[n];do{printf(Inputn=?(2n50));scanf(%d,&n);}while(n=2||n=50);tol=sum(N,num);for(i=0;in;i++)printf((i+1)%5?%5d:%5d\n,num[i]);printf(\n);printf(%d,
本文标题:12套C语言上机试题及参考答案
链接地址:https://www.777doc.com/doc-3097462 .html