c語(yǔ)言真題1知識(shí)_第1頁(yè)
c語(yǔ)言真題1知識(shí)_第2頁(yè)
c語(yǔ)言真題1知識(shí)_第3頁(yè)
c語(yǔ)言真題1知識(shí)_第4頁(yè)
c語(yǔ)言真題1知識(shí)_第5頁(yè)
已閱讀5頁(yè),還剩15頁(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)介

真題1】函數(shù)fun的功能是進(jìn)行數(shù)字字符轉(zhuǎn)換。若形參ch中是數(shù)字字符'0'~

'9',則'0'轉(zhuǎn)換成'9','1'轉(zhuǎn)換成'8','2'轉(zhuǎn)換成'7',……,'9'轉(zhuǎn)換成'0';若是其它字符

則保持不變;并將轉(zhuǎn)換后的結(jié)果作為函數(shù)值返回。請(qǐng)?jiān)诔绦虻南聞澗€處填入正確的

內(nèi)容并把下劃線刪除,使程序得出正確的結(jié)果。注意:源程序存在考生文件夾下的

BLANK1.C中。不得增行或刪行,也不得更改程序的結(jié)構(gòu)!

#include<stdio.h>

/**********found**********/

___【1】___fun(charch)

{

/**********found**********/

if(ch>='0'&&___【2】___)

/**********found**********/

return'9'-(ch-___【3】___);

returnch;

}

main()

{charc1,c2;

printf("\nTheresult:\n");

c1='2';c2=fun(c1);

printf("c1=%cc2=%c\n",c1,c2);

c1='8';c2=fun(c1);

printf("c1=%cc2=%c\n",c1,c2);

c1='a';c2=fun(c1);

printf("c1=%cc2=%c\n",c1,c2);

}

解析:由主函數(shù)中的語(yǔ)句"c2=fun(c1);"可知:函數(shù)fun的返回類(lèi)型為字符,

故第一個(gè)空應(yīng)填char;在題面中要求對(duì)數(shù)字字符進(jìn)行轉(zhuǎn)換,故第二空的目的是

判斷字符ch是否為一數(shù)字字符,即ch是否在'0'~'9'之間所以第二個(gè)空應(yīng)填

ch<='9'或其等效形式;第三空處語(yǔ)句的目的是返回轉(zhuǎn)換后的結(jié)果,即返回一字

符,其所對(duì)應(yīng)的數(shù)字與轉(zhuǎn)換前字符所對(duì)應(yīng)的數(shù)字的和為9,故第三空應(yīng)填'0'或

其等效形式。

答案:【1】char【2】ch<='9'【3】'0'

【真題2】給定程序modi.c中函數(shù)fun的功能是:首先將大寫(xiě)字母轉(zhuǎn)換為對(duì)應(yīng)小

寫(xiě)字母;若小寫(xiě)字母為a~u,則將其轉(zhuǎn)換為其后的第5個(gè)字母;若小寫(xiě)字母為v~

z,使其值減21。轉(zhuǎn)換后的小寫(xiě)字母作為函數(shù)值返回。例如,若形參是字母A,則轉(zhuǎn)

換為小寫(xiě)字母f;若形參是字母W,則轉(zhuǎn)換為小寫(xiě)字母b。請(qǐng)改正函數(shù)fun中指定

部位的錯(cuò)誤,使它能得出正確的結(jié)果。注意:不要改動(dòng)main函數(shù),不得增行或

刪行,也不得更改程序的結(jié)構(gòu)!

#include<stdio.h>

#include<ctype.h>

charfun(charc)

{if(c>='A'&&c<='Z')

/**************found**************/

c=c-32;

if(c>='a'&&c<='u')

/**************found**************/

c=c-5;

elseif(c>='v'&&c<='z')

c=c-21;

returnc;

}

main()

{charc1,c2;

printf("\nEnteraletter(A-Z):");c1=getchar();

if(isupper(c1))

{c2=fun(c1);

printf("\n\nTheletter'%c'changeto'%c'\n",c1,c2);

}

elseprintf("\nEnter(A-Z)!\n");

}

(2011年2月)

解析:本題著重考察考生對(duì)C語(yǔ)言中一些簡(jiǎn)單算法的掌握情況。

提示思路:先判斷輸入的字母是否是大寫(xiě)字母,若是大寫(xiě)字母,將其轉(zhuǎn)化為

相應(yīng)的小寫(xiě)字母,方法是該大寫(xiě)字母對(duì)應(yīng)的ASCII碼值加上32就是其小寫(xiě)字

母的ASCII碼值,再判斷該小寫(xiě)字母是否是a~u,若是轉(zhuǎn)化其后的第5個(gè)字

