![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
2010春C上機(jī)真題第一套 |
二級(jí) C語(yǔ)言上機(jī)試卷 (本試卷完成時(shí)間為70分鐘) 一、改錯(cuò)題(16分) 【程序功能】 驗(yàn)證3(n范圍內(nèi)的任意兩個(gè)相鄰素?cái)?shù)的平方之間至少存在4個(gè)素?cái)?shù)。例如,5和7是兩個(gè)相鄰素?cái)?shù),5^2(25)與7^2(49)之間存在6個(gè)素?cái)?shù):29 31 37 41 43 47。 【測(cè)試數(shù)據(jù)與運(yùn)行結(jié)果】 顯示:input n: 輸入:10 輸出: 3~5 k=5 11 13 17 19 23 5~7 k=6 29 31 37 41 43 47 【含有錯(cuò)誤的源程序】 #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中,根據(jù)題目要求及程序中語(yǔ)句之間的邏輯關(guān)系對(duì)程序中的錯(cuò)誤進(jìn)行修改。 2.改錯(cuò)時(shí),可以修改語(yǔ)句中的一部分內(nèi)容,調(diào)整語(yǔ)句次序,增加少量的變量說(shuō)明或編譯預(yù)處理命令,但不能增加其它語(yǔ)句,也不能刪去整條語(yǔ)句。 3.改正后的源程序(文件名myf1.c)保存在T:盤根目錄中供閱卷使用,否則不予評(píng)分。 二、編程題(24分) 【程序功能】 在給定范圍內(nèi)查找k使得用公式k^2+k+17生成的整數(shù)滿足以下條件:該數(shù)的十進(jìn)制表示中低3位數(shù)字相同,去掉低3位后的整數(shù)是回文數(shù)。例如,當(dāng)k=461時(shí)用公式生成的整數(shù) 是212999,該數(shù)滿足所給條件。 【編程要求】 1.編寫函數(shù)int findnum(int n1,int n2,long a[][2])實(shí)現(xiàn)以下功能:k依次取n1~n2范圍 內(nèi)的每個(gè)整數(shù),分別用每個(gè)k及公式k2+k+17生成整數(shù)y,若y滿足給定條件,則將k值及y 值保存到a指向的數(shù)組中,函數(shù)返回a數(shù)組中k的個(gè)數(shù)。 2.編寫函數(shù)main實(shí)現(xiàn)以下功能:聲明二維數(shù)組a和變量n1、n2,輸入兩個(gè)整數(shù)并保存到 n1、n2中,用n1、n2及a數(shù)組作實(shí)參調(diào)用findnum函數(shù),按所給格式輸出a數(shù)組中的數(shù)據(jù)到屏 幕及文件myf2.out中。最后將考生本人的準(zhǔn)考證號(hào)輸出到文件myf2.out中。 【測(cè)試數(shù)據(jù)與運(yùn)行結(jié)果】 輸入:n1=1,n2=10000 輸出:k number 461 212999 586 343999 3839 14741777 【要求】 1.源程序文件名為myf2.c,輸出結(jié)果文件名為myf2.out。 2.?dāng)?shù)據(jù)文件的打開、使用、關(guān)閉均用c語(yǔ)言標(biāo)準(zhǔn)庫(kù)中緩沖文件系統(tǒng)的文件操作函數(shù)實(shí)現(xiàn)。 3.源程序文件和運(yùn)行結(jié)果文件均需保存在T:盤根目錄中供閱卷使用。 4.不要復(fù)制擴(kuò)展名為obj和exe的文件到T:盤中。 參考答案 一、改錯(cuò)題 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(); } |