國(guó)家二級(jí)C語(yǔ)言機(jī)試(程序修改題)模擬試卷2(共45題)_第1頁(yè)
國(guó)家二級(jí)C語(yǔ)言機(jī)試(程序修改題)模擬試卷2(共45題)_第2頁(yè)
國(guó)家二級(jí)C語(yǔ)言機(jī)試(程序修改題)模擬試卷2(共45題)_第3頁(yè)
國(guó)家二級(jí)C語(yǔ)言機(jī)試(程序修改題)模擬試卷2(共45題)_第4頁(yè)
國(guó)家二級(jí)C語(yǔ)言機(jī)試(程序修改題)模擬試卷2(共45題)_第5頁(yè)
已閱讀5頁(yè),還剩16頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

國(guó)家二級(jí)C語(yǔ)言機(jī)試(程序修改題)模擬試卷2(共9套)(共45題)國(guó)家二級(jí)C語(yǔ)言機(jī)試(程序修改題)模擬試卷第1套一、程序修改題(本題共5題,每題1.0分,共5分。)1、給定程序MODI1.C中函數(shù)fun的功能是:計(jì)算函數(shù)(x,y,z)=(x+y)/(x-y)+(z+y)/(z-y)的值。其中x和y的值不等,z和y的值不等。例如,當(dāng)x的值為9、y的值為11、z的值為15時(shí),函數(shù)值為-3.50。請(qǐng)改正程序中的錯(cuò)誤,使它能得出正確結(jié)果。注意:不要改動(dòng)main函數(shù),不得增行或刪行,也不得更改程序的結(jié)構(gòu)。#include#include#include/**********found**********/#defineFU(m,n)(m/n)floatfun(floata,floatb,floatC){floatvalue;value=FU(a+b,a-b)+FU(c+b,c-b);/**********found**********/Return(Value);}main(){floatx,y,z,sum;printf("Inputxyx:");scanf("%f%f%f",&x,&y,&z);printf("x=%f,y=%f,z=%f\n",x,y,z);if(x==y||y==z){printf("Dataerror!\n");exit(0);}sum=fun(x,y,z);printf("Theresultis:%5.2f\n",sum);}標(biāo)準(zhǔn)答案:(1)#defineFU(m,n)((m)/(n))(2)return(value);知識(shí)點(diǎn)解析:(1)函數(shù)fun兩次調(diào)用宏FU來(lái)計(jì)算“value=FU(a+b,a-b)+Fu(c+b,c-b);”。檢查宏的定義是否正確,可以用實(shí)參代入宏進(jìn)行展開(kāi):(a+b/a-b),由此看到,F(xiàn)U(a+b,a-b)進(jìn)行的計(jì)算不是(a+b)/(a-b),而是(a+b/a-b),因?yàn)椤埃钡膬?yōu)先級(jí)高于“+”或“-”,所以要使用括號(hào)限定計(jì)算優(yōu)先順序。所以將“#defineFU(m,n)(m/n)”改為“#defineFU(m,n)((m)/(n))”。(2)第二個(gè)標(biāo)識(shí)下返回語(yǔ)句的關(guān)鍵字有誤。所以,第二個(gè)標(biāo)識(shí)下“Return(value);”應(yīng)該改為“return(value);”,C語(yǔ)言中沒(méi)有“Return”這個(gè)關(guān)鍵字。2、給定程序MODI1.C中函數(shù)fun的功能是:將P所指字符串中的所有字符復(fù)制到b中,要求每復(fù)制三個(gè)字符之后插入一個(gè)空格。例如,在調(diào)用fun函數(shù)之前給a輸入字符串:ABCDEFGHUK,調(diào)用函數(shù)之后,字符數(shù)組b中的內(nèi)容則為:ABCDEFGHIJK。請(qǐng)改正程序中的錯(cuò)誤,使它能得出正確結(jié)果。注意:不要改動(dòng)main函數(shù),不得增行或刪行,也不得更改程序的結(jié)構(gòu)。#includevoidfun(char*P,char*b){inti,k=0;while(*P){i=1;while(i<=3&&*P){/**********found**********/b[k]=P;k++;p++;i++;}if(*P)}/**********found**********/b[k++]="";}}b[k]=’\0’;}main(){chara[80],b[80];printf("Enterastring:";gets(a);printf("Theoriginalstring:");puts(a);fun(a,b);printf("\nThestringafterinsertspace:");puts(b);printf("\n\n");}標(biāo)準(zhǔn)答案:(1)b[k]=*p;(2)b[k++]=’’;知識(shí)點(diǎn)解析:函數(shù)的功能是將字符串p中的所有字符復(fù)制到字符串b中。(1)p是指針,p存放的內(nèi)容是地址值,第一標(biāo)識(shí)下“b[k]=p;”含義是將p存放的地址內(nèi)容賦給b[k],而不是把p指向的地址拷貝到b[k],顯然不符合題意,應(yīng)改成“b[k]=*p;”,*p是取p指向的地址的內(nèi)容。(2)第二個(gè)標(biāo)識(shí)符下是復(fù)制三個(gè)字符后在b中插入空格,原題中給出的“b[k++]=””;”,在C語(yǔ)言中字符常量是由單引號(hào)括起的單個(gè)字符,即空格字符應(yīng)為“’’”,而“""”是表示字符串常量且該字符串中只有一個(gè)空格字符。第二標(biāo)識(shí)下是將空格字符復(fù)制給b[k++],因此第二標(biāo)識(shí)下應(yīng)改為“b[k++]=’’;”。3、使用VC++2010打開(kāi)考生文件夾下modi1中的解決方案。此解決方案的項(xiàng)目中包含一個(gè)源程序文件modi1.c。在此程序中,函數(shù)fun的功能是:在字符串的最前端加入n個(gè)*號(hào),形成新串,并且覆蓋原串。字符串的長(zhǎng)度最長(zhǎng)允許為79。請(qǐng)改正程序中的錯(cuò)誤,使它能得出正確的結(jié)果。注意:部分源程序在文件MODI1.C中,不要改動(dòng)main函數(shù),不得增行或刪行,也不得更改程序的結(jié)構(gòu)!試題程序:#include<stdio.h>#include<string.h>voidfun(chars[],intn){chara[80],*p;inti;/*********found*********/s=p;for(i=0,i<n,i++)a[i]=’*’,do{a[i]=*p;i++;}/*********found*********/while(*p++)a[i]=0;strcpy(s,a);}main(){intn;chars[80];printf("\nEnterastring:");gets(s);printf("\nThestring\"%s\"\n",s);printf("\nEntern(numberof*):");scanf("%d",&n);fun(s,n);printf("\nThestringafterinsert:\"%s\"\n",s);}標(biāo)準(zhǔn)答案:(1)p=s;(2)while(*p++);知識(shí)點(diǎn)解析:(1)指針p應(yīng)指向s,所以應(yīng)改為p=s;。(2)循環(huán)等待,當(dāng)while循環(huán)執(zhí)行一次,臨時(shí)變量p應(yīng)該指向字符串的下一位置,所以應(yīng)改為while(*p++);。4、給定程序MODI1.C中函數(shù)fun的功能是:將字符串中的字符按逆序輸出,但不改變字符串中的內(nèi)容。例如,若字符串為abcd,則應(yīng)輸出:dcba。請(qǐng)改正程序中的錯(cuò)誤,使它能計(jì)算出正確的結(jié)果。注意:不要改動(dòng)main函數(shù),不得增行或刪行,也不得更改程序的結(jié)構(gòu)!#include/***********found************/fun(chara){if(*a){fun(a+1);/***********found************/printf("%c"*a);}}main(){chars[10]="abcd";printf("處理前字符串=%s\n處理后字符串=",s);fun(s);printf("\n");}標(biāo)準(zhǔn)答案:(1)voidfun(char*a)(2)printf("%c",*a);知識(shí)點(diǎn)解析:(1)主函數(shù)中“fun(s);”語(yǔ)句中的s是數(shù)組名,所以在fun函數(shù)中參數(shù)的定義應(yīng)該是指針型,“fun(chata)”改為“voidfun(char*a)”。(2)printf函數(shù)的調(diào)用形式是:printf(格式字符串,輸出項(xiàng)表),在格式字符串和輸出項(xiàng)表之間有“,”,因此,第二個(gè)標(biāo)識(shí)處應(yīng)該是“printf("%c",*a);”。5、給定程序MODI1.C中函數(shù)fun的功能是:應(yīng)用遞歸算法求形參a的平方根。求平方根的迭代公式如下:例如,a為2時(shí),平方根值為:1.414214。請(qǐng)改正程序中的錯(cuò)誤,使它能得出正確結(jié)果。注意:不要改動(dòng)main函數(shù),不得增行或刪行,也不得更改程序的結(jié)構(gòu)。#include#include/**********found**********/doublefun(doublea,dounlex0){doublex1,y;xl=(x0+a/x0)/2.0;/**********found**********/if(fabs(xl-xo)>0.00001)y=fun(a,xl);elsey=xl;returny;}main(){doublex;printf("Enterx:");scanf("%lf",&x);printf("Thesquarerootof%lfis%lf\n",x,fun(x,1.0));}標(biāo)準(zhǔn)答案:(1)doublefun(doublea,doublex0)(2)if(fabs(x1—x0)>0.00001)知識(shí)點(diǎn)解析:函數(shù)的功能是應(yīng)用遞歸算法求某數(shù)a的平方根。(1)主函數(shù)中“fun(x,1.0)”,x是double型變量,1.0是浮點(diǎn)數(shù),可知fun有兩個(gè)double型參數(shù),而第一標(biāo)識(shí)下“dounle”不是C語(yǔ)言關(guān)鍵字,所以應(yīng)將“doublefun(doublea,dounlex0)"改為“doubletim(doublea,doublex0)”。(2)第二個(gè)標(biāo)識(shí)下的if語(yǔ)句是判斷進(jìn)行遞歸運(yùn)算的條件,第二標(biāo)識(shí)下變量xo沒(méi)有定義,根據(jù)題意,這里是判斷x1和x0的差值的絕對(duì)值是否比0.00001大,所以第二個(gè)標(biāo)識(shí)下“if(fabs(x1-xo)>0.00001)”改為“if(fabs(x1-x0)>0.00001)”。國(guó)家二級(jí)C語(yǔ)言機(jī)試(程序修改題)模擬試卷第2套一、程序修改題(本題共5題,每題1.0分,共5分。)1、下列給定程序中,函數(shù)fun的功能是:根據(jù)整型形參n,計(jì)算如下公式的值。例如,若n=10,則應(yīng)輸出0.617977。請(qǐng)改正程序中的錯(cuò)誤,使它能得出正確的結(jié)果。注意:部分源程序在文件MODI1.C中,不要改動(dòng)maln函數(shù),不得增行或刪行,也不得更改程序的結(jié)構(gòu)!試題程序:#include<stdlib.h>#include<conio.h>#include<stdio.h>/*********found*********/intfun(intn){floatA=1;inti;/*********found*********/for(i=2;i<n;i++)A=1.0/(1+A);returnA;}voidmain(){intn;system("CLS");printf("\nPleaseentern:");printf("A%d=%lf\n",n,fun(n));}標(biāo)準(zhǔn)答案:(1)floatfun(intn)(2)for(i=2;i<=n;i++)知識(shí)點(diǎn)解析:(1)根據(jù)函數(shù)的返回值可知,函數(shù)應(yīng)定義為float型。(2)該題中函數(shù)fun的作用是計(jì)算數(shù)列前n項(xiàng)的和,而數(shù)列的組成方式是:第n項(xiàng)的分母是1加第n一1項(xiàng)的值,分子為1,如果循環(huán)累加按for(i=2;i<n;i++)執(zhí)行,當(dāng)輸入n=2時(shí)循環(huán)不會(huì)執(zhí)行,程序?qū)⒌貌坏较胍慕Y(jié)果,因此循環(huán)變量的取值范圍應(yīng)包括2,循環(huán)的條件為i<=n。2、使用VC++2010打開(kāi)考生文件夾下modi1中的解決方案。此解決方案的項(xiàng)目中包含一個(gè)源程序文件modi1.c。在此程序中,函數(shù)fun的功能是:通過(guò)某種方式實(shí)現(xiàn)兩個(gè)變量值的交換,規(guī)定不允許增加語(yǔ)句和表達(dá)式。例如,變量a中的值原為8,b中的值原為3,程序運(yùn)行后a中的值為3,b中的值為8。請(qǐng)改正程序中的錯(cuò)誤,使它得出正確的結(jié)果。注意:不要改動(dòng)main函數(shù),不得增行或刪行,也不得更改程序的結(jié)構(gòu)!試題程序:#include<stdlib.h>#include<conio.h>#include<stdio.h>intfun(int*xinty){intt;/*********found*********/t=x;x=y;/*********found*********/return(y);}voidmain(){inta=3,b=8;system("CLS");printf("%d%d\n",a,b);b=fun(&a,b);printf("%d%d\n",a,b);}標(biāo)準(zhǔn)答案:(1)t=*x;*x=y;(2)return(t);或returnt;知識(shí)點(diǎn)解析:首先,定義變量t作為中間變量,然后進(jìn)行數(shù)據(jù)交換,注意參數(shù)x是指針變量,交換時(shí)應(yīng)使用*x,最后確定返回值;根據(jù)代碼b=fun(8a,b),可以知道返回值將賦給變量b,而b中應(yīng)存放交換前*x中的值,所以函數(shù)應(yīng)返回變量t。3、給定程序MODI1.C中函數(shù)fun的功能是:將tt所指字符串中的小寫字母都改為對(duì)應(yīng)的大寫字母,其他字符不變。例如,若輸入”Ab,cD”,則輸出”AB,CD”。請(qǐng)改正程序中的錯(cuò)誤,使它能得出正確的結(jié)果。注意:不要改動(dòng)main函數(shù),不得增行或刪行,也不得更改程序的結(jié)構(gòu)!#include#includechar*fun(chartt[]){inti;for(i=0;tt[i];i++)tt[i]+=32;return(tt);}main(){chartt[81];printf("\nPleaseenterastring:");gets(tt);printf("\nTheresultstringis:\n%srtfun(tt));}標(biāo)準(zhǔn)答案:(1)if((’a’<=tt[i])&&(tt[i]<=’z’))(2)tt[i]—=32;知識(shí)點(diǎn)解析:本題中函數(shù)的功能是將字符串中的小寫字母改為對(duì)應(yīng)的大寫字母。首先判斷字母是否為小寫字母,如果是小寫字母則進(jìn)行轉(zhuǎn)換。(1)第一個(gè)錯(cuò)誤標(biāo)識(shí)下的if判斷語(yǔ)句中的邏輯有誤,應(yīng)該是與(&&)的關(guān)系.不是或(II)的關(guān)系,所以if判斷語(yǔ)句改為“if((’a’<=tt[i])&&(tt[i]<=’z’))”。(2)第二個(gè)標(biāo)識(shí)下小寫字母轉(zhuǎn)換為大寫字母的轉(zhuǎn)換算法有誤,小寫轉(zhuǎn)換為大寫應(yīng)該是減去32,而不是加上32,所以“tt[i]+=32;”改為“tt[i]—=32;”。指向一維數(shù)組的指針以及指針數(shù)組、if語(yǔ)句及其構(gòu)成的選擇。4、給定程序MODI1.C中fun函數(shù)的功能是:將p所指字符串中每個(gè)單詞的最后一個(gè)字母改成大寫。(這里的“單詞”是指由空格隔開(kāi)的字符串)。例如,若輸入“Iamastudenttotaketheexamination.”,則應(yīng)輸出“IaMAstudenTtOtakethEexamination.”。請(qǐng)修改程序中的錯(cuò)誤之處,使它能得出正確的結(jié)果。注意:不要改動(dòng)main函數(shù),不得刪行,也不得更改程序的結(jié)構(gòu)!#include#include#includevoidfun(char*p){intk=0;for(;*p;p++)if(k){/**********found***********/if(p==’’){k=0;/**********found***********/*(p)=toupper(*(p-1))}}elsek=1;}main(){charchrstr[64];intd;printf("\nPleaseenteranEnglishsentencewithin63letters:");gets(chrstr);d=strlen(chrstr);chrstr[d]=’’;chrstr[d+1]=0;printf("\n\nBeforechanging:\n%s",chrstr);fun(chrstr);printf("\nAfterchanging:\n%s",chrstr);}標(biāo)準(zhǔn)答案:(1)if(*p==’’)(2)*(p一1)=toupper(*(p一1));知識(shí)點(diǎn)解析:函數(shù)的功能是將每個(gè)單詞的最后一個(gè)字母改成大寫。(1)第一個(gè)錯(cuò)誤標(biāo)識(shí)下的if語(yǔ)句應(yīng)該是判斷字符串中的字符是否是空格,根據(jù)“for(;*p;p++)”語(yǔ)句中for循環(huán)條件中p的定義應(yīng)該為字符型指針變量,*p是取p所指存取單元的值,所以“if(p==’’)”應(yīng)該改為“if(*p==’’)”。(2)題干中要求是將每個(gè)單詞的最后一個(gè)字母改成大寫,所以它的位置應(yīng)該是挨著空格的前一個(gè)字符,應(yīng)該是指針p指向字符的前一個(gè)位置,“*p=toupper(*(p一1))”是將改動(dòng)的值賦給了p所指的空格,所以應(yīng)該改為“*(p-1)=toupper(*(p-1));”且語(yǔ)句未尾應(yīng)有分號(hào)。5、給定程序MODI1.C中函數(shù)fun的功能是:將m(1≤m≤10)個(gè)字符串連接起來(lái),組成一個(gè)新串,放入pt所指存儲(chǔ)區(qū)中。例如:把3個(gè)串:"abc","CD","EF"連接起來(lái),結(jié)果是"abcCDEF"。請(qǐng)改正程序中的錯(cuò)誤,使它能得出正確的結(jié)果。注意:不要改動(dòng)main函數(shù),不得增行或刪行,也不得更改程序的結(jié)構(gòu)!#include#includevoidfun(charstr[][10],intm,char*pt){/************found************/Intk,q,i;for(k=0;k標(biāo)準(zhǔn)答案:(1)intk,q,i;(2)pt[i]=str[k][i];知識(shí)點(diǎn)解析:函數(shù)的功能是將m(1≤m≤10)個(gè)字符串連接起來(lái)。(1)第一標(biāo)識(shí)下是整型變量k、q和i的定義,根據(jù)C語(yǔ)言中整型變量的定義方式,第一標(biāo)識(shí)下應(yīng)為“intk,q,i;”。(2)第二個(gè)標(biāo)識(shí)下的“pt[i]=str[k,i];”語(yǔ)句應(yīng)該將s仃中的字符依次拷貝到pt中,根據(jù)C語(yǔ)言中對(duì)二維數(shù)組每一位的取值,應(yīng)該是s仃[k][i],所以“pt[i]=str[k,i];”改為“pt[i]=str[k][i];”。國(guó)家二級(jí)C語(yǔ)言機(jī)試(程序修改題)模擬試卷第3套一、程序修改題(本題共5題,每題1.0分,共5分。)1、給定程序MODI1.C中函數(shù)fun的功能是:按以下遞歸公式求函數(shù)值。例如,當(dāng)給n輸入5時(shí),函數(shù)值為18;當(dāng)給n輸入3時(shí),函數(shù)值為14。請(qǐng)改正程序中的錯(cuò)誤,使它能得出正確結(jié)果。注意:不要改動(dòng)main函數(shù),不得增行或刪行,也不得更改程序的結(jié)構(gòu)。#include/**********found**********/intfun(n){intc,/**********found**********/if(n=1)c=10;elsec=fun(n-1)+2;return(c);}main(){intn;printf("Igntern:");scanf("%d",&n);printf("Theresult:%d\n\n”,fun(n));}標(biāo)準(zhǔn)答案:(1)intfun(intn)(2)if(n==1)知識(shí)點(diǎn)解析:函數(shù)功能是按題目中給出的遞歸公式求函數(shù)值。(1)定義函數(shù)fun時(shí),形參n并沒(méi)有指定參數(shù)類型,因此,“intfun(n)”改為“intfun(intn)”。(2)根據(jù)題目要求,原題中的“if(n=1)”應(yīng)該是用于判斷n是否等于1,但是被錯(cuò)誤表示成賦值表達(dá)式。因此,“if(n=1)”應(yīng)該改為“if(n==1)”。2、使用VC++2010打開(kāi)考生文件夾下modi1中的解決方案。此解決方案的項(xiàng)目中包含一個(gè)源程序文件modi1.c。在此程序中,函數(shù)fun的功能是:先將s所指字符串中的字符按逆序存放到t所指字符串中,然后把s所指串中的字符按正序連接到t所指串之后。例如,當(dāng)s所指的字符串為“ABCDE”時(shí),t所指的字符串應(yīng)為“EDCBAABCDE”。請(qǐng)改正程序中的錯(cuò)誤,使它能得出正確的結(jié)果。注意:不要改動(dòng)main函數(shù),不得增行或刪行,也不得更改程序的結(jié)構(gòu)!試題程序:#include<stdlib.h>#include<conio.h>#include<stdio.h>#include<string.h>voidfun(char*s,char*t){/*********found*********/inti;s1=strlen(s);for(i=0;i<s1;i++)/*********found*********/t[i]=s[s1﹣i];for(i=0;i<=s1;i++)t[s1+i]=s[i];t[2*s1]=’\0’;}voidmain(){chars[100],t[100];systern("CLS");printf("\nPleaseenterstrings:");scanf("%s",s);fun(s,t);printf("Theresultis:%s\n",t);}標(biāo)準(zhǔn)答案:(1)inti,s1;(2)t[i]=s[s1﹣i﹣1];知識(shí)點(diǎn)解析:(1)變量s1沒(méi)有定義。(2)該循環(huán)實(shí)現(xiàn)將s串中的字符逆序存入t串中,t[i]對(duì)應(yīng)s串中的s[s1﹣i﹣1]。3、給定程序MODI1.C中函數(shù)fun的功能是:計(jì)算s所指字符串中含有t所指字符串的數(shù)日,并作為函數(shù)值返回。請(qǐng)改正函數(shù)fun中指定部位的錯(cuò)誤,使它能得出正確的結(jié)果。注意:不要改動(dòng)main函數(shù),不得增行或刪行,也不得更改程序的結(jié)構(gòu)!#include#include#defineN80intfun(char*sfchar*t){intn;char*p,*r;n=0;while(*s){p=s;/*********found**********/r=p;while(*r)elsebreak;/*********found**********/if(*r=0)n++;s++;}returnn;}main(){chara[N],b[NJ;intm;printf("\nPleaseenterstringprintf("\nPleaseentersubstringm=fun(a,b);printf("\nTheresultis:m=%d\n",m);}標(biāo)準(zhǔn)答案:(1)r=t;(2)if(*r==0)知識(shí)點(diǎn)解析:函數(shù)的功能是計(jì)算字符串中含有某子串的數(shù)目。(1)根據(jù)“while(*r)if(*r==*p){r++;p++;}”可知該循環(huán)是比較r和p指向的字符串是否相等,本題的要求是計(jì)算字符串中含有某子串的數(shù)目,p指向的源字符串s,所以r應(yīng)指向的是字符串t,故第一標(biāo)識(shí)下應(yīng)改成“r=t;”。(2)根據(jù)題意第二標(biāo)識(shí)下“if(*r=0)”應(yīng)該是判斷r是否指向字符串尾,在C語(yǔ)言中,等于是用“==”標(biāo)識(shí),因此第二標(biāo)識(shí)下應(yīng)改成“if(*r==0)”。4、給定程序MODI1.C中函數(shù)fun的功能是:將s所指字符串中的字母轉(zhuǎn)換為按字母序列的后續(xù)字母(但Z轉(zhuǎn)換為A,Z轉(zhuǎn)換為a),其他字符不變。請(qǐng)改正函數(shù)fun中指定部位的錯(cuò)誤,使它能得出正確的結(jié)果。注意:不要改動(dòng)main函數(shù),不得增行或刪行,也不得更改程序的結(jié)構(gòu)!#include#includevoidfun(char*s){/**********found***********/whiie(*s!=’@’){if(*s>=’A’&&*s<=’z’||*s>=’a’&&*s<=’z’){if(*s==’z’)*s=’A’;elseif(*s==’z’)*s=’a’;else*s+=1;}/************found************/(*s)++;}}main(){chars[80];printf("\nEnterastringwithlength<80.:\n\n");getS(s);printf("\nThestring:\n\n");putS(s);fun(s);printf("\n\nTheCords:\n\n");puts(s);}標(biāo)準(zhǔn)答案:(1)while(*s)或while(*s!=’\0’)或while(*s!=0)(2)s++;知識(shí)點(diǎn)解析:函數(shù)的功能是將字符串中的字母改為該字母序列的后續(xù)字母。(1)第一個(gè)錯(cuò)誤標(biāo)識(shí)下的“while(*s!=’@’)”語(yǔ)句原意是s不指向字符串尾就進(jìn)入下面的循環(huán),所以對(duì)于指針判斷不為尾符的語(yǔ)句應(yīng)該是“while(*s)”或者“while(*s!=’\0’)”或者“while(*s!=0)”。(2)第二個(gè)標(biāo)識(shí)下“(*s)++;”是對(duì)字符內(nèi)容加1,而原題是對(duì)字符位置加1,所以將其改為“s++;”。5、給定程序MODI1.C中函數(shù)fun的功能是:用冒泡法對(duì)6個(gè)字符串按由小到大的順序進(jìn)行排序。請(qǐng)改正程序中的錯(cuò)誤,使它能得出正確的結(jié)果。注意:不要改動(dòng)main函數(shù),不得增行或刪行,也不得更改程序的結(jié)構(gòu)!#include#include#defineMAXLINE20fun(char*pstrl61){inti,j;char*p;for(i=0;i<5;i++){/*************found*************/for(j=i+1,j<6.j++){if(strcmp(*(pstr+i),*(pstr{p=*(pstr+i);/*************found*************/*(pstr+i)=pstr+j;}}}}main(){inti;char*pstr[61,strl6][MAXLINE];for(i=0;i<6;i++)pstr[i]=str[i];printf("\nEnter6string(1stringateachline):\n");for(i=0;i<6;i++)scanf("%s",pstr[i]);fun(pstr);printf("Thestringsaftersorting:\n");for(i=0;i<6;i++)printf("%s\n",pstr[i])}標(biāo)準(zhǔn)答案:(1)for(j=i+l;j<6;j++)(2)*(pstr+i)=*(pstr+j);知識(shí)點(diǎn)解析:函數(shù)的功能是用冒泡法對(duì)6個(gè)字符串按由小到大的順序進(jìn)行排序。(1)C語(yǔ)言中,for語(yǔ)句形式是:for(表達(dá)式1;表達(dá)式2;表達(dá)式3)循環(huán)體語(yǔ)句。因此第一個(gè)標(biāo)識(shí)下,for使用錯(cuò)誤,應(yīng)該為“for(j=i+1;j<6;j++)”。(2)if語(yǔ)句后的復(fù)合語(yǔ)句的功能是把“*(pstr+i)”中和“*(pstr+j)”中的內(nèi)容進(jìn)行交換,而“*(pstr+i)=pstr+j;”中“pstr+j;”是字符串地址,并不是字符串的元素內(nèi)容,所以第二個(gè)標(biāo)識(shí)下“*(pstr+i)=pstr+j;”改為“*(pst什i)=*(pstrq)”。國(guó)家二級(jí)C語(yǔ)言機(jī)試(程序修改題)模擬試卷第4套一、程序修改題(本題共5題,每題1.0分,共5分。)1、使用VC++2010打開(kāi)考生文件夾下modi1中的解決方案。此解決方案的項(xiàng)目中包含一個(gè)源程序文件modi1.c。在此程序中,函數(shù)fun的功能是:將主函數(shù)中兩個(gè)變量的值進(jìn)行交換。例如,若變量a中的值為8,b中的值為3,則程序運(yùn)行后,a中的值為3,b中的值為8。請(qǐng)改正程序中的錯(cuò)誤,使它能得出正確的結(jié)果。注意:部分源程序在文件MODI1.C中,不要改動(dòng)main函數(shù),不得增行或刪行,也不得更改程序的結(jié)構(gòu)!試題程序:#include<stdio.h>/*********found*********/voidfun(intx,inty){intt;/*********found*********/t=x;x=y;y=t;}voidmain(){inta,b;a=8;b=3;fun(&a,&b);printf("%d%d\n",a,b);}標(biāo)準(zhǔn)答案:(1)voidfun(int*x,int*y)(2)t=*x;*x=*y;*y=t;知識(shí)點(diǎn)解析:(1)本題考查指針變量作函數(shù)參數(shù)。一般變量作參數(shù)時(shí),不能改變實(shí)參的值,采用指針變量作為參數(shù)則能夠改變實(shí)參的值。主函數(shù)中fun函數(shù)的調(diào)用方式表明fun函數(shù)的參數(shù)應(yīng)當(dāng)為指針類型。(2)此處是一個(gè)變量交換操作錯(cuò)誤,可知x、y是指針類型,變量類型不同,因而x、y不能與t進(jìn)行值的交換。2、下列給定程序中,函數(shù)fun的功能是:求S的值。例如,當(dāng)k為10時(shí),函數(shù)的值應(yīng)為1.533852。請(qǐng)改正程序中的錯(cuò)誤,使它能得出正確的結(jié)果。注意:部分源程序在文件MODIl,C中,不要改動(dòng)main函數(shù),不得增行或刪行,也不得更改程序的結(jié)構(gòu)!試題程序:#include<stdlib.h>#include<conio.h>#include<stdio.h>#include<math.h>/*********found*********/fun(intk){intn;floats,w,p,q;n=1;s=1.0;while(n<=k){w=2.0,lcn;p=w一1.0;q=w+1.0;s=s*w*w/p/q;n++;}/*********found*********/returns}voidmain(){system("CLS");printf("%f\n",fun(10));}標(biāo)準(zhǔn)答案:(1)floatfun(intk)(2)returns;知識(shí)點(diǎn)解析:(1)此處為函數(shù)定義錯(cuò)誤,根據(jù)返回值的類型可知函數(shù)類型標(biāo)識(shí)符應(yīng)為float。(2)語(yǔ)法錯(cuò)誤。3、給定程序MODI1.C中,函數(shù)fun的功能是:在有n名學(xué)生,2門課成績(jī)的結(jié)構(gòu)體數(shù)組std中,計(jì)算出第1門課程的平均分,作為函數(shù)值返回。例如,主函數(shù)中給出了4名學(xué)生的數(shù)據(jù),則程序運(yùn)行的結(jié)果為:第1門課程的平均分是:76.125000請(qǐng)改正函數(shù)fun中指定部位的錯(cuò)誤,使它能得出正確的結(jié)果。注意:不要改動(dòng)main函數(shù),不得增行或刪行,也不得更改程序的結(jié)構(gòu)。1#include<stdio.h>2typedefstruct3{charnum[8];4doublescore[2];5}STU;6doublefun(STUstd[],intn)7{inti;8/**********found**********/9doublesLlm;10/**********found**********/11for(i=0;i<2;i++)12/**********found**********/13sum+=std[i].score[1];14retuEnsum/n;}15main()16{STUstd[]={’’N1001’’,76.5,82.0,’’N1002’’,66.5,73.0,’’N1005’’,80.5,66.0,17’’N1006’’,81.0,56.0};18printf(’’第1門課程的平均分是:%1f\n’’,fun(std,4));19}標(biāo)準(zhǔn)答案:(1)doublesum改為doublesum=0(2)for(i=0;i<2;i++)改為for(i=0;i<n;i++)(3)sum+=std[i].score[1]改為sum+=std[i].score[0]知識(shí)點(diǎn)解析:本題fun函數(shù)的主要功能是:在有n名學(xué)生,2門課成績(jī)的結(jié)構(gòu)體數(shù)組std中,計(jì)算出第1門課程的平均分,作為函數(shù)值返回。這里就是很基本的求平均數(shù),只不過(guò)這里涉及到結(jié)構(gòu)體,稍微要比普通的求平均數(shù)復(fù)雜一點(diǎn)。fun()函數(shù)就是相加求和,注意結(jié)構(gòu)體涉及的細(xì)節(jié)問(wèn)題即可。(1)第一個(gè)錯(cuò)誤在定義單門課程所有人總分sum時(shí),因?yàn)閟um是總分,而后面的計(jì)算式也確定為“sum+=std[i].score[1]”。很明顯地,這里的sum需要定義一個(gè)初始值才能正確計(jì)算,而初始值只能是為0計(jì)算才是正確的,所以這里應(yīng)該是“doublesum”改為“doublesum=0;”。第二個(gè)錯(cuò)誤在fun函數(shù)的for循環(huán)條件中。這里的for循環(huán)是為了求各科的分?jǐn)?shù)和然后計(jì)算平均分,因此,for循環(huán)的次數(shù)和計(jì)算平均分的個(gè)數(shù)是一樣的,fun函數(shù)是計(jì)算n個(gè)學(xué)生第一門課的平均分,所以這里的sum的循環(huán)肯定也是要進(jìn)行n次,而原程序卻是“i<2”,這樣明顯只會(huì)進(jìn)行2次循環(huán),顯然是不對(duì)的,所以為了進(jìn)行必要的分?jǐn)?shù)相加,這里的“i<2”應(yīng)該改成“i<n”。第三個(gè)錯(cuò)誤在for循環(huán)的求和算式中,這里是結(jié)構(gòu)體變量的求和,語(yǔ)法上本來(lái)是沒(méi)有任何錯(cuò)誤的,但是要看清題目要求的計(jì)算學(xué)生第1門課程的平均分,然后再作為函數(shù)值返回。這里“sum+=std[i]score[1]”變量看起來(lái)是第一門,但根據(jù)數(shù)組從0位開(kāi)始我們就能發(fā)現(xiàn)這里其實(shí)求的是學(xué)生第2門課程的總分,然后求出來(lái)的平均分也是第二門學(xué)科的,這完全不是題目的要求,所以這里的“sum+=std[i].score[1]”應(yīng)該要改為“sum+=std[i].score[0]”。4、給定程序MODI1.C中函數(shù)fun的功能是:應(yīng)用遞歸算法求形參a的平方根。求平方根的迭代公式如下:例如,a為2時(shí),平方根值為:1.414214。請(qǐng)改正程序中的錯(cuò)誤,使它能得出正確結(jié)果。注意:不要改動(dòng)main函數(shù),不得增行或刪行,也不得更改程序的結(jié)構(gòu)。1#include<stdio.h>2#include<math.h>3/**********found**********/4doublefun(doublea,dounlex0)5{doublex1,y;6x1=(x0+a/x0)/2.0;7/**********found**********/8if(fabs(x1-x0)>0.00001)9y=fun(a,x1);10elsey=xl;11returny;12}13main()14{doublex;15printf(’’Enterx:’’);scanf(’’%1f’’,&x);16printf(’’Thesquarerootof%1fis%1f\n’’,x,fun(x,1.0));17}標(biāo)準(zhǔn)答案:(1)doublefun(doublea,doublex0)(2)if(fabs(x1-x0)>0.00001)知識(shí)點(diǎn)解析:函數(shù)的功能是應(yīng)用遞歸算法求某數(shù)a的平方根。(1)主函數(shù)中“fun(x,1.0)”,x是double型變量,1.0是浮點(diǎn)數(shù),可知fun有兩個(gè)double型參數(shù),而第一標(biāo)識(shí)下“dounle”不是C語(yǔ)言關(guān)鍵字,所以應(yīng)將“doublefun(doublea,dounlex0)”改為“doublefun(doublea,doublex0)”。(2)第二個(gè)標(biāo)識(shí)下的if語(yǔ)句是判斷進(jìn)行遞歸運(yùn)算的條件,第二標(biāo)識(shí)下變量x0沒(méi)有定義,根據(jù)題意,這里是判斷x1和x0的差值的絕對(duì)值是否比O.00001大,所以第二個(gè)標(biāo)識(shí)下“if(fabs(x1-x0)>0.00001)”改為“if(fabs(x1-x0)>0.00001)”。5、給定程序NODI1.C中,函數(shù)fun的功能是:判斷輸入的任何一個(gè)正整數(shù)n,是否等于某個(gè)連續(xù)正整數(shù)序列之和。若是,則輸出所有可能的序列,否則輸出“不能分解”。例如:當(dāng)輸入100時(shí),輸出:100=9+10+11+12+13+14+15+16100=18+19+20+21+22請(qǐng)改正函數(shù)fun中指定部位的錯(cuò)誤,使它能得出正確的結(jié)果。注意:不要改動(dòng)main函數(shù),不得增行或刪行,也不得更改程序的結(jié)構(gòu)。試題程序:#include<stdio.h>voidfun(intn){intj,b,c,m,flag=0;for(b=1;b<=n/2;b++){/*********found*********/n=m;c=b;while(m!=0&&m>=c){/*********found*********/m=m—c;c++}/*********found*********/if(m!=0){printf("%d=",n);for(j=b;j<c一1;j++)printf("%d+",j);printf("%d\n",j);flag=1;}}if(flag==0)printf("不能分解\n");}main(){intn;printf("請(qǐng)輸入一個(gè)整數(shù):");scanf("%d",&n);fun(n);}標(biāo)準(zhǔn)答案:(1)m=n;(2)m=m—c;c++;(3)if(m==0)知識(shí)點(diǎn)解析:(1)每次循環(huán),程序需要對(duì)n執(zhí)行減去連續(xù)的正整數(shù)序列來(lái)判斷n是否剛好為0,即n是否是連續(xù)的正整數(shù)序列之和,所以需要使用臨時(shí)變量m寄存n的值,每次循環(huán)對(duì)m執(zhí)行減運(yùn)算操作,不滿足繼續(xù)下一輪。另外,程序聲明變量m時(shí),未初始化它的值,所以此處應(yīng)該修改為:m=n。(2)語(yǔ)法錯(cuò)誤。C語(yǔ)言中每個(gè)語(yǔ)句必須以分號(hào)結(jié)束,所以應(yīng)修改為:m=m—c;c++;。(3)題目判斷n是否是連續(xù)的正整數(shù)序列之和,若是,則輸出所有序列,程序中m依次減去連續(xù)的正整數(shù),當(dāng)m為0時(shí),表示m(即n)滿足條件,再輸出當(dāng)前序列中的每個(gè)正整數(shù),所以此處判斷條件反了,應(yīng)修改為:if(m==0)。國(guó)家二級(jí)C語(yǔ)言機(jī)試(程序修改題)模擬試卷第5套一、程序修改題(本題共5題,每題1.0分,共5分。)1、給定程序MODI1.C中函數(shù)fun的功能是:計(jì)算正整數(shù)num的各位上的數(shù)字之積。例如,若輸入:252,則輸出應(yīng)該是:20。若輸入:202,則輸出應(yīng)該是:0。請(qǐng)改正程序中的錯(cuò)誤,使它能得出正確的結(jié)果。注意:不要改動(dòng)main函數(shù),不得增行或刪行,也不得更改程序的結(jié)構(gòu)!#includelongfun(longnum){/************found************/longk;do{k*=num%10;/************found************/num\=10;}while(num);return(k);)main(){longn;printf("\nPleaseenteranumber:")scanf("%ld",&n);printf("\n%ld\n",fun(n));}標(biāo)準(zhǔn)答案:(1)longk=1;(2)num/=10;知識(shí)點(diǎn)解析:(1)第一個(gè)錯(cuò)誤標(biāo)識(shí)下的k是函數(shù)的返回值,子函數(shù)fun中在執(zhí)行“k*=num%10:”之前,只進(jìn)行了定義,卻沒(méi)有賦初值,編譯時(shí)會(huì)警告變量在使用之前沒(méi)有初始化k。k代表了各個(gè)位上的數(shù)字之積,其初值應(yīng)為1。因此,第一個(gè)標(biāo)識(shí)下的“l(fā)ongk;”改為“l(fā)ongk=1:”。(2)第二個(gè)標(biāo)識(shí)下的符號(hào)“\”是非法字符,根據(jù)題意,這里應(yīng)該是進(jìn)行除法運(yùn)算,所以“num\=10:”應(yīng)該改為“num/=10;”。2、下列給定程序中,函數(shù)fun的功能是:根據(jù)輸入的三個(gè)邊長(zhǎng)(整型值),判斷能否構(gòu)成三角形。若能構(gòu)成等邊三角形,則返回3;若是等腰三角形,則返回2;若能構(gòu)成三角形則返回1;若不能,則返回0。請(qǐng)改正程序中的錯(cuò)誤,使它能得出正確的結(jié)果。注意:不要改動(dòng)main函數(shù),不得增行或刪行,也不得更改程序的結(jié)構(gòu)!試題程序:#include<stdio.h>#include<math.h>intfun(inta,intb,intc){if(a+b>c&&b+c>a&&a+c>b){if(a==b&&h==c)/******found******/return1;elseif(a==b||b==c||a==c)return2;/******found******/elsereturn3;}elsereturn0;}voidmain(){inta,b,c,shape;printf(″\nlnputa,b,c:″);scanf(″%d%d%d″,&a,&b,&c);printf(″\na=%d,b=%d,c=%d\n″,a,b,c);shape=fun(a,b,c);printf(″\nTheshape:%d\n″,shape);}標(biāo)準(zhǔn)答案:(1)return3;(2)return1;知識(shí)點(diǎn)解析:(1)變量a、b、c分別表示三條邊,當(dāng)三邊相等(a==b&&b==c)時(shí),返回3。(2)在能構(gòu)成三角形的前提下,如果不能構(gòu)成等邊三角形或等腰三角形,則返回1。3、給定程序MODI1.C中函數(shù)fun的功能是:統(tǒng)計(jì)字符串中各元音字母(即:A、E、I、O、U)的個(gè)數(shù)。注意:字母不分大、小寫。例如:若輸入:THIsisaboot,則輸出應(yīng)該是:1、0、2、2、0。請(qǐng)改正程序中的錯(cuò)誤,使它能得出正確的結(jié)果。注意:不要改動(dòng)main函數(shù),不得增行或刪行,也不得更改程序的結(jié)構(gòu)!#includevoidfun(char*s,intnum[5]){intk,i=5;for(k=0;k=0)num[i]++;}}mein(){chars1[81];intnuml[5],i;printff"\nPleaseenterastring:");gets(S1);fun(s1,numl);for(i=0;i<5;i++)printf("%d",numl[i]);printf("\n");}標(biāo)準(zhǔn)答案:(1)num[k]=0;(2)switch(*s)知識(shí)點(diǎn)解析:(1)第一個(gè)標(biāo)識(shí)下的for循環(huán)過(guò)程是將num數(shù)組中的變量初始值設(shè)置為0,用來(lái)統(tǒng)計(jì)每一個(gè)元音字母出現(xiàn)的個(gè)數(shù),for循環(huán)中的循環(huán)條件表達(dá)式中的變量是k,所以第二個(gè)標(biāo)識(shí)下“num[i]=0;”改為“num[k]=0;”。(2)第二個(gè)標(biāo)識(shí)下的switch—case條件選擇的功能應(yīng)該是對(duì)s指針指向的字符串中的每一個(gè)字符進(jìn)行判斷,不應(yīng)該是s的數(shù)組名,所以第三個(gè)標(biāo)識(shí)下“switch(s)”改為“switch(*s)”4、給定程序MODI1.C中函數(shù)fun的功能是:求整數(shù)x的y次方的低3位值。例如,整數(shù)5的6次方為15625,此值的低3位值為625。請(qǐng)改正函數(shù)fun中指定部位的錯(cuò)誤,使它能得出正確的結(jié)果。注意:不要改動(dòng)main函數(shù),不得增行或刪行,也不得更改程序的結(jié)構(gòu)!#includelongfun(intx,inty,long*p){inti;longt=l;/************found************/for(i=l;i標(biāo)準(zhǔn)答案:(1)for(i=1;i<=y;i++)(2)t=t%1000;知識(shí)點(diǎn)解析:函數(shù)的功能是求整數(shù)X的Y次方的低3位值。(1)第一個(gè)標(biāo)識(shí)下的“for(i=1;i5、給定程序MODI1.C中fun函數(shù)的功能是:根據(jù)整型形參m,計(jì)算如下公式的值。例如,若主函數(shù)中輸入5,則應(yīng)輸出—0.283333。請(qǐng)改正函數(shù)fun中的錯(cuò)誤或在橫線處填上適當(dāng)?shù)膬?nèi)容并把橫線刪除,使它能計(jì)算出正確的結(jié)果。注意:不要改動(dòng)mam函數(shù),不得增行或刪行,也不得更改程序的結(jié)構(gòu)!#includedoublefun(intm){doublet=1.0;inti;for(i=2;i<=m;i++)t=1.0—1/i;/*********found**********/____________;}main(){intm;printf("\nPleaseenterlintegernumbers:\n");scanf("%d",&m);printf("\n\nTheresultis%lf\n",}標(biāo)準(zhǔn)答案:(1)t=t—1.0/i;或t—=1—0/i;或t—=(double)1/i;(2)returnt;知識(shí)點(diǎn)解析:函數(shù)的功能是計(jì)算公式的值。(1)第一個(gè)標(biāo)識(shí)下的“t=1.0—1/i:”語(yǔ)句對(duì)題干中給出的多項(xiàng)式的求值,而根據(jù)題干中多項(xiàng)式的特點(diǎn),多項(xiàng)式應(yīng)該是“t=t—1.0/1;”。(2)根據(jù)函數(shù)定義,fun函數(shù)應(yīng)該具有返回值,第二個(gè)標(biāo)識(shí)下的填空應(yīng)該是“returnt;”返回多項(xiàng)式的值。國(guó)家二級(jí)C語(yǔ)言機(jī)試(程序修改題)模擬試卷第6套一、程序修改題(本題共5題,每題1.0分,共5分。)1、給定程序MODI1.C中函數(shù)fun的功能是:按順序給s所指數(shù)組中的元素賦予從2開(kāi)始的偶數(shù),然后再按順序?qū)γ课鍌€(gè)元素求一個(gè)平均值,并將這些值依次存放在W所指的數(shù)組中。若s所指數(shù)組中元素的個(gè)數(shù)不是5的倍數(shù),多余部分忽略不計(jì)。例如,s所指數(shù)組有14個(gè)元素,則只對(duì)前10個(gè)元素進(jìn)行處理,不對(duì)最后的4個(gè)元素求平均值。請(qǐng)改正程序中的錯(cuò)誤,使它能得出正確結(jié)果。注意:不要改動(dòng)main函數(shù),不得增行或刪行,也不得更改程序的結(jié)構(gòu)。#include#defineSIZE20fun(double*s,double*w){intk,i;doublesum;for(k=2,i=0;i標(biāo)準(zhǔn)答案:(1)sum=0.0;(2)if((i+1)%5==0)知識(shí)點(diǎn)解析:(1)在第一標(biāo)識(shí)下“sun=0.0;”,根據(jù)題意,這是給sum賦值,而sun沒(méi)有定義編譯時(shí)會(huì)提示錯(cuò)誤,應(yīng)改為“sum=0.0;”。(2)錯(cuò)誤標(biāo)識(shí)下的if判斷語(yǔ)句是依順序取5個(gè)字符,if中的邏輯表達(dá)式語(yǔ)法有誤,由于1%5恒等于1,所以i+1%5也就等價(jià)于i+1了,所以將“if(i+1%5==0)”改為“if((i+1)%5==0)”,此處主要注意的是運(yùn)算符的優(yōu)先級(jí)。2、給定程序MODI1.C中函數(shù)fun的功能是:從低位開(kāi)始取出長(zhǎng)整型變量s中偶數(shù)位上的數(shù),依次構(gòu)成一個(gè)新數(shù)放在t中。高位仍在高位,低位仍在低位。例如,當(dāng)s中的數(shù)為:7654321時(shí),t中的數(shù)為:642。請(qǐng)改正程序中的錯(cuò)誤,使它能得出正確的結(jié)果。注意:不要改動(dòng)main函數(shù),不得增行或刪行,也不得更改程序的結(jié)構(gòu)!#include/**********found**********/voidfun(longs,longt){longs1=10;s/=10;*t=s%10;/**********found**********/while(s<0){s=s/100;*t=s%10*s1+*t;s1=s1*10;}}main(){longs,t;print:f("\nPleaseenters:");scanf("%1d",&s);fun(s,&t);printf("Theresultis:%1d\n",t);}標(biāo)準(zhǔn)答案:(1)voidfun(longs,long*t)(2)while(s>0)知識(shí)點(diǎn)解析:函數(shù)目的是取出長(zhǎng)整型變量s中偶數(shù)位上的數(shù)。(1)第一個(gè)標(biāo)識(shí)下的形參t被定義為一個(gè)long型變量,而對(duì)應(yīng)的主函數(shù)中的實(shí)參卻是一個(gè)地址值。因此,t在函數(shù)定義中應(yīng)該被定義為一個(gè)指針變量,即“voidfun(longs,longt)”改為“voidfun(longs,long*t)”。(2)第二個(gè)標(biāo)識(shí)下的while循環(huán)控制表達(dá)式“s<0”要求s小于0才進(jìn)入循環(huán)。而s的值總是大于0,因此將“while(s<0)”改為“while(s>0)”。3、使用VC++2010打開(kāi)考生文件夾下modi1中的解決方案。此解決方案的項(xiàng)目中包含一個(gè)源程序文件modi1.c。在此程序中,函數(shù)fun的功能是求矩陣(二維數(shù)組)a[N][N]中每行的最小值,結(jié)果存放到數(shù)組b中。假如:若則結(jié)果應(yīng)為1,5,9,13,請(qǐng)改正函數(shù)fun中指定部位的錯(cuò)誤,使它能得出正確的結(jié)果。注意:不要改動(dòng)main函數(shù),不得增行或刪行,也不得更改程序的結(jié)構(gòu)。試題程序:#include<stdio.h>#defiheN4voidfun(inta[][N],intb[]){inti,j;for(i=0;i<N;i++){/*********found*********/b[i]=a[0][0];/*********found*********/for(j=1;j<N﹣1;j++)/*********found*********/if(b[i]<a[i][j])b[i]=a[i][j];}}main(){inta[N][N]=({1,4,3,2},{8,6,5,7},{11,10,12,9},{13,16,14,15}},b[N];inti;fun(a,b);for(i=0;i<N;i++)printf("%d,",b[i]);printf("\n");}標(biāo)準(zhǔn)答案:(1)b[i]=a[i][0];(2)for(j=1;j<N;j++)(3)if(b[i]>a[i][j])知識(shí)點(diǎn)解析:數(shù)組b存放每行的最小值,針對(duì)二維數(shù)組使用二層循環(huán),在第一層循環(huán)的開(kāi)始將每行的第1個(gè)數(shù)賦給數(shù)組b相應(yīng)的元素,在第二層循環(huán)中,數(shù)組b中的元素依次與本行中的每個(gè)元素進(jìn)行比較,找到一行中的最小值存入數(shù)組b。(1)b[i]存放二級(jí)數(shù)組a每一行中第1個(gè)元素值,表示為a[i][0]。(2)每行元素的第1個(gè)值要和這一行中的每個(gè)元素進(jìn)行比較,條件j<N可使a[i][j]取到最后元素,而條件j<N﹣1使a[i][j]最終取得倒數(shù)第2個(gè)元素。(3)因?yàn)槭钦易钚≈?,所以?dāng)b[i]大于其后的數(shù)值時(shí)說(shuō)明它不是最小,要把比較中較大的值賦給它。4、下列給定程序中函數(shù)fun的功能是:計(jì)算n!。例如,給n輸入5,則輸出120.000000。請(qǐng)改正程序中的錯(cuò)誤,使它能得出正確的結(jié)果。注意:不要改動(dòng)main函數(shù),不得增行或刪行,也不得更改程序的結(jié)構(gòu)!試題程序:#include<stdio.h>#include<conio.h>doublefun(intn){doubleresult:1.0;/*********found*********/ifn==0return1.0;while(n>1&&n<170)/*********found*********/result=n一一;returnresult;}main(){intn;printf("InputN:");scanf("%d",&n);printf("\n\n%d!=%if\n\n",n,fun(n));}標(biāo)準(zhǔn)答案:(1)if(n==0)(2)result*=n一一;或{result*=n;n一一;}知識(shí)點(diǎn)解析:(1)這里是一個(gè)簡(jiǎn)單的格式錯(cuò)誤,if條件判斷語(yǔ)句應(yīng)該加括號(hào)。(2)根據(jù)階乘的概念,從n開(kāi)始,n!=n*(n一1)!,直到1,所以應(yīng)該為result*=n一一;。5、給定程序MODI1.C中函數(shù)fun的功能是:計(jì)算S=f(-n)+f(-n+1)+…+f(0)+f(1)+f(2)+…+f(n)的值。例如,當(dāng)n為5時(shí),函數(shù)值應(yīng)為:10.407143。f(x)函數(shù)定義如下:請(qǐng)改正程序中的錯(cuò)誤,使程序能輸出正確的結(jié)果。注意:不要改動(dòng)main函數(shù),不得增行或刪行,也不得更改程序的結(jié)構(gòu)!1#include<stdio.h>2#include<math.h>3/**********found**********/4ffdoublex)5{6if(x==0.0||x==2.0)7return0.0;8elseif(x<0.0)9return(x-1)/(x-2);10else11return(x+1)/(x-2);12}13doublefun(intn)14{inti;doubles=0.0,y;15for(i=0n;i<=n;i++)16{y=f(1.0*i);s+=y;}17/************found************/18returns19}20main()21{22printf(’’%f\n’’,fun(5));23}標(biāo)準(zhǔn)答案:(1)doublef(doublex)(2)returns;知識(shí)點(diǎn)解析:本題中函數(shù)的功能是計(jì)算題干中給出的公式值。主函數(shù)main調(diào)用fun函數(shù),fun函數(shù)的功能是實(shí)現(xiàn)數(shù)列的求解。其中,fun函數(shù)中調(diào)用實(shí)現(xiàn)每一項(xiàng)的f函數(shù)。(1)第一個(gè)標(biāo)識(shí)下f函數(shù)的定義缺少返回值類型,所以,將“f(doublex)”改為“doublef(doublex)”。(2)第二個(gè)標(biāo)識(shí)下返回語(yǔ)句沒(méi)有分號(hào)結(jié)束。所以,第二個(gè)標(biāo)識(shí)下“returns”應(yīng)該改為“returns:”。國(guó)家二級(jí)C語(yǔ)言機(jī)試(程序修改題)模擬試卷第7套一、程序修改題(本題共5題,每題1.0分,共5分。)1、給定程序MODI1.C中fun函數(shù)的功能是:求s=aa…aa-…-aaa-aua-a(此處aa…aa表示11個(gè)a,a和n的值在1至9之間)例如a=3,n=6,則以上表達(dá)式為:s=333333-33333-3333-333-33-3其值是:296298a和n是fun函數(shù)的形參,表達(dá)式的值作為函數(shù)值傳回main函數(shù)。請(qǐng)改正程序中的錯(cuò)誤,使它能計(jì)算出正確的結(jié)果。注意:不要改動(dòng)main函數(shù),不得增行或刪行,也不得更改程序的結(jié)構(gòu)!#includelongfun(inta,intn){intj;/**********found**********/longs=0,t=1;for(j=0;j標(biāo)準(zhǔn)答案:(1)longs=0,t=0;(2)t=t/10;知識(shí)點(diǎn)解析:函數(shù)的功能是求s=aa…aa.….a(chǎn)aa,-aa-a。(1)當(dāng)進(jìn)入第一循環(huán),“t=t*10+a;”語(yǔ)句,如果輸入的a是3,并且利用題目中給出的初始化值1,計(jì)算得出t的值為13,而實(shí)際應(yīng)該是3,由此可知t的初值設(shè)置不正確,不應(yīng)該是1。所以將“l(fā)ongs=0,t=1;”改為“:longs=0,t==0;”。(2)循環(huán)中通過(guò)語(yǔ)句“tm%10;”來(lái)獲得每一項(xiàng),每循環(huán)一次,t的值應(yīng)縮小10倍,這里應(yīng)該用除以10來(lái)實(shí)現(xiàn),而不能用“%”求余數(shù)。所以將“t=t%10;”改為“t=t/10;”。2、已知一個(gè)數(shù)列從第0項(xiàng)開(kāi)始的前三項(xiàng)分別為0,0,1,以后的各項(xiàng)都是其相鄰的前三項(xiàng)之和。給定程序MODI1.C中函數(shù)fun的功能是:計(jì)算并輸出該數(shù)列前n項(xiàng)的平方根之和。n的值通過(guò)形參傳入。例如,當(dāng)n=10時(shí),程序的輸出結(jié)果應(yīng)為:23.197745。請(qǐng)改正程序中的錯(cuò)誤,使程序能輸出正確的結(jié)果。注意:不要改動(dòng)main函數(shù),不得增行或刪行,也不得更改程序的結(jié)構(gòu)!#include#include/************found************/fun(intn){doublesum,s0,s1,s2,s;intk;sum=1.0;if(n<=2)sum=0.0;s0=0.0;s1=0.0;s2=1.0;for(k=4;k<=n;k++){s=sO+si+s2;sum+=sqrt(s);sO=si;si=s2;s2=s;}/************found************/returnsum}main(){intn;printf("InputN=");scanf("%d",&n);printf("%f\n",fun(n));}標(biāo)準(zhǔn)答案:(1)doublefun(intn)(2)returnsum;知識(shí)點(diǎn)解析:(1)第一個(gè)錯(cuò)誤標(biāo)識(shí)下fun函數(shù)的定義根據(jù)題干要返回前n項(xiàng)的平方根之和,函數(shù)具有返回值,所以“fun(intn)”應(yīng)改為“doublefun(intn)”,其中,double為雙精度型變量。(2)第二個(gè)標(biāo)識(shí)符下返回平方根之和,根據(jù)C語(yǔ)言語(yǔ)法每一句C語(yǔ)言后面應(yīng)該以“;”為結(jié)尾,所以“returnsum”改為“returnsum;”。3、下列給定程序中函數(shù)fun的功能是:用冒泡法對(duì)6個(gè)字符串按由小到大的順序進(jìn)行排序。請(qǐng)改正程序中的錯(cuò)誤,使它能得出正確的結(jié)果。注意:不要改動(dòng)main函數(shù),不得增行或刪行,也不得更改程序的結(jié)構(gòu)!試題程序:#include<stdlib.h>#include<string.h>#include<conio.h>#include<stdio.h>#defineMAXLINE20fun(char*pstr[6]){inti,j;char*p;for(i=0;i<5;i++){/*********found*********/for(j=i+1,j<6,j++){if(strcmp(*(pstr+i),(pstr+j))>0){P=*(pstr+i);/*********found*********/*(pstr+i)=pstr+j;*(pstr+j)=p;}}}}voidmain(){inti;char*pstr[6],sir[6][MAxLTNE];system("CLS");for(i=0;i<6;i++)pstr[i]=str[i];printf("\nEnter6string(1stringateachline):\n");for(i=0;i<6;i++)scanf("%s",pstr[i]);fun(pstr);printf("Thestringsaftersorting:\n");for(i=0;i<6;i++)printf("%s\n",pstr[i]);}標(biāo)準(zhǔn)答案:(1)for(j=i+1;j<6;j++)(2)*(pstr+i)=*(pstr+j);知識(shí)點(diǎn)解析:本題考查:冒泡排序算法;for循環(huán)語(yǔ)句格式;指針數(shù)組。(1)此處考查for語(yǔ)句的格式,各表達(dá)式之間應(yīng)用“;”隔開(kāi)。(2)此處考查用指針表示數(shù)組元素的方法,*(pstr+i)表示pstr所指向數(shù)組的第i個(gè)元素,同理*(pstr+j)表示pstr所指向數(shù)組的第j個(gè)元素。冒泡排序算法,其基本思想是:將待排序的元素看做是豎著排列的“氣泡”,較小的元素比較輕,從而要往上浮。在冒泡排序算法中要對(duì)“氣泡”序列處理若干遍。所謂一遍處理,就是自底向上檢查一遍這個(gè)序列,并時(shí)刻注意兩個(gè)相鄰元素的順序是否正確。如果發(fā)現(xiàn)兩個(gè)相鄰元素的順序不對(duì),即“輕”的元素在下面,就交換它們的位置。顯然,處理一遍之后,“最輕”的元素就浮到了最高位置;處理兩遍之后,“次輕”的元素就浮到了次高位置。依此類推,完成排序。實(shí)現(xiàn)數(shù)組s[N]的升序排列代碼如下:{t=s[i];s[i]=s[j];4、下列給定程序中,函數(shù)fun的功能是:對(duì)N名學(xué)生的學(xué)習(xí)成績(jī),按從高到低的順序找出前m(m≤10)名學(xué)生來(lái),并將這些學(xué)生的數(shù)據(jù)存放在一個(gè)動(dòng)態(tài)分配的連續(xù)存儲(chǔ)區(qū)中,此存儲(chǔ)區(qū)的首地址作為函數(shù)值返回。請(qǐng)改正程序中的錯(cuò)誤,使它能得出正確的結(jié)果。注意:不得增行或刪行,也不得更改程序的結(jié)構(gòu)!試題程序:#inelude#include#include#include#include#defineN10typedefstruets8{charnunl[10];ints;}STU;STU*fun(STUa[],intm){STUb[N],*t;inti,j,k;/*******found*******/*t=calloe(In,sizeof(STU));for(i=0;ib[j].s)j=i;/*******found*******/t[k].num=b[j].hum;t[k].8=b[j].s;b[j].8=0;}returnt;}outreult(STU8[],F(xiàn)ILE*pf){inti;for(i=0;i10){printf(“\nGivethenumberofthestudentswhohavebetterscore”);scanf(“%d”,&m);}pOrder=fun(a,111);prinff(“******THERESULT******\n”);prinff(“Thetop:\n”);for(i=0;i標(biāo)準(zhǔn)答案:(1)t=(STU*)ealloc(m,sizeof(STU));(2)t[k].num=b[j].num改為t[k]=b[j]知識(shí)點(diǎn)解析:(1)caLlloc函數(shù)用于分配內(nèi)存空間。其調(diào)用形式為(類型說(shuō)明符*)calloc(n,size),功能:在內(nèi)存動(dòng)態(tài)存儲(chǔ)區(qū)中分配n塊長(zhǎng)度為“size”字節(jié)的連續(xù)區(qū)域,函數(shù)的返回值為該區(qū)域的首地址,(類型說(shuō)明符*)用于強(qiáng)制類型轉(zhuǎn)換。calloc函數(shù)與maⅡoc函數(shù)的區(qū)別在于calloc函數(shù)一次可以分配n塊區(qū)域。例如,ps=(structstu*)calloc(2,sizeof(structstu));,其中的sizeof(structstu)是求stu的結(jié)構(gòu)長(zhǎng)度。該語(yǔ)句的意思是:按stu的長(zhǎng)度分配兩塊連續(xù)區(qū)域,強(qiáng)制轉(zhuǎn)換為stu類型,并把其首地址賦予指針變量ps。在本題中不用考慮那么復(fù)雜,根據(jù)定義類型STUb[N],*t;就可以看出*t=calloc(m,sizeotf(STU))中的錨誤。(2)t[k].num=b[j].num的錯(cuò)誤旨在考查對(duì)結(jié)構(gòu)體概念的掌握和靈活應(yīng)用程度。5、給定程序MODI1.C中函數(shù)fun的功能是:求出s所指字符串中最后一次出現(xiàn)的t所指子字符串的地址,通過(guò)函數(shù)值返回,在主函數(shù)中輸出從此地址開(kāi)始的字符串:若未找到,則函數(shù)值為NULL。例如,當(dāng)字符串中的內(nèi)容為“abcdabfabcdx”,t中的內(nèi)容為“ab”時(shí),輸出結(jié)果應(yīng)是“abcdx”。當(dāng)字符串中的內(nèi)容為“abcdabfabcdx”,t中的內(nèi)容為“abd”時(shí),則程序輸出未找到信息“notbefound!”。請(qǐng)改正程序中的錯(cuò)誤,使它能得出正確的結(jié)果。注意:不要改動(dòng)main函數(shù),不得增行或刪行,也不得更改程序的結(jié)構(gòu)!#include#includechar*fun(char*s,char*t){char*p,*r,*a;/************found************/a=Null;while(*s){p=s;r=t;while(*r)/************found************/if(r==p){r++;p++;}elsebreak;if(*r==’\0’)a=s;-s++;}returna;}main(){chars[100],t[100],*p;printf("\nPleaseenterstringS:");scanf("%s",s);printf("\nPleaseentersubstringt:");scanf("%s",t);p=fun(s,t);if(p)printf("\nTheresultis:%s\n",p);elseprintf("\nNotfound!\n");}標(biāo)準(zhǔn)答案:(1)a=NULL;(2)if(*r==*p)知識(shí)點(diǎn)解析:函數(shù)功能是求得字符串中某子

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論