C語言程序設計實例教程第三版周靜課后習題及答案_第1頁
C語言程序設計實例教程第三版周靜課后習題及答案_第2頁
C語言程序設計實例教程第三版周靜課后習題及答案_第3頁
C語言程序設計實例教程第三版周靜課后習題及答案_第4頁
C語言程序設計實例教程第三版周靜課后習題及答案_第5頁
已閱讀5頁,還剩55頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

C語言程序設計實例教程第三版

課后習題及答案

練習1

一、選擇題

1、一個C程序是由(B)。

A.一個主程序和若干子程序組成B.一個或多個函數(shù)組成

C.若干過程組成D.若干子程序組成

解析:C語言稱為函數(shù)式語言,其程序是由至少一個主函數(shù)main,和其他更多的函數(shù)組成,答

案選B;

2、一個C程序的執(zhí)行是從(A)。

A.main函數(shù)開始,直到main函數(shù)結束B.第一個函數(shù)開始,直到最后一個函數(shù)結束

C.第一個語句開始,直到最后一個語句結束D.main函數(shù)開始,直到最后一個函數(shù)結束

解析:C語言執(zhí)行都是從主函數(shù)main函數(shù)開始,不論main出數(shù)放置的位置,答案選A;

3、C語言語句的結束符是(B)。

A.回車符B.分號C.句號D.逗號

解析:C語言語句是以分號結束,答案選B:

4、下面標識符中(D)不是C語言的關鍵字。

A.charB.gotoC.caseD.include

解析:char聲明字符型變量關鍵字,case為switch結構中開關語句分支關鍵字,goto為無條

件跳轉語句關鍵字,在C語言中include小屬于關鍵字,屬于預處理命令,故答案選D;

5、以下說法正確的是(A)

A.C程序的注釋可以出現(xiàn)在程序的任何位置,它對程序的編譯和運行不起任何作用。

B.C程序的注釋只能是一行。

C.C程序的注釋不能是中文文字信息。

D.C程序的注釋中存在的錯誤會被編譯器檢查出來。

解析:在C程序中注釋只是起到增加程序的可讀性,編譯器并不會對注釋進行檢查,且C程

序中存在多行注釋。故答案選A

6、以下說法正確的是(D)

A.C程序中的所有標識符都必須小寫B(tài).C程序中關鍵字必須小寫,其他標識符不區(qū)

分大小寫

C.C程序中所有標識符都不區(qū)分大小寫D.C程序中關鍵字必須小寫,其他標識符區(qū)分

大小寫。

解析:C程序中的關鍵字均是小寫定義的,且標識符定義可以使用大寫和小寫,但是嚴格區(qū)分

大小寫;故答案選D。

7、設x、y均為float型變量,則以下不合法的賦值語句是(B)

A.++x;B.y=(x%2)/10;C.x*=y+8;D.x=y=0;

解析:運算符%要求兩端的操作數(shù)必須為整型,而在答案B中%號兩端的操作數(shù)為x和2,x

為實型,所以是錯誤的。

8、下列不正確的轉義字符是(C)

A.NB.VC.''19'D.'\0'

解析:轉義字符是由單引號括起來的帶反斜線的字符,這些字符具有特殊的含義,反斜線后可

以是數(shù)字來代表某個字符,而這些數(shù)字只包括兩種:八進制(1-3位)和十六進制(1-2位)。

十六進制前面要加x(或X),這里的C答案反斜線后是數(shù)字,但不是x開頭,所以應該是八

進制數(shù),但是數(shù)值里有9,和八進制數(shù)不符,所以是錯誤的。

9、下列不是C語言常量的是(A)

A.e-2B.074C."auD.'\0'

解析:C語言的常量分為整型、實型、字符型和字符串。整型常量的書寫形式分為十進制、八

進制和十六進制,十進制是0~9的數(shù)值表示;八進制是以0開頭,0~7的數(shù)值表示,十六進制

是以Ox(或0X)開頭,0~9與a~f(或A~F)表示。實型常量的書寫分為小數(shù)形式和指數(shù)形

式,小數(shù)形式指只包含小數(shù)點的形式,如:0.056或300.57;指數(shù)形式只指用包含e(或E)的

書寫形式,要求e(或E)的前面必須有數(shù)值,后面必須是整數(shù)的書寫規(guī)則。字符型常量指單

引號引起來的單個字符或轉義字符。字符串常量是指雙引號引起的多個字符。這里答案A是

實型的指數(shù)書寫形式,但是這種書寫形式要求e前面必須有數(shù)值,后面必須是整數(shù),而這里所

以是錯誤的。

10、設int類型的數(shù)據(jù)長度為2個字節(jié),則unsignedint類型數(shù)據(jù)的取值范圍是(B)

A.()-255B.0-65535C.-32768-32767D.-256-255

解析:2個字節(jié)為16個二進制位,旦是無符號型,故范圍為0到201=65535,故答案選B;

