![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
C語言上機(jī)模擬二 |
一、改錯(cuò)題(18分) 函數(shù)void fun(char *P,char *b)的功能是:將P所指字符串中每三個(gè)字符之后插入一 個(gè)空格,所得新字符串存放于字符數(shù)組b中。 例如,原始字符串為ABCDEFGH,插入空格后為ABC DEF GH。 含有錯(cuò)誤的源程序如下: ’ 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中,根據(jù)題目要求及程序中語句之間的邏輯關(guān)系對(duì) 程序中的錯(cuò)誤進(jìn)行修改。 2•改錯(cuò)時(shí),可以修改語句中的一部分內(nèi)容,調(diào)整語句次序,增加少量的變量說明或編譯 預(yù)處理命令,但不能增加其他語句,也不能刪去整條語句。 3.改正后的源程序(文件名myfl.c)必須放在考試軟盤的根目錄下,供閱卷用,否則不 予評(píng)分。 二、編程題(22分) 1.編寫函數(shù)void fun(int n,int *t,int *r),其功能是計(jì)算1~n之間所有奇數(shù)之和,通 過指針t返回.,所有偶數(shù)之和通過指針r返回。。 2.編r寫main函數(shù),通過鍵盤輸入一個(gè)不大于100的整數(shù),調(diào)用fun函數(shù),將指針t和r 返回的值寫入文件myf2.out中。 【要求】 ‘ 1.將源文件取名為myf2.c,輸出結(jié)果文件取名為myf2.out。 ‘ 2.?dāng)?shù)據(jù)文件的打開、使用和關(guān)閉等操作均用C標(biāo)準(zhǔn)庫中緩沖文件系統(tǒng)的文件操作函數(shù) 實(shí)現(xiàn)。 3.源程序文件和運(yùn)行結(jié)果文件均須保存在考試軟盤的根目錄下,供閱卷用。 4.不要將myf2.obj、myf2.exe保存到考試軟盤中。 答案分析 一、改錯(cuò)題 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'; 分析:程序中,第一個(gè)循環(huán)用于遍歷原始字符串,第二個(gè)循環(huán)用于把連續(xù)三個(gè)字符寫入 數(shù)組b中,此循環(huán)結(jié)束后,先判斷是否已到字符串尾部,若不是,則在三個(gè)字符之后插入一個(gè) 空格;若是,則在新生成的字符串尾部加入結(jié)束符。 二、編程題 #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); } |