2012春江苏省计算机二级C上机考试真题1 |
2012春江苏省高校计算机等级考试 二级C语言上机试卷1 (本试卷完成时间为70分钟) 一、改错题(16分) 【程序功能】 以下程序中函数void csort(char str[][N],int n)对str指向的二维数组前n行中存储的n 个字符串分别作如下处理:从中间将字符串一分为二,左半部分字符子串按字符的ASCII码值 从大到小排序(若字符串的长度为奇数,则中间字符不参加排序)。 【测试数据与运行结果】 测试字符串:"abcdefgh","123498765" 屏幕输出:dcbaefgh 432198765 【含有错误的源程序】 以下源程序已保存在T盘myf1.c文件内,考生可直接打开该文件的调试程序。 1 #include<stdio.h> 2 #include<string.h> 3 #include<conio.h> 4 #define N 80 5 void csort(char str[][N],int n); 6 void main() 7 {char s[2][N]="abcdefgh","123498765"; 8 int i; 9 csort(s,2); 10 for(i=0;i<2;i++) 11 puts(s); 12 getch(); 13 } 14 void csort(char str[][N],int n) 15 { int i,j,k,len,half; 16 char temp; 17 for(i=0;i<n;i++) 18 {len=strlen(str[i][0]); 19 half=len/2; 20 for(j=0;j<half-1;j++) 21 for(k=j+1;k<half-1;k++) 22 if(str[i][j]<str[i][k]) 23 {temp=str[i][j]; 24 str[i][j]=str[i][k]; 25 str[i][k]=temp; 26 } 27 } 28 } 【要求】 1.打开T盘中myf1.c文件或将上述程序录入到myf1.c文件中,根据题目要求及程序中 语句之间的逻辑关系对程序中的错误进行修改。 2.改错时,可以修改语句中的一部分内容,调整语句次序,增加少量的变量说明或编译预 处理命令,但不能增加其他语句,也不能删去整条语句。 3.将改正后的源程序(文件名myf1.c)保存在T盘中供阅卷使用,否则不予评分。 二、编程题(24分) 【程序功能】 对于所给的一个自然数n,查找并输出所有满足以下条件的等差数列:(1)公差为1; (2)数列中各项数值之和等于n。 【编程要求】 1.编写函数int found(int a[][30],int n)。函数的功能:查找满足上述条件的所有等差 数列并依次将其保存到a指向的数组中(一行保存一个数列),函数返回找到的数列个数。 2.编写函数main()。函数的功能:声明一个二维整型数组用于保存查找结果,输入一个整 数并保存到变量n中(n≤600)。用n和整型数组作实参调用found函数,将找到的所有等差数 列输出到屏幕及数据文件myf2.out中。最后将考生本人的准考证号输出到文件myf2.out中。 【测试数据与运行结果】 输入:n=500 屏幕输出: 8 9 10 11 12 13 14 15 16 17 18 19 20 59 60 98 99 100 101 102 500 【要求】 1.源程序文件名为myf2.c,输出结果文件名为myf2.out。 2.数据文件的打开、使用、关闭均用C语言标准库中的文件操作函数实现。 3.源程序文件和运行结果文件均需保存在T盘中供阅卷使用。 4.不要复制扩展名为obj和exe的文件到T盘中。 参考答案 一、改错题 第7行 {char s[2][N]="abcdefgh","123498765"; 改为{"abcdefgh","123498765"} 第11行 puts(s); 改为puts(s[i]) 第18行 {len=strlen(str[i][0]); 改为str[i] 第21行 for(k=j+1;k<half-1;k++) 改为k<half 二、编程题 #include<stdio.h> #include<conio.h> int found(int a[][30],int n) ’ { int i,k=0,s=0,j,count,l=0; for(i=1;i<=n;i++) { for(s=0,j=i;s<n;j++) s=s+j; if(s==n) {count=0; for(k=i;k<j;k++) a[1][count++]=k; l++; } } return l; } void main() {int i,j,n,m,a[10][30]={0}; FILE *fp; fp=fopen("myf2.out","w"); printf("input n:"); scanf("%d",&n); m=found(a,n); for(i=0;i<m;i++) { for(j=0;a[i][j];j++) {printf("%d",a[i][j]); fprintf(fp,"%d",a[i][j]); printf("\n"); fprintf(fp,"\n"); } fprintf(fp,"My exam number is:0012400124"); fclose(fp); getch(); } |