C語言程序設(shè)計教程第四章練習(xí)題解析_第1頁
C語言程序設(shè)計教程第四章練習(xí)題解析_第2頁
C語言程序設(shè)計教程第四章練習(xí)題解析_第3頁
C語言程序設(shè)計教程第四章練習(xí)題解析_第4頁
C語言程序設(shè)計教程第四章練習(xí)題解析_第5頁
已閱讀5頁,還剩71頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

單選題

1、關(guān)于C語言中的函數(shù),下列描述正確的是()

A.函數(shù)的定義可以嵌套,但函數(shù)的調(diào)用不可以嵌套

B.函數(shù)的定義不可以嵌套,但函數(shù)的調(diào)用可以嵌套

C.函數(shù)的定義和函數(shù)的嵌套均不可以嵌套

D.函數(shù)的定義和函數(shù)的調(diào)用均不可以嵌套

答案:B

解析:函數(shù)的定義不可以嵌套,但函數(shù)的調(diào)用可以嵌套

2?、定義一個函數(shù):exce((v1,v2),(v3,\,4,v5),v6);在該函數(shù)調(diào)用時,實參的個數(shù)為()個

A.3

B.4

C.5

D.6

答案:A

解析:(vl,v2),(\,3,v4,v5)和v6一共三個實參

3、關(guān)于C語言l|lprintO函數(shù)與scanf()函數(shù),下列描述中正確的是()

A.printfQ函數(shù)可以向任何地方輸出數(shù)據(jù)

B.printfO只向控制臺輸出數(shù)據(jù)

C.scanf。只能輸入英文字母和數(shù)字

D.scanf。函數(shù)可以識別輸入的空格

答案:B

解析:printfQ是向控制臺輸出的函數(shù)

4、在C語言中,內(nèi)部函數(shù)需要添加的關(guān)鍵字是()

A.cxtcrn

B.static

C.this

D.auto

答案:B

解析:在定義內(nèi)部函數(shù)時,需要在函數(shù)的返回值類型前面添加static關(guān)鍵字(又稱為靜態(tài)

函數(shù))。

5、當(dāng)調(diào)用時,會調(diào)用內(nèi)部函數(shù)

A.當(dāng)調(diào)用時,會調(diào)用內(nèi)部函數(shù)

B.當(dāng)調(diào)用時,會調(diào)用外部函數(shù)

C.當(dāng)調(diào)用時,會調(diào)用兩次,先調(diào)用內(nèi)部函數(shù)再調(diào)用外部函數(shù)

D.都不調(diào)用,會報錯

答案:A

解析:當(dāng)內(nèi)部函數(shù)與外部函數(shù)重名時,會優(yōu)先調(diào)用內(nèi)部函數(shù)

6、在C語言中,聲明外部函數(shù)需要添加的關(guān)鍵字是()

A.extern

B.static

C.this

D.auto

答案:A

解析:聲明外部函數(shù)的方式是在函數(shù)的返回值類型前面添加extern關(guān)鍵字

7、關(guān)于C語言中的局部變量,下列描述中錯誤的是()

A.局部變量就是在函數(shù)內(nèi)部聲明的變量

A.局部變量會被屏蔽

B.全局變量會被屏蔽

C.都不會調(diào)用,系統(tǒng)會報錯

D.會調(diào)用兩次,先調(diào)用局部變量,再調(diào)用全局變量

答案:B

解析:當(dāng)局部變量與全局變量重名時,全局變量會被屏蔽。

10、在C語言中,關(guān)于變量的作用域,下列描述中錯誤的是()

A.局部變量只在整個函數(shù)的運行周期中有效

B.全局變量的作用域為整個程序的運行周期

C.當(dāng)全局變量與局部變量重名時,局部變量會屏蔽掉全局變量

D.全局變量會覆蓋掉所有與它重名的局部變量

答案:D

解析:當(dāng)全局變量與局部變量重名時,全局變量會被屏蔽掉

11、在C語言中,如果在一個函數(shù)的復(fù)合語句中定義了一個變量,則該變量()

A.只在該復(fù)合語句中有效,在該復(fù)合語句外無效

B.在該函數(shù)IH任何位置都有效

C.在本程序的原文件范圍內(nèi)均有效

D.此定義方法錯誤,其變量為非法變量

答案:D

解析:?1、2與3錯:函數(shù)復(fù)合語句中定義的變量在該復(fù)合語句中引用;但如果函數(shù)含有

該變量,則在函數(shù)中可以引用該變量

4對:在C十十中在復(fù)合語句中定義變量為合法,但在C語言中是非法的

12、C語言程序的基本單位是()。

A.程序行

B.語句

C.函數(shù)

I)字符

答案:C

解析:函數(shù)是C語言程序的基本單位

13、C語言中決定函數(shù)返回值的類型的是()。

