2011春江蘇省計算機二級C上機真題1 |
二級C語言上機試卷 (本試卷完成時間為70分鐘) 一、改錯題(16分) 【程序功能】 對存儲在string數組內的英文句子中所有以a開始并以e結尾的單詞做加密處理。加密規則:若單詞長度為偶數個字符,則將組成該單詞的所有字母循環左移一次;否則循環右移一次。例如,單詞able經循環左移一次后變為blea;單詞abide經循環右移一次后變為eabid。 【測試數據與運行結果】 測試數據:she is able to abide her. 屏幕輸出:she is blea to eabid her. 【含有錯誤的源程序】 #include <stdio.h> #include <ctype.h> void wordchange(char str[]) { int i,j,k,m; char c; for(i=0;str[i];i++) {for(j=i,k=i;isalpha(str[k]);k++); if(str[j]=='a' || str[k-1]=='e') {if((k-j)%2=0) {c=str[j]; for(m=k-1;m>j;m--) str[m]=str[m+1]; str[k-1]=c; } else {c=str[k-1]; for(m=k-1;m>j;m--) str[m]=sty[m-1]; str[j]=c; } } i=k; } 。 } void main() { char string[80]="she is able to abide her."; wordchange(string[80]); puts(string); } 【要求】 1.將上述程序錄入到文件myf1.c中,根據題目要求及程序中語句之間的邏輯關系對程 序中的錯誤進行修改。 2.改錯時,可以修改語句中的一部分內容,調整語句次序,增加少量的變量說明或編譯預處理命令,但不能增加其他語句,也不能刪去整條語句。 3.改正后的源程序(文件名myf1.c)保存在T盤根目錄中供閱卷使用,否則不予評分。 二、編程題(24分) 【程序功能】 矩陣數據生成及排序。 【編程要求】 1.編寫函數void cresort(int a[][3],int n)。函數功能是先根據a指向的二維數組中第1列(列下標為0)和第2列(列下標為1)的值按下表所列規則生成第3列各元素的值,再以行為單位重排a數組的各行,使得所有行按第3列元素值從小到大排列。 第3列生成規則: 對任意的i(0<=i<=n-1)有:
2.編寫main函數。函數功能是聲明5行3列二維數組a并用測試數據初始化,用數組a 作為實參調用cresort函數,將a數組中的數據輸出到屏幕及文件myf2.out中。最后將考生本人的準考證號字符串輸出到文件myf2.out中。 【測試數據與運行結果】 測試數據: 27 16 0 11 12 0 6 9 0 7 13 0 8 5 0 屏幕輸出: 27 16 1 6 9 1 8 5 2 11 12 3 7 13 4 【要求】 1.源程序文件名為myf2.C,輸出結果文件名為myf2.out。 2.數據文件的打開、使用、關閉均用C語言標準庫中緩沖文件系統的文件操作函數實現。 3.源程序文件和運行結果文件均需保存在T盤根目錄中供閱卷使用。 4.不要復制擴展名為obj和exe的文件到T盤中。 參考答案 一、改錯題 if(str[j]=='a' || str[k-1]=='e') 改為 && if((k-j)%2=0) 改為== for(m=k-1;m>j;m--) 改為m=j;m<k-1;m++ wordchange(string[80]); 改為string 二、編程題 #include<stdio.h> #define N 5 int isprime(int m) { int i; for(i=2;i<=m/2;i++) if(m%i==0)return 0; retum 1; } void cresort(int a[][3],int n) { int i,j,k,m,c,t; for(i=0;i<n;i++) {c=isprime(a[i][0])+isprime(a[i][1]); switch(c) {case 0:a[i][2]=1;break; case 2:a[i][2]=4;break; case 1:if(isprime(a[i][0]))a[i][2]=3; else a[i][2]=2;break; } } for(i=0;i<n-1;i++) {k=i; for(j=i+1;j<n;j++) |