11、若定義了inix;則將x強制轉化成雙精度類型應該寫成(A)

A.(double)xB.x(double)C.double(x)D.(x)double

解析:A為C語言強制轉換的標準書寫形式;

12、在C語言中,要求參加運算的數(shù)必須是整數(shù)的運算符是(C)。

A./B.*C.%D.=

解析:C選型的%為求余運算符,其要求兩端的運算數(shù)必須為整型。

13、為了計算s=10!(即10的階乘),則s變量應定義為(D)。

A.intB.unsignedC.longD.以上三種類型均可

解析:在TCF,此題答案是C,在VC6.0卜此題答案是D,因為兩個編譯器對int類型數(shù)據(jù)

的空間分配的大小不一樣,在TC下是2字節(jié),在VC6.0下是4字節(jié),所以取值范圍也就不一

樣。

14、putchar()函數(shù)可以向終端輸出一個(D)。

A、整型變量表達式值B、實型變量值

C、字符串D、字符或字符型變量值

解析:pulchar函數(shù)的作用是向終端輸出一個字符,其參數(shù)可以是變量或常量,但是輸出的結

果是ASCH碼表中顯示的字符;答案選D;

15、已有如下定義和輸入語句,若要求al,a2,cl,c2的值分別為10,20,A和B,當從第一列

開始輸入數(shù)據(jù)時,正確的數(shù)據(jù)輸入方式是(D)(一代表空格,/代表Enter)

intal,a2;charcl,c2;

scanf("%d%c%d%c",&al,&cl,&a2,&c2);

A、10-A20B/B、10A20-B/C、10_A20jB/D、I0A20B/

解析:空格是有效字符,所以會被scanf函數(shù)正常讀取。A答案會將1()送給al,空格送給cl,

而A字符不屬于a2的讀取范圍,scanf函數(shù)非正常結束,a2與后面的c2都沒有正常獲取數(shù)

值;B答案會將10送給al,A送給cl,20送給a2,空格送給c2,然后scanf函數(shù)讀取正常結

束,后面的B字符將會留給下一輸入函數(shù)讀?。籆答案與A答案類似;只有D答案正確地將

將10送給al,A送給cl,20送給a2,B送給c2,然后scanf函數(shù)讀取正常結束。

16、執(zhí)行下列程序片段時輸出結果是(C)。

intx=13,y=5;

printf("%(i",x%=(y/=2)J;

A、3B、2C、1D、0

解析:這是一個表達式的運算,x%=()是一個賦值表達式,賦值表達式的運算方向是從右向左

進行。即先運算表達式y(tǒng)/=2,其運算結果是y=2,再將表達式轉換為x%=2,運算此表達式得

到最后結果為1。

17、已有如下定義和輸入語句,若要求al,a2,cl,c2的值分別為10,20,A和B,當從第一列開始輸

入數(shù)據(jù)時,正確的輸入方式是(D)。J代表空格,/代表Enter)

intal,a2;charcl,c2;

