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(); } |