A.rcturn語句中的表達(dá)式類型

B.調(diào)用函數(shù)的主調(diào)函數(shù)類型

C.調(diào)用函數(shù)時臨時

D.定義函數(shù)時所指定的函數(shù)類型

答案:D

解析:函數(shù)的返回值取決于定義函數(shù)口寸指定的返回值類型

14、若有函數(shù)調(diào)用語句:fun(a+b,(x,y),fun(n+k,d,(a,b)));在此函數(shù)調(diào)用語句中實參的個數(shù)是

()。

A.3

B.4

C.5

D.6

答案:A

解析:什卜返回一個值,6,y)返回一個值,fnn(n+k,d,Sh))返回一個值。

15、x、y、z被定義為int型變量,若從鍵盤給x、y、z輸入數(shù)據(jù),正確的輸入語句是()。

A.inputx,y,z;

,

B.scanff%d%d%d';&x,&y1&2);

C.scanf(,*%d%d%d,',x,y,z);

I>read("%d%d%d”,&x,&y,&z);

答案:B

解析:讀取鍵盤輸入的數(shù)據(jù)要用scanfO函數(shù),scanfO中的參數(shù)要傳入變量的地址

15、若變量已正確說明為float類型,要通過語句scanf("%f%f%F,&a,&b,&c);給a賦予10.0,

b賦予22.0,c賦予33.0,不正確的輸入形式是()0

A.102233

B.10.0,22.0,33.0

C.10.022.033.0

D.10;22;33

答案:B

解析:用scanfO讀取從鍵盤輸入的數(shù)據(jù)口寸,中間不能加逗號,要用空格隔開

17、若有定義:inrx,y;chnr并有以下輸入數(shù)據(jù)(此處\n代表空格):1\i】2\nA\i】B\nC,

那么能給X賦整數(shù)1,給y賦整數(shù)2,給a賦字符A,給b賦字符B,給c賦字符C的正確

程序段是()o

A.scanf(Mx=%dy=%dH,&x,&y);a=getcharO;b=getcharO;c=getcharO;

B.scanf(u%d%dn,&x,&y);a=getcharO;b=getcharO;c=getchar();

C.scanf("%d%d%c%c%c,&x,&y,&a,&b,&c);

D.scanf(,'%d%d%c%c%c%c%c%c",&x,&y,&a,&a,&b,&b,&c,&c);

答案:D

解析:空格也會作為一個字符賦給字符變量。

18、對嵌套子程序調(diào)用說法正確的是()。

A.外層子程序可以調(diào)用所有的內(nèi)層子程序

B.內(nèi)層子程序只可以調(diào)用包含本身的外層子程序,不可以隔層調(diào)用

C.外分程序必須能完全套住內(nèi)分程序

D.以上說法均不正確

答案:C

19、C語言中函數(shù)能否嵌套調(diào)用和遞歸調(diào)用?()

A.二者均不可

B.前者可,后者不可

C.前者不可,后者可

D.二者均可

答案:D

解析:兩者調(diào)用都可以

20、C語言規(guī)定,程序中各函數(shù)之間()。

A.既允許直接遞歸調(diào)用也允許間接遞歸調(diào)用

B.不允許直接遞歸調(diào)用也不允許間接遞歸調(diào)用

C.允許直接遞歸調(diào)用不允許間接遞歸調(diào)用

I)不允許直接遞歸調(diào)用允許間接遞歸調(diào)用

答案:A

解析?:各程序間既可以直接調(diào)用也可以間接調(diào)用。

21?、有如下程序:

longfib(intn)

(

if(n>2)

returnfib(n-l)+fib(n-2);

else

return2;

voidmainQ

{

printf(H%d\nn,fib(3));

}

該程序的輸出結(jié)果是()o

A.2

B.4

C.6

D.8

答案:B

解析:向fib0函數(shù)傳入3時,返回fib(l)+fib(2)的值;向fib。函數(shù)傳入1和2時,都返回2,

所以郁⑶返回2+2=4o

22、?以下程序的輸出結(jié)果是()o

longfun(intn)

longs;

if(n==l||n==2)

s=2;

else

s=n-fun(n-l);

returns;

}

voidmainQ

{

printf(M%ld\nn,fun(3));

)

A.l

B.2

C.3

D.4

答案:A

解析:fun。函數(shù)傳入3時,返回3-fuM2);funO函數(shù)傳入2時,返回2。所以fun(3)返回3-2=1o

23、在C語言中,函數(shù)的隱含存儲類別是()o

A.auto

B.static

C.extern

D.無存儲類別

答案:C

解析:為簡化編程,C語言中允許在定義外部函數(shù)時省略關(guān)鍵字extern。

24、以下敘述中不正確的是()o

A.在不同的函數(shù)中可以使用相同名字的變量

B.函數(shù)中的形式參數(shù)是局部變量

C.在一個函數(shù)內(nèi)定義的變量只在本函數(shù)范圍內(nèi)有效

D.在一個函數(shù)內(nèi)的復(fù)合語句中定義的變量在本函數(shù)范圍內(nèi)有效

答案:D

解析:函數(shù)內(nèi)的復(fù)合語句中定義的變量僅僅在該復(fù)合語句中有效。

25?、以下程序運行后,輸出結(jié)果是()。

intfunc(inta,intb)

{

staticintm=0,i=2;

i+=m+l;

m=i+a+b;

returnm;

}

voidmainQ

{

intk=4,m=l,p;

p=func(k,m);

printf("%d,M,p);

p=func(k,m);

printf("%d\nH,p);

}

A.8,15

B.8,16

C.8,17

D.8,8

答案:c

解析?:函數(shù)體內(nèi)的靜態(tài)局部變量不隨函數(shù)的調(diào)用結(jié)束而銷毀,而是一直存在。

25?、以下程序的輸出結(jié)果是()。

intd=1;

intfun(intp)

staticintd=5;

d十二p;

printf("%d*',d);

returnd;

voidmainQ

inta=3;

printf(M%d\n",fun(a+fun(d)));

A.699

B.669

C.61515

D.6615

答案:C

解析:?首先調(diào)用fun(d),將全局變量d=l帶入,此時fun。函數(shù)內(nèi)的靜態(tài)局部變量d的值

是1,d+二p后d的值是6,輸出d的值,返回d的值;

然后調(diào)用fun(a+6),將局部變量a=3帶入,此時fun。函數(shù)內(nèi)的靜態(tài)局部變量d的值是6,

d+二p后d賦值15,輸出d的值,返回d的值。

27、在C語言中,若需一變量只在本文件中所有函數(shù)使用,則該變量的存儲類別是()。

A.extern

B.register

C.auto

D.static

答案:D

解析:static修飾全局變量時,表示該變量僅在本文件中可使用。

28?、下列程序的輸出結(jié)果是()o

intb=2;

intfunc(int*a)

(

b+=*a;

returnb;

voidmain。

inta=2,res=2;

res+=func(&a);

printf("%d\n】cs);

}

A.4

B.6

C.8

D.10

答案:B

解析:funcO函數(shù)中,對全局變量b自增a的值,func()函數(shù)返回4;res+=4,res賦值為6。

29?、請讀程序:

voidmain。

inta=l,b=2,c=3;

++a;

c+=++b;

(

intb=4,c;

c=b*3;

a+=c;

printf(nfirst:%d,%d,%d\n",a,b,c);

a+二c;

printf("Second:%d,%d,%d\n”,a,b,c);

}

printf("third:%d,%d,%d\n",a,b,c);

)

該程序的輸出是()

A.first:12,4,12Second:26,4,12third:4,3,6

B.first:14,4,12Second:26,12,12third:26,3,4

C.first:14,4,12Second:26,4,12third:26,3,6

D.first:14,4,12Second:26,6,12third:26,4,6

答案:C

解析:程序運行到第6行時,a=2,b=3,c=6;程序運行到第1()行時,a=14,局部變量

b=4,c=12;程序運行到第13行時,a=26,局部變量b=4,c=12;程序運行到第15

彳了時,a—26,b=3,c—6O

30?、以下程序運行后,輸出結(jié)果是()o

intd=1;

intfun(intp)

(

intd=5;

d+=p++;

printf(H%d",d);

intmainQ

inta=3;

fun(a);

d+=a++;

printf(M%d\nH,d);

)

A.84

B.99

C.95

D.44

答案:A

解析:fun。函數(shù)調(diào)用時代人局部變量a的值,fun。函數(shù)體內(nèi)局部變量d自增3,輸出d的

值,即S,缶「0函數(shù)返回丸此時全局變量d的值不變。d+f++后,全局變量d自

增3,此時全局變量d的值是4,輸出全局變量d的值。

31?、以下程序的輸出結(jié)果是()。

inta,b;

voidfun()

a=lOO;b=200;

}

voidmainQ

{

inta=5,b=7;

fun。;

printf("%d%d\nu,a,b);

}

A.100200

B.57

C.200100

D.75

答案:B

解析:fun。函數(shù)改變的是全局變量的值,printf。函數(shù)輸出的是局部變量的值,fun。函數(shù)不

會改變局部變量a、3的值。

多選題

1、在調(diào)用外部函數(shù)時,卜列描述中止確的是()(多選)

A.只要有函數(shù)名,就能調(diào)用外部函數(shù)

B.調(diào)用外部函數(shù)要包含外部函數(shù)所在的頭文件

C.外部函數(shù)與調(diào)用者定義在同一個源文件下

I)在聲明外部函數(shù)時,外部函數(shù)與原函數(shù)定義的返回值類型、函數(shù)名稱和參數(shù)列表必須

一致

答案:B,D

解析:外部函數(shù)調(diào)用時要包含其所在的頭文件,當(dāng)調(diào)力者聲明了外部函數(shù)的原型,也可以

不用包含頭文件

判斷題

1、局部變量就是在函數(shù)內(nèi)部聲明的變量。

答案:true

解析:局部變量就是在函數(shù)內(nèi)部聲明的變量。

2、局部變量只有當(dāng)它所在的函數(shù)被調(diào)用時才會被使用,而當(dāng)函數(shù)調(diào)用結(jié)束時局部變量就會

失去作用。

答案:true

解析?:局部變量只相當(dāng)它所在的函數(shù)被調(diào)用時才會被使用,而當(dāng)函數(shù)調(diào)用結(jié)束時局部爻量

就會失去作用。

3、局部變量就是在函數(shù)內(nèi)部聲明的變量,它只在本函數(shù)內(nèi)有效。

答案:true

解析:局部變量就是在函數(shù)內(nèi)部聲明的變量,它只在本函數(shù)內(nèi)有效,也就是說,只能在本

函數(shù)內(nèi)使用它。

4、局部變量只有當(dāng)它所在的函數(shù)被調(diào)用時才會被使用,當(dāng)函數(shù)調(diào)用結(jié)束時局部變量還會一

直存在。

答案:false

解析:局部變量只有當(dāng)它所在的函數(shù)被調(diào)用時才會被使用,而當(dāng)函數(shù)調(diào)用結(jié)束時局部變量

就會失去作用。

簡答題

1、?請閱讀下面的程序,分析程序是否能編繹通過并正確運行,如果不能,說明原因;如

果能,請寫出運行結(jié)果。

voidfunc(inta,intb)

printf("%d",a+b);

}

voidmainQ

{

func(3,2);

printfC\nH);

}

答案:5

解析:fun。是一個實現(xiàn)兩個數(shù)相加的函數(shù),在主函數(shù)中調(diào)用并傳入值,得到兩個數(shù)的和

2〉、請閱讀下面的程序,在空白處填寫正確的代碼,耨函數(shù)的結(jié)果返回給調(diào)用者。

intfunc(inta,intb)

intsum=0;

sum=a+b;

voidmainQ

{

intsum=0;

=func(3,2);

printf("兩個數(shù)相加的結(jié)果為%d”,sum);

}

答案:?remrnsum;

sum;

解析:?returnsum;rcturn將函數(shù)結(jié)果返回

sum;主函數(shù)中sum接收函數(shù)返回的值

3、?請閱讀下面的程序,分析程序是否能編繹通過并正確運行,如果不能,說明原因;如

果能,請寫出運行結(jié)果。

voidmain。

intnum=100;

printf("%>d,%o,%x\n”,num,num,num);

}

答案:10014464

解析:printfO函數(shù)將十進(jìn)制數(shù)100分別以十進(jìn)制,八進(jìn)制,十六進(jìn)制形式輸出。

4〉、請閱讀下面的程序,當(dāng)用戶從鍵盤輸入hell。world時,分析程序是否能編繹通過并正

確運行,如果不能,說明原因;如果能,請寫出運行結(jié)果。

voidmainQ

(

charstr[256];

scanf("%s”,str);

printf(

)

答案:hello

解析:輸入helloworld時,中間的空格對scanf。函數(shù)來說是終止符:,后面的內(nèi)容無法讀取。

5)、請閱讀下面的程序,在空白處填寫正確的代碼,實現(xiàn)下列功能。

用戶從鍵盤輸入兩個整型數(shù)據(jù),將兩個數(shù)據(jù)相加輸出。

voidmain。

{

inta,b;

printf("%d\n",);

}

答案:?scanf("%d%d"

a+b;

解析:?鍵盤輸入數(shù)據(jù),用scanfO函數(shù);

輸入兩個數(shù)據(jù)的和a+b;

6、?請閱讀下面的程序,分析程序是否能編繹通過并正確運行,如果不能,說明原因;如

果能,請寫出運行結(jié)果。

intfunc2(inta,intb)

intc;

c=a*b%3;

returnc;

intfund(inta,intb)

intc;

a+=a;

b+二b;

c=func2(a,b);

returnc+c;

voidmainQ

intx=ll,y=19;

printf("thefinalresultis:%cl\n",funcl(x,y));

答案:4

解析:乂=11,丫=19傳入8m10函數(shù),在funclO函數(shù)中經(jīng)過運算變?yōu)?2,38,然后傳入給

func2()函數(shù),返回運算結(jié)果2,fund0函數(shù)收到返回值2以后再經(jīng)過運算返回給主調(diào)

用函數(shù)結(jié)果為4。

7〉、請閱讀下面的程序,分析程序是否能編繹通過并正確運行,如果不能,說明原因;如

果能,請寫出運行結(jié)果。

voidfunc2(inta,intb)

{

a=a+10;

b=a+10;

}

voidfunc(inta,intb)

a=func2();

b=func2();

voidmain。

{

intx=1,y=10;

funcl(x,y);

printf(Hx=%d,y=%d\n",x,y);

}

答案:x=l,y=10;

解析:將實參傳遞給形參,只是復(fù)制了一份給x,y的值,參數(shù)在被調(diào)用函數(shù)內(nèi)部改變,不

影響其在調(diào)用函數(shù)中的值。

8)、請閱讀下面的程序,在空白處填寫正確的代碼,實現(xiàn)下列功能。

用戶從鍵就輸入四個數(shù),比較得出四個數(shù)中的最大值并輸出。

intmax2(inta,intb)

if(a>b){

returna;

else

returnb;

)

intmax4(inta,intb,intc,intd)

intres;

res=max2(a,b);

res二

res=max2(res,d);

voidmainQ

inta,b,c,d,max;

printf("請輸入四個整數(shù):”);

max=max4(a,b,c,d);

printf(Mmax=%d\nu,max);

}

答案:?max2(res,c);

returnres;

scanf("%d%d%d%d”

解析:在max4()函數(shù)中,res=max2(a,b)返回的是a,b中的最大值,這個最大值再與c進(jìn)行

比較,所以res=mAx2(r、Q,返回的較大的值再與d作比較,再將比較得出的較大

的值返回給主調(diào)用函數(shù),這個較大的值就是四個數(shù)中的最大值。

9〉、請閱讀下面的程序,分析程序是否能編繹通過并正確運行,如果不能,說明原因;如

果能,請寫出運行結(jié)果。

intadd(intn)

if(n==1)

return1;

else

returnn+add(n-1);

voidmain。

intn=5;

intsum=add(5);

printf(“結(jié)果為%d\n",sum);

答案:15

解析:add。函數(shù)進(jìn)行遞歸調(diào)用,傳入的參數(shù)5,會一直遞減相加直到遞減至1。

10、?請閱讀下面的程序,分析程序是否能編繹通過并正確運行,如果不能,說明原因;如

果能,請寫出運行結(jié)果。

voidfun(intn)

{

if(n>0)

(

printf(M%d\f*,n);

fun(—n);

}

}

voidmain。

{

inr9=5;

fun(a);

答案:54321

解析:fun。函數(shù)遞歸調(diào)用,每打印一次就自減再調(diào)用一次自己。

11?、請閱讀下面的程序,在空白處填寫正確的代碼,實現(xiàn)下列功能。

用遞歸方法求出n!o

intfac(intn)

{

intt;

if()

return1;

else

(

t=;

returnt;

voidmain。

intm,y;

printf(MEnterm:\nn);

scanf(u%du,&m);

if(m<0)

printf(HInputdataError!\nn);

else

(

y=fac(m);

printf(°\n%d!=%d\nH,m,y);

}

答案:?(n==l)||(n二二0)

n*fac(n-1)

解析:實現(xiàn)n的階乘,當(dāng)n=0或者n=1時,階乘沒有意義,當(dāng)n>1時,實現(xiàn)階乘,則為

n*fun(n-l);

12、?請閱讀下面的程序,分析程序是否能編繹通過并正確運行,如果不能,說明原因;如

果能,請寫出運行結(jié)果。

intx=5;

staticvoidcudeQ

|

X=x*x*x;

)

voidmainQ

{

cudeQ;

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

}

答案:125

解析:全局變量x,當(dāng)調(diào)用cudeO內(nèi)部函數(shù)時,并沒有傳入?yún)?shù),沒有復(fù)制,所以x值的

變化直接改變了x本身的值

13?、請閱讀下面的程序,分析程序是否能編繹通過并正確運行,如果不能,說明原因;如

果能,請寫出運行結(jié)果。

first.c文件

intfunc(inta,intb)

{

returna+b;

)

second.c文件

staticintfunc(inta,intb)

{

returna-b;

}

voidmainQ

(

intx=5,y=2;

printf(M%d\nw,func(5,2));

答案:3

解析:當(dāng)內(nèi)部函數(shù)與外部函數(shù)重名時,會優(yōu)先調(diào)用內(nèi)部函數(shù)

14?、請閱讀下面的程序,分析程序是否能編繹通過并正確運行,如果不能,說明原因;如

果能,請寫出運行結(jié)果。

first.c源文件

intfunc(inta,inrb)

{

returna+b;

}

second.c源文件

externintfunc(inta,intb);

voidmninQ

{

intx=5,y=2;

printffw%d\nw,func(5,2j);

答案:7

解析:在second.c中聲明了intfunc(inta,intb);函數(shù)原型,可以調(diào)用first.c中的函數(shù)。

15?、請閱讀下面的程序,在空白處填寫正確的代碼,實現(xiàn)下列功能。

有一個外部函數(shù),用戶輸入一個數(shù)字,可以實現(xiàn)奇偶數(shù)的判斷。實現(xiàn)在主函數(shù)中調(diào)用這個

外部函數(shù)。

firsLC源文件

voidfunc(intnum)

|

if(num%2==0)

printf(“這是一個偶數(shù)!\n");

}

「源文件

voidmainQ

intnum;

scanf("%d”,&num);

func(num);

}

答案:externvoidfunc(intnum);

解析:調(diào)用外部函數(shù),可以包含函數(shù)所在的頭文件,也可以在本文件中聲明函數(shù)原型。

15、?請閱讀下面的程序,分析程序是否能編繹通過并正確運行,如果不能,說明原因;如

果能,請寫出運行結(jié)果。

voidshow'O

(

intx=0;

}

voidmninQ

printf(”x的值為:%d\n",x);

答案:不能運行

解析:變量X為函數(shù)show)的局部變量,只在show。函數(shù)范圍內(nèi)有效,在main。中無法調(diào)

用。

17?、請閱讀下面的程序,分析程序是否能編繹通過并正確運行,如果不能,說吠原因;如

果能,請寫出運行結(jié)果。

intshow。

{

intx=0;

returnx;

)

voidmain。

{

intx=10;

showQ;

printf("x的值為:%d\nH,x);

答案:X的值為:10

解析:main。函數(shù)中的x是局部變量,不受show。函數(shù)調(diào)用的影響。

18、請閱讀下面的程序,分析程序是否能編繹通過并正確運行,如果不能,說明原因;如

果能,請寫出運行結(jié)果。

intx=10;

voidmain。

{

intx=100;

printf("%d”,x);

}

答案:100

解析:當(dāng)全局變量與局部變量重名時,全局變量會被屏蔽掉。

19?、請閱讀下面的程序,分析程序是否能編繹通過并正確運行、如果不能,說明原因;如

果能,請寫出運行結(jié)果。

intx=2;

voidfunc(intx)

voidmainQ

|

func(x);

printf(M%d\n*',x);

}

答案:2

解析:全局變量作為實參傳遞給函數(shù),在函數(shù)中的運算并不改變其原來的值。

20、?請閱讀下面的程序,分析程序是否能編繹通過并正確運行,如果不能,說明原因;如

果能,請寫出運行結(jié)果。

inrx=1();

voidshow。

intx=2();

printf("show。函數(shù)41x的值為:%d\n*',x);

voidmain。

{

intx=30;

printffmain。函數(shù)中x的值為:%d\n',,x);

showQ;

}

答案:?main0函數(shù)中x的值為:30

showQ函數(shù)中x的值為:2C

解析:局部變量只在它所在的函數(shù)內(nèi)部有效,且當(dāng)全局變量與局部變量重名時,局部變量

會屏蔽掉全局變量

21、?請閱讀下面的程序,分析程序是否能編繹通過并正確運行,如果不能,說明原因;如

果能,請寫出運行結(jié)果。

inta,b;

voidfuncQ

a=100;

b=200;

}

voidmainQ

{

inta=5,b=7;

func();

printffa二%d,b二%d\nH,a,b);

)

答案:a=5,b=7

解析:全局變量與局部變量重名時,局部變量會屏蔽掉全局變量

22?、請閱讀下面的程序,在空白處填寫正確的代碼,該程序的功能是:用函數(shù)求x的絕對

值。

voidmainQ

intx,y;

scanf("%d",&x);

printf(My=%d\nH,y);

}

intabs(inta)

(

intb;

if(a>=0)

b=a;

else

答案:?y=abs(x);b=-a;returnb;

解析:abs0函數(shù)是求絕對值的函數(shù)。

23、?以下check函數(shù)的功能是對value中的值進(jìn)行四舍五入計算,若計算后的值與ponsc的

值相等,則顯示“WELLDONE!!”,否則顯示計算后的值。請?zhí)羁铡?/p>

voidcheckoutponse,floatvalue)

|

intval;

val_;

print("計算后的值:%dH,val);

if(_______)

printf(H\nWELLDONE!!\nM);

else

printf(n\nSorrythecorrectansweris%d\nM,val);

)

答案:?(int)((value*10+5)/10)val==ponse

解析:第一個填空處利用日。前型轉(zhuǎn)int型的規(guī)則實現(xiàn)四舍五入的計算;第二個填空處判斷

是否計算后的值與ponse的值相等。

24、?請閱讀下面的程序,在空白處填寫正確的代碼,該程序的功能是:求整數(shù)num1和num2

的最大公約數(shù),并返回該值。

intgongyruc(intnuml,intnum2)

{

inttemp;

while()

(

temp=numl%num2;

num1=num2;

num2=temp;

}

return;

)

答案:?num2!=0numl

解析:循環(huán)條件是num2!=0,因為被模數(shù)不能為0;numl在對num2取模的過程中一直在改

變,最后返回numl的值。

25?、請閱讀下面的程序,在空白處填寫正確的代碼,該程序的功能是:根據(jù)對x的輸入,

求1到x的累加和。

intfun(intn)

inti,c;

c=0;

for(i—l;i<—n;i++)

c=c+i;

voidmainQ

{

inrx;

scanf(n%dH,);

printf(M%d\nH,fun(x));

答案:?returnc;&x

解析:函數(shù)fun。中求總和:c是總和變量,最后返回c;

從鍵盤輸入x,則要對scant。函數(shù)傳入變量x的地址。

25?、請閱讀下面的程序,在空白處填寫正確的代碼,該程序的功能是:先輸入10個數(shù)據(jù)

到數(shù)組a中,再輸入x,然后在a數(shù)組中查找與x值相同的元素的所在位置。

voidmain。

{

inta[ll],x,i;

printff'Enter10integers:\n,r);

fbr(i=l;;i++)

scanf("%d",a+i);

printf(MEnterx:u);

*a=x;i=10;

while(x!=*(a+i))

if(i>0)

printf("%5d'spositionis:%4d\n'\x,i);

else

printf(H%dNotbeenfound!\nu,x);

}

答案:?i<=10scanf("%d",&x);break;

27?、請閱讀下面的程序,在空白處填寫正確的代碼,該程序的功能是:輸入10個整數(shù)存

人數(shù)組x中,然后計算各元素的和,并將和存入S中。

voidmainQ

(

intx[10],i,s;

for(i=0;i<10;i++)

s=0;

for(i=l;i<10;i++)

printf('*%dH,s);

答案:?scanfC%d”,&x[i]);s+=i;

解析:第一個空格從鍵盤輸入元素的值;

第二個空格將元素存入變量s中;

28、?請閱讀下面的程序,在空白處填寫正確的代碼,該程序的功能是:讀入一個兩位的正

整數(shù),按字符型形式輸出。

voidmainQ

{

intn;

scanf();

printf();

)

答案:?“%d”,&n“%c”,n

29、?請閱讀下面的程序,分析代碼是否能夠編譯通過:如果能編譯通過,請列出運行的結(jié)

果,否則請說明編譯失敗的原因。

#include<stdio.h>

intsum(inta)

{

intc=0;

staticintb=3;

c+=l;

b+=2;

returna+b+c;

}

voidmainQ

{

inti;

inta=2;

for(i=0;i<5;i++)

printf("%d,”,sum(a));

答案:8,10,12,14,16,

解析:sum。函數(shù)體中的靜態(tài)局部變量b會一直存在,其值不隨函數(shù)調(diào)用結(jié)束而第毀。

30、編寫一個函數(shù),判斷一個數(shù)是奇數(shù)還是偶數(shù),并在主函數(shù)中調(diào)用。

答案:?#include<stdio.h>

voidfunc(intnum)

{

if(num%2==0)

printf(“該數(shù)是偶數(shù)”);

else

printf(“該數(shù)是奇數(shù)”);

)

intmain。

intnum;

scanf("%d”,&num);

func(num);

return0;

}

解析:?func()函數(shù)對傳入進(jìn)來的參數(shù)num進(jìn)行奇偶判斷;

主函數(shù)中調(diào)用funcO函數(shù),傳入?yún)?shù)得到判斷結(jié)果。

31、編寫一個函數(shù),實現(xiàn)1-100的相加和,并在主函數(shù)中調(diào)用。

答案:?#include<stdio.h>

intfuncQ

{

intnum,sum=1;

fbr(num=1;num<=10();num++)

{

sum+=num;

}

returnsum;

intmain。

{

intsum=0;

sum=funcQ;

printf("sum=%d”,sum);

return0;

)

解析?:函數(shù)實現(xiàn)1-100的相加和,并將結(jié)果返回給調(diào)用者。

主函數(shù)中的sum接收調(diào)用Func函數(shù)的返回值,并將其打印

32、?請編寫一個程序,用戶從鍵盤輸入英文字母,如果是大寫,將其轉(zhuǎn)換成小寫輸出;如

果是小寫,將其轉(zhuǎn)換成大寫輸出。

提示:英文字母在計算機中以ASCII碼表形式存在。

答案:?#include<stdio.h>

intmainf)

charch;

printf("請輸入英文字母:\n、

scanf(H%cH,&ch);

if(ch>='Af&&ch<=2)

printf("%c\n”,ch+32);

elseif(ch>=*a'&&ch<='z)

printf(n%c\nM,ch-32);

return0;

)

解析:英文字母對應(yīng)的ASCII碼值,大寫比對應(yīng)小寫小32

33、請編寫一個程序,用戶輸入一個十進(jìn)制整數(shù),分引輸出其十進(jìn)制、八進(jìn)制、十六進(jìn)制

對應(yīng)的數(shù)值。

答案:?#include<stdio.h>

intrnainQ

intnum;

scanf("%d”,&num);

printf(“十進(jìn)制為:%d\n八進(jìn)制為:%o\n十六進(jìn)制為:%x\nw,num,num,num);

return0;

}

解析:十進(jìn)制輸入格式符為%d,八進(jìn)制輸出格式符為%。,十六進(jìn)制輸出格式符為%x。

34、請編寫一個程序,實現(xiàn)兩個數(shù)的求和,并打印出來。

答案:?#include<stdio.h>

voidshow(ints)

{

printf("兩個數(shù)的和為:%d”,s);

return;

voidadd(inta,intb)

ints=a+b;

show(s);

return;

}

intmainQ

(

ints=a+b;

show(s);

return0;

)

解析:add。函數(shù)實現(xiàn)兩個數(shù)相加,show。函數(shù)將兩個數(shù)相加的結(jié)果打印出來。

35?、請編寫一個程序,用戶從鍵盤隨機輸入四個數(shù),比較這個四個數(shù)得出其中最大值并輸

出。

提示:

1)編寫一個兩個數(shù)值比較的函數(shù)

2)編寫一個四個數(shù)值比較的函數(shù),調(diào)用這個函數(shù),在該函數(shù)中調(diào)用兩個數(shù)值比較的函數(shù)

答案:?#include<stdio.h>

intmax2(inta,intb)

(

if(a>b){

returna;

)

else

(

returnb;

}

}

intmax4(inta,intb,intc,intd)

{

intres;

res=max2(a,b);

res=max2(res,c);

res=max2(res,d);

returnres;

}

intmainQ

(

inta,b,c,d,max;

printf(”請輸入四個整數(shù):");

scanf("%d%d%d%d',&a,&b,&c,&d);

max=max4(a,b,c,d);

printf("max=%d\nu,max);

return0;

)

解析:輸入四個數(shù),調(diào)用max4()函數(shù),在max40函數(shù)中又調(diào)用max2()函數(shù)進(jìn)行兩兩比較,

最后得出最大值,返回給調(diào)用函數(shù)。

36、?請編寫一個程序,計算s=2人2!+3人21;

提示:

1)編寫一個函數(shù)計算平方值

2)編寫一個函數(shù)計算階乘

答案:?#inchide<stdio.h>

longf1(intp){

intk;

longr;

longf2(int);

k=p*p;

r=f2(k);

returnr;

)

longf2(intq){

longc=1;

inti;

for(i=l;i<=q;i++)

c=c*i;

returnc;

}

intmain。

{

inti;

longs=0;

for(i=2;i<=3;i++)

s=s+fl(i);

printf(M\ns=%ld\nM,s);

return0;

)

解析:函數(shù)fio實現(xiàn)了計算數(shù)值的平方,函數(shù)£20實現(xiàn)了階乘計算,在什0中調(diào)月f20實現(xiàn)

了計算表達(dá)式的值。

37、?請編寫一個程序,用遞歸方法實現(xiàn)n!。

提示:

1)遞歸調(diào)用是函數(shù)自身調(diào)用自身的過程

2)每遞歸調(diào)用一次n就要自減一次

答案:?#inchide<stdio.h>

intadd(intn)

(

if(n==1)

return1;

else

returnn+add(n-1);

}

intmain()

{

intn;

scanf("%d",&n);

intsum=add(n);

printf(“結(jié)果為:%d\n",sum);

return0;

}

解析:add。函數(shù)實現(xiàn)遞歸,每調(diào)用一次n要減1.

38?、請編寫一個程序,求出m的n次方。

提示:編寫遞歸函數(shù)求解。

答案:?#include<stdio.h>

intfunc(intm,intn)

{

if(n==1)

returnm;

else

returnm*func(m,n-1);

}

intmain。

intm,n,sum;

scanf("%d%d”,&m,&n);

sum=func(m,n);

printf(n%d\nn,sum);

return0;

}

解析:funcO實現(xiàn)遞歸調(diào)用,每乘上一個m,再用n-1調(diào)用函數(shù),實現(xiàn)m的n次方。

39?、假設(shè)有一對兔子,從出生后第3個月起每個月都生一對兔子,小兔子長到第三個月后

每個月又生一對兔子,假如兔子都存活,問一年之后(第13個月)月兔子總數(shù)為多少對?

提示:兔子的規(guī)律為數(shù)列1,

溫馨提示

  • 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論