2019年春江蘇省計算機二級C語言真題 |
1(單選題): 若有聲明“int a=3,b=4,c=5;”,則執行語句“a>b?a--:(b>c?b++:(c/=2)); printf("%d\n",a+b+c);”時輸出_____9_____。 2 (填空題 <3空> ) : 以下程序運行時輸出結果中第一行是3 ,第二行是 5 ,第三行是4 。 #include typedef struct node { int value; struct node *next; } NODE; void Max(NODE *head) { NODE *p,*first,*second; first=second=NULL; p=head; while(p!=NULL) { if(first==NULL||p->value>=first->value) { second=first; first=p; } else if(second==NULL||p->value>=second->value) second=p; p=p->next; } printf("%d\n%d", first->value, second->value); } int main( ) { NODE a[]={{3,&a[1]},{1,&a[2]},{5,&a[3]},{4,NULL}},*head=&a[0]; printf("%d\n", head->value); Max(head); return 0; } 3(單選題): 若有聲明“char s1[80]="good ",s2[80]="luck ",s3[80]="to you";”,則執行語句 “strcpy(s1+5,strcat(s2,s3)); printf("%s",s1);”時輸出____ good luck to you ______。 4 (填空題 <2空> ) : 以下程序運行時輸出結果中第一行是22,第二行是11。 #include void series(int n) { while(n!=1) { if(n%2!=0) n=3*n+1; else while(n%2==0) n/=2; printf("%d\n",n); } } int main( ) { series(7); return 0; } 5 (填空題 <2空> ) : 以下程序運行時輸出結果中第一行是0,第二行是4。 # include int f(int x,int y) { int t,i,M=23; if(y==1) return 0; for(i=t=1;i { t=t*x%M; if(t==y) return i; } printf("沒有結果\n"); return 0; } int main( ) { printf("%d\n%d",f(3,1),f(4,3)); return 0; } 6(單選題): 以下聲明中正確的是__________。 8 (填空題 <3空> ) : 以下程序運行時輸出結果中第一行是1,第二行是1,第三行是3。 #include void Pascal(int a[],int n) { int i,j; for(a[0]=1,i=1;i<=n;i++) a[i]=0; for(i=1;i<=n;i++) for(j=i;j>0;j--) a[j]+=a[j-1]; } int main( ) { int b[20]; Pascal(b,1); printf("%d\n",b[1]); Pascal(b,3); printf("%d\n%d\n",b[0],b[2]); return 0; } 9(單選題): 若有聲明“int b=1,c[10]={2},*x=c; ”,則以下語句中正確的是__________ 。 &b=c; 1(完善程序): 完善程序(共12分,每空3分) 【要求】 1. 打開T盤中文件myf0.c,按以下程序功能完善文件中的程序。 2. 修改后的源程序仍保存在T盤myf0.c文件中,請勿改變myf0.c的文件名。 【程序功能】 假定Min函數形參a指向的結構數組前n個元素中存儲了n個二維點坐標值且互不相同。Min函數的功能是將這n個點坐標中排序最小的點坐標從數組中刪除,函數返回被刪除的點坐標值。 所謂排序最小的點坐標指的是在所有點坐標(x,y)中,x值最小且y值最小。 【測試數據與運行結果】 測試數據:{0.5,3.0},{-3.0,5.0},{-1.5,3.5},{-3.0,-2.5} 輸出: 排序最小的點坐標是:(-3.0,-2.5) 剩余的點坐標: (0.5,3.0) (-3.0,5.0) (-1.5,3.5) 【待完善的源程序】 #include #include struct Point { double x,y; }; struct Point Min(struct Point a[ ], int n) { int i,k; struct Point p; for(k=0,i=1;i { k=i; } p=a[k]; for(i=k;i a[i]=a[i+1]; return 【2】 p ; } int main() { struct Point 【3】 pt[200]={ {0.5,3.0},{-3.0,5.0},{-1.5,3.5},{-3.0,-2.5}},p; int i,n=4; p=Min(pt,n); printf("排序最小的點坐標是:(%.1f,%.1f)\n", 【4】 p.x,p.y ); printf("剩余的點坐標:\n"); for(i=0;i printf("(%.1f,%.1f)\t",pt[i].x,pt[i].y); printf("\n"); getch(); return 0; } 2(改錯題): 改錯(共16分,每個錯4分) 【要求】 1. 打開T盤中文件myf1.c,按以下程序功能改正文件中程序的錯誤。 2. 可以修改語句中的一部分內容,調整語句次序,增加變量聲明或預處理命令,但不能增加其他語句,也不能刪去整條語句。 3. 修改后的源程序仍保存在T盤myf1.c文件中,請勿改變myf1.c的文件名。 【程序功能】 函數find的功能是在a指向二維數組中存儲的一個5×5階矩陣內查找并輸出所有具有以下特性的數組元素a[i][j]:第i行上所有元素之和等于第j列上所有元素之和(0≤i<5,0≤j<5)。 【測試數據與運行結果】 測試數據: 2 8 1 9 4 5 7 1 3 0 7 1 7 5 2 3 2 2 1 5 0 2 1 6 8 輸出: a[0][3] a[4][0] 【含有錯誤的源程序】 #include #include void find(int a[5][]) 修改為 void find(int a[5][5]) { int i,j,row,col,sum1,sum2; for(i=0;i<5;i++) for(j=0;j<5;j++) { sum1=sum2=0; for(col=0;col<5;col++) sum1+=a[i][col]; for(row=0;row<5;row++) sum2+=a[j][row]; 修改為 sum2+=a[row][j]; if(sum1=sum2) 修改為 if(sum1==sum2) printf("a[%d][%d] ",i,j); } } int main() { int a[5][5]={{2,8,1,9,4},{5,7,1,3,0},{7,1,7,5,2},{3,2,2,1,5},{0,2,1,6,8}}; find(a[5][5]); //修改為 find(a) getch(); return 0; } 3(編程題): 編程(共22分) 【要求】 1. 打開T盤中文件myf2.c,在其中輸入所編寫的程序。 2. 數據文件的打開、使用、關閉均用C語言標準庫中緩沖文件系統的文件操作函數實現。 3. 請勿改變myf2.c的文件名。 【程序功能】 數組數據處理。 【編程要求】 1.編寫void process(int *a,int n,int m1,int m2)函數。函數功能:先將a指向數組前n個元素中存儲的數據按升序排列,再將a[m1]~a[m2]中的數據逆置。 2.編寫main函數。函數功能:聲明1個一維數組和變量m1、m2并用測試數據初始化,用數組及變量作實參調用process函數,將處理后的數組中數據輸出到顯示器屏幕及文件myf2.out中。最后將考生本人準考證號輸出到文件myf2.out中。 【測試數據與運行結果】 測試數據: 4 31 -23 49 87 65 0 -67 17 79,m1=2, m2=6 輸出: -67 –23 49 31 17 4 0 65 79 87 編寫時按步驟給分 |