scanf(',%d%d",&al,&a2);

scanf("%c%c",&c1,&c2);

A、1020ABZB、10一20/C、10_20A_B/D、10-20AB/

ABz

解析:此題與15題類似,這里的回車符也屬于有效字符,所以會被scanf函數(shù)正常讀取。A答

案中的1020后面是字符A,不屬于數(shù)值,第一個scanf函數(shù)讀取時將1020看成一個整體送給

al,而后面的A不屬于a2獲取類型,這個scanf函數(shù)非正常結束,a2沒有獲取到數(shù)值:第二

個scanf執(zhí)行,cl獲取到字符A,c2獲取到字符B。B答案中的1()后面是空格,所以第一個

scanf函數(shù)現(xiàn)將10送給al,再將空格后的20送給a2,第一個scanf函數(shù)正常結束,第二個函

數(shù)是讀取字符型,這時的緩沖區(qū)中首先是回車符,當數(shù)字型讀取時可以忽略此字符,但是字符

型讀取卻不能忽略,所以scanf函數(shù)將回車符送給了cl,將A送給c2,scanf函數(shù)正常結束。

C答案中10后面是空格,所以第一個scanf函數(shù)現(xiàn)將10送給al,20后面是字符A,所以將

20送給a2,第一個scant?函數(shù)正常結束;第二個函數(shù)是讀取字符型,這時的緩沖區(qū)中苜先是

A,scanf函數(shù)將A送給cl,A后面的空格送給c2,第二個scanf函數(shù)正常結束。D答案中10

后面是空格,所以第一個scanf函數(shù)現(xiàn)將10送給al,20后面是字符A,所以將20送給a2,

第一個scanf函數(shù)正常結束;第二個函數(shù)是讀取字符型,這時的緩沖區(qū)中首先是A,scanf函數(shù)

將A送給cl,A后面的B送給c2,第二個scanf函數(shù)正常結束。所以D答案是正確的,

inta=!7,b=5

①a/b②a%b③a&&b④a&b⑤aAb

321120

⑥!a⑦a?2⑧a||b⑨a|b⑩~a?2

04121-72

解析:

第①題考點是數(shù)據(jù)自動類型轉換,整型與整型的運算最后結果仍為整型:

10、primf函數(shù)和scanf函數(shù)的格式說明都使用」_字符開始。

11、scanf處理輸入數(shù)據(jù)時,遇到下列情況時該數(shù)據(jù)認為垢束:(1)空格,(2)回車,(3)

TABo

12、已有inti,j;floatx;為將-10賦給i,12賦給j,410.34賦給x:則對應以下scanf函數(shù)調(diào)用語

句的數(shù)據(jù)輸入形式是scanf,%d%d%f,

13、C語言本身不提供輸入輸出語句,其輸入輸出操作是由函數(shù)來實現(xiàn)的。

14、一般地,調(diào)用標準字符或格式輸入輸出庫函數(shù)時,文件開頭應有以下預編譯命令:

#includcvstdio.h>。

三、程序閱讀,寫出程序運行結果C

1、#inckide<stdio.h>

inimain()

(

charc1='a;c2='b,,c3=,c',c4=,\l()1',c5=3116';

printf("a%cb%c\tc%c\tabc\n,\cl,c2,c3);

printf("\t\b%c%c",c4,c5);

return0:

}

運行結果:

aabbccabc

AN

2、用下面的scanf函數(shù)輸入數(shù)據(jù),使a=3,b=7,x=8.5,y=71,82,c1='A',c2=,a',問在鍵盤上如何輸入?

#inckide<stdio.h>

inimain()

{

inta,b;

floatx,y;

charcl,u2;

scanf(ua=%db=%d".&a,&b);

scanf(',%f%e,',&x,&y);

scanf("%c%c",&cl,&c2);

return0;

)

輸入數(shù)據(jù):J代表空格,/代表Enter)

a=3_b=7/

8.5^7.182elAaz

3、#include<stdio.h>

inimain()

{

inty=3,x=3,z=I;

printf(M%d%d\n'\(++x,y++),z+2);

return0;

}

運行結果:

33

4、#include<stdio.h>

intmain()

{

inta=12345;

floatb=-198.345,c=65;

printf("a=%4d,b=%-lD.2e,c=%6.2八n”,a,b.c);

return0;

)

運行結果:

a=12345,b=-1.98e+002,c=6.50

5、#includc<stdio.h>

intmain()

{

intx=-2345;

floaty=-l2.3;

printf("%6d,%6.2f',x,y);

return0;

)

運行結果:

-2345,-1230

6、#include<stdio.h>

intmain()

{

inta=12;

doubleb=3.14l5926;

printf("%6d##,%-6d##\n'*,a,a);

printf("a=%oa=%x\n",a,a);

printf(M%14.101f^",b);

return0;

運行結果:

12##,12##

a=14a=c

3.1415926000

四、編程題

1、己知intx=IO,y=12;寫出將x和y的值互相交換的表達式。

表達式:x=x+y,y=x-y,x=x-y;

分析:當x為x+y的和之后,第一次執(zhí)行x?y其結果為x原來的值賦給y,這時y就編程原來

的x,第二次執(zhí)行x-y,注意這時x依然還是x+y的和,但是y已經(jīng)編程原來的x,故x-y的

結果為原來的y值,將其賦值給x,故實現(xiàn)了x與y的互換。

擴展:也可以定義一個中間代換量intt;t=x,x=y,y=t;執(zhí)行之后x與y也能互換;

2^若a=3,b=4,c=5,x=l.2,y=2.4,z=-3.6,u=51274,n=128765,cl='a,,c2=,b,o想得到以下的輸出格式

和結果,請寫出程序(包括定義變量類型和設計輸出)。

a=3b=4c=5

x=1.200000,y=2.400000,z=-3.600000

x+y=3.60y+z=-1.20z+x=-2.40

u=51274n=128765

cl^a,or97(ASCII)

c2='b'or98(ASCII)

編程:

#include<stdio.h>

intmain()

(

inta=3,b=4,c=5;

doublex=1.2,y=2.4,z=-3.6:

unsignedintu=51274,n=l28765;

charcl='a\c2=,b,;

printf(*'a=%clb=%dc=%d\n*',a,b,c);

printf(nx=%lf,y=%lf,z=%lf\n,',x,y,z);

printf(*'x+y=%.21fy+z=%.2lfz+x=%.2lf\n",x+y,y+z,z+x);

pnntf(*'u=%un=%u\nn,u,n);

printf(ncl=,%c,or%d(ASCII)\n,,,cl,cl);

printf(,,c2=%c'or%d(ASCII)\n,,,c2,c2);

return0;

)

3、設圓半徑r=1.5,圓柱高h=3,求圓周長,圓面積,圓球表面積,圓球體積,圓柱體積。用

scanf輸入數(shù)據(jù),輸出計算結果;輸出時要求有文字說明,取小數(shù)點后2位數(shù)字,請編寫程序。

分析:給出幾種圖形的求解公式,下面程序?qū)垂竭M行計算并輸出計算結果;

圓周長公式:2nr圓面積公式:nr2圓球表面積公式:4nr2

圓球體積公式:1P圓柱體積公式:nr2h

編程:

#include<stdio.h>

intmain()

floath,r,l,s,sq,vq,vz;

floatpi=3.141526;

printf("請輸入圓半徑r,圓柱高h:

scanf(M%f.%f",&r,&h);

l=2*pi*r;

s=r*r*pi;

sq=4*pi*r*r;

vq=(3.0/4.0)*pi*r*r*r;

vz=pi*r*r*h;

printf("圓周長為:l=%.2f\nn,l);

printf("圓面積為:s=%.2f\n*',s);

printf("圓球表面積為:sq=%.2f\nM,sq);

printf(“圓球體積為:v=%.2f\n,\vq);

printf("圓柱體積為:vz=%.2Anu,vz);

return0;

運行結果:(下劃線部分代表鍵盤鍵入數(shù)據(jù)/代表Enter)

請輸入圓半徑r,圓柱高h:1.5,3/

圓周長為:1=9.42

圓面積為:s=7.07

圓球表面積為:sq=28.27

圓球體積為:v=7.95

圓柱體積為:vz=21.21

4、編程序:用gctchar函數(shù)讀入兩個字符給cl,c2,然后分別用putchar和prinlf函數(shù)輸出這

兩個字符。并思考以下問題:

(1)變量cl,c2應定義為字符型或整型?或兩者皆可?

(2)要求輸出cl和c2值的ASCII碼,應如何處理?用pulchai?函數(shù)還是prinlf函數(shù)?

(3)整型變量與字符型變量是否在任何情況下都可以互相替代?charcl,c2與intcl,c2

是否無條件地等價?

編程:

#inclu(ie<stdio.h>

intniaiii()

(

charcl,c2;

cl=getchar();

c2=getchar();

putchar(cl);

putchar(c2);

printf(”\ncl='%c'or%d(ASCII),,,cl,cl);

printf(',\nc2=,%c,or%d(ASCII)\n,',c2,c2);

return0;

}

解答:

(1)變量cl,c2可以定義為字符型或整型皆可。

(2)要求輸出cl和c2值的ASCII碼,應使用printf函數(shù),按整數(shù)格式輸出其值,而如果使

用putchar是輸出ASCII碼字符而不是ASCII碼。

(3)整型變量與字符型變量并不是任何情況下都可以互相替代。如:charcl,c2與intcl,c2

并非無條件地等價。因為整型變量和字符型變量在內(nèi)存占據(jù)的空間大小不同(整型為4或2字

節(jié),字符型為1字節(jié)),其取值范圍也就不同。當整型變量的值超過字符型變量的取值范圍,

它們之間就不能相互替代了。

練習2

一、選擇題

1.下面關于語句的說法中,正確的是(ABD)。

A、對程序中使用的變量、數(shù)組、函數(shù)等進行定義、聲明的語句屬于?說明性語句

B、表達式后面加;號構成表達式語句

C、復合語句中不允許包含另一條更合語句

D、對程序執(zhí)行流程起控制作用的語句屬于控制語句

解析:復合語句是可以嵌套的,所以C選項是錯誤的;

2.下面語句中,錯誤的是(B

A、m=x>y>z;B、floatx=y=z;C、m=x,m>y;D、{k=m>n;k?:x,y;}

解析:C語言中,在變量聲明語句中不能使用連續(xù)賦值初始化變量,故B選項是錯誤的。

3.下面不正確的if語句形式是(A

A、if(x=y;)m++;B、if(xv=y)m++;C、if(x-y)m++;D、if(x)m++;

解析:if選擇結構中圓括號內(nèi)是表達式,而不能是語句,故A選項是錯誤的。

4.下面不正確的if語句形式是(C)。

A、if(x=y);B.if(x==y)m=0,n=l;C、if(x>=y)m=0elsen=l;D、if(x!=y)m=n;

解析:C選項中if結構中條件成立時執(zhí)行的m=0后沒有分號,缺少語句標識,故結構錯誤;

5.下面程序的運行結果是(A)o

intmain()

(

intx=7,y=8,z=9;

if(x>y)

x=y,y=z;z=x;

printf("x=%dy=%dz=%d\n",x,y,z);

return0;

A、x=7y=8z=7B、x=7y=9z=7D、x=8y=9z=7D、x=8y=9z=8

解析:這里主要是考察if選擇結構條件下所能執(zhí)行的語句只有x=y,y=z;而后邊的z=x;并受選

擇結構條件所限制,所以根據(jù)題目要求當x>y(7>8)不成立,x=y,y=z;語句不能被執(zhí)行,而只

執(zhí)行z=x;語句,將變量x的值賦值給z變量,而x與y的值不變化,所以、=7產(chǎn)8z=7,故答

案選A;

6.下面程序的運行結果是(B)。

intniain()

(

intx=6,y=6;

if(++x<y++)

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

else

printf("%d\n",y++);

return0;

AN6B、7C、8D、9

解析:這里考察自增運算符++,if(++x〈y++爆件中++x表示先自增變?yōu)?,而y++是先參與比

較運算后再是y變量自增,過條為7<6不成立,故執(zhí)行else后面的語句輸出y++,因為y的

值在比較結束后已經(jīng)遞增變?yōu)?,故輸出結果為7,輸出之后y才變?yōu)?;故答案選B;

7.下面程序的運行結果是(D)。

intmain()

{

intx=I,y=2,z=3,m=I

if(1x)m-;

elseif(!y)m=2;

elseif(!z);

elsem=3;

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

return0;

A、m=0B、m=lC、m=2D^m=3

解析:這里考察if...elseif多分支結構的執(zhí)行,第1個條件!x為假,執(zhí)行第2個條件!y也為假,

執(zhí)行第3個條件!也為假,執(zhí)行最后一個else語句m=3;然后執(zhí)行printf語句輸出m=3;故答

案選D;

8.在下面的if語句中,功能上具有等價關系的兩條if語句是(B)。

①if(flag)x+y;elsex-y;

@if(flag==l)x+y;elsex-y;

③if(flag!=O)x+y;elsex-y;

?if(flag==O)x+y;elsex-y;

A、①和②B、①和③C、③和④D、②和③

解析:①結構中的條件是flag變量,該結構執(zhí)行是flag值不等于0執(zhí)行x+y,反之執(zhí)行x?y,

與③結構執(zhí)行一致;而②選擇結構中是判斷hag等于1和不等于1兩種情況,而④結構執(zhí)行

與①和③剛好相反;故答案選B;

9.在if語句多層嵌套的情況下,為了正確區(qū)分多個if和else之間的匹配關系,C語言規(guī)定:

如果沒有使用花括號,那么從最內(nèi)層的else開始,else總是與其(D

A、前面最近的if配對B、縮進位置相同的if配對

C、后面最近的if配對D、前面最近的且尚未與其它else配對的if配對

解析:在程序,對于if與else的配對是,程序由上而下從第1個else開始找尋其配對的if,

else找尋配對if是從else位置開始向上找尋配對的if,這個if是離else最近的if,但是注意

這個濘要是沒有被配過對的,如果最近的if已經(jīng)被之前else配對過了,那么需要繼續(xù)向上找

if,故答案選D;

10.下面程序的運行結果是(A)。

intmain()

(

inta=3,b=5,c=2.d=3,m=0;

if(a>b)

if(a>c)

if(a>d)m=l;

elsem=2;

elsem=3;

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

return0;

)

A、0B、1C、2D、3

解析:這里考察if的嵌套,進一步考察else與if的配對,根據(jù)上一題描述,在程序中由上而

下從第1個elsem=2;查找離他最近的if(a>d)m=l;與其配對,下面第2個elsem=3;與離它最

近且沒有配對的if是if(a>c),程序只有兩個else,那么第1個if(a>b)沒有與之配對的else;

當進行if(a>b)判斷時其條件為假,沒有執(zhí)行的else,整個if結構執(zhí)行結束,執(zhí)行prin行語句

輸出m的值,而m的初值為0,故答案選A;

11.對下面程序運行結果的分析中,正確的是(D)。

intmain()

(

intx,y;

scanf("%d,%d",&x,&y);

if(x>y)

x=y;y=x;

else

x++;y++;

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

return0;

)

A、若輸入4和3,則輸出4和5B、若輸入3和4,則輸出4和5

C、若輸入4和3,則輸出4和5D、有語法錯誤,不能通過編譯

解析:本題考核重點是if選擇結構中語句層次的劃分,對于if語句后只能有一條語句,如果

多條需要用一對花括號{}將多條語句括起來,故本題的if語句后面有兩條語句,所以這是一

個單條件的if語句,后面的else不能與這個if匹配,所以就語法錯誤,故答案選D

12.以下關于switch語句的敘述中,不正確的是(C)。

A、switch語句中各case子句后面的表達式必須是整型或字符型常量表達式。

B、同一switch語句中各case子句后面表達式的值必須互不相同。

C、switch語句中必須有default部分。

D、switch語句必須與break語句結合才能實現(xiàn)真正的先擇結構。

解析:再switch結構語句中defaule部分是可有可無的,他的作用是當所有case后的常量都

不滿足表達式的值時,default位置作為switch語句結構的入口點;而break語句再switch語

句中的作用是中斷switch語句的執(zhí)行,以實現(xiàn)分支效果,本題答案選C;

13.假定已定義變量intx,y;則下面正確的switch語句是(BD)。

A、switch(x)

(

case1.1:y++;

case2.1:y—;

default:y*=y;

)

C、switch(x)

(

case2:y++;

case1+1:y-;

default:y*=y;

)

B、swilch(x)

{

case'a':y++;

case

defauit:y*=y;

}

D、switch(x)

default:y*=y;

caseI:y++;

case1+1:y—;

解析:這里考察switch語句結構的語法:case后面是整型或字符型常量表達式,且每個case后的值需

要互不相同,故答案A和C都是錯誤的,答案選B和D;

14.以下程序輸出結果是(B)。

intmain()

(

intx=l,y=2,m=0,n=0;

switch(x)

(

caseI:switch(y)

{

case2:m++;break;

case4:n++;break;

)

case3:m++;n++;break;

case5:m++;n++;

)

printf("m=%d.n=%d",m.n);

return0;

)

A、m=l,n=0B、m=2,n=lC、m=l,n=lD、m=2,n=2

解析:這里考察switch語句的執(zhí)行流程,因為x=l,所以外層的switch語句執(zhí)行從case1入口開始,

而內(nèi)層switch在case2人口執(zhí)行使得m由。變?yōu)?,然后執(zhí)行break語句跳出內(nèi)層switch結構,順序

執(zhí)行外層的case3使得m由1變?yōu)?,n由0變?yōu)?,故答案選B;

15.下面的循環(huán)語句執(zhí)行完畢后,循環(huán)變量k的值是(B)。

intk=l:

while(k++<10);

A、1()B、11C、9D、無限循環(huán),值不確定

解析:本題考查自增運算符的使用,以及空語句在作為循環(huán)體執(zhí)行,當k為9時,k++是先將k的值

參與表達式kvlO運算,成立,然后k的值自增變?yōu)?0,繼續(xù)執(zhí)行k++vlO,即10vl0不成立,

跳出循環(huán),但是在跳出循環(huán)時k由10自增變?yōu)?1,故答案選擇B;

16.對下面程序段中while循環(huán)執(zhí)行情況分析正確的是(C)。

intk=2;

while(k=O){printf("%d",k);k-;}

A、該循環(huán)只執(zhí)行1次B、循環(huán)是無限循環(huán)

C、循環(huán)體中的語句1次也不執(zhí)行D、存在語法錯誤

解析:這里考察閱讀者是否仔紐閱讀while循環(huán)結構的表達式,這里表達式并不是關系表達式,而是

一個賦值表達式,是將0賦值給k,表達式的結果為0,即終止循環(huán),循環(huán)體育局一次也不執(zhí)行,故答

案選C;

17.以下程序段(C)。

x=-l;

do

{x=x*x;)

while(!x);

A、是死循環(huán)B、循環(huán)執(zhí)行2次C、循環(huán)執(zhí)行1次D、有語法錯誤

解析:d?!瓀hile結構語句是先執(zhí)行循環(huán)體語句x=x*x,即(/)*(?1)=1,將1賦值給x,然后進行

循環(huán)條件表達式!x的運算,結果為!1,即為0,所以終止循環(huán),故答案選C;

18.對下面程序段中do-while循環(huán)執(zhí)行情況分析正確的是(C)。

intm=l,n=5;

do

(

m++;

}while(m<n);

A、該循環(huán)可能1次也不執(zhí)行B、該循環(huán)執(zhí)行1次

C、該循環(huán)執(zhí)行2次D、該循環(huán)執(zhí)行3次

解析:本題考查do…while結構語句的執(zhí)行流程,第一次循環(huán)體執(zhí)行后,循環(huán)條件為2<4成立,繼續(xù)

執(zhí)行第二次循環(huán)體后,循環(huán)條件為3<3不成立,終止循環(huán)體語句結構的執(zhí)行,故答案選C;

19.下面程序的功能是從鍵盤輸入-組字符,統(tǒng)計這些字符中大寫字母和小寫字母的個數(shù),程序中while

語句的循環(huán)條件是(A)<

intmain()

(

intcl=0,c2=0;

charch;

while(()!='\n')

{

if(ch>='A'&&ch<='Z')cI++;

if(ch>=,a'&&ch<='z')c2++;

I

return0;

)

A、ch=getchar()B、getchar()C、ch==getchar()D、scanf("%c",&ch)

解析:C語言從鍵盤獲取字符數(shù)據(jù),使用函數(shù)getchar()獲取單個字符,這里使用循環(huán)結構設計逐個獲

取字符,直到獲取到回車終止,因為下面是對變量進行判斷,所以使用函數(shù)getcharO獲取的字符需要

賦給變量ch,故答案選A;

20.下面有關for循環(huán)的正確描述是(D

A、for循環(huán)只能用于循環(huán)次數(shù)已經(jīng)確定的情況。

B、for循環(huán)的執(zhí)行流程是先執(zhí)行循環(huán)體語句,后判斷表達式。

C、在for循環(huán)中,表達式1和3可以省略,但表達式2是不能省略。

D、for循環(huán)的循環(huán)體中,可以包含多條語句,但必須用花括號括起來。

解析:本題考查for循環(huán)結構語句的語法,對于A的說法是不正確的,不能用只能;對于B答案顯然

不符合for循環(huán)的執(zhí)行流程描述,for循環(huán)是先判斷循環(huán)條件,后執(zhí)行循環(huán)體語句;對于C答案,for

循環(huán)結構中三個表達式都可以省略,當表達式2省略,默認循環(huán)條件為真;故答案選擇D;

21.執(zhí)行語句for(i=l;i++<4;);后變量i的值是(C)。

A、3B、4C、5D、不定

解析:這里考察自增運算以什么值參與表達式運算,i++是先用i的值參與表達式運算再自增,而++i是

先自增,然后以自增結果參與表達式運算;故而i=l開始,第1次循環(huán)條件判斷1<4,然后i自增變?yōu)?/p>

2,進入第2次循環(huán)條件判斷2<4,然后i自增變?yōu)?,進入第3次循環(huán)條件判斷3<4,然后i自增變?yōu)?/p>

4,進入第4次循環(huán)條件判斷4<4,然后i自增變?yōu)?,這時循環(huán)條件判斷為假跳出循環(huán),這時變量i的

值為5,故答案選C;

22.以下程序段的循環(huán)次數(shù)是(B)。

for(i=2;i==0;)

printf("%d",i-);

A、無限次B、0次C、1次D、2次

解析:考察識別for結構中各表達式的作用,表達式1為i=2,即為i變量賦值,表達式2為循環(huán)條件

判斷,i==0,表達式即2==0,顯然為假,即終止循環(huán),這里表達式3省略;故而循環(huán)次數(shù)為0,故答

案選B;

23.下面的雙重循環(huán)中的內(nèi)循環(huán)體將一共會被執(zhí)行(C)次。

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

for(j=4;j:j-)

printfC'a");

A、12B、15C、16D、20

解析:外層循環(huán)for中i從。到3循環(huán)了4次,內(nèi)循環(huán)for中j從4到1也是循環(huán)了4此,對于內(nèi)循環(huán)

體的次數(shù)為內(nèi)外循環(huán)次數(shù)的乘積,即4*4=16,故答案選C;

24.如果下面程序在運行時輸入1Z02-2/,則程序輸出結果是(C)。

intmain()

(

intx,i,sum;

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

(

scanf("%d",&x);

if(x<0)continue;

sum+=x;

)

printf("%d",sum);

return0;

)

A、-3B、0C、3D、1

解析:本題考察循環(huán)結構中continue語句的作用;根據(jù)程序的執(zhí)行流程中可以看到這里使用了for循

環(huán)結構,而佛如循環(huán)體中并沒有改變循環(huán)變量i的值,故for循環(huán)的次數(shù)為5此,即i從0到4;這里

sum初值為0,循環(huán)體中有鍵盤獲取數(shù)據(jù),將執(zhí)行5次,獲取5個數(shù)據(jù),且體中使用sum變量對鍵盤

送入的數(shù)據(jù)進行累加,但是在累加之前有一個判斷語句if(x<0)continue;代表鍵盤獲取的數(shù)據(jù)為負數(shù)

將結束本次循環(huán),不執(zhí)行后續(xù)的累加語句,故題目是累加鍵盤送入數(shù)據(jù)中大于0的數(shù)據(jù)的和,所以答

案選G

25.如果下面程序在運行時輸入120,/,?2/,則程序輸出結果是(C)。

intmain()

(

intx,i,sum;

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

(

scanf("%d",&x);

if(x<0)break;

sum+=x;

)

printf("%d",suni);

return0;

)

A、-3B、0C、3D、1

解析:本題考察循環(huán)結構中break語句的作用;與上題類似,只是本體的循環(huán)次數(shù)本來是1。此,只是

在循環(huán)體中進行累加之前有一個判斷語句if(x<0)break;即在鍵盤鍵入負數(shù)后終止循環(huán);故只能累加鍵

盤鍵入的負數(shù)之前的數(shù)據(jù);故答案選C;

二、填空題

1.在?個循環(huán)語句的循環(huán)體中又包含了另?個循環(huán)語句,則這種循環(huán)形式稱為循環(huán)的嵌套。

2.for語句中的三個表達式可以全部或部分省略,但應保留其分隔符

3.aildL通常適用于條件表達式的取值為多個離散而不連續(xù)的整型值(或字符型值)時實現(xiàn)多分支

選擇結構。

4.C語言提供的選擇控制語句可以對給定的條件進行判斷,并根據(jù)判斷結果選擇執(zhí)行分支程序。

5.語句可以分為說明性語句,表達式語句,復合語句和控制結構語句4種類型,if語句

屬于其中的控制結構語句。

6.C語言中語句的結束標志是分號。

7.復合語句是用一對_U_界定的語句塊。

8.將“y能被4整除但不能被100整除,或者y能被400整除”這一條件描述寫成邏輯表達式

v%4==()&&y%l()0!=0||v%400==0。

9.能夠表示“40<xv=60或xvl20”的C語言表達式是x>40&&xv=60||xvl20。

10.下面程序的功能是求3個整數(shù)中的最小數(shù),,將程序補充完整。

intmain()

{

intx,y,z,min;

scanR"%d%d%d”,&x,&y,&z);

if(xvy)min=x;

elsemin=y;

if(zvmin)min=z;

printff€min=%d',,iTiin);

return0;

)

11.switch語句中case關鍵字后面的句達式必須是整型常量表達式。

12.switch語句只有與case語句結合使用,才能實現(xiàn)程序的選擇結構。

13.C語言實現(xiàn)循環(huán)結構的三種語句分別是for語句、while語句和

do-whilein句。

14.除for語句外,可能一次循環(huán)體也小執(zhí)行的循環(huán)諳句是311k_,至少執(zhí)行一次循劃、體的循環(huán)語

句是do-while。

15.若鍵盤輸入字符ABCDE/(/表示按下回車鍵,則下面for語句執(zhí)行后k的值是」。

fbr(k=O;(c=getchar())!=,\n,;k-H-);

16.下述程序段的運行結果是一2,1,2。

inia=l,b=2,c=3,t;

while(a<b<c){t=a;a=b:b=t;c-;)

printf(tt%d,%d,%d,,,a,b,c);

17.執(zhí)行下面的程序段后,m的值是30。

intm=l,n=325;

do{m*=n%10;n/=10;}while(n);

18.卜.面程序的功能是求1?100之間能同時被3和5整除的數(shù),以8個數(shù)為一行的形式輸出,將程序

補充完整。

intmain()

{intn,j=0;

for(n=l;n<=100;n++)

{if(n%3!=0&&n%5!=0)

continue;

printf(,,%6d",n);

j++;

if(i%8==0)

printf("\n");

I

printf("\nj=%d\nHj);

return0;

}

三、程序閱讀,寫出程序運行結果。

1.intmain。

{

inta=l,b=3,c=5,d=4,x;

if(a<b)

if(c<d)x=l;

else

if(a<c)

if(b<d)x=2;

elsex=3;

elsex=6;

elsex=7;

pnntf("x=%d",x);

return0;

}

輸出:x=2

2.intmain()

inta=2,b=7,c=5;

switch(a>0)

(

case1:switch(b>0)

(

case1:primf("@");break;

case2:printf(H!");break;

}

case0:switch(c==5)

{

caseI:printf("*");break;

case2:printf("#");break;

default:printfC'#");break;

I

default:printf(n&");

}

printf("\n");

return0;

}

輸出:@*&/

3.intmain()

(

intx,y;

for(x=l,y=l;x<=10;x++)

{

if(y>10)break;

if(y%3==|)

{

y+=3;continue;

I

y-=5;

)

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

return0;

}

輸出:13,5

4.找尋兩個數(shù)的最小公倍數(shù)。

intmain()

(

intx,y,z,t;

scanf("%d.%d",&x,&y);

if(x>y)

t=x;x=y;y=t;

z=x;

do

(

if(z%x==0&&z%y==0)break;

elsez++;

}while(l);

printf("gbs=%d\ii,,,z);

return0;

}

鍵盤輸入數(shù)據(jù):18/

輸出:gbs=40

5.intmain()

(

inti,j;

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

(

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

printfC*

for(j=l;j<=7-2*i;j++)

printf("*");

printf("\n");

)

return0;

)

輸出:*****

*

四、編程題

1.編程實現(xiàn),鍵盤輸入4個整數(shù)a,b,c,d,輸出其中的最小數(shù)。

解:

#include<stdio.h>

intinain()

(

inta.b,c,d,s;

printf("請輸入個數(shù)字");

scanf(1,%d%d%d%d".&a.&b.&c.&d):

if(a>b)s=b;

elses=a;

if(s>c)s=c;

if(s>d)s=d;

printf("最小是:%d",s);

return0;

)

2.編程實現(xiàn),鍵盤輸入3個整數(shù)a,b,c,按照由小到大的順序輸出這三個整數(shù)。

解:

#include<stdio.h>

intmain()

inia,b,c,s;

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

if(a>b)

(

s=b;b=a;a=s;

}

if(a>c)

(

s=c;c=a;a=s;

I

if(b>c)

(

s=c;c=b:b=s;

)

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

return0;

)

3.如果有如下的分段函數(shù),編程實現(xiàn),鍵盤輸入x的值,

溫馨提示

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

最新文檔

評論

0/150

提交評論