2007春C语言上机考试题8套
发表时间:2007-10-19 2007年(春)上机试卷(01)
一、改错题(18分) [程序功能]
下列程序中函数fun的功能是:
首先将s数组中的字符串按以下规则复制到t数组:对于下标值为偶数位置上的字符复制n次(n=下标值+1),对于下标值为奇数位置上的字符只复制一次;其次将t数组中的字符串按字符编码从小到大的顺序排序。 [测试数据与运行结果]
当s中的字符串为“abcdefg”时,程序运行结果应为“abcccdeeeeefggggggg” 当s中的字符串为“136254”时,程序运行结果应为“123455555666” [含有错误的源程序]*/ #include \#include \
void fun(char *s,char *t) {int i,j,k,n=0; char temp; for(i=0;s[i]!='\\0'; ++i) if(i%2=0)
for(k=0;k
for(i=0;i for(j=0;j { temp=t[i]; t[i]=t[k]; t[k]=temp; } } } main() {char s[20],t[100]; printf(\ fun(s); printf(\ getch(); } /* 二、编程题(22分) [程序功能] 验证对于任意一个不超过9位的自然数按下列步骤经过有限次的变换得到的新数最终转换成123并(1)统计该数中偶数数字的个数a(0被当作偶数对待),该数中奇数数字的个数b,该数的总位数c。 (2)用a,b,c按以下规则组成一个新数:当a!=0时,a为百位,b为十位,c为个位;当a=0时,b为百位,a为十位,c为个位。(3)当这个新数不等于123时,对这个新数重复上述操作。经过多次重复,新数最终转换成123。数学上称123为陷阱数。 [编程要求] 1、编写函数int fun(long n,long a[]),对给定的一个长整型数n根据上述规则作变换,直到新生成的数等于123。在转换过程中,把n及转换过程中生成的所有数依次保存到数组a中,函数返回a数组中数据个数。 2、编写main函数,从键盘输入n的值,调用函数fun判断n是否转换成123,将n及转换过程中生成的所有数依次输出到屏幕并用写文件函数保存保存到结果文件myf2.out,最后将考生本人的准考证号字符串也保存到结果文件myf2.out中。 [测试数据与运行结果] 当n=12345678时输出结果为: 12345678,448,303,123 my exam number is :考生本人准考证号字符串 2007年(春)上机试卷(02) 一、改错题(18分) [程序功能] 找到并输出2~100之间的所有互逆素数对。互逆素数对:若一个素数的反序数也是素数,则称该素数和其反序数为互逆素数对。例如,13是素数,13的反序数31也是素数,故(13,31)是互逆素数对。 算法提示:函数prime的功能是先用筛选法求出保存在a指向的结构数组元素的成员i中2~n范围内的所有素数,再从中选出大于11的互逆素数对。存放互逆素数对的方法是:将互逆素数对分别存放于同一结构数组的i和flag成员中。例如,13和31是互逆素数对,故a[13].i=13,a[13].flag=31;a[31].i=31,a[31].flag=13。 [测试数据与运行结果] 运行结果 2 3 5 7 11 13 17 19 23 29 31 37 41 43 47 53 59 61 67 71 73 79 83 89 97 13, 31 17, 71 31, 13 37, 73 71, 17 73, 37 79, 97 97, 79 [含有错误的源程序] #include struct PR{ int i;int flag; }; void prime(struct PR a[],int n) { int i,j; for(i=2;i for(j=i+1;j if(a[j].i && a[j].i%a[i].i=0) a[j].i=0; for(i=12;i<=n;i++) if(a[i].i) { int k=i,s=0; while(k) { s=s*10+k;k/=10; } if(a[s].i) { a[k].flag=i;a[i].flag=k;} } } main() { struct PR a[N]=0;int i; clrscr(); for(i=2;i for(i=2;i if(a[i].i) printf(\ printf(\ for(i=10;i if(a[i].flag) printf(\ getch(); } 要求: 1、将上述程序录入到文件myf1.c中,根据题目要求及程序中语句之间的逻辑关系对程序中的错误进行修改。 2、改错时,可以修改语句中的一部分内容,调整语句次序,增加少量的变量说明或编译预处理命令,但不能增加其它语句,也不能删去整条语句。 3、改正后的源程序(文件名myf1.c)保存在考试软盘的根目录中供阅卷使用,否则不予评分。 二、编程题(22分) [程序功能] 字符串变换 [编程要求] 1. 编写函数void conv(char *ss),其功能是:从左到右依次扫描字符串ss,把小写字母o左边的所有字符移到该串的右边,并把该小写字母o删除,继续扫描字符串ss并做上述操作,直到字符串ss中所有的小写字母o被删除为止。 2. 编写main函数,声明一个长度为80的字符数组并用测试数据初始化该数组,调用conv函数对数组中的字符串作上述变换,将变换后的结果字符串输出 到屏幕并用写文件函数保存到结果文件myf2.out中,最后将考生本人的准考证号字符串也保存到结果文件myf2.out中。 [测试数据与运行结果] 测试数据: You can create an index on any field. 输出结果: n any field.Yu can create an index My exam number is: 考生本人准考证号字符串 [要求] 1. 源程序文件名必须取为myf2.c,输出结果文件名必须取为myf2.out。 2. 数据文件的打开、使用和关闭均用C语言标准库中缓冲文件系统的文件操作函数实现。 3. 源程序文件和运行结果文件均须保存在考试盘的根目录下,供阅卷用。 4. 不要复制扩展名为OBJ和EXE的文件到考试盘上。 2007年(春)上机试卷(03) 一、改错题(18分) [程序功能] 验证:在7~2000之间的所有素数中存在这样的两个素数,它们的差恰好是1898。 算法提示:main函数先将7~2000之间的所有素数放入a数组中,然后调用fun 函数验证命题。若命题成立,则fun函数将找到的两个素数所在的数组元素下标保存到x和y指向的两个变量中,fun函数返回1,否则返回0。main函数根据fun函数的返回值,输出满足条件的这两个素数,或输出“not found!”。 [测试数据与运行结果] 运行结果为:1951-53=1898 [含有错误的源程序] #include for(i=2;i<=n/2;i++) if(n%i==0) return 0; else return 1; } int fun(int a[],int n,int *x,int *y) { int i,j; for(i=0;i main() { int a[1000]=0;int i,k=0,flag,m,n; for(i=7;i<2000;i+=2) if(prime(i)) a[k++]=i; flag=fun(a,k,m,n); if(flag) printf(\ else printf(\ getch(); } 要求: 1、将上述程序录入到文件myf1.c中,根据题目要求及程序中语句之间的逻辑关系对程序中的错误进行修改。 2、改错时,可以修改语句中的一部分内容,调整语句次序,增加少量的变量说明或编译预处理命令,但不能增加其它语句,也不能删去整条语句。 3、改正后的源程序(文件名myf1.c)保存在考试软盘的根目录中供阅卷使用,否则不予评分。 二、编程题(22分) [程序功能] 以矩阵的行作为排序的交换单位,使得排序后的矩阵按指定列的元素值递减有序。 [编程要求] 1.编写函数void sort(int x[][4],int n,int col)。函数功能:对x指向的二维数组(该数组中保存了一个n×4矩阵)以行作为交换单位,按照下标为col的列元素值做递减排序。 2.编写main函数。函数功能:声明一个3行4列二维数组并用测试数据初始化该数组,调用 sort 函数对该数组中保存的矩阵按第3列(列下标为2)排序,将排序后二维数组中的矩阵输出到屏幕并用写文件函数保存到结果文件myf2.out中。最后将考生本人的准考证号字符串也保存到结果文件myf2.out中。 [测试数据与运行结果] 测试数据: 101 80 60 90 102 70 90 50 103 60 70 80 运行结果(按第3列排序后): 102 70 90 50 103 60 70 80 101 80 60 90 My exam number is: 考生本人准考证号字符串 [要求] 1. 源程序文件名必须取为myf2.c,输出结果文件名必须取为myf2.out。 2. 数据文件的打开、使用和关闭均用C语言标准库中缓冲文件系统的文件操作函数实现。 3. 源程序文件和运行结果文件均须保存在考试盘的根目录下,供阅卷用。 4. 不要复制扩展名为OBJ和EXE的文件到考试盘上。 百度搜索“77cn”或“免费范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,免费范文网,提供经典小说教育文库2007春C语言上机考试题8套在线全文阅读。
相关推荐: