C語言上機模擬二 |
一、改錯題(18分) 函數void fun(char *P,char *b)的功能是:將P所指字符串中每三個字符之后插入一 個空格,所得新字符串存放于字符數組b中。 例如,原始字符串為ABCDEFGH,插入空格后為ABC DEF GH。 含有錯誤的源程序如下: ’ l #include<stdio.h> 2 void fun(char *p,char *b) 3 { 4 int i,k=0; 5 while(*p) 6 { 7 i=1: 8 while(i<3&&*p) 9 { 10 b[k++]=p; 11 P++;i++; 12 } 13 if(*p) 14 { 15 b[k++]=""; 16 } 17 } 18 b[k]="\0"; 19 } 20 main() 21 { 22 char a[80],b[80]; 23 printf("Enter a string:");gets(a); 24 fun(a,b); 25 printf("\nThe result is:"); 26 puts(b); 27 } 【要求】 1•將上述程序錄人到文件myfl.c中,根據題目要求及程序中語句之間的邏輯關系對 程序中的錯誤進行修改。 2•改錯時,可以修改語句中的一部分內容,調整語句次序,增加少量的變量說明或編譯 預處理命令,但不能增加其他語句,也不能刪去整條語句。 3.改正后的源程序(文件名myfl.c)必須放在考試軟盤的根目錄下,供閱卷用,否則不 予評分。 二、編程題(22分) 1.編寫函數void fun(int n,int *t,int *r),其功能是計算1~n之間所有奇數之和,通 過指針t返回.,所有偶數之和通過指針r返回。。 2.編r寫main函數,通過鍵盤輸入一個不大于100的整數,調用fun函數,將指針t和r 返回的值寫入文件myf2.out中。 【要求】 ‘ 1.將源文件取名為myf2.c,輸出結果文件取名為myf2.out。 ‘ 2.數據文件的打開、使用和關閉等操作均用C標準庫中緩沖文件系統的文件操作函數 實現。 3.源程序文件和運行結果文件均須保存在考試軟盤的根目錄下,供閱卷用。 4.不要將myf2.obj、myf2.exe保存到考試軟盤中。 答案分析 一、改錯題 1.第8行while(i<3&&*p) 改為 while(i<=3&&*p) 2.第10行b[k++]=p; 改為 b[k++]=*p; 3.第15行b[k++]=""; 改為 b[k++]=''; 4.第18行b[k]="\0"; 改為 b[k]='\0'; 分析:程序中,第一個循環用于遍歷原始字符串,第二個循環用于把連續三個字符寫入 數組b中,此循環結束后,先判斷是否已到字符串尾部,若不是,則在三個字符之后插入一個 空格;若是,則在新生成的字符串尾部加入結束符。 二、編程題 #include<stdio.h> void fun(int n,int *t,int *r) { int i; *t=0;*r=0; for(i=1:i<=n:i++) { if(i%2) *t+=i; else *r+=i; } main() { int x,t,r; FILE *out: if((out=fopen("myf2.out","w"))==NULL) { printf("open file myf2.out failed!\n"); exit(0); } printf("\nPlease enter a integer numbers"); scanf("%d",&x); fun(x,&t,&x); ’ fprintf(out,"x is:%d,t is:%d, r is %d",m,n); fclose(out); } |