母,即c=c5;。若該小寫(xiě)字母是v~z,則將其ACSII碼值減去21,轉(zhuǎn)換后

的小寫(xiě)字母作為函數(shù)值返回。

本題中的第一個(gè)錯(cuò)誤:C語(yǔ)言中,大寫(xiě)字母的ASCII碼值比相應(yīng)的小寫(xiě)字母

的ASCII碼值小32,所以程序中語(yǔ)句"c=c-32;"應(yīng)改為"c=c32;"或相同作

用的語(yǔ)句。

本題中的第二個(gè)錯(cuò)誤:C語(yǔ)言中,字母從a~z或A~Z的ASCII碼值是依次遞

增的,所以將其轉(zhuǎn)換為其后的第5個(gè)字母應(yīng)該是"c=c5;"或相同作用的語(yǔ)句。

【真題3】請(qǐng)編寫(xiě)一個(gè)函數(shù)fun(char*s),函數(shù)的功能是把字符串中所有的字母改

寫(xiě)在該字母的下一個(gè)字母,最后一個(gè)字母z改寫(xiě)成字母a。大寫(xiě)字母仍為大寫(xiě)字母,

小寫(xiě)字母仍為小寫(xiě)字母,其他的字符不變。例如,原有的字符串為:Mn.123xyZ,

則調(diào)用該函數(shù)后,串中的內(nèi)容為:No.123yzA。注意:部分源程序存在文件prog.c

中。請(qǐng)勿改動(dòng)主函數(shù)main和其他函數(shù)中的任何內(nèi)容,僅在函數(shù)fun的花括號(hào)中填

入你編寫(xiě)的若干語(yǔ)句。

#include<conio.h>

#include<string.h>

#include<stdio.h>

#include<ctype.h>

#defineN81

fun(char*s)

{……}

main()

{chara[N];

clrscr();

printf("Enterastring:");gets(a);

printf("Theoriginalstringis:");puts(a);

fun(a);

printf("Thestringaftermodified:");

puts(a);

}

(2011年2月)

解析:本題的考核點(diǎn)是c語(yǔ)言中的循環(huán)語(yǔ)句和條件判斷語(yǔ)句的使用。提示

思路:從本題的要求來(lái)看,我們應(yīng)該采用外循環(huán)內(nèi)條件判斷的算法。本參考函

數(shù)使用for循環(huán)從頭到尾掃描字符串,并在掃描時(shí)進(jìn)行條件判斷,對(duì)'z','Z'和

其它字符進(jìn)行不同的處理。

fun(char*s)

{inti,length;

length=strlen(s);/*求得字符串s的長(zhǎng)度*/

for(i=0;i<length;i)

{if(!((s[i]>='a'&&s[i]<='z')||(s[i]>='A'&&

s[i]<='Z')))

/*判斷字符s[i]是否為大小寫(xiě)的英文字母*/

continue;

switch(s[i]){

case'z':/*假如s[i]為小寫(xiě)字母z,則改寫(xiě)成小寫(xiě)字母a*/

s[i]='a';break;

case'Z':/*假如s[i]為大寫(xiě)字母Z,則改寫(xiě)成大寫(xiě)字母A*/

s[i]='A';break;

default:

/*假如s[i]為除大小寫(xiě)字母Z和z以外字母,則直接改寫(xiě)成該

字母的下一個(gè)字母*/

s[i]=s[i]1;break;

}

}

}真題1】給定程序的功能是將大寫(xiě)字母轉(zhuǎn)換為對(duì)應(yīng)小寫(xiě)字母之后的第五個(gè)字母;

若小寫(xiě)字母為v~z,使小寫(xiě)字母的值減21。轉(zhuǎn)換后的小寫(xiě)字母作為函數(shù)值返回。例

如,若形參是字母A,則轉(zhuǎn)換為小寫(xiě)字母f;若形參是字母W,則轉(zhuǎn)換為小寫(xiě)字母

b。

#include<stdio.h>

#include<ctype.h>

charfun(charc)

{if(c>='A'&&c<='Z')

c=c32;

if(c>='a'&&c<='u')

/**************found**************/

c=c__【1】__;

elseif(c>='v'&&c<='z')

c=c-21;

/**************found**************/

return__【2】__;

}

main()

{charc1,c2;

printf("\nEnteraletter(A-Z):");c1=getchar();

if(isupper(c1)){

/**************found**************/

c2=fun(__【3】__);

printf("\n\nTheletter'%c'changeto'%c'\n",

c1,c2);

}

elseprintf("\nEnter(A-Z)!\n");

}

解析:本題著重考察考生對(duì)C語(yǔ)言中一些簡(jiǎn)單算法的掌握情況。

先判斷輸入的字母是否是大寫(xiě)字母,若是大寫(xiě)字母,將其轉(zhuǎn)化為相應(yīng)的小寫(xiě)

字母,方法是該大寫(xiě)字母對(duì)應(yīng)的ASCII碼值加上32就是其小寫(xiě)字母的ASCII

碼值,再判斷該小寫(xiě)字母是否是a~u,若是轉(zhuǎn)化為其后的第5個(gè)字母。若該小

寫(xiě)字母是v~z,則將其ACSII碼值減去21,轉(zhuǎn)換后的小寫(xiě)字母作為函數(shù)值返

回。

題中第一個(gè)空填"5":C語(yǔ)言中,字母從a~z或A~Z的ASCII碼值是依次

遞增的,所以將其轉(zhuǎn)換為其后的第5個(gè)字母應(yīng)該是"c=c5;"或相同作用的語(yǔ)

句。

題中第二個(gè)空填"c":通過(guò)return語(yǔ)句將被調(diào)用函數(shù)中c的值帶回主調(diào)函數(shù)

中去。

題中第三個(gè)空填"c1":此句是調(diào)用fun()函數(shù),括弧中是其實(shí)際參數(shù)。

答案:【1】5【2】c【3】c1疑難解答

【真題2】給定程序modi.c中,函數(shù)fun的功能是:求k!(k<13),所求階乘的值

作為函數(shù)值返回。例如:若k=10,則應(yīng)輸出:3628800。請(qǐng)改正程序中的錯(cuò)誤,

使它能得出正確的結(jié)果。注意:不要改動(dòng)main函數(shù),

#include<conio.h>

#include<stdio.h>

longfun(intk)

{

/************found************/

ifk>0

return(k*fun(k-1));

/************found************/

elseif(k=0)

return1L;

}

main()

{intk=10;

clrscr();

printf("%d!=%ld\n",k,fun(k));

}

解析:本題的考核點(diǎn)是C語(yǔ)言的一些基本常識(shí)和if語(yǔ)句的使用。

C語(yǔ)言提供了三種形式的if語(yǔ)句:

1.if(表達(dá)式)語(yǔ)句

2.if(表達(dá)式)語(yǔ)句1

else語(yǔ)句2

3.if(表達(dá)式1)語(yǔ)句1

elseif(表達(dá)式2)語(yǔ)句2

elseif(表達(dá)式3)語(yǔ)句3

:

elseif(表達(dá)式m)語(yǔ)句m

else語(yǔ)句n

所以,綜上所述"ifk>0"應(yīng)改為"if(k>0)"或相同作用的語(yǔ)句。

C語(yǔ)言中"="表示賦值,而"=="才表示"等于",由題意看出,"elseif(k=0)

"應(yīng)為"elseif(k==0)"或相同作用的語(yǔ)句。

【真題3】請(qǐng)編寫(xiě)函數(shù)fun,函數(shù)的功能是:在字符串中的所有數(shù)字字符前加一個(gè)$

字符。例如,輸入A1B23CD45,則輸出為:A$1B$2$3CD$4$5。注意:部分源

程序存在文件prog.c中。請(qǐng)勿改動(dòng)主函數(shù)main和其他函數(shù)中的任何內(nèi)容,僅在函

數(shù)fun的花括號(hào)中填入你編寫(xiě)的若干語(yǔ)句。

#include<stdio.h>

voidfun(char*s)

{……}

main()

{chars[80];

printf("Enterastring:");scanf("%s",s);

fun(s);

printf("Theresult:%s\n",s);

}

(2011年2月)

解析:本題的考核點(diǎn)是在字符串中的數(shù)字之前加一$字符的算法。提示思路:

通過(guò)一中間數(shù)組和一循環(huán)來(lái)實(shí)現(xiàn)。方法是:從字符串的首字符開(kāi)始,判斷字符

是否為數(shù)字,若是,將字符$和數(shù)字字符賦給中間數(shù)組,反之,將字符直接賦給

中間數(shù)組,直至字符串尾,最后將中間數(shù)組賦給原字符串。

voidfun(char*s)

{charp[80];

inti=0,j=0;

while(s[i]!='\0')/*假如s[i]不為字符串結(jié)束符,則繼續(xù)循環(huán)*/

{if((s[i]>='0')&&(s[i]<='9'))

{p[j]='$';p[j1]=s[i];j=j2;}

/*假如s[i]為數(shù)字字符,則將$置于p[j]中,數(shù)字字符置于p[j1]

中*/

else{p[j]=s[i];j=j1;}/*否則將s[i]置于p[j]中*/

i;

}

p[j]='\0';

strcpy(s,p);/*將p數(shù)組中的字符復(fù)制到s數(shù)組中*/

}【真題1】下列給定程序中,函數(shù)fun()的功能是:用遞歸算法計(jì)算斐波拉契級(jí)數(shù)列

