2011秋江苏省计算机二级C上机真题 |
2011秋二级C语言上机试卷 (本试卷完成时间为70分钟) 一、改错题(16分) 【程序功能】 验证猜想:当f为41,x分别取1,2,3,4,...,40时,由多项式x 以下程序首先用多项式x 【测试数据与运行结果】 屏幕输出: YES 41 43 47 53 61 71 83 97 113 131 151 173 197 223 251 281 313 347 383 421 461 503 547 593 641 691 743 797 853 911 971 1033 1097 1163 1231 1301 1373 1447 1523 1601 【含有错误的源程序】 以下源程序已保存在T盘myf1.c文件内,考生可直接打开该文件调试程序。 1 #include <stdio.h> 2 #include <conio.h> 3 int allprime(int n,int a[]) 4 { int i,j,b[]; 5 for(i=0;i<n;i++) 6 { b[i]=1; 7 for(j=1;j<a[i]/2;j++) 8 if(a[i]%j==0) b[i]=0; 9 } 10 for(i=0;i<n;i++) 11 if(0=b[i]) 12 return 0; 13 return 1; 14 } 15 void main() 16 {int i,j,x0=1,x1=40,f=41,a[40]; 17 for(j=x0;j<=x1;j++) 19 j--; 20 if(allprime(j,a[])) 21 {printf("\nYES\n"); 22 for(i=0;i<j;i++) 23 {printf("%d\t",a[i]); 24 if((i+1)%10==0)printf("\n"); 25 } 26 } 27 else 28 printf("\nNO\n"); 29 getch(); 30 } 【要求】 1.打开T盘中myf1.c文件或将上述程序录入到myf1.c文件中,根据题目要求及程序中语句之间的逻辑关系对程序中的错误进行修改。 2.改错时,可以修改语句中的一部分内容,调整语句次序,增加少量的变量说明或编译预处理命令,但不能增加其他语句,也不能删去整条语句。 3.改正后的源程序(文件名myf1.c)保存在T盘中供阅卷使用,否则不予评分。 二、编程题(24分) 【程序功能】 在已有的一份姓名登记表中删除重复出现的姓名,输出处理后的姓名登记表。 【编程要求】 1.编写函数int del_name(char s[][20],int n)。函数功能:在s指向的数组前n行中存储的n个字符串中删除重复出现的字符串,只保留第一次出现的字符串,函数返回s指向的数组中剩余的字符串个数。 2.编写函数main()。函数功能:声明数组name并用测试数据初始化,用name作实参调用函数del_name,将经过删除后name数组中剩余的字符串输出到屏幕及数据文件Myf2.out中。最后将考生本人准考证号输出到文件Myf2.out中。 【测试数据与运行结果】 测试数据:"Ann","Belle","David","Ann","Mary","Belle","Ken","Ann","Mark","Mary" 屏幕输出:Ann Belle David Mary Ken Mark 【要求】 1.源程序文件名为Myf2.c,输出结果文件名为Myf2.out。 2.数据文件的打开、使用和关闭均用C语言标准库中的文件操作函数实现。 3.源程序文件和运行结果文件均需保存在T盘中供阅卷使用。 4.不要复制扩展名为obj和exe的文件到T盘中。 参考答案 一、改错题 第4行 {int i,j,b[]; 改为b[40] 第7行 for(j=1;j<a[i]/2;j++) 改为j=2 第11行 if(0=b[i]) 改为== 第20行 if(allprime(j,a[])) 改为a 二、编程题 #include<stdio.h> #include<string.h> #include<conio.h> #define M 20 #define N 100 int del_name(char s[][M],int n) {int i,j,k; for(i=0;i<n;i++) { j=i+1; while(j<n) if(strcmp(s[i],s[j])==0) {for(k=j;k<n-1;k++)strcpy(s[k],s[k+1]); s[k][0]=0; n--; } else j++; } return n; } void main() {char name[N][M]={"Ann","Belle","David","Ann","Mary", "Belle","Ken","Ann","Mark","Mary"}; int k,n=10; FILE *fp; fp=fopen("Myf2.out","w"); n=del_name(name,n); for(k=0;k<n;k++) {puts(name[k]); fputs(name[k],fp); } fprintf(fp,"\nMy Exam number is:0112400123"); fclose(fp); getch(); } |