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