12套C语言上机试题及参考答案 下载本文

第三套C语言上机试卷

一、改错题 【题目】

下面的程序能够从键盘上接受一个含有空格的字符串(scsnf遇到空格就停止输入,应用gets),然后按照字典序对所有字符排序,再删除重复出现的字符。

含有错误的源程序如下: #include #include \void main()

{char str[100],*p,*q,*r,c; printf(\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要加#include* }

printf(\} 【要求】

1.将上述程序录入到文件myf1.c中,然后根据题目的要求以及程序中语句之间的逻辑关系对程序中的错误进行修改。

2.改错时,可以修改语句中的一部分内容,调整语句的次序,增加少量的变量说明或编译预处理命令,但不能增加其他语句,也不能删去整条语句。

3.改正后的源程序myf1.c保存在考试盘的根目录下,供阅卷用,否则不予评分。 二、编程题 【题目】

程序功能:将一个4×4二维数组中全部元素逆时针旋转90°。 编程要求如下:

1.编写函数int rotate (int a[4][4], int b[4][4]),将数组a中元素逆时针旋转90°后的元素保存在数组b中,计算b数组主对角线上全部元素之和作为函数的返回值。

2.编写主函数main,从键盘上读入16个数据放入一个二维数组中,调用rotate函数,将旋转后的二维数组全部元素按行写入到结果文件myf2.out中,最后将旋转后数组中主对角线上全部元素之和写入到结果文件myf2.out中。

3.使用以下测试数据:

旋转前: 旋转后: 1 5 9 13 13 14 15 16 2 6 10 14 9 10 11 12 3 7 11 15 5 6 7 8 4 8 12 16 1 2 3 4

【要求】

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?e match example”;若输入字符串为“europe”时,则输出“e*p?e unmatch europe”。

含有错误的源程序如下: void match(char *pat,char str) {char *p=pat,*q=str; int i=0;

while((*p!=NULL)&&(*q!=NULL)) if(*p= =*q||*p= ='?')p++,q++; else if(*p= ='*') {p++;

while(*q!=*p&&*q!=NULL)q++; }

else i=0;break;

if(*p!=NULL||*q!=NULL)i=0; return i; }

main()

{char a[10],b[10]; int yesno;

gets(a);gets(b); yesno=match(a,b);

printf(\} 【要求】

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. 编写函数int inv(int x),完成将两位数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保存到考试盘上。