中第n項(xiàng)的值。從第一項(xiàng)起,斐波拉契級(jí)數(shù)序列為1,1,2,3,5,8,13,

21,……,例如,若給n輸入7,該項(xiàng)的斐波拉契級(jí)數(shù)值為13。

#include<stdio.h>

longfun(intg)

{switch(g){

case0:return0;

case1:__【1】__:return1;

}

return(__【2】__);

}

main()

{longfib;intn;

printf("Inputn:");scanf("%d",__【3】__);

printf("n=%d\n",n);

fib=fun(n);

printf("fib=%d\n\n",fib);

}

(2011年2月)

解析:填空1:根據(jù)題目的意思,這里應(yīng)該是對(duì)于值為1和2的時(shí)候的處理,

注意case語(yǔ)句常量后應(yīng)用的是冒號(hào),而且不同的case對(duì)應(yīng)同一個(gè)值可以連續(xù)

寫(xiě)(像題目中那樣)。

填空2:根據(jù)題目的意思,此處是求值的遞歸部分,由遞推公式可以很容易的得

到答案的形式,對(duì)于這種簡(jiǎn)單的遞歸考生一定要掌握。

填空3:由算法可以看出,此處是輸入數(shù)列的項(xiàng)數(shù)n,使用了scanf函數(shù),其參

數(shù)應(yīng)該是變量的地址,即使用符號(hào)"&"。

答案:【1】case2【2】fun(g-1)fun(g-2)【3】&n

【真題2】給定程序modi.c中,函數(shù)fun的功能是:按以下遞歸公式求函數(shù)值

fun(n)=10(n=1),fun(n)=fun(n-1)2(n>1)例如,當(dāng)給n輸入5時(shí),函數(shù)

值為18;當(dāng)給n輸入3時(shí),函數(shù)值為14。請(qǐng)改正程序中的錯(cuò)誤,使它能得出正確

結(jié)果。注意:不要改動(dòng)main函數(shù)。

#include<stdio.h>

fun(n)

{intc;

/************found************/

if(n=1)

c=10;

else

c=fun(n-1)2;

return(c);

}

main()

{intn;

printf("Entern:");scanf("%d",&n);

printf("Theresult:%d\n\n",fun(n));

}

解析:本題著重考察考生對(duì)遞歸算法的掌握情況。

在C語(yǔ)言中,"="是指賦值號(hào),要判斷表達(dá)式相等,需用"==",所以程序中的

語(yǔ)句"if(n=1)"應(yīng)改為"if(n==1)"或相同作用的語(yǔ)句。

【真題3】規(guī)定輸入的字符串中只包含字母和*號(hào)。請(qǐng)編寫(xiě)函數(shù)fun,它的功能是:

使字符串最前面連續(xù)的*號(hào)不得多于n個(gè);若多于n個(gè),則刪除多余的*號(hào);若少于

或等于n個(gè),則什么也不做,字符串中間和尾部的*號(hào)不刪除。例如,字符串中的內(nèi)

容為:*******A*BC*DEF*G****,若n的值為4,刪除后,字符串中的內(nèi)容應(yīng)

當(dāng)是:****A*BC*DEF*G****;若n的值為8,則字符串中的內(nèi)容仍為:

*******A*BC*DEF*G****。n的值在主函數(shù)中輸入。在編寫(xiě)函數(shù)時(shí),不得使用

C語(yǔ)言提供的字符串函數(shù)。注意:部分源程序存在文件prog.c中。請(qǐng)勿改動(dòng)主函

數(shù)main和其他函數(shù)中的任何內(nèi)容,僅在函數(shù)fun的花括號(hào)中填入你編寫(xiě)的若干語(yǔ)

句。

#include<stdio.h>

#include<conio.h>

voidfun(char*a,intn)

{……}

main()

{chars[81];intn;

printf("Enterastring:\n");gets(s);

printf("Entern:");scanf("%d",&n);

fun(s,n);

printf("Thestringafterdeleted:\n");puts(s);

}

(2011年2月)

解析:本題的考核點(diǎn)是刪除字符串中字符的算法。解題思路:先統(tǒng)計(jì)字符串前

連續(xù)的*號(hào)個(gè)數(shù),與指定的個(gè)數(shù)進(jìn)行判斷,若小于等于指定的數(shù),什么也不做,

