2010春C上機真題第一套 |
二級 C語言上機試卷 (本試卷完成時間為70分鐘) 一、改錯題(16分) 【程序功能】 驗證3(n范圍內的任意兩個相鄰素數的平方之間至少存在4個素數。例如,5和7是兩個相鄰素數,5^2(25)與7^2(49)之間存在6個素數:29 31 37 41 43 47。 【測試數據與運行結果】 顯示:input n: 輸入:10 輸出: 3~5 k=5 11 13 17 19 23 5~7 k=6 29 31 37 41 43 47 【含有錯誤的源程序】 #include<stdio.h> 樣include<math.h> int prime(int n) {int i,flag=1; for(i=1;i<=sqrt(n);i++) if(n%i==0)flag=0; return flag; } int fun(int a[],int n) { int i,k=0; for(i=3;i<=n;i++) if(prime(i)) a[k++]=i; return k; ’ void fun1(int m,int n, int b[]) { int i,k=0; if(m>n) return 0; for(i=m*m;i<n*n;i++) if(prime(i)) b[k++]=i; return k; } void main() {int a[50]={0},b[100]={0},i,m,k,j,n; printf("input n:"); scanf("%d",&n); m=fun(a,n); for(i=O;i<m-1;i++) {k=fun1(a[i],a[i+1],b[O]); printf("%d~%d k=%d",a[i],a[i+1],k); if(k<4){printf("false");break;} for(j=0;j<k;j++) {if(j%10=O)prinff("\n"); printf("%5d",b[j]); } printf("\n"); } getch(); } 【要求】 1.將上述程序錄入到文件myf1.c中,根據題目要求及程序中語句之間的邏輯關系對程序中的錯誤進行修改。 2.改錯時,可以修改語句中的一部分內容,調整語句次序,增加少量的變量說明或編譯預處理命令,但不能增加其它語句,也不能刪去整條語句。 3.改正后的源程序(文件名myf1.c)保存在T:盤根目錄中供閱卷使用,否則不予評分。 二、編程題(24分) 【程序功能】 在給定范圍內查找k使得用公式k^2+k+17生成的整數滿足以下條件:該數的十進制表示中低3位數字相同,去掉低3位后的整數是回文數。例如,當k=461時用公式生成的整數 是212999,該數滿足所給條件。 【編程要求】 1.編寫函數int findnum(int n1,int n2,long a[][2])實現以下功能:k依次取n1~n2范圍 內的每個整數,分別用每個k及公式k2+k+17生成整數y,若y滿足給定條件,則將k值及y 值保存到a指向的數組中,函數返回a數組中k的個數。 2.編寫函數main實現以下功能:聲明二維數組a和變量n1、n2,輸入兩個整數并保存到 n1、n2中,用n1、n2及a數組作實參調用findnum函數,按所給格式輸出a數組中的數據到屏 幕及文件myf2.out中。最后將考生本人的準考證號輸出到文件myf2.out中。 【測試數據與運行結果】 輸入:n1=1,n2=10000 輸出:k number 461 212999 586 343999 3839 14741777 【要求】 1.源程序文件名為myf2.c,輸出結果文件名為myf2.out。 2.數據文件的打開、使用、關閉均用c語言標準庫中緩沖文件系統的文件操作函數實現。 3.源程序文件和運行結果文件均需保存在T:盤根目錄中供閱卷使用。 4.不要復制擴展名為obj和exe的文件到T:盤中。 參考答案 一、改錯題 for(i=1;i<=sqrt(n);i++) 改為i=2 void fun1(int m,int n,int b[]) 改為int {k=fun1(a[i],a[i+1],b[0]); 改為b {if(j%10=0)printf("\n"); 改為j%10==0 二、編程題 #include<stdio.h> int findnum(int n1,int n2,long a[][2]) { int i=0,j; long x1,x2,x3,y,k; for(k=n1;k<=n2;k++) {y=k*k+k+17; x1=x2=y/1000;x3=0; while(x1>0) {x3=x3*10+x1%10;x1=x1/10;} if(x2==x3&&y%10==y/10%10&&y%10==y/100%10) { a[i][0]=k;a[i++][1]=y; } } return i; } main() {int i,j;long a[10][2],n1,n2; FILE *fp; fp=fopen("Myf2.out","w"); scanf("%d%d",&n1,&n2); j=findnum(n1,n2,a); printf("\n k\t number"); for(i=0;i<j;i++)prinff("\n%ld\t%ld",a[i][0],a[i][1]); fprintf(fp,"\n k \t number"); for(i=0;i<j;i++) fprintf(fp,"\n%ld\t%ld",a[i][0],a[i][1]); fprintf(fp,"\n My exam number is :0112400123"); fclose(fp);getch(); } |