版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)
文檔簡介
國家二級C語言機試(程序修改題)模擬試卷2(共9套)(共45題)國家二級C語言機試(程序修改題)模擬試卷第1套一、程序修改題(本題共5題,每題1.0分,共5分。)1、給定程序MODI1.C中函數(shù)fun的功能是:計算函數(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ù)值為-3.50。請改正程序中的錯誤,使它能得出正確結(jié)果。注意:不要改動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);知識點解析:(1)函數(shù)fun兩次調(diào)用宏FU來計算“value=FU(a+b,a-b)+Fu(c+b,c-b);”。檢查宏的定義是否正確,可以用實參代入宏進行展開:(a+b/a-b),由此看到,F(xiàn)U(a+b,a-b)進行的計算不是(a+b)/(a-b),而是(a+b/a-b),因為“/”的優(yōu)先級高于“+”或“-”,所以要使用括號限定計算優(yōu)先順序。所以將“#defineFU(m,n)(m/n)”改為“#defineFU(m,n)((m)/(n))”。(2)第二個標(biāo)識下返回語句的關(guān)鍵字有誤。所以,第二個標(biāo)識下“Return(value);”應(yīng)該改為“return(value);”,C語言中沒有“Return”這個關(guān)鍵字。2、給定程序MODI1.C中函數(shù)fun的功能是:將P所指字符串中的所有字符復(fù)制到b中,要求每復(fù)制三個字符之后插入一個空格。例如,在調(diào)用fun函數(shù)之前給a輸入字符串:ABCDEFGHUK,調(diào)用函數(shù)之后,字符數(shù)組b中的內(nèi)容則為:ABCDEFGHIJK。請改正程序中的錯誤,使它能得出正確結(jié)果。注意:不要改動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ù)的功能是將字符串p中的所有字符復(fù)制到字符串b中。(1)p是指針,p存放的內(nèi)容是地址值,第一標(biāo)識下“b[k]=p;”含義是將p存放的地址內(nèi)容賦給b[k],而不是把p指向的地址拷貝到b[k],顯然不符合題意,應(yīng)改成“b[k]=*p;”,*p是取p指向的地址的內(nèi)容。(2)第二個標(biāo)識符下是復(fù)制三個字符后在b中插入空格,原題中給出的“b[k++]=””;”,在C語言中字符常量是由單引號括起的單個字符,即空格字符應(yīng)為“’’”,而“""”是表示字符串常量且該字符串中只有一個空格字符。第二標(biāo)識下是將空格字符復(fù)制給b[k++],因此第二標(biāo)識下應(yīng)改為“b[k++]=’’;”。3、使用VC++2010打開考生文件夾下modi1中的解決方案。此解決方案的項目中包含一個源程序文件modi1.c。在此程序中,函數(shù)fun的功能是:在字符串的最前端加入n個*號,形成新串,并且覆蓋原串。字符串的長度最長允許為79。請改正程序中的錯誤,使它能得出正確的結(jié)果。注意:部分源程序在文件MODI1.C中,不要改動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++);知識點解析:(1)指針p應(yīng)指向s,所以應(yīng)改為p=s;。(2)循環(huán)等待,當(dāng)while循環(huán)執(zhí)行一次,臨時變量p應(yīng)該指向字符串的下一位置,所以應(yīng)改為while(*p++);。4、給定程序MODI1.C中函數(shù)fun的功能是:將字符串中的字符按逆序輸出,但不改變字符串中的內(nèi)容。例如,若字符串為abcd,則應(yīng)輸出:dcba。請改正程序中的錯誤,使它能計算出正確的結(jié)果。注意:不要改動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);知識點解析:(1)主函數(shù)中“fun(s);”語句中的s是數(shù)組名,所以在fun函數(shù)中參數(shù)的定義應(yīng)該是指針型,“fun(chata)”改為“voidfun(char*a)”。(2)printf函數(shù)的調(diào)用形式是:printf(格式字符串,輸出項表),在格式字符串和輸出項表之間有“,”,因此,第二個標(biāo)識處應(yīng)該是“printf("%c",*a);”。5、給定程序MODI1.C中函數(shù)fun的功能是:應(yīng)用遞歸算法求形參a的平方根。求平方根的迭代公式如下:例如,a為2時,平方根值為:1.414214。請改正程序中的錯誤,使它能得出正確結(jié)果。注意:不要改動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ù)的功能是應(yīng)用遞歸算法求某數(shù)a的平方根。(1)主函數(shù)中“fun(x,1.0)”,x是double型變量,1.0是浮點數(shù),可知fun有兩個double型參數(shù),而第一標(biāo)識下“dounle”不是C語言關(guān)鍵字,所以應(yīng)將“doublefun(doublea,dounlex0)"改為“doubletim(doublea,doublex0)”。(2)第二個標(biāo)識下的if語句是判斷進行遞歸運算的條件,第二標(biāo)識下變量xo沒有定義,根據(jù)題意,這里是判斷x1和x0的差值的絕對值是否比0.00001大,所以第二個標(biāo)識下“if(fabs(x1-xo)>0.00001)”改為“if(fabs(x1-x0)>0.00001)”。國家二級C語言機試(程序修改題)模擬試卷第2套一、程序修改題(本題共5題,每題1.0分,共5分。)1、下列給定程序中,函數(shù)fun的功能是:根據(jù)整型形參n,計算如下公式的值。例如,若n=10,則應(yīng)輸出0.617977。請改正程序中的錯誤,使它能得出正確的結(jié)果。注意:部分源程序在文件MODI1.C中,不要改動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++)知識點解析:(1)根據(jù)函數(shù)的返回值可知,函數(shù)應(yīng)定義為float型。(2)該題中函數(shù)fun的作用是計算數(shù)列前n項的和,而數(shù)列的組成方式是:第n項的分母是1加第n一1項的值,分子為1,如果循環(huán)累加按for(i=2;i<n;i++)執(zhí)行,當(dāng)輸入n=2時循環(huán)不會執(zhí)行,程序?qū)⒌貌坏较胍慕Y(jié)果,因此循環(huán)變量的取值范圍應(yīng)包括2,循環(huán)的條件為i<=n。2、使用VC++2010打開考生文件夾下modi1中的解決方案。此解決方案的項目中包含一個源程序文件modi1.c。在此程序中,函數(shù)fun的功能是:通過某種方式實現(xiàn)兩個變量值的交換,規(guī)定不允許增加語句和表達式。例如,變量a中的值原為8,b中的值原為3,程序運行后a中的值為3,b中的值為8。請改正程序中的錯誤,使它得出正確的結(jié)果。注意:不要改動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;知識點解析:首先,定義變量t作為中間變量,然后進行數(shù)據(jù)交換,注意參數(shù)x是指針變量,交換時應(yīng)使用*x,最后確定返回值;根據(jù)代碼b=fun(8a,b),可以知道返回值將賦給變量b,而b中應(yīng)存放交換前*x中的值,所以函數(shù)應(yīng)返回變量t。3、給定程序MODI1.C中函數(shù)fun的功能是:將tt所指字符串中的小寫字母都改為對應(yīng)的大寫字母,其他字符不變。例如,若輸入”Ab,cD”,則輸出”AB,CD”。請改正程序中的錯誤,使它能得出正確的結(jié)果。注意:不要改動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ù)的功能是將字符串中的小寫字母改為對應(yīng)的大寫字母。首先判斷字母是否為小寫字母,如果是小寫字母則進行轉(zhuǎn)換。(1)第一個錯誤標(biāo)識下的if判斷語句中的邏輯有誤,應(yīng)該是與(&&)的關(guān)系.不是或(II)的關(guān)系,所以if判斷語句改為“if((’a’<=tt[i])&&(tt[i]<=’z’))”。(2)第二個標(biāo)識下小寫字母轉(zhuǎn)換為大寫字母的轉(zhuǎn)換算法有誤,小寫轉(zhuǎn)換為大寫應(yīng)該是減去32,而不是加上32,所以“tt[i]+=32;”改為“tt[i]—=32;”。指向一維數(shù)組的指針以及指針數(shù)組、if語句及其構(gòu)成的選擇。4、給定程序MODI1.C中fun函數(shù)的功能是:將p所指字符串中每個單詞的最后一個字母改成大寫。(這里的“單詞”是指由空格隔開的字符串)。例如,若輸入“Iamastudenttotaketheexamination.”,則應(yīng)輸出“IaMAstudenTtOtakethEexamination.”。請修改程序中的錯誤之處,使它能得出正確的結(jié)果。注意:不要改動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ù)的功能是將每個單詞的最后一個字母改成大寫。(1)第一個錯誤標(biāo)識下的if語句應(yīng)該是判斷字符串中的字符是否是空格,根據(jù)“for(;*p;p++)”語句中for循環(huán)條件中p的定義應(yīng)該為字符型指針變量,*p是取p所指存取單元的值,所以“if(p==’’)”應(yīng)該改為“if(*p==’’)”。(2)題干中要求是將每個單詞的最后一個字母改成大寫,所以它的位置應(yīng)該是挨著空格的前一個字符,應(yīng)該是指針p指向字符的前一個位置,“*p=toupper(*(p一1))”是將改動的值賦給了p所指的空格,所以應(yīng)該改為“*(p-1)=toupper(*(p-1));”且語句未尾應(yīng)有分號。5、給定程序MODI1.C中函數(shù)fun的功能是:將m(1≤m≤10)個字符串連接起來,組成一個新串,放入pt所指存儲區(qū)中。例如:把3個串:"abc","CD","EF"連接起來,結(jié)果是"abcCDEF"。請改正程序中的錯誤,使它能得出正確的結(jié)果。注意:不要改動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ù)的功能是將m(1≤m≤10)個字符串連接起來。(1)第一標(biāo)識下是整型變量k、q和i的定義,根據(jù)C語言中整型變量的定義方式,第一標(biāo)識下應(yīng)為“intk,q,i;”。(2)第二個標(biāo)識下的“pt[i]=str[k,i];”語句應(yīng)該將s仃中的字符依次拷貝到pt中,根據(jù)C語言中對二維數(shù)組每一位的取值,應(yīng)該是s仃[k][i],所以“pt[i]=str[k,i];”改為“pt[i]=str[k][i];”。國家二級C語言機試(程序修改題)模擬試卷第3套一、程序修改題(本題共5題,每題1.0分,共5分。)1、給定程序MODI1.C中函數(shù)fun的功能是:按以下遞歸公式求函數(shù)值。例如,當(dāng)給n輸入5時,函數(shù)值為18;當(dāng)給n輸入3時,函數(shù)值為14。請改正程序中的錯誤,使它能得出正確結(jié)果。注意:不要改動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ù)功能是按題目中給出的遞歸公式求函數(shù)值。(1)定義函數(shù)fun時,形參n并沒有指定參數(shù)類型,因此,“intfun(n)”改為“intfun(intn)”。(2)根據(jù)題目要求,原題中的“if(n=1)”應(yīng)該是用于判斷n是否等于1,但是被錯誤表示成賦值表達式。因此,“if(n=1)”應(yīng)該改為“if(n==1)”。2、使用VC++2010打開考生文件夾下modi1中的解決方案。此解決方案的項目中包含一個源程序文件modi1.c。在此程序中,函數(shù)fun的功能是:先將s所指字符串中的字符按逆序存放到t所指字符串中,然后把s所指串中的字符按正序連接到t所指串之后。例如,當(dāng)s所指的字符串為“ABCDE”時,t所指的字符串應(yīng)為“EDCBAABCDE”。請改正程序中的錯誤,使它能得出正確的結(jié)果。注意:不要改動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];知識點解析:(1)變量s1沒有定義。(2)該循環(huán)實現(xiàn)將s串中的字符逆序存入t串中,t[i]對應(yīng)s串中的s[s1﹣i﹣1]。3、給定程序MODI1.C中函數(shù)fun的功能是:計算s所指字符串中含有t所指字符串的數(shù)日,并作為函數(shù)值返回。請改正函數(shù)fun中指定部位的錯誤,使它能得出正確的結(jié)果。注意:不要改動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ù)的功能是計算字符串中含有某子串的數(shù)目。(1)根據(jù)“while(*r)if(*r==*p){r++;p++;}”可知該循環(huán)是比較r和p指向的字符串是否相等,本題的要求是計算字符串中含有某子串的數(shù)目,p指向的源字符串s,所以r應(yīng)指向的是字符串t,故第一標(biāo)識下應(yīng)改成“r=t;”。(2)根據(jù)題意第二標(biāo)識下“if(*r=0)”應(yīng)該是判斷r是否指向字符串尾,在C語言中,等于是用“==”標(biāo)識,因此第二標(biāo)識下應(yīng)改成“if(*r==0)”。4、給定程序MODI1.C中函數(shù)fun的功能是:將s所指字符串中的字母轉(zhuǎn)換為按字母序列的后續(xù)字母(但Z轉(zhuǎn)換為A,Z轉(zhuǎn)換為a),其他字符不變。請改正函數(shù)fun中指定部位的錯誤,使它能得出正確的結(jié)果。注意:不要改動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ù)的功能是將字符串中的字母改為該字母序列的后續(xù)字母。(1)第一個錯誤標(biāo)識下的“while(*s!=’@’)”語句原意是s不指向字符串尾就進入下面的循環(huán),所以對于指針判斷不為尾符的語句應(yīng)該是“while(*s)”或者“while(*s!=’\0’)”或者“while(*s!=0)”。(2)第二個標(biāo)識下“(*s)++;”是對字符內(nèi)容加1,而原題是對字符位置加1,所以將其改為“s++;”。5、給定程序MODI1.C中函數(shù)fun的功能是:用冒泡法對6個字符串按由小到大的順序進行排序。請改正程序中的錯誤,使它能得出正確的結(jié)果。注意:不要改動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ù)的功能是用冒泡法對6個字符串按由小到大的順序進行排序。(1)C語言中,for語句形式是:for(表達式1;表達式2;表達式3)循環(huán)體語句。因此第一個標(biāo)識下,for使用錯誤,應(yīng)該為“for(j=i+1;j<6;j++)”。(2)if語句后的復(fù)合語句的功能是把“*(pstr+i)”中和“*(pstr+j)”中的內(nèi)容進行交換,而“*(pstr+i)=pstr+j;”中“pstr+j;”是字符串地址,并不是字符串的元素內(nèi)容,所以第二個標(biāo)識下“*(pstr+i)=pstr+j;”改為“*(pst什i)=*(pstrq)”。國家二級C語言機試(程序修改題)模擬試卷第4套一、程序修改題(本題共5題,每題1.0分,共5分。)1、使用VC++2010打開考生文件夾下modi1中的解決方案。此解決方案的項目中包含一個源程序文件modi1.c。在此程序中,函數(shù)fun的功能是:將主函數(shù)中兩個變量的值進行交換。例如,若變量a中的值為8,b中的值為3,則程序運行后,a中的值為3,b中的值為8。請改正程序中的錯誤,使它能得出正確的結(jié)果。注意:部分源程序在文件MODI1.C中,不要改動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;知識點解析:(1)本題考查指針變量作函數(shù)參數(shù)。一般變量作參數(shù)時,不能改變實參的值,采用指針變量作為參數(shù)則能夠改變實參的值。主函數(shù)中fun函數(shù)的調(diào)用方式表明fun函數(shù)的參數(shù)應(yīng)當(dāng)為指針類型。(2)此處是一個變量交換操作錯誤,可知x、y是指針類型,變量類型不同,因而x、y不能與t進行值的交換。2、下列給定程序中,函數(shù)fun的功能是:求S的值。例如,當(dāng)k為10時,函數(shù)的值應(yīng)為1.533852。請改正程序中的錯誤,使它能得出正確的結(jié)果。注意:部分源程序在文件MODIl,C中,不要改動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;知識點解析:(1)此處為函數(shù)定義錯誤,根據(jù)返回值的類型可知函數(shù)類型標(biāo)識符應(yīng)為float。(2)語法錯誤。3、給定程序MODI1.C中,函數(shù)fun的功能是:在有n名學(xué)生,2門課成績的結(jié)構(gòu)體數(shù)組std中,計算出第1門課程的平均分,作為函數(shù)值返回。例如,主函數(shù)中給出了4名學(xué)生的數(shù)據(jù),則程序運行的結(jié)果為:第1門課程的平均分是:76.125000請改正函數(shù)fun中指定部位的錯誤,使它能得出正確的結(jié)果。注意:不要改動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]知識點解析:本題fun函數(shù)的主要功能是:在有n名學(xué)生,2門課成績的結(jié)構(gòu)體數(shù)組std中,計算出第1門課程的平均分,作為函數(shù)值返回。這里就是很基本的求平均數(shù),只不過這里涉及到結(jié)構(gòu)體,稍微要比普通的求平均數(shù)復(fù)雜一點。fun()函數(shù)就是相加求和,注意結(jié)構(gòu)體涉及的細(xì)節(jié)問題即可。(1)第一個錯誤在定義單門課程所有人總分sum時,因為sum是總分,而后面的計算式也確定為“sum+=std[i].score[1]”。很明顯地,這里的sum需要定義一個初始值才能正確計算,而初始值只能是為0計算才是正確的,所以這里應(yīng)該是“doublesum”改為“doublesum=0;”。第二個錯誤在fun函數(shù)的for循環(huán)條件中。這里的for循環(huán)是為了求各科的分?jǐn)?shù)和然后計算平均分,因此,for循環(huán)的次數(shù)和計算平均分的個數(shù)是一樣的,fun函數(shù)是計算n個學(xué)生第一門課的平均分,所以這里的sum的循環(huán)肯定也是要進行n次,而原程序卻是“i<2”,這樣明顯只會進行2次循環(huán),顯然是不對的,所以為了進行必要的分?jǐn)?shù)相加,這里的“i<2”應(yīng)該改成“i<n”。第三個錯誤在for循環(huán)的求和算式中,這里是結(jié)構(gòu)體變量的求和,語法上本來是沒有任何錯誤的,但是要看清題目要求的計算學(xué)生第1門課程的平均分,然后再作為函數(shù)值返回。這里“sum+=std[i]score[1]”變量看起來是第一門,但根據(jù)數(shù)組從0位開始我們就能發(fā)現(xiàn)這里其實求的是學(xué)生第2門課程的總分,然后求出來的平均分也是第二門學(xué)科的,這完全不是題目的要求,所以這里的“sum+=std[i].score[1]”應(yīng)該要改為“sum+=std[i].score[0]”。4、給定程序MODI1.C中函數(shù)fun的功能是:應(yīng)用遞歸算法求形參a的平方根。求平方根的迭代公式如下:例如,a為2時,平方根值為:1.414214。請改正程序中的錯誤,使它能得出正確結(jié)果。注意:不要改動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ù)的功能是應(yīng)用遞歸算法求某數(shù)a的平方根。(1)主函數(shù)中“fun(x,1.0)”,x是double型變量,1.0是浮點數(shù),可知fun有兩個double型參數(shù),而第一標(biāo)識下“dounle”不是C語言關(guān)鍵字,所以應(yīng)將“doublefun(doublea,dounlex0)”改為“doublefun(doublea,doublex0)”。(2)第二個標(biāo)識下的if語句是判斷進行遞歸運算的條件,第二標(biāo)識下變量x0沒有定義,根據(jù)題意,這里是判斷x1和x0的差值的絕對值是否比O.00001大,所以第二個標(biāo)識下“if(fabs(x1-x0)>0.00001)”改為“if(fabs(x1-x0)>0.00001)”。5、給定程序NODI1.C中,函數(shù)fun的功能是:判斷輸入的任何一個正整數(shù)n,是否等于某個連續(xù)正整數(shù)序列之和。若是,則輸出所有可能的序列,否則輸出“不能分解”。例如:當(dāng)輸入100時,輸出:100=9+10+11+12+13+14+15+16100=18+19+20+21+22請改正函數(shù)fun中指定部位的錯誤,使它能得出正確的結(jié)果。注意:不要改動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("請輸入一個整數(shù):");scanf("%d",&n);fun(n);}標(biāo)準(zhǔn)答案:(1)m=n;(2)m=m—c;c++;(3)if(m==0)知識點解析:(1)每次循環(huán),程序需要對n執(zhí)行減去連續(xù)的正整數(shù)序列來判斷n是否剛好為0,即n是否是連續(xù)的正整數(shù)序列之和,所以需要使用臨時變量m寄存n的值,每次循環(huán)對m執(zhí)行減運算操作,不滿足繼續(xù)下一輪。另外,程序聲明變量m時,未初始化它的值,所以此處應(yīng)該修改為:m=n。(2)語法錯誤。C語言中每個語句必須以分號結(jié)束,所以應(yīng)修改為:m=m—c;c++;。(3)題目判斷n是否是連續(xù)的正整數(shù)序列之和,若是,則輸出所有序列,程序中m依次減去連續(xù)的正整數(shù),當(dāng)m為0時,表示m(即n)滿足條件,再輸出當(dāng)前序列中的每個正整數(shù),所以此處判斷條件反了,應(yīng)修改為:if(m==0)。國家二級C語言機試(程序修改題)模擬試卷第5套一、程序修改題(本題共5題,每題1.0分,共5分。)1、給定程序MODI1.C中函數(shù)fun的功能是:計算正整數(shù)num的各位上的數(shù)字之積。例如,若輸入:252,則輸出應(yīng)該是:20。若輸入:202,則輸出應(yīng)該是:0。請改正程序中的錯誤,使它能得出正確的結(jié)果。注意:不要改動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;知識點解析:(1)第一個錯誤標(biāo)識下的k是函數(shù)的返回值,子函數(shù)fun中在執(zhí)行“k*=num%10:”之前,只進行了定義,卻沒有賦初值,編譯時會警告變量在使用之前沒有初始化k。k代表了各個位上的數(shù)字之積,其初值應(yīng)為1。因此,第一個標(biāo)識下的“l(fā)ongk;”改為“l(fā)ongk=1:”。(2)第二個標(biāo)識下的符號“\”是非法字符,根據(jù)題意,這里應(yīng)該是進行除法運算,所以“num\=10:”應(yīng)該改為“num/=10;”。2、下列給定程序中,函數(shù)fun的功能是:根據(jù)輸入的三個邊長(整型值),判斷能否構(gòu)成三角形。若能構(gòu)成等邊三角形,則返回3;若是等腰三角形,則返回2;若能構(gòu)成三角形則返回1;若不能,則返回0。請改正程序中的錯誤,使它能得出正確的結(jié)果。注意:不要改動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;知識點解析:(1)變量a、b、c分別表示三條邊,當(dāng)三邊相等(a==b&&b==c)時,返回3。(2)在能構(gòu)成三角形的前提下,如果不能構(gòu)成等邊三角形或等腰三角形,則返回1。3、給定程序MODI1.C中函數(shù)fun的功能是:統(tǒng)計字符串中各元音字母(即:A、E、I、O、U)的個數(shù)。注意:字母不分大、小寫。例如:若輸入:THIsisaboot,則輸出應(yīng)該是:1、0、2、2、0。請改正程序中的錯誤,使它能得出正確的結(jié)果。注意:不要改動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)知識點解析:(1)第一個標(biāo)識下的for循環(huán)過程是將num數(shù)組中的變量初始值設(shè)置為0,用來統(tǒng)計每一個元音字母出現(xiàn)的個數(shù),for循環(huán)中的循環(huán)條件表達式中的變量是k,所以第二個標(biāo)識下“num[i]=0;”改為“num[k]=0;”。(2)第二個標(biāo)識下的switch—case條件選擇的功能應(yīng)該是對s指針指向的字符串中的每一個字符進行判斷,不應(yīng)該是s的數(shù)組名,所以第三個標(biāo)識下“switch(s)”改為“switch(*s)”4、給定程序MODI1.C中函數(shù)fun的功能是:求整數(shù)x的y次方的低3位值。例如,整數(shù)5的6次方為15625,此值的低3位值為625。請改正函數(shù)fun中指定部位的錯誤,使它能得出正確的結(jié)果。注意:不要改動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ù)的功能是求整數(shù)X的Y次方的低3位值。(1)第一個標(biāo)識下的“for(i=1;i5、給定程序MODI1.C中fun函數(shù)的功能是:根據(jù)整型形參m,計算如下公式的值。例如,若主函數(shù)中輸入5,則應(yīng)輸出—0.283333。請改正函數(shù)fun中的錯誤或在橫線處填上適當(dāng)?shù)膬?nèi)容并把橫線刪除,使它能計算出正確的結(jié)果。注意:不要改動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ù)的功能是計算公式的值。(1)第一個標(biāo)識下的“t=1.0—1/i:”語句對題干中給出的多項式的求值,而根據(jù)題干中多項式的特點,多項式應(yīng)該是“t=t—1.0/1;”。(2)根據(jù)函數(shù)定義,fun函數(shù)應(yīng)該具有返回值,第二個標(biāo)識下的填空應(yīng)該是“returnt;”返回多項式的值。國家二級C語言機試(程序修改題)模擬試卷第6套一、程序修改題(本題共5題,每題1.0分,共5分。)1、給定程序MODI1.C中函數(shù)fun的功能是:按順序給s所指數(shù)組中的元素賦予從2開始的偶數(shù),然后再按順序?qū)γ课鍌€元素求一個平均值,并將這些值依次存放在W所指的數(shù)組中。若s所指數(shù)組中元素的個數(shù)不是5的倍數(shù),多余部分忽略不計。例如,s所指數(shù)組有14個元素,則只對前10個元素進行處理,不對最后的4個元素求平均值。請改正程序中的錯誤,使它能得出正確結(jié)果。注意:不要改動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)知識點解析:(1)在第一標(biāo)識下“sun=0.0;”,根據(jù)題意,這是給sum賦值,而sun沒有定義編譯時會提示錯誤,應(yīng)改為“sum=0.0;”。(2)錯誤標(biāo)識下的if判斷語句是依順序取5個字符,if中的邏輯表達式語法有誤,由于1%5恒等于1,所以i+1%5也就等價于i+1了,所以將“if(i+1%5==0)”改為“if((i+1)%5==0)”,此處主要注意的是運算符的優(yōu)先級。2、給定程序MODI1.C中函數(shù)fun的功能是:從低位開始取出長整型變量s中偶數(shù)位上的數(shù),依次構(gòu)成一個新數(shù)放在t中。高位仍在高位,低位仍在低位。例如,當(dāng)s中的數(shù)為:7654321時,t中的數(shù)為:642。請改正程序中的錯誤,使它能得出正確的結(jié)果。注意:不要改動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ù)目的是取出長整型變量s中偶數(shù)位上的數(shù)。(1)第一個標(biāo)識下的形參t被定義為一個long型變量,而對應(yīng)的主函數(shù)中的實參卻是一個地址值。因此,t在函數(shù)定義中應(yīng)該被定義為一個指針變量,即“voidfun(longs,longt)”改為“voidfun(longs,long*t)”。(2)第二個標(biāo)識下的while循環(huán)控制表達式“s<0”要求s小于0才進入循環(huán)。而s的值總是大于0,因此將“while(s<0)”改為“while(s>0)”。3、使用VC++2010打開考生文件夾下modi1中的解決方案。此解決方案的項目中包含一個源程序文件modi1.c。在此程序中,函數(shù)fun的功能是求矩陣(二維數(shù)組)a[N][N]中每行的最小值,結(jié)果存放到數(shù)組b中。假如:若則結(jié)果應(yīng)為1,5,9,13,請改正函數(shù)fun中指定部位的錯誤,使它能得出正確的結(jié)果。注意:不要改動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ù)組b存放每行的最小值,針對二維數(shù)組使用二層循環(huán),在第一層循環(huán)的開始將每行的第1個數(shù)賦給數(shù)組b相應(yīng)的元素,在第二層循環(huán)中,數(shù)組b中的元素依次與本行中的每個元素進行比較,找到一行中的最小值存入數(shù)組b。(1)b[i]存放二級數(shù)組a每一行中第1個元素值,表示為a[i][0]。(2)每行元素的第1個值要和這一行中的每個元素進行比較,條件j<N可使a[i][j]取到最后元素,而條件j<N﹣1使a[i][j]最終取得倒數(shù)第2個元素。(3)因為是找最小值,所以當(dāng)b[i]大于其后的數(shù)值時說明它不是最小,要把比較中較大的值賦給它。4、下列給定程序中函數(shù)fun的功能是:計算n!。例如,給n輸入5,則輸出120.000000。請改正程序中的錯誤,使它能得出正確的結(jié)果。注意:不要改動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一一;}知識點解析:(1)這里是一個簡單的格式錯誤,if條件判斷語句應(yīng)該加括號。(2)根據(jù)階乘的概念,從n開始,n!=n*(n一1)!,直到1,所以應(yīng)該為result*=n一一;。5、給定程序MODI1.C中函數(shù)fun的功能是:計算S=f(-n)+f(-n+1)+…+f(0)+f(1)+f(2)+…+f(n)的值。例如,當(dāng)n為5時,函數(shù)值應(yīng)為:10.407143。f(x)函數(shù)定義如下:請改正程序中的錯誤,使程序能輸出正確的結(jié)果。注意:不要改動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ù)的功能是計算題干中給出的公式值。主函數(shù)main調(diào)用fun函數(shù),fun函數(shù)的功能是實現(xiàn)數(shù)列的求解。其中,fun函數(shù)中調(diào)用實現(xiàn)每一項的f函數(shù)。(1)第一個標(biāo)識下f函數(shù)的定義缺少返回值類型,所以,將“f(doublex)”改為“doublef(doublex)”。(2)第二個標(biāo)識下返回語句沒有分號結(jié)束。所以,第二個標(biāo)識下“returns”應(yīng)該改為“returns:”。國家二級C語言機試(程序修改題)模擬試卷第7套一、程序修改題(本題共5題,每題1.0分,共5分。)1、給定程序MODI1.C中fun函數(shù)的功能是:求s=aa…aa-…-aaa-aua-a(此處aa…aa表示11個a,a和n的值在1至9之間)例如a=3,n=6,則以上表達式為:s=333333-33333-3333-333-33-3其值是:296298a和n是fun函數(shù)的形參,表達式的值作為函數(shù)值傳回main函數(shù)。請改正程序中的錯誤,使它能計算出正確的結(jié)果。注意:不要改動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ù)的功能是求s=aa…aa.….a(chǎn)aa,-aa-a。(1)當(dāng)進入第一循環(huán),“t=t*10+a;”語句,如果輸入的a是3,并且利用題目中給出的初始化值1,計算得出t的值為13,而實際應(yīng)該是3,由此可知t的初值設(shè)置不正確,不應(yīng)該是1。所以將“l(fā)ongs=0,t=1;”改為“:longs=0,t==0;”。(2)循環(huán)中通過語句“tm%10;”來獲得每一項,每循環(huán)一次,t的值應(yīng)縮小10倍,這里應(yīng)該用除以10來實現(xiàn),而不能用“%”求余數(shù)。所以將“t=t%10;”改為“t=t/10;”。2、已知一個數(shù)列從第0項開始的前三項分別為0,0,1,以后的各項都是其相鄰的前三項之和。給定程序MODI1.C中函數(shù)fun的功能是:計算并輸出該數(shù)列前n項的平方根之和。n的值通過形參傳入。例如,當(dāng)n=10時,程序的輸出結(jié)果應(yīng)為:23.197745。請改正程序中的錯誤,使程序能輸出正確的結(jié)果。注意:不要改動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;知識點解析:(1)第一個錯誤標(biāo)識下fun函數(shù)的定義根據(jù)題干要返回前n項的平方根之和,函數(shù)具有返回值,所以“fun(intn)”應(yīng)改為“doublefun(intn)”,其中,double為雙精度型變量。(2)第二個標(biāo)識符下返回平方根之和,根據(jù)C語言語法每一句C語言后面應(yīng)該以“;”為結(jié)尾,所以“returnsum”改為“returnsum;”。3、下列給定程序中函數(shù)fun的功能是:用冒泡法對6個字符串按由小到大的順序進行排序。請改正程序中的錯誤,使它能得出正確的結(jié)果。注意:不要改動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);知識點解析:本題考查:冒泡排序算法;for循環(huán)語句格式;指針數(shù)組。(1)此處考查for語句的格式,各表達式之間應(yīng)用“;”隔開。(2)此處考查用指針表示數(shù)組元素的方法,*(pstr+i)表示pstr所指向數(shù)組的第i個元素,同理*(pstr+j)表示pstr所指向數(shù)組的第j個元素。冒泡排序算法,其基本思想是:將待排序的元素看做是豎著排列的“氣泡”,較小的元素比較輕,從而要往上浮。在冒泡排序算法中要對“氣泡”序列處理若干遍。所謂一遍處理,就是自底向上檢查一遍這個序列,并時刻注意兩個相鄰元素的順序是否正確。如果發(fā)現(xiàn)兩個相鄰元素的順序不對,即“輕”的元素在下面,就交換它們的位置。顯然,處理一遍之后,“最輕”的元素就浮到了最高位置;處理兩遍之后,“次輕”的元素就浮到了次高位置。依此類推,完成排序。實現(xiàn)數(shù)組s[N]的升序排列代碼如下:{t=s[i];s[i]=s[j];4、下列給定程序中,函數(shù)fun的功能是:對N名學(xué)生的學(xué)習(xí)成績,按從高到低的順序找出前m(m≤10)名學(xué)生來,并將這些學(xué)生的數(shù)據(jù)存放在一個動態(tài)分配的連續(xù)存儲區(qū)中,此存儲區(qū)的首地址作為函數(shù)值返回。請改正程序中的錯誤,使它能得出正確的結(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]知識點解析:(1)caLlloc函數(shù)用于分配內(nèi)存空間。其調(diào)用形式為(類型說明符*)calloc(n,size),功能:在內(nèi)存動態(tài)存儲區(qū)中分配n塊長度為“size”字節(jié)的連續(xù)區(qū)域,函數(shù)的返回值為該區(qū)域的首地址,(類型說明符*)用于強制類型轉(zhuǎn)換。calloc函數(shù)與maⅡoc函數(shù)的區(qū)別在于calloc函數(shù)一次可以分配n塊區(qū)域。例如,ps=(structstu*)calloc(2,sizeof(structstu));,其中的sizeof(structstu)是求stu的結(jié)構(gòu)長度。該語句的意思是:按stu的長度分配兩塊連續(xù)區(qū)域,強制轉(zhuǎn)換為stu類型,并把其首地址賦予指針變量ps。在本題中不用考慮那么復(fù)雜,根據(jù)定義類型STUb[N],*t;就可以看出*t=calloc(m,sizeotf(STU))中的錨誤。(2)t[k].num=b[j].num的錯誤旨在考查對結(jié)構(gòu)體概念的掌握和靈活應(yīng)用程度。5、給定程序MODI1.C中函數(shù)fun的功能是:求出s所指字符串中最后一次出現(xiàn)的t所指子字符串的地址,通過函數(shù)值返回,在主函數(shù)中輸出從此地址開始的字符串:若未找到,則函數(shù)值為NULL。例如,當(dāng)字符串中的內(nèi)容為“abcdabfabcdx”,t中的內(nèi)容為“ab”時,輸出結(jié)果應(yīng)是“abcdx”。當(dāng)字符串中的內(nèi)容為“abcdabfabcdx”,t中的內(nèi)容為“abd”時,則程序輸出未找到信息“notbefound!”。請改正程序中的錯誤,使它能得出正確的結(jié)果。注意:不要改動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ù)功能是求得字符串中某子
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五年度生態(tài)保護項目融資及生態(tài)保護咨詢服務(wù)協(xié)議3篇
- 西安理工大學(xué)《建筑制圖與AutoCAD》2023-2024學(xué)年第一學(xué)期期末試卷
- 二零二五年文化產(chǎn)業(yè)就業(yè)合作項目協(xié)議2篇
- 二零二五版二手車買賣合同范本:車輛過戶手續(xù)與稅費計算2篇
- 二零二五版基因合成與生物信息分析合同3篇
- 2024版升級版?zhèn)€人租房協(xié)議3篇
- 2024納稅擔(dān)保合同模板:稅務(wù)咨詢擔(dān)保2篇
- 二零二五年度智能家居系統(tǒng)設(shè)計與施工一體化服務(wù)協(xié)議2篇
- 2024年度專用網(wǎng)絡(luò)安全技術(shù)服務(wù)合同
- 天津財經(jīng)大學(xué)《計算機學(xué)科前沿》2023-2024學(xué)年第一學(xué)期期末試卷
- 經(jīng)方治療腦梗塞的體會
- 新版DFMEA基礎(chǔ)知識解析與運用-培訓(xùn)教材
- 制氮機操作安全規(guī)程
- 衡水市出租車駕駛員從業(yè)資格區(qū)域科目考試題庫(全真題庫)
- 護理安全用氧培訓(xùn)課件
- 《三國演義》中人物性格探析研究性課題報告
- 注冊電氣工程師公共基礎(chǔ)高數(shù)輔導(dǎo)課件
- 土方勞務(wù)分包合同中鐵十一局
- 乳腺導(dǎo)管原位癌
- 冷庫管道應(yīng)急預(yù)案
- 司法考試必背大全(涵蓋所有法律考點)
評論
0/150
提交評論