若大于指定的數(shù),則刪除多余的*,刪除的方法是:用一個(gè)循環(huán)先生成指定個(gè)數(shù)

個(gè)*放入到一字符串中,再將從原串中非*字符開(kāi)始至字符串尾的字符追加其

后,最后用新串覆蓋原串。本評(píng)析僅供參考。

voidfun(char*a,intn)

{charb[81];

inti=0,j=0,s=0,k;

while(a[i]=='*'){s;i;}/*統(tǒng)計(jì)字符串前連續(xù)的*號(hào)個(gè)數(shù)

*/

if(s>n)/*判斷字符串前連續(xù)的*號(hào)個(gè)數(shù)是否大于n*/

{for(k=0;k<n;k)

{b[j]='*';j;}

while(a[i])/*這里的i在前面*時(shí)已經(jīng)移不是*字符的位置*/

{b[j]=a[i];j;i;}

b[j]='\0';i=0;j=0;

while(b[j])/*將字符串b中的所有字符復(fù)制到a字符串中覆蓋

原串*/

{a[i]=b[j];i;j;}

a[i]='\0';

}

}

【真題1】下列給定程序中,函數(shù)fun()的功能是:應(yīng)用遞歸算法求某數(shù)a的平方

根。求平方根的迭代公式如下:x1=(x0a/x0)/2)。例如,2的平方根為

1.414214。

#include<math.h>

#include<stdio.h>

__【1】__fun(doublea,doublex0)

{doublex1,y;

__【2】__;

if(fabs(x1-x0)>=0.00001)

__【3】__;

elsey=x1;

returny;

}

main()

{doublex;

printf("Enterx:");scanf("%lf",&x);

printf("Thesquarerootof%lfis\n",x,

fun(x,1.0));

}

(2011年2月)

解析:填空1:這里要問(wèn)的是函數(shù)的類(lèi)型,由主函數(shù)main()對(duì)函數(shù)的調(diào)用可以

得到函數(shù)的類(lèi)型是double型的,當(dāng)然也可以由函數(shù)的返回值語(yǔ)句得到。

填空2:我們看到在下一條語(yǔ)句中已經(jīng)開(kāi)始對(duì)變量x1的值進(jìn)行比較了,所以這

里要對(duì)x1進(jìn)行賦值,由題意可知x1=(x0a/x0)/2.0。

填空3:用C語(yǔ)言求平方根的方法一般有兩種經(jīng)典的算法,它們分別是迭代法

和遞歸法,本題要求用遞歸法。該程序采用了if語(yǔ)句,程序的含義是當(dāng)?shù)Y(jié)

果差小于誤差時(shí)進(jìn)行循環(huán)。

答案:【1】double【2】x1=(x0a/x0)/2.0【3】y=fun(a,x1)

【真題2】給定程序modi.c中,函數(shù)fun的功能是:判斷字符ch是否與str字符

串中的某個(gè)字符相同;若相同,什么也不做,若不同,則將其插在串的最后。請(qǐng)改

正程序中的錯(cuò)誤,使它能得出正確結(jié)果。注意:不要改動(dòng)main函數(shù),

#include<conio.h>

#include<stdio.h>

#include<string.h>

/************found************/

voidfun(charstr,charch)

{while(*str&&*str!=ch)str;

/************found************/

if(*str==ch)

{str[0]=ch;

/************found************/

str[1]='0';

}

}

main()

{chars[81],c;

clrscr();

printf("\nPleaseenterastring:\n");gets(s);

printf("\nPleaseenterthecharactertosearch:");

c=getchar();

fun(s,c);

printf("\nTheresultis%s\n",s);

}

(2011年2月)

解析:本題著重考察考生對(duì)C語(yǔ)言中函數(shù)形式參數(shù)的用法以及一些簡(jiǎn)單算法的

掌握情況。

從主函數(shù)中可以看出,str是一個(gè)字符串,因此在fun函數(shù)的參數(shù)表中應(yīng)將str

改為字符指針或字符數(shù)組,即把"voidfun(charstr,charch)"語(yǔ)句改為

"voidfun(char*str,charch)"或相同作用的語(yǔ)句。

從題義得知,若字符ch與字符串str中的某個(gè)字符相同,什么也不做;若不

同,則插在str的最后。因此fun函數(shù)中先設(shè)置了一個(gè)循環(huán)從字符串str中尋找

字符ch,如果找到則中斷循環(huán)并保留字符ch的地址,否則一直循環(huán)到串尾。

因此通過(guò)判斷*str的內(nèi)容即可判斷是否已找到字符ch,而原程序中的"if(*s

溫馨提示

  • 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)論