版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
國(guó)家二級(jí)C語言機(jī)試(程序修改題)模擬試卷1(共9套)(共44題)國(guó)家二級(jí)C語言機(jī)試(程序修改題)模擬試卷第1套一、程序修改題(本題共5題,每題1.0分,共5分。)1、使用VC++2010打開考生文件夾下modi1中的解決方案。此解決方案的項(xiàng)目中包含一個(gè)源程序文件modi1.c。在此程序中,函數(shù)fun的功能是:比較兩個(gè)字符串,將長(zhǎng)的字符串的首地址作為函數(shù)值返回。請(qǐng)改正程序中的錯(cuò)誤,使它能得出正確的結(jié)果。注意:部分源程序在文件MODI1.C中,不要改動(dòng)main函數(shù),不得增行或刪行,也不得更改程序的結(jié)構(gòu)!試題程序:#include<conio.h>#include<stdio.h>/*********found*********/doublefun(char*s,char*t){ints1=0,t1=0;char*ss,*tt;ss=S;tt=t;while(*ss){s1++;/*********found*********/(*ss)++;}while(*tt){t1++;/*********found*********/(*tt)++;}if(t1>s1)returnt;elsereturns;}voidmain(){chara[80],b[80];printf("\nEnterastring:");gets(a);printf("\nEnterastringagain:");gets(b);printf("\nThelongeris:\n\n%s\n",fun(a,b));}標(biāo)準(zhǔn)答案:(1)char*fun(char*s,char*t)(2)ss++;(3)tt++;知識(shí)點(diǎn)解析:(1)在主函數(shù)的輸出語句中,函數(shù)fun是以字符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語言中字符常量是由單引號(hào)括起的單個(gè)字符,即空格字符應(yīng)為“’’”,而“""”是表示字符串常量且該字符串中只有一個(gè)空格字符。第二標(biāo)識(shí)下是將空格字符復(fù)制給b[k++],因此第二標(biāo)識(shí)下應(yīng)改為“b[k++]=’’;”。3、下列給定程序中函數(shù)fun的功能是:將s所指字符串的正序和反序進(jìn)行連接,形成的新串放在t所指的數(shù)組中。例如,當(dāng)s所指字符串為“ABCD”時(shí),t所指字符串中的內(nèi)容應(yīng)為“ABCDDCBA”。請(qǐng)改正程序中的錯(cuò)誤,使它能得出正確的結(jié)果。注意:不要改動(dòng)main函數(shù),不得增行或刪行,也不得更改程序的結(jié)構(gòu)!試題程序:#include<conio.h>#include<stdio.h>#include<string.h>/*********found*********/voidfun(chars,chart){inti,d;d=Str1en(s);for(i=0;i<d;i++)t[i]=s[i];for(i=0;i<d;i++)t[d+i]=s[d一1一i];/*********found*********/t[2*d一1]=’\0’;}main(){chars[100],t[100];printf("inPleaseenterstrings:");scanf("%s",s);fun(s,t);printf("\nTberesultis:%skn",t);}標(biāo)準(zhǔn)答案:(1)voidfun(char*s,char*t)(2)t[2*d]=’\0’;或t[d+i]=’\0’;或t[2*d]=0;或t[d+i]=0;知識(shí)點(diǎn)解析:(1)從調(diào)用函數(shù)來看,函數(shù)傳遞的是數(shù)組,所以函數(shù)的形參應(yīng)為指針。(2)循環(huán)結(jié)束后回文字符的個(gè)數(shù)為2*d個(gè),因?yàn)閿?shù)組下標(biāo)是從0開始的,所以最后一個(gè)字符的下標(biāo)為2*d一1,在最后一個(gè)字符的后面加上結(jié)束符’\0’,因此為t[2*d]=’\0’;。4、下列給定程序中函數(shù)fun的功能是:根據(jù)整型形參m,計(jì)算如下公式的值:例如,若m的值為5,則應(yīng)輸出1.463611。請(qǐng)改正程序中的錯(cuò)誤,使它能得出正確的結(jié)果。注意:不要改動(dòng)main函數(shù),不得增行或刪行,也不得更改程序的結(jié)構(gòu)!試題程序:#include<conio.h>#include<stdio.h>doublefun(intm){doubley=1.0;inti;/*********found*********/for(i=2;i<m;i++)/*********found*********/y+=1/(i*i);return(y);}main(){intn=5;printf("\nTheresultis%1f\n",fun(n));}標(biāo)準(zhǔn)答案:(1)for(i=2;i<=m;i++)(2)y+=1.0/(i*i);或y+=(double)1/(i*i);知識(shí)點(diǎn)解析:(1)根據(jù)公式可以知道for循環(huán)語句中變量i的取值范圍應(yīng)該包括m。(2)變量y是一個(gè)double型變量,而i是整型變量,所以要進(jìn)行類型轉(zhuǎn)換,改為y+=1.0/(i*i);或y+=(double)1/(i*i);。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語言中,for語句形式是:for(表達(dá)式1;表達(dá)式2;表達(dá)式3)循環(huán)體語句。因此第一個(gè)標(biāo)識(shí)下,for使用錯(cuò)誤,應(yīng)該為“for(j=i+1;j<6;j++)”。(2)if語句后的復(fù)合語句的功能是把“*(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語言機(jī)試(程序修改題)模擬試卷第2套一、程序修改題(本題共5題,每題1.0分,共5分。)1、使用VC++2010打開考生文件夾下modi1中的解決方案。此解決方案的項(xiàng)目中包含一個(gè)源程序文件modi1.c。在此程序中,函數(shù)fun的功能是:先從鍵盤上輸入一個(gè)3行、3列的矩陣的各個(gè)元素的值,然后輸出主對(duì)角線元素之和。請(qǐng)改正程序中的錯(cuò)誤,使它能得出正確的結(jié)果。注意:部分源程序在文件MODI1.C中,不要改動(dòng)main函數(shù),不得增行或刪行,也不得更改程序的結(jié)構(gòu)!試題程序:#include<stdio.h>voidfun(){inta[3][3],sum;inti,J;/*********found*********/sum=1;for(i=0;i<3;i++){for(j=0;j<3;j++)/*********found*********/scanf("%d",a[i][j]);}for(i=0;i<3;i++)sum=sum+a[i][i];printf("sum=%d\n",sum);}voidmain(){fun();}標(biāo)準(zhǔn)答案:(1)sum=0;(2)scanf("%d",&a[i][j]);知識(shí)點(diǎn)解析:該題考查對(duì)循環(huán)語句的掌握和對(duì)數(shù)組概念的理解。本題的解題思路為:先從鍵盤輸入一個(gè)3×3矩陣,然后循環(huán)累加,執(zhí)行循環(huán)語句中的sum=sum+a[i][i];。因?yàn)樽兞縮um用來存放累加后的結(jié)果,所以應(yīng)對(duì)其初始化為0。第二處錯(cuò)誤考查標(biāo)準(zhǔn)輸入函數(shù)scanf的格式,被賦值的變量前要加上取地址符"&"。2、使用VC++2010打開考生文件夾下modi1中的解決方案。此解決方案的項(xiàng)目中包含一個(gè)源程序文件modi1.c。在此程序中,函數(shù)fun的功能是:求兩個(gè)非零正整數(shù)的最大公約數(shù),并作為函數(shù)值返回。例如,若num1和num2分別為49和21,則輸出的最大公約數(shù)為7;若num1和num2分別為27和81,則輸出的最大公約數(shù)為27。請(qǐng)改正程序中的錯(cuò)誤,使它能得出正確結(jié)果。注意:不要改動(dòng)main函數(shù),不得增行或刪行,也不得更改程序的結(jié)構(gòu)!試題程序:#include<stdio.h>intfun(inta,intb){intr,t;if(a<b){/*********found*********/t=a;b=a;a=t;}r=a%b;while(r!=0){a=b;b=r;r=a%b;}/*********found*********/return(a);}voidmain(){intnum1,num2,a;printf("Inputnum1num2:");scanf("%d%d",&num1,&hum2);printf("num1=%dnum2=%d\n\n",num1,hum2);a=fun(num1,num2);printf("Themaximuncommondivisoris%d\n\n",a);}標(biāo)準(zhǔn)答案:(1){t=a;a=b;b=t;}(2)return(b);或returnb;知識(shí)點(diǎn)解析:求最大公約數(shù)算法一般采用輾轉(zhuǎn)相除法。輾轉(zhuǎn)相除法的算法為:首先將m除以n(m>n)得余數(shù)r,再用余數(shù)r去除原來的除數(shù),得到新的余數(shù),重復(fù)此過程直到余數(shù)為0時(shí)停止,此時(shí)的除數(shù)就是m和n的最大公約數(shù)。程序首先判斷參數(shù)a和b的大小,如果a<b則進(jìn)行交換,這里是一個(gè)數(shù)學(xué)邏輯錯(cuò)誤,應(yīng)先將a的值賦給中間變量t,再將b的值賦給a,最后將t的值賦給b。當(dāng)余數(shù)r為0時(shí),除數(shù)b即為所求的最大公約數(shù),所以函數(shù)應(yīng)返回b。3、下列給定程序中,函數(shù)fun的功能是:刪除指針P所指字符串中的所有空白字符(包括制表符、回車符及換行符)。輸入字符串時(shí)用’#’結(jié)束輸入。請(qǐng)改正程序中的錯(cuò)誤,使它能輸出正確的結(jié)果。注意:不得增行或刪行,也不得更改程序的結(jié)構(gòu)!試題程序:#include#include#includefun(char*P){inti,t;charc[80];/******found******/For(i=0,t=0;P[i];i++)if(!isspace(*(P+i)))c[t++]=P[i];/******found******/c[t]=“\0”;strepy(p,c);}main(){charc,s[80];inti=0;prinff(“Inputastring:”);c=getchar();while(c!=‘#’){s[i]=c;i++;c=getehar();}8[i]=‘\0’;fun(s);puts(s);}標(biāo)準(zhǔn)答案:(1)for(i=0,t=0;p[i];i++)(2)c[t]=’\0’;知識(shí)點(diǎn)解析:本題考查:C語言關(guān)鍵字;字符串結(jié)束標(biāo)識(shí)’\0’。該題目考查C語言關(guān)鍵字的書寫,C語言中關(guān)鍵字是區(qū)分大小寫的。另外為字符串結(jié)尾添加結(jié)束符時(shí)應(yīng)書寫為’\0’,而非”\0”,’\0’表示一個(gè)字符串。該程序的if條件中應(yīng)用了isspace函數(shù),該函數(shù)的功能是檢查ch是否空格、跳格符(制表符)或換行符。4、下列給定程序中,函數(shù)fun的功能是:計(jì)算并輸出下列級(jí)數(shù)的前N項(xiàng)和SN,直到SN+1的值大于q為止,q的值通過形參傳入。例如,若q的值為50.0,則函數(shù)值應(yīng)為49.394948。請(qǐng)改正程序中的錯(cuò)誤,使它能得出正確的結(jié)果。注意:不要改動(dòng)main函數(shù),不得增行或刪行,也不得更改程序的結(jié)構(gòu)!試題程序:#include<conio.h>#include<Stdio.h>doublefun(doubleq){intn;doubles,t;n=2;s=2.0;while(s<=q){t=s;/*********found*********/s=s+(n+1)/n;n++;}printf("n=%d\n",n);/*********found*********/returns;}main(){printf("%f\n",fun(50));}標(biāo)準(zhǔn)答案:(1)s=s+(double)(n+1)/n;(2)returnt;知識(shí)點(diǎn)解析:(1)在C語言中,整數(shù)除以整數(shù)得出的結(jié)果也是整數(shù),因此此處要轉(zhuǎn)換數(shù)據(jù)類型。(2)觀察while循環(huán),如果返回變量是s,那么返回的是大于q的值,而題中所要返回的是小于q的值,所以應(yīng)該返回變量t。5、給定程序MODI1.C中函數(shù)fun的功能是:求出s所指字符串中最后一次出現(xiàn)的t所指子字符串的地址,通過函數(shù)值返回,在主函數(shù)中輸出從此地址開始的字符串:若未找到,則函數(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ù)功能是求得字符串中某子串最后一次出現(xiàn)的地址。(1)第一個(gè)標(biāo)識(shí)下面:語句“a=Null;”中的Null未定義。NULL上代表空值,但程序中寫成了Null。所以,改成“a=NULL;”。(2)程序的主體是二重循環(huán),其中,外循環(huán)使指針s逐個(gè)指向字符串的字符,直到遇到串結(jié)束符退出循環(huán),內(nèi)循環(huán)檢查指針p與r所指字符串是否匹配。因?yàn)檫@里p、r是指針,如果使用判斷表達(dá)式“if(r==p)”,那么比較的是地址,而題目要求比較它們所指的字符。所以,改為:“if(*r=*p)”。國(guó)家二級(jí)C語言機(jī)試(程序修改題)模擬試卷第3套一、程序修改題(本題共5題,每題1.0分,共5分。)1、下列給定程序中,函數(shù)fun的功能是:在整數(shù)10到55之間,查找能被3整除且有一位上的數(shù)值是5的數(shù),把這些數(shù)放在b所指的數(shù)組中,這些數(shù)的個(gè)數(shù)作為函數(shù)值返回。規(guī)定函數(shù)中a1放個(gè)位數(shù),a2放十位數(shù)。請(qǐng)改正程序中的錯(cuò)誤,使它能得出正確的結(jié)果。注意:不得增行或刪行,也不得更改的程序的結(jié)構(gòu)!試題程序:#include<stdio.h>intfun(int*b){intk,a1,a2,i=0;for(k=10;k<=55;k++){/******found******/a2=k/10;a1=k-a2*10:if((k%3==0&&a2==5)||(k%3==0&&a1==5)){b[i]=k;i++;}}/******found******/returnk;}main(){inta[100],k,m;m=fun(a);printf("Theresultis:\n");for(k=0;k<m;k++)printf("%4d",a[k]);printf("\n");}標(biāo)準(zhǔn)答案:(1)a2=k/10;(2)returni;知識(shí)點(diǎn)解析:本題考查:取數(shù)值n的各個(gè)位;return語句,將需要返回的函數(shù)值返回給函數(shù)main。(1)a2存放十位數(shù),所以是a2=k/10,此處是一個(gè)書寫錯(cuò)誤。(2)根據(jù)題意,要返回能被3整除的數(shù)的個(gè)數(shù),從循環(huán)體中可以知道其個(gè)數(shù)是由i來計(jì)算的,所以返回的是i。2、使用VC++2010打開考生文件夾下modi1中的解決方案。此解決方案的項(xiàng)目中包含一個(gè)源程序文件modi1.c。在此程序中,函數(shù)fun的功能是:將十進(jìn)制正整數(shù)m轉(zhuǎn)換成k(2≤k≤9)進(jìn)制數(shù),并按位輸出。例如,若輸入8和2,則應(yīng)輸出1000(即十進(jìn)制數(shù)8轉(zhuǎn)換成二進(jìn)制表示是1000)。請(qǐng)改正程序中的錯(cuò)誤,使它能得出正確的結(jié)果。注意:部分源程序在文件NODI1.C中,不要改動(dòng)main函數(shù),不得增行或刪行,也不得更改程序的結(jié)構(gòu)!試題程序:#include<stdio.h>#include<conio.h>/*********found*********/voidfun(intm,intk);{intaa[20],i;for(i=0;m;i++){/*********found*********/aa[i]=m/k;m/=k;}for(;i;i﹣﹣)/*********found*********/printf("%d",aa[i]);}main(){intb,n;printf("\nPleaseenteranumbetandabase:\n");scanf("%d%d",&n,&b);fun(n,b);printf("\n");}標(biāo)準(zhǔn)答案:(1)voidfun(intm,intk)(2)aa[i]=m%k;(3)printf("%d",aa[i﹣1]);知識(shí)點(diǎn)解析:(1)函數(shù)定義的格式錯(cuò)誤,不應(yīng)帶有";"。(2)將十進(jìn)制正整數(shù)轉(zhuǎn)換為任意進(jìn)制的數(shù)與十進(jìn)制正整數(shù)轉(zhuǎn)換成二進(jìn)制的數(shù)的方法是一樣的。從整數(shù)n譯出它的各位k進(jìn)制數(shù)值,需采用除k取余的方法,即求n除k的余數(shù),得到它的k進(jìn)制的個(gè)位數(shù),接著將n除以k。在n不等于0的狀況下循環(huán),能順序求出n的k進(jìn)制的各個(gè)位上的數(shù)。(3)在進(jìn)行for(i=0;m;i++)循環(huán)結(jié)束時(shí),i已經(jīng)多加了一個(gè)1,所以這里要減去1。3、使用VC++2010打開考生文件夾下modi1中的解決方案。此解決方案的項(xiàng)目中包含一個(gè)源程序文件modi1.c。在此程序中,函數(shù)fun的功能是:給定n個(gè)實(shí)數(shù),輸出平均值,并統(tǒng)計(jì)平均值以上(含平均值)的實(shí)數(shù)個(gè)數(shù)。例如,n=8時(shí),輸入193.199、195.673、195.757、196.051、196.092、196.596、196.579、196.763、所得平均值為195.838745,在平均值以上的實(shí)數(shù)個(gè)數(shù)應(yīng)為5。請(qǐng)改正程序中的錯(cuò)誤,使其能得出正確的結(jié)果。注意:部分源程序在文件MODI1.C中,不要改動(dòng)main函數(shù),不得增行或刪行,也不得更改程序的結(jié)構(gòu)!試題程序:#include<stdlib.h>#include<conio.h>#include<stdio.h>intfun(floatx[],intn)/*********found*********/intj,c=0;floatxa=0.0;for(j=0;j<n;j++)xa+=x[j]/n;prntf("ave=%f\n",xa);for(j=0;j<n;j++)/*********found*********/if(x[j]=>xa)c++;returnc;}main(){floatx[100]={193.199,195.673,195.757,196.051,196.092,196.596,196.579,196.763};system(’cls");printf("%d\n",fun(x,8));}標(biāo)準(zhǔn)答案:(1){intj,c=0;floatxa=0.0;(2)if(x[j]>=xa)知識(shí)點(diǎn)解析:(1)本題著重考查考生對(duì)C語言基本語法以及比較運(yùn)算符的掌握情況。(2)本題中的第一個(gè)錯(cuò)誤:在C語言中,{}應(yīng)成對(duì)出現(xiàn),所以程序中的語句"intj,c=0;floatxa=0.0;"應(yīng)改為"{intj,c=0;floatxa=0.0;"或相同作用的語句;本題中的第二個(gè)錯(cuò)誤:在C語言中,判斷大于或等于的運(yùn)算符應(yīng)為>=,所以程序中的語句"if(x[j]=>xa)"應(yīng)改為"if(x[j]>=xa)"或相同作用的語句。4、下列給定程序的功能是:讀入一個(gè)整數(shù)k(2≤k≤10000),輸出它的所有質(zhì)因子(即所有為素?cái)?shù)的因子)。例如,若輸入整數(shù)2310,則應(yīng)輸出2,3,5,7,11。請(qǐng)改正程序中的錯(cuò)誤,使它能得出正確的結(jié)果。注意:不要改動(dòng)main函數(shù),不得增行或刪行,也不得更改程序的結(jié)構(gòu)!試題程序:#include<conio.h>#include<stdio.h>/******found******/IsPrime(intn);{inti,m;m=1for(i=2;i<n;i++)/******found******/if!(n%i){m=0;break;}return(m);}main(){intj,k;printf(″\nPleaseenteranintergernumberbetween2and10000:″);scanf(″%d″,&k);printf(″\nTheprimefactor(s)of%dis(are):″,k);for(j=2;j<k;j++)if((!(k%j))&&(IsPrime(j)))printf(″%4d,″,j);printf(″\n″);}標(biāo)準(zhǔn)答案:(1)IsPrime(intn)(2)if(!(n%i))知識(shí)點(diǎn)解析:本題考查:函數(shù)定義的格式;if條件的判斷語句。這些知識(shí)點(diǎn)必須掌握,因?yàn)榻?jīng)??嫉?。(1)函數(shù)定義格式錯(cuò)誤,函數(shù)定義時(shí)后面不能加“;”,所以應(yīng)該去掉分號(hào)。(2)根據(jù)題意可知,if條件語句判斷n是否可以整除i,如果不能整除則為質(zhì)因子,所以if!(n%i)應(yīng)改為if(!(n%i))。5、由N個(gè)有序整數(shù)組成的數(shù)列己放在一維數(shù)組中,給定程序MODI1.C中函數(shù)fun的功能是:利用折半查找算法查找整數(shù)m在數(shù)組中的位置。若找到,返回其下標(biāo)值;反之,返回—1。折半查找的基本算法是:每次查找前先確定數(shù)組中待查的范圍:low和high(lowhigh,查找結(jié)束。請(qǐng)改正程序中的錯(cuò)誤,使它能得出正確結(jié)果。注意:不要改動(dòng)mam函數(shù),不得增行或刪行,也不得更改程序的結(jié)構(gòu)。#include#defineN10voidfun(inta[]intm){intlow=0,high=N—1,mid;while(low<=high){mid=(low+high)/2;if(ma[mid])low=mid+1;elsereturn(mid);}return(—1);main(){inti,a[N]={—3,4,7,9,13,45,67,89,100,180},k,m;printf("a數(shù)組中|y|數(shù)據(jù)如下:");for(i=0;i國(guó)家二級(jí)C語言機(jī)試(程序修改題)模擬試卷第4套一、程序修改題(本題共5題,每題1.0分,共5分。)1、給定程序MODI1.C是建立一個(gè)帶頭結(jié)點(diǎn)的單向鏈表,并用隨機(jī)函數(shù)為各結(jié)點(diǎn)賦值。函數(shù)fun的功能是將單向鏈表結(jié)點(diǎn)(不包括頭結(jié)點(diǎn))數(shù)據(jù)域?yàn)榕紨?shù)的值累加起來,并且作為函數(shù)值返回。請(qǐng)改正函數(shù)fun中指定部位的錯(cuò)誤,使它能得出正確的結(jié)果。注意:不要改動(dòng)main函數(shù),不得增行或刪行,也不得更改程序的結(jié)構(gòu)!#include#includetypedefstructaa{intdata;structaa*next;}NODE;intfun(NODE*h){intsum=0;NODE*p;/**********found**********/p=h;while(P){if(P->data%2==0)sum+=p->data;/**********found**********/p=h->next;}returnsum;}NODE*treatlink(intn){NODE*h,*p,*s;inti;h=p=(NODE*)malloc(sizeof(NODE));for(i=1;i<=n;i++){s=(NODE*)malloc(sizeof(NODE));s->data=rand()%16;s->next=p->next;P->next=s;p=p->next;}P->Flext=NULL;returnh;}outlink(NODE*h,F(xiàn)ILE*pf){NODE*P;P=h->next;fprintf(pf,"\n\nTHELIST:\n\nHEAD");while(P){fprintf(pf,"->%d",P->data);p=p->next;}fprintf(pf,"\n");}outresult(ints,F(xiàn)ILE*pf){fprintf(pf,"\nTheSLImofevennumbers:%d\n",s);)main(){NODE*head;inteven;head=creatlink(12);head->data=9000;outlink(head,stdout);even=fun(head);printf("\nTheresult:\n");outresult(eVen,stctout);}標(biāo)準(zhǔn)答案:(1)p=h->next;(2)p=p->next;知識(shí)點(diǎn)解析:(1)根據(jù)題干中求得除了頭結(jié)點(diǎn)之外的結(jié)點(diǎn)數(shù)據(jù)域中的數(shù)據(jù)值,頭指針h,工作指針p指向頭結(jié)點(diǎn)的下一個(gè)結(jié)點(diǎn),所以第一個(gè)標(biāo)識(shí)下的“p=h;”指向頭結(jié)點(diǎn)應(yīng)該改為指向下一個(gè)結(jié)點(diǎn)“p=h->next;”。(2)工作指針p,利用p實(shí)現(xiàn)對(duì)鏈表的遍歷,p表示指向鏈表的當(dāng)前結(jié)點(diǎn),所以指向下一個(gè)結(jié)點(diǎn)應(yīng)該是“p=p->next;”。2、下列給定程序中函數(shù)fun的功能是:將s所指字符串的正序和反序進(jìn)行連接,形成的新串放在t所指的數(shù)組中。例如,當(dāng)s所指字符串為“ABCD”時(shí),t所指字符串中的內(nèi)容應(yīng)為“ABCDDCBA”。請(qǐng)改正程序中的錯(cuò)誤,使它能得出正確的結(jié)果。注意:不要改動(dòng)main函數(shù),不得增行或刪行,也不得更改程序的結(jié)構(gòu)!試題程序:#include<conio.h>#include<Stdio.h>#include<string.h>/*********found*********/voidfun(chars,chart){inti,d;d=strlen(s);for(i=0;i<d;i++)t[i]=s[i];for(i=0;i<d;i++)t[d+i]=s[d一1一i];/*********found*********/t[2*d一1]=’\0’;}main(){chars[100],t[100];printf("knPleaseenterstrings:");scanf("%s",s);fun(s,t);printf("\nTheresultis:%s\n",t);}標(biāo)準(zhǔn)答案:(1)voidfun(char*s,char*t)(2)t[2*d]=’\0’;或t[d+i]=’\0’;或t[2*d]=0;或t[d+i]=0;知識(shí)點(diǎn)解析:(1)從調(diào)用函數(shù)來看,函數(shù)傳遞的是數(shù)組,所以函數(shù)的形參應(yīng)為指針。(2)循環(huán)結(jié)束后回文字符的個(gè)數(shù)為2*d個(gè),因?yàn)閿?shù)組下標(biāo)是從0開始的,所以最后一個(gè)字符的下標(biāo)為2*d一1,在最后一個(gè)字符的后面加上結(jié)束符’\0’,因此為t[2*d]=’\0’;。3、給定程序MODI1.C是建立一個(gè)帶頭結(jié)點(diǎn)的單向鏈表,并用隨機(jī)函數(shù)為各結(jié)點(diǎn)數(shù)據(jù)域賦值。函數(shù)fun的作用是求出單向鏈表結(jié)點(diǎn)(不包括頭結(jié)點(diǎn))數(shù)據(jù)域中的最大值,并且作為函數(shù)值返回。請(qǐng)改正函數(shù)fun中指定部位的錯(cuò)誤,使它能得出正確的結(jié)果。注意:不要改動(dòng)main函數(shù),不得增行或刪行,也不得更改程序的結(jié)構(gòu)!1#include<stdio.h>2#include<dtdlib.h>3typedefstructaa4{intdata;5structaa*next;6}NODE;7intfun(NODE*h)8{intmax=-1;9NODE*p;10/**********found**********/11p=h;12while(p)13{if(p->data>max)14max=p->data;15/**********found**********/16p=h->next;17}18returnmax;19}20outresult(ints,F(xiàn)ILE*pf)21{fprintf(pf,’’\nThemaxinlink:%d\n’’,s);}22NODE*creatlink(intn,intm)23{NODE*h,*p,*s;24inti;25h=p=(NODE*)malloc(sizeof(NODE));h->data=9999;26for(i=1;i<=n;i++)27{s=(NODE*)malloc(sizeof(NODE));28s->data=rand()%m;s->next=p->next;29p->next=s;p=p->next;30}31p->next=NULL;32returnh;33}34outlink(NODE*h,F(xiàn)ILE*pf)35{NODE*p;36p=h->next;37fprintf(pf,’’\nTHELIST:\n\nHEAD’’);38while(p)39{fprintf(pf,’’->%d’’,p->data);p=p->next;}40fprintf(pf,’’\n’’);41}42main()43{NODE*head;intm;44head=creatlink(12,100);45outlink(head,stdout);46m=fun(head);47printf(’’\nTHERESULT:\n’’);outresult(m,stdout);48}標(biāo)準(zhǔn)答案:(1)p=h->next;(2)p=p->next;知識(shí)點(diǎn)解析:函數(shù)功能是求單向鏈表結(jié)點(diǎn)(不包括頭結(jié)點(diǎn))數(shù)據(jù)域中的最大值。其中,單鏈表查找最大值及最小值的方法主要是對(duì)單鏈表的遍歷,并在遍歷過程中將初始化的最大值、最小值與鏈表中的每一個(gè)結(jié)點(diǎn)的數(shù)據(jù)域進(jìn)行比較。(1)根據(jù)題干中求得除了頭結(jié)點(diǎn)之外的結(jié)點(diǎn)數(shù)據(jù)域中的最大值,頭指針h,工作指針p指向頭結(jié)點(diǎn)的下一個(gè)結(jié)點(diǎn),所以,第一個(gè)標(biāo)識(shí)下的“p=h;”指向頭結(jié)點(diǎn)應(yīng)該改為指向下一個(gè)結(jié)點(diǎn)“p=h->next;”。(2)工作指針p,利用p實(shí)現(xiàn)對(duì)鏈表的遍歷,p表示指向鏈表的當(dāng)前結(jié)點(diǎn),所以指向下一個(gè)結(jié)點(diǎn)應(yīng)該是“p=p->next;”。4、給定程序MODI1.C中fun函數(shù)的功能是:求s=aa…aa一…-aaa-aa-a(此處aa…aa表示n個(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)!#cludelongfun(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-…-aaa-aa-a。(1)當(dāng)進(jìn)入第一循環(huán),“t=t*10+a;”語句,如果輸入的a是3,并且利用題目中給出的初始化值1,計(jì)算得出t的值為13,而實(shí)際應(yīng)該是3,由此可知t的初值設(shè)置不正確,不應(yīng)該是1。所以將“l(fā)ongs=0,t=1;”改為“l(fā)ongs=0,t=0;”。(2)循環(huán)中通過語句“t=%10;”來獲得每一項(xiàng),每循環(huán)一次,t的值應(yīng)縮小10倍,這里應(yīng)該用除以10來實(shí)現(xiàn),而不能用“%”求余數(shù)。所以將“t=t%10;”改為“t=t/10;”。5、給定程序MODI1.C中fun函數(shù)的功能是:將p所指字符串中每個(gè)單詞的最后一個(gè)字母改成大寫。(這里的“單詞”是指由空格隔開的字符串)。例如,若輸入"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;}msin(){charchrStr[64];intd;printf("\nPleaseenteranEnglishSentencewithin63letters:");gets(chrstr);d=strlen(chmstr);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īng)該是判斷字符串中的字符是否是空格,根據(jù)“for(;*p;p++)”語句中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īng)有分號(hào)。國(guó)家二級(jí)C語言機(jī)試(程序修改題)模擬試卷第5套一、程序修改題(本題共5題,每題1.0分,共5分。)1、給定程序MODI1.C中函數(shù)fun的功能是:計(jì)算并輸出high以內(nèi)最大的10個(gè)素?cái)?shù)之和。high的值由主函數(shù)傳給fun函數(shù)。若high的值為:100,則函數(shù)的值為:732。請(qǐng)改正程序中的錯(cuò)誤,使程序能輸出正確的結(jié)果。注意:不要改動(dòng)main函數(shù),不得增行或刪行,也不得更改程序的結(jié)構(gòu)!#include#includeintfun(inthigh){intsum=0fn=0,j,yes;/**********found**********/while((high>=2)&&(n<10){yes=1;for(j=2;j<=high/2;j++)if(high%j==0){/**********found**********/yes=0;break}if(yes){sum+=high;n++;)high--;}returnsum;}main(){printf("%dkn",fun(100));}標(biāo)準(zhǔn)答案:(1)while((2<=high)&&(n<10))(2)yes=0;break;知識(shí)點(diǎn)解析:函數(shù)的功能是計(jì)算并輸出high以內(nèi)最大的10個(gè)素?cái)?shù)之和。(1)C語言中左右括弧必須成對(duì)出現(xiàn),在第一個(gè)標(biāo)識(shí)下“while((hfigh>=2)&&(n<10)”中,顯然缺少一個(gè)右括弧,應(yīng)改為“while((2<=high)&&(n<10))”。(2)在判斷素?cái)?shù)的循環(huán)過程中,只要被判斷的數(shù)能被某數(shù)整除就不是素?cái)?shù),就會(huì)跳出判斷循環(huán),在C語言中使用break語句跳出循環(huán),并且C語言中的語句使用分號(hào)為結(jié)尾。所以“break”應(yīng)改為“break;”。2、使用VC++2010打開考生文件夾下modi1中的解決方案。此解決方案的項(xiàng)目中包含一個(gè)源程序文件modi1.c。在此程序中,函數(shù)fun的功能是:將s所指字符串中最后一次出現(xiàn)的與t1所指字符串相同的子串替換成t2所指字符串,所形成的新串放在w所指的數(shù)組中。要求t1和t2所指字符串的長(zhǎng)度相同。例如,當(dāng)s所指字符串中的內(nèi)容為“abcdabfabc”,t1所指串中的內(nèi)容為“ab”,t2所指子串中的內(nèi)容為“99”時(shí),結(jié)果在W所指的數(shù)組中的內(nèi)容應(yīng)為“abcdabt99c”。請(qǐng)改正程序中的錯(cuò)誤,使它能得出正確的結(jié)果。注意:不要改動(dòng)main函數(shù),不得增行或刪行,也不得更改程序的結(jié)構(gòu)!試題程序:#include<conio.h>#include<stdio.h>#include<string.h>voidfun(char*s,char*t1,char*t2,char*w){char*p,*r,*a,strcpy(w,s);/*********found*********/while(w){p=w;r=t1;while(*r)/*********found*********/TF(*r==*p){r++;p++;}else{break;}if(*r==’\0’)a=w;w++;}r=t2;while(*r){*a=*r;a++;r++;}}main(){chars[100],t1[100],t2[100],w[100];printf("\nPleaseenterstrings:");scanf("%s",s);printf("\nPleaseentersubstringt1:");scanf("%s",t1);printf("\nPleaseentersubstringt2:");scanf("%s",t2);if(strlen(t1)==strlen(t2)){fun(s,t1,t2,w);printf("\nTheresultis:%s\n",W);}else{printf("\nError:strlen(t1)!=strlen(t2)\n");}}標(biāo)準(zhǔn)答案:(1)while(*w)(2)if(*r==*p)知識(shí)點(diǎn)解析:(1)此處要判斷的是值的真假,而不是地址,所以改為while(*w)。(2)C語言中關(guān)鍵字區(qū)分大小寫,只需運(yùn)行程序,就可以根據(jù)錯(cuò)誤提示找到。3、假定整數(shù)數(shù)列中的數(shù)不重復(fù),并存放在數(shù)組中。下列給定程序中函數(shù)fun的功能是:刪除數(shù)列中值為X的元素,變量n中存放數(shù)列中元素的個(gè)數(shù)。請(qǐng)改正程序中的錯(cuò)誤,使它能得出正確的結(jié)果。注意:不要改動(dòng)main函數(shù),不得增行或刪行,也不得更改程序的結(jié)構(gòu)!試題程序:#include<stdio.h>#defineN20fun(int*a,intn,intx){intP=0,i;a[n]=x;while(x!=a[P])p=p+1;/*********found*********/if(p==n)return一1;else{for(i=P;i<n;i++)/*********found*********/a[i+1]=a[i];returnn—1;}}voidmain(){2ntw[N]={一3,0,1,5,7,99,10,15,30,90},x,n,i;n=10;printf("Theoriginaldata:\n");for(i=0;i<13;i++)printf("%5d",w[i]);printf("\nInputx(todelete):");Scanf("%d",&x);printf("Delete:%d\n",x);n=fun(w,n,x);if(n==一1)printf("***Nobefound!***\n\n");else{printf("Thedataafterdeleted:\n");for(i:0;i<n;i++)printf("%5d",w[i]);printf("\n\n");}}標(biāo)準(zhǔn)答案:(1)if(p==n)return一1;(2)a[i]=a[i+1];知識(shí)點(diǎn)解析:(1)需要確定if條件語句的條件表達(dá)式,發(fā)現(xiàn)變量p大寫,C語言中變量是區(qū)別大小寫的。(2)刪除數(shù)列中的元素,刪除后,后面的元素依次前移一個(gè)位置,因此此處應(yīng)為a[i]=a[i+1];。4、下列給定程序中,函數(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;sl=strlen(s);for(i=0;i<s1;i++)/*********found*********/t[i]=S[s1—i];for(i=0;i<=s1,i++)t[sl+i]=s[i];t[2*s1]=’\0’;}voidmain(){charS[100],t[100];system("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沒有定義。(2)該循環(huán)實(shí)現(xiàn)將s串中的字符逆序存入t串中,t[i]對(duì)應(yīng)8串中的s[s1一i一1]。5、給定程序MODI1.C中函數(shù)fun的功能是:通過某種方式實(shí)現(xiàn)兩個(gè)變量值的交換,規(guī)定不允許增加語句和表達(dá)式。例如變量a中的值原為8,b中的值原為3,程序運(yùn)行后a中的值為3,b中的值為8。請(qǐng)改正程序中的錯(cuò)誤,使它能得出正確的結(jié)果。注意:不要改動(dòng)main函數(shù),不得增行或刪行,也不得更改程序的結(jié)構(gòu)!#includeintfun(int*x,inty){intt;return(y);}main(){inta=3,b=8;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);知識(shí)點(diǎn)解析:(1)根據(jù)fun中x變量的定義,x為指針型變量,所以第一個(gè)錯(cuò)誤標(biāo)識(shí)下的“t=x;x=y;”改為“t=*x;*x=y;”。(2)交換之后t中存放原來x的值,x存放原來y的值,這里應(yīng)該是返回原來x的值,所以第二個(gè)標(biāo)識(shí)下的“return(y);”應(yīng)該改為“return(t),”或者“returnt;”。指針作為函數(shù)的參數(shù)、函數(shù)的定義以及調(diào)用。國(guó)家二級(jí)C語言機(jī)試(程序修改題)模擬試卷第6套一、程序修改題(本題共5題,每題1.0分,共5分。)1、使用VC++2010打開考生文件夾下modi1中的解決方案。此解決方案的項(xiàng)目中包含一個(gè)源程序文件modi1.c。在此程序中,函數(shù)fun的功能是:讀入一個(gè)字符串(長(zhǎng)度<20),將該字符串中的所有字符按ASCII碼值升序排序后輸出。例如,若輸入“edcba”,則應(yīng)輸出“abcde”。請(qǐng)改正程序中的錯(cuò)誤,使它能得出正確的結(jié)果。注意:部分源程序在文件MODI1.C中,不要改動(dòng)main函數(shù),不得增行或刪行,也不得更改程序的結(jié)構(gòu)!試題程序:#include<string.h>#include<Stdio.h>voidfun(chart[]){charc;inti,j;/*********found*********/for(i=strlen(t);i;i﹣﹣)for(j=0;j<i;j++)/*********found*********/if(t[j]<t[j+1]){C=t[j];t[j]=t[j+1];t[j+1]=C;}}main(){chars[81];printf("\nPleaseenteracharacterstring:");gets(s);printf("\n\nBeforesorting:\n%s",s);fun(s);printf("\nAftersortingdecendingly:\n%s",s);}標(biāo)準(zhǔn)答案:(1)for(i=strlen(t)﹣1;i;i﹣﹣)或for(i=strlen(t)﹣1;i>0;i﹣﹣)(2)if(t[j]>t[j+1])知識(shí)點(diǎn)解析:(1)本題是利用選擇法對(duì)數(shù)組元素進(jìn)行比較排序。所謂選擇法,是依次用當(dāng)前取得的元素和其后面的元素進(jìn)行比較,在第一個(gè)元素和其后面的元素順次比較時(shí),可以借助中間變量來對(duì)兩個(gè)數(shù)進(jìn)行交換,要保證第一個(gè)元素始終存放數(shù)組中的最大數(shù),以后依次挑選出次大數(shù),這樣最終的數(shù)組就是有序的。strlen函數(shù)所求得的字符串長(zhǎng)度,數(shù)組最大下標(biāo)表示為字符串長(zhǎng)度減1,所以要減1。(2)這里是一個(gè)分析邏輯錯(cuò)誤,題中要求按升序排序,所以應(yīng)改為if(t[j]>t[j+1])。2、給定程序MODI1.C中函數(shù)fun的功能是:通過某種方式實(shí)現(xiàn)兩個(gè)變量值的交換,規(guī)定不允許增加語句和表達(dá)式。例如變量a中的值原為8,b中的值原為3,程序運(yùn)行后a中的值為3,b中的值為8。請(qǐng)改正程序中的錯(cuò)誤,使它能得出正確的結(jié)果。注意:不要改動(dòng)main函數(shù),不得增行或刪行,也不得更改程序的結(jié)構(gòu)!#includeintfun(int*x,inty){intt;/**********found**********/t=x;x=y;/**********found**********/return(y)j}mein(){inta=3,b=8;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);知識(shí)點(diǎn)解析:(1)根據(jù)fun中x變量的定義,x為指針型變量,所以第一個(gè)錯(cuò)誤標(biāo)識(shí)下的“t=x;x=y;”改為“t==*x;*x=y;”。(2)交換之后t中存放原來x的值,x存放原來y的值,這里應(yīng)該是返回原來x的值,所以第二個(gè)標(biāo)識(shí)下的“return(y);”應(yīng)該改為“retum(t);”或者“returnt;”。3、下列給定程序的功能是:讀入一個(gè)整數(shù)k(2≤k≤10000),輸出它的所有質(zhì)因子(即所有為素?cái)?shù)的因子)。例如,若輸入整數(shù)2310,則應(yīng)輸出2,3,5,7,11。請(qǐng)改正程序中的錯(cuò)誤,使它能得出正確的結(jié)果。注意:不要改動(dòng)main函數(shù),不得增行或刪行,也不得更改程序的結(jié)構(gòu)!試題程序:#include<conio.h>#include<stdio.h>/******found******/IsPrime(intn);{inti,m;m=1for(i=2;i<n;i++)/******found******/if!(n%i){m=0;break;}return(m);}main(){intj,k;printf(″\nPleaseenteranintergernumberbetween2and10000:″);scanf(″%d″,&k);printf(″\nTheprimefactor(s)of%dis(are):″,k);for(j=2;j<k;j++)if((!(k%j))&&(IsPrime(j)))printf(″%4d,″,j);printf(″\n″);}標(biāo)準(zhǔn)答案:(1)IsPrime(intn)(2)if(!(n%i))知識(shí)點(diǎn)解析:本題考查:函數(shù)定義的格式;if條件的判斷語句。這些知識(shí)點(diǎn)必須掌握,因?yàn)榻?jīng)??嫉?。(1)函數(shù)定義格式錯(cuò)誤,函數(shù)定義時(shí)后面不能加“;”,所以應(yīng)該去掉分號(hào)。(2)根據(jù)題意可知,if條件語句判斷n是否可以整除i,如果不能整除則為質(zhì)因子,所以if!(n%i)應(yīng)改為if(!(n%i))。4、下列給定程序中,函數(shù)fun的功能是:將m(1≤m≤10)個(gè)字符串連接起來,組成一個(gè)新串,放入pt所指存儲(chǔ)區(qū)中。例如:把三個(gè)串″abc″″CD″″EF″連接起來,結(jié)果是″abc-CDEF″。請(qǐng)改正程序中的錯(cuò)誤,使它能得出正確的結(jié)果。注意:不要改動(dòng)main函數(shù),不得增行或刪行,也不得更改程序的結(jié)構(gòu)!試題程序:#include<stdio.h>#include<string.h>voidfun(charstr[][10],intm,char*pt){/******found******/Intk,q,i;for(k=0;k<m;k++){q=strlen(str[k]);for(i=0;j<q;i++)/******found******/pt[i]=str[k,i];pt+=q;pt[0]=0;}}main(){intm,h;chars[10][10],p[120];printf(″\nPleaseenterm:″);scanf(″%d″,&m);gets(s[0]);printf(″\nPleaseenter%dstring:\n″,m);for(h=0;h<m;h++)gets(s[h]);fun(s,m,p);printf(″\nTheresuhis:%s\n″,p);}標(biāo)準(zhǔn)答案:(1)intk,q,i;(2)pt[i]=str[k][i];知識(shí)點(diǎn)解析:本題考查:C語言的書寫和語法性錯(cuò)誤,這類錯(cuò)誤比較簡(jiǎn)單,只要編譯程序,根據(jù)錯(cuò)誤提示修改即可。(1)關(guān)鍵字書寫錯(cuò)誤,定義整型變量的關(guān)鍵字應(yīng)使用int,而非Int。(2)數(shù)組元素表示錯(cuò)誤,表示二維數(shù)組元素,應(yīng)使用方括號(hào)將行坐標(biāo)和列坐標(biāo)分別括起來,即str[k,i]應(yīng)改為str[k][i]。5、給定程序MODI1.C是建立一個(gè)帶頭結(jié)點(diǎn)的單向鏈表,并用隨機(jī)函數(shù)為各結(jié)點(diǎn)賦值。函數(shù)fun的功能是將單向鏈表結(jié)點(diǎn)(不包括頭結(jié)點(diǎn))數(shù)據(jù)域?yàn)榕紨?shù)的值累加起來,并且作為函數(shù)值返回。請(qǐng)改正函數(shù)fun中指定部位的錯(cuò)誤,使它能得出正確的結(jié)果。注意:不要改動(dòng)main函數(shù),不得增行或刪行,也不得更改程序的結(jié)構(gòu)!#include#includetypedefstructaa{intdata;structaa*next;}N0DE;intfun(NODE*h){intsum=0;NODE*p;/**********found**********/P=h;while(p){if(p->data%2==0)sum+=p->data;/**********found**********/p=h->next;}returnsum;}NODE*creatlink(intn){NODE*h,*p,*s;inti;h=p=(NODE*)malloc(sizeof(NODE));for(i=l;i<=n;i++){s=(NODE*)malloc(sizeof(NODE));s->data=rand()%16;s->next=p->next;p->next=s;p=p->next;}p->next=NULL;returnh;}outlink(NODE*h,FILE*pf){NODE*p;p=h->next;fprintf(pf,"\n\nTHELIST:\n\nHEAD");while(p){fprintf(pf,"->%d",p->data);p=p->next;}fprintf(pf,"\n");}outresult(ints,FILE*pf){fprintf(pf,"\nThesumofevennumbers:%d\n",s);}main(){NODE*head;inteven;head=creatlink(12);head->data=9000;outlink(head,stdout);even=fun(head);printf("\nTheresult:\n");outresult(even,stdout);}標(biāo)準(zhǔn)答案:(1)p=h一>next;(2)p=p一>next;知識(shí)點(diǎn)解析:(1)根據(jù)題干中求得除了頭結(jié)點(diǎn)之外的結(jié)點(diǎn)數(shù)據(jù)域中的數(shù)據(jù)值,頭指針h,工作指針p指向頭結(jié)點(diǎn)的下一個(gè)結(jié)點(diǎn),所以第一個(gè)標(biāo)識(shí)下的“p=h;”指向頭結(jié)點(diǎn)應(yīng)該改為指向下一個(gè)結(jié)點(diǎn)“p=h->next;”。(2)工作指針p,利用p實(shí)現(xiàn)對(duì)鏈表的遍歷,p表示指向鏈表的當(dāng)前結(jié)點(diǎn),所以指向下一個(gè)結(jié)點(diǎn)應(yīng)該是“p=p->next;”。國(guó)家二級(jí)C語言機(jī)試(程序修改題)模擬試卷第7套一、程序修改題(本題共5題,每題1.0分,共5分。)1、下列給定程序中,函數(shù)fun的功能是:依次取出字符串中所有的數(shù)字字符,形成新的字符串,并取代原字符串。請(qǐng)改正函數(shù)fun中的錯(cuò)誤,使它能得出正確的結(jié)果。注意:不得增行或刪行,也不得更改程序的結(jié)構(gòu)!試題程序:#include<stdlib.h>#include<stdio.h>#include<eonio.h>voidfun(char*s){inti,j;for(i=0,j=0;s[i]!=’\0’;i++)if(s[i]>=’0’&&8[i]<=’9’)/******found******/s[j]=s[i];/******found******/s[j]="\0";}voidmain(){charitem[80];system("CLS");printf("\nEnterastring:");gets(item);printf("\nThestringis:%s\n",item);fun(item);printf("\nThestringofchangingis:%s\n",item);}標(biāo)準(zhǔn)答案:(1)s[j++]=s[i];(2)s[j]=’\0’;知識(shí)點(diǎn)解析:題目要求依次取出字符串中所有的數(shù)字字符,因此將元素s[i]存入s[j]后要使j加1,為下次存儲(chǔ)做準(zhǔn)備。s[j]="\0";是一個(gè)語法錯(cuò)誤。2、給定函數(shù)MODI1.C中函數(shù)fun的功能是:將一個(gè)由八進(jìn)制數(shù)字字符組成的字符串轉(zhuǎn)換為與其面值相等的十進(jìn)制整數(shù)。規(guī)定輸入的字符串最多只能包含5位八進(jìn)制數(shù)字字符。例如,若輸入:77777,則輸出將是:32767。請(qǐng)改正程序中的錯(cuò)誤,使它能得出正確結(jié)果。注意:不要改動(dòng)main函數(shù),不得增行或刪行,也不得更改程序的結(jié)構(gòu)。#inolude#include#includeiptfun(char*P){intn;/**********found**********/n=*P-’O’;p++;while(*P!=0){/**********found**********/n=n*8+*P-’0’;p++;}returnn;}main(){chars[6];inti;intn;printf("Enterastring(Ocataldigits):");gets(s);if(strlen(s)>5){printf("Error:Stringtoolonger!\n\n");exit(0);)for(i=0;s[i];i++)if(s[i]<’0’||s[i]>’7’){printf("Error:%cnotisocataldigits!\n\n",s[i]);exit(0);}printf("Theoriginalstring:");puts(s);n=fun(s);printf("\n%sisconveredtointegernumber:%d\n\n",s,n);}標(biāo)準(zhǔn)答案:(1)n=*p-’0’;(2)n=n*8+*p-’0’;知識(shí)點(diǎn)解析:函數(shù)功能是實(shí)現(xiàn)八進(jìn)制到十進(jìn)制的轉(zhuǎn)換。(1)第一個(gè)標(biāo)識(shí)下面:語句“n=*p-’0’;”中的’o’不是數(shù)字零,而是字母’o’,根據(jù)前面的分析因此改為:“n=*p-’o’;”。(2)第二個(gè)標(biāo)識(shí)下面:語句“n=n*8+*P-’o’”,首先進(jìn)行同(1)相同的修改,變量P沒有定義,根據(jù)題意要求這里應(yīng)該是“*p-’0’”,所以此句改為:“n=n*8+*p-’0’;”。3、給定程序MODI1.C中,fun函數(shù)的功能是:在任意給定的N個(gè)正整數(shù)中,從左到右依次逐個(gè)取三個(gè)數(shù)作為一組,按值大小找出該組數(shù)的中值,用該中值替換與該組數(shù)對(duì)應(yīng)的原三個(gè)數(shù)中的中間位置的數(shù)。處理后原數(shù)列中首尾2個(gè)數(shù)不變。處理后數(shù)列在主函數(shù)中輸出。例如,有10個(gè)正整數(shù)如下:初始數(shù)列為:657231858214538第1組數(shù)為:657中值為:6替換后的數(shù)列為:667231858214538第2組數(shù)為:5723中值為:7替換后的數(shù)列為:667231858214538第3組數(shù)為:72318中值為:18替換后的數(shù)列為:667181858214538第4組數(shù)為:23185中值為:18替換后的數(shù)列為:6671818582l4538第5組數(shù)為:1858中值為:8替換后的數(shù)列為:6671818188214538第6組數(shù)為:5821中值為:8替換后的數(shù)列為:667181888214538第7組數(shù)為:82145中值為:21替換后的數(shù)列為:667181888214538第8組數(shù)為:2l4538中值為:38替換后的數(shù)列為:667181888213838最終結(jié)果為:667181888213838請(qǐng)改正程序中指定部位的錯(cuò)誤,使它能得出正確的結(jié)果。注意:不要改動(dòng)main函數(shù),不得增行或刪行,也不得更改程序的結(jié)構(gòu)!試題程序:#include<stdio.h>#defineN10intfindmid(inta,intb,intc){intt;t=(a>b)?(b>c?b:(a>c?c:a)):((a>c)?a:((b>c)?c:b));/*********found*********/returnb;
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 蘭州資源環(huán)境職業(yè)技術(shù)大學(xué)《液壓流體力學(xué)》2023-2024學(xué)年第一學(xué)期期末試卷
- 濟(jì)寧職業(yè)技術(shù)學(xué)院《傳播效果監(jiān)測(cè)》2023-2024學(xué)年第一學(xué)期期末試卷
- 湖南幼兒師范高等??茖W(xué)?!督Y(jié)構(gòu)耐久性理論》2023-2024學(xué)年第一學(xué)期期末試卷
- 湖南工業(yè)大學(xué)科技學(xué)院《嬰幼兒藝術(shù)發(fā)展與教育》2023-2024學(xué)年第一學(xué)期期末試卷
- 衡陽科技職業(yè)學(xué)院《地理信息系統(tǒng)A》2023-2024學(xué)年第一學(xué)期期末試卷
- 湖南交通職業(yè)技術(shù)學(xué)院《生物醫(yī)藥文獻(xiàn)檢索和專業(yè)英語》2023-2024學(xué)年第一學(xué)期期末試卷
- 浙江師范大學(xué)《發(fā)酵工程制造技術(shù)及應(yīng)用》2023-2024學(xué)年第一學(xué)期期末試卷
- 鄭州體育職業(yè)學(xué)院《工業(yè)設(shè)計(jì)專業(yè)導(dǎo)論》2023-2024學(xué)年第一學(xué)期期末試卷
- 浙江工貿(mào)職業(yè)技術(shù)學(xué)院《短視頻策劃與運(yùn)營(yíng)》2023-2024學(xué)年第一學(xué)期期末試卷
- 食品中重金屬殘留的控制手段
- 2024-2025學(xué)年成都高新區(qū)七上數(shù)學(xué)期末考試試卷【含答案】
- 定額〔2025〕1號(hào)文-關(guān)于發(fā)布2018版電力建設(shè)工程概預(yù)算定額2024年度價(jià)格水平調(diào)整的通知
- 2025年浙江杭州市西湖區(qū)專職社區(qū)招聘85人歷年高頻重點(diǎn)提升(共500題)附帶答案詳解
- 《數(shù)學(xué)廣角-優(yōu)化》說課稿-2024-2025學(xué)年四年級(jí)上冊(cè)數(shù)學(xué)人教版
- “懂你”(原題+解題+范文+話題+技巧+閱讀類素材)-2025年中考語文一輪復(fù)習(xí)之寫作
- 2025年景觀照明項(xiàng)目可行性分析報(bào)告
- 2025年江蘇南京地鐵集團(tuán)招聘筆試參考題庫(kù)含答案解析
- 2025年度愛讀書學(xué)長(zhǎng)參與的讀書項(xiàng)目投資合同
- 電力系統(tǒng)分析答案(吳俊勇)(已修訂)
- 化學(xué)-河北省金太陽質(zhì)檢聯(lián)盟2024-2025學(xué)年高三上學(xué)期12月第三次聯(lián)考試題和答案
- 期末復(fù)習(xí)試題(試題)-2024-2025學(xué)年四年級(jí)上冊(cè)數(shù)學(xué) 北師大版
評(píng)論
0/150
提交評(píng)論