3.1 單項(xiàng)選擇題
1.設(shè) a=3,b=4執(zhí)廳‘printf(”%d,%d’,(a,b),(b,a));”的輸出是( ) ①3,4 ②4,3 ③3, 3 ④4,4 【解】在調(diào)用格式輸出函數(shù)的語句中,其中每個(gè)格式符對(duì)應(yīng)一個(gè)輸出項(xiàng),格式符d要求輸出項(xiàng)內(nèi)容以十進(jìn)制整數(shù)形式輸出。第一個(gè)輸出項(xiàng)(a,b)是一個(gè)逗號(hào)表達(dá)式,該表達(dá)式的值是b的值,輸出4。接著輸出字符逗號(hào)。第二個(gè)輸出項(xiàng)(b,a)的值是a的值,輸出3。所以語句執(zhí)行將輸出4,3。正解的選擇是③。 2.使用“Scanf("X=%f,y=%f",&x,&y)”,要使 X,y均為1.25,正確的輸入是( ) ①1.25,1.25 ②1.25 1.25 ③x=1.25,y=1.25 ④X=1.25 y=1.25 【解】格式輸入函數(shù)的格式字符串中的字符可以分成三類:空格類字符、其它普通字符和格式轉(zhuǎn)換說明。其中空格類字符用來跳過一個(gè)空格類字符序列,直至下一個(gè)非空格類字符。普通字符要求輸入字符與其完全相同。格式轉(zhuǎn)換說明對(duì)輸入字符列按格式轉(zhuǎn)換說明進(jìn)行轉(zhuǎn)換,得到內(nèi)部值存儲(chǔ)到對(duì)應(yīng)輸入項(xiàng)所指定的存儲(chǔ)位置中。函數(shù)調(diào)用scanf(“x=%f,y=%f,&x,&y)以普通字符X=開頭,輸入時(shí)也要先輸入X=。接著是一個(gè)浮點(diǎn)數(shù)輸入格式,所有能構(gòu)成一個(gè)浮點(diǎn)數(shù)1.25的字符序列都能滿足要求。接著是普通字符列“,y=”,在輸入的浮點(diǎn)數(shù)之后也要有字符列“,y=”。最后又是浮點(diǎn)數(shù)輸入格式,同樣所有能構(gòu)成一個(gè)浮點(diǎn)數(shù)1.25的字符序列都能滿足要求。問題給出的供選擇答案中只有x=1.25,y=1.25是能滿足上述要求的。所以正確選擇是③。 3.設(shè)有int i=010,j=10;則執(zhí)行“printf("%d,%d\n",++i,j--);”的輸出是( ) ①ll, 10 ② 9,10 ③ 010, 9 ④ 10, 9 【解】變量i和j的初值分別為八進(jìn)制數(shù)010和十進(jìn)制數(shù) 10,函數(shù)調(diào)用Printf(“%d,%d\n”,++i,j--)中,++i的值是變量 i增1后的值,原來值是八進(jìn)制數(shù) 010,等于十進(jìn)制數(shù)8,輸出9。j--的值是變量j減1之前的值,輸出10。格式字符申中的逗號(hào)是普通字符照原樣輸出。所以問題給出的格式輸出函數(shù)調(diào)用將輸出9,10。正確的解答是②。 4.設(shè)a,b為字符型變量,執(zhí)行"scanf("a=%c,b=%c",&a,&b)"后使a為‘A‘,b為‘B‘,從鍵盤上的正確輸入是( ) ①’A”B’ ②’A’,’B’ ③A=A,B=B ④a=A b=B 【解】函數(shù)調(diào)用scanf("c=%c,b=%c",&c,&b)中,普通字符必須按格式字符串要求照原樣輸入,c格式對(duì)緊接的任何字符都輸入。所以實(shí)現(xiàn)問題的要求,輸入字符列應(yīng)為“a=A,b=B”。另外要特別指出,在程序中,為表示字符常量,字符前后需加單引號(hào)。但用字符格式輸入字符時(shí),在要輸入字符前后不必另鍵人單引號(hào)。若鍵人單引號(hào),則這個(gè)單引號(hào)也將作為字符被輸入。正確的解答是④。 5.設(shè)X、y、Z、t均為int型變量,則執(zhí)行以下語句后,t的值為( ) x=y=z=1;t=++x||++y&&++z; ①不定值 ②2 ③l ④0 【解】語句序列“x=y=z=l;t=++x||++y&&++z;”使變量x的值為1,變量t是賦一個(gè)邏輯表達(dá)式的值。在C語言中,由邏輯與和邏輯或構(gòu)成的邏輯表達(dá)式有特別的計(jì)算規(guī)則,順序計(jì)算各邏輯子表達(dá)式,并當(dāng)一旦能得到邏輯表達(dá)式的結(jié)果時(shí),就立即結(jié)束邏輯表達(dá)式的計(jì)算,不再計(jì)算后繼邏輯子表達(dá)式。本題的邏輯表達(dá)式是兩個(gè)運(yùn)算分量的邏輯或,而且左運(yùn)算分量++X的值為非0,立即得到邏輯或運(yùn)算的結(jié)果為1,并將1賦給變量t,所以變量t的值為1。正確解答為③。 6設(shè)x、y、z均為int型變量,則執(zhí)行以下語句后,x、y, z的值為( ) X=1; y=0; Z=2; y++&&++Z ||++ X; ①2、l、3 ②2、0、3 ③2、l、3 ④2、1、2 【解】語句序列“x=l;y=0;z=2; y++&&++z||++x;”先使變量x的值為 1,變量y的值為0,變量Z的值為2。由邏輯與和邏輯或構(gòu)成的邏輯表達(dá)式的特別計(jì)算規(guī)則,順序計(jì)算各邏輯子表達(dá)式,并當(dāng)一旦能得到邏輯子表達(dá)式的結(jié)果時(shí),就立即結(jié)束邏輯子表達(dá)式的計(jì)算,不再計(jì)算該邏輯子表達(dá)式。計(jì)算y++因y的值為0,使y++&&++z的結(jié)果為0,立即去計(jì)算++X,這次計(jì)算使變量y的值變成1,而變量Z的值本改變。接著計(jì)算++X,使X的值變?yōu)?span lang=EN-US>2。所以經(jīng)上述語句執(zhí)行后,X、y、Z的值依次為2、1、Z。 確解答為④。 7.假定所有變量均已正確定義,下列程序段運(yùn)行后X的值是( ) a=b=c=0; x=35; if(!a)x--; else if(b);if(c)x=3;else x=4; ①34 ② 4 ③ 35 ④ 3 【解】以變量 a,b,c的值均為 0,變量x的值為 35,語句: if(!a)x--;else if(b);if(c)x=3;else x=4; 由兩個(gè)證語句組成。首先執(zhí)行前一個(gè)if語句“if(!a)x--;else if(b);”,因變量a的值為0,條件!a成立,執(zhí)行x--使x的值變?yōu)?span lang=EN-US>34。接著執(zhí)行后繼的if語句“if(c)x=3; else X=4;”,因變量c的值為0,條件不成立而執(zhí)行X=4,最終使變量X的值為4。正確解答是②。 注意前一個(gè)if語句的else部分的成分語句只有“if(b);”,這是一個(gè)單分支if語句,且其成分語句為空語句。 8.下面的程序段所表示的數(shù)學(xué)函數(shù)關(guān)系是( ) y=-l; if( x!= 0)if(x>0)y=l; else y=0 ; 1(x<0) 1(x<0) ① y= { 0(x= 0) ② y={-l(X=0) 1(X>0) 0(X>0) o(X< 0) -l(X< 0) ③ y= {-1(x= 0) ④ y={ 1(X= 0) 1(X> 0) 0(X> 0) 【解】程序段首先置變量y的值為一l,接著按變量x值的不同情況重置變量y的值。重置的首要條件是x!=0,若變量x的值為0,則不再重置變量y的值,所以在X值為0情況下,y的值是-l。在變量X的值不等于0的條件下,若X的值大于0,重置變量y的值為1;若變量X的值小于0,重置變量y的值為0。所以程序段實(shí)現(xiàn)當(dāng)變量x的值為0時(shí),變量y的值為-1;當(dāng)變量X的值大于0時(shí),置變量y的值為1;當(dāng)變量X的值小于0時(shí),置變量y的值為0。正確解答為③。 9.下列語句中,句法錯(cuò)誤的是(不考慮語義)( ) ① while(x=y)5 ; ② do x++ while(x==10) ; ③while(0); ④do 2;while(a==b); 【解】 while語句的一般形式是: while(表達(dá)式) 語句 這里的表達(dá)式可以是任何合理的表達(dá)式,語句可以是任何語句,包括空語句,或表達(dá)式語句。可能書寫的while語句沒有任何意義,如供選擇的①while(x=y)5;和③while(0);,但這兩個(gè)語句的句法沒有任何錯(cuò)誤。do-While語句的一般形式是: do語句while(表達(dá)式); 其中的成分語句也可以是任何語句,但供選擇答案②do x++while(x==10) ;中的代碼x++是一個(gè)表達(dá)式,不是語句,所以是錯(cuò)誤的。正確解答是②。 10,循環(huán)語句“for(x=0, y=0;(y!=123)||( x<4);x++);”的循環(huán)執(zhí)行( ) ①無限次 ②不確定次 ③4次 ④3次 【解】for循環(huán)語句的初始化部分置變量x和y的初值為0,循環(huán)條件是(y!=123)||(x<4),每次循環(huán)后變量X的值增1。由于循環(huán)過程中變量y的值本被修改過,循環(huán)條件又是一個(gè)邏輯或,其左分量(y!=123)永遠(yuǎn)成立,也就是循環(huán)條件永遠(yuǎn)成立。所以該循環(huán)語句將循環(huán)執(zhí)行無限次。正確解答是①。 11.若i、j已定義為int類型,則以下程序段中的內(nèi)循環(huán)體的執(zhí)行次數(shù)是( ) for( i=5; i; i--) for(j= 0; j<4;j++){……} ①20 ② 24 ③ 25 ④ 30 【解】問題所給的程序段的外循環(huán)是一個(gè)階循環(huán)語句,它的初始化部分置變量i的初值為5,循環(huán)條件簡寫成i,即i!=0,每次循環(huán)后變量i的值減1。所以外循環(huán)共控制5次循環(huán)。內(nèi)循環(huán)也是一個(gè)for循環(huán)語句,它的初始化部分置變量j的初值為0,循環(huán)條件是j<4,每次循環(huán)后變量j的值增1。所以內(nèi)循環(huán)共控制4次循環(huán)。這樣,如內(nèi)循環(huán)的體內(nèi)未曾對(duì)變量i和j有修改,在內(nèi)、外循環(huán)一起控制下,內(nèi)循環(huán)的體共被重復(fù)執(zhí)行20次。正確解答是①。 12.假定a和b為int型變量,則執(zhí)行以下語句后b的值為( ) a=1; b=10; do b-=a; a++; }while<(b--<0); ①9 ②-2 ③-1 ④8 【解】在這個(gè)程序段中,循環(huán)開始前變量a的值為1,b的值為10,每次循環(huán)從變量b減去a,并讓a增1,并在循環(huán)條件判定時(shí),又讓b減去1。第一次循環(huán)后,變量b的值變成9,變量a的值變?yōu)?span lang=EN-US>2,循環(huán)判斷時(shí),因b的值大于0,循環(huán)條件不成立,結(jié)束循環(huán)。但在循環(huán)判斷時(shí),讓b減去了1,所以循環(huán)結(jié)束時(shí),變量b的值為8。正確的解答是④。
13.設(shè)x和y為int型變量,則執(zhí)行下面的循環(huán)后,y的值為( ) for(y=l, x=l; y<=50; y++){ if(x>=10) break; if(x%2==1){ x+=5; continue;} X -= 3; } ①2 ②4 ③6 ④8 【解】 for循環(huán)語句的初始化部分置變量x和y的初值為1,循環(huán)條件是(y<=50),每次循環(huán)后變量y的值增1,控制循環(huán)最多執(zhí)行50次。循環(huán)體有三個(gè)語句:首先在發(fā)現(xiàn)變量X的值大于等于10時(shí),結(jié)束循環(huán);接著是當(dāng)變量X除2的余數(shù)為1(即變量X是奇數(shù))時(shí),讓變量X值增5,讓X變成偶數(shù),并直接進(jìn)入下一輪循環(huán);如變量X是偶數(shù),則從變量X減去3,讓變量X變成奇數(shù)。由上述分析知,每兩次循環(huán)使變量X的值增加2.第一次循環(huán)后,變量X的值變成6。第二次循環(huán)后,變量X的值變成3。第三次循環(huán)后,變量X的位變成8。第四次循環(huán)后,變量X的值變成5。第五次循環(huán)后,變量X的值變成 10。第六次循環(huán)時(shí),因變量X的位大于等于 10,直接跳出循環(huán),這次循環(huán)是非正常結(jié)束,對(duì)變量y的修正只執(zhí)行了5次。所以循環(huán)結(jié)束后,變量y的值增至6。正確的解答是③。 14.在C語言中,下列說法中正確的是( ) ①不能使用“do語句while(條件)”的循環(huán) ②“do語句While(條件)”的循環(huán)中必須使用“break”語句退出循環(huán) ③“do語句while(條件)”的循環(huán)中,當(dāng)條件非0時(shí)將結(jié)束循環(huán) ④“do語句while(條件)”的循環(huán)中,當(dāng)條件為0時(shí)將結(jié)束循環(huán) 【解】 do-while語句的一般形式是: do語句 while(表達(dá)式); 其語義是重復(fù)執(zhí)行其成分語句,直至表示條件的表達(dá)式值為0時(shí)結(jié)束。do-while語句是正常使用的一種循環(huán)結(jié)構(gòu)之一。do-while語句的循環(huán)結(jié)束條件由while后的表達(dá)式值為0所控制,并不一定要有break語句跳出循環(huán)來結(jié)束循環(huán)。do-while語句在條件值非0時(shí),將繼續(xù)循環(huán),而不是結(jié)束循環(huán)。條件值為0時(shí),才結(jié)束循環(huán)。所以正確的選擇是④。 15.若有以下程序段,W和k都是整型變量,則不能與該程序段等價(jià)的循環(huán)語句是( ) W= k; LB: if(w==0) gotO LE; w - -; printf("*"); goto LB; LE: ①for(w=k;w!=0;W--)printf("*"); ② w= k; While(W--!=0) Prinif(”* ”);
③ w= k; do{w--; prinif(“*”); } while( W?。?span lang=EN-US> 0); ④ for(w=k;W;--W) printf("*"); 【解】問題所給出的程序段用goto語句構(gòu)造一個(gè)循環(huán)控制結(jié)構(gòu),該循環(huán)結(jié)構(gòu)的初值是讓變量W的值為k的值,循環(huán)結(jié)束條件是W的情等于0,循環(huán)體是讓變量W的值減1,并輸出一個(gè)字符* 。上述循環(huán)控制過程用for循環(huán)可描述如下: for=(w=k;W!=0; W--) printh("*"); 或?qū)懗桑?/font> for(w=k ;w;--w) printf("*"); 若用while語句,可描述如下: W=k; while(w--!=0)printf("*"); w++;/*在w等于0時(shí),也執(zhí)行了一次 w--,這里是對(duì)w最后減1的補(bǔ)嘗*/ 或更直觀地寫成: W=k; while(w!=0){ w--;Printf("*");} 若用do-while語句,可描述如下: W=k; if(W) do{ w--; prinif("*"); } while(w); 若寫成: W=k; do{ W--; printf("*"); } while(w!=0); 是不正確的,因?yàn)樵a當(dāng)k的值為0時(shí),不輸出字符*,而上面的改寫,當(dāng)k的值為0時(shí),將輸出許許多多的字符*。所以解答應(yīng)是③。
3.2 填充題
1.結(jié)構(gòu)化程序設(shè)計(jì)規(guī)定的三種基本結(jié)構(gòu)是________結(jié)構(gòu),選擇結(jié)構(gòu)和_______結(jié)構(gòu)。 【解】結(jié)構(gòu)化程序設(shè)計(jì)的三種基本控制結(jié)構(gòu)是順序結(jié)構(gòu)、選擇結(jié)構(gòu)和循環(huán)結(jié)構(gòu)。 2.若有定義“int a=25,b=14, c=19;”,以下語句的執(zhí)行結(jié)果是______。 if a++<=25&&b--<=2&&c++) prinif("***a=%d,b=%d,c=%d\n", a,b,c); else printf(”###a=%d,b=%d,c=%d\n”, a, b,c); 【解】問題所給的if語句中,條件a++<=25&&b--<=2&&c++是先求邏輯與的第一個(gè)運(yùn)算分量,它是一個(gè)關(guān)系式,關(guān)系成立。接著判定第二個(gè)邏輯與運(yùn)算分量,又是一個(gè)關(guān)系式,由于變量b的值是14,b不小于等于2,運(yùn)算分量的關(guān)系式不成立,導(dǎo)致if語句的條件為假,執(zhí)行else部分。在求且語句的條件時(shí),計(jì)算了2個(gè)邏輯與分量,使變量a的值增了1,變量 b的值被減了1。所以輸出內(nèi)容是:###a=26,b=13,c=19。 3.以下兩條if語句可合并成一條if語句為_____________。 if(a<=b) x=1; else y=2; if(a>b)printf("****y=%d\n" ,y); else printf( "####x=%d\n" ,x); 【解】在以上兩條if語句中,兩個(gè)條件剛巧相反。若將前一個(gè)if語句的第一個(gè)成分語句與第二個(gè)if語句的第二個(gè)成分語句合并;第一個(gè)if語句的第二個(gè)成分語句與第二個(gè)if語句的第一個(gè)成分語句合并,寫成一條if語句如下: if(a<=b){x=1;printf("####x=%d\d,x);} else{ y=2; printf("****y=%d\n",y);} 4.設(shè) i,j,k均為 int型變量,則執(zhí)行完下面的for語句后,k的值為_______。 for(i=0,j=10;i<=j;i++,j--)k=i+j; 【解】該 for語句以i為0、j為10初始化,循環(huán)條件是 i<=j,每次循環(huán)后 i增 1、j減 1,循環(huán)體是將 i與j的和賦給 k。這樣變量 k將保存的是最后一次賦給它的值。一次循環(huán)后 i為 l。j為 9,二次循環(huán)后 i為 2.j為 8,……,五次循環(huán)后 i為 5.j為 5,繼續(xù)第六次循環(huán),將 i與 j的和10存于 k后,i為 6、j為 4,結(jié)束循環(huán)。所以循環(huán)執(zhí)行后 k為10。 5.下列程序的功能是輸入一個(gè)整數(shù),判斷是不是素?cái)?shù),若為素?cái)?shù)輸出1,否則輸出0,請(qǐng)為程序填空。 main() {int i,X,y=1; scanf(”%d”,&x); for(i=2;i<=x/2;i++) if________________ { y=0; break; } printf(”%d\n”,y); } 【解】為判數(shù)x是否是素?cái)?shù),預(yù)置變量y的值為1(x可能是素?cái)?shù)),然后用循環(huán),用2至x/2的整數(shù)i測(cè)試對(duì)X的整除性,若能被其中的某個(gè)整數(shù)整除,則X是合數(shù),置y的值為0(不是素?cái)?shù)),結(jié)束測(cè)試循環(huán)。若都不能整除,則X為素?cái)?shù)。i能否整除X,可用求余運(yùn)算X%i等于0來判定。所以程序中的空框可填 X% i==0。測(cè)試 X為素?cái)?shù)的代碼可寫成: y=l; for( i=2; i<=x/2; i++) if(x%i==0){ y=0; bleak; }
3.3 程序分析題
1.閱讀程序,寫出運(yùn)行結(jié)果。 main()
{ int a=10, b=4,C=3; if(a<b)a=b; if(a<C) a=C; printf("%d,%d,%d\n", a,b,c); } 【解】程序中,第一個(gè)if語句if(a<b)a=b,當(dāng)a<b時(shí),讓b值置a,該語句確保a的值不比b小。同樣第二個(gè)if語句if(a<c)a=c,當(dāng)a<c時(shí),讓c值置a,使a的值不比c小。實(shí)際;情況是a本來就比b和c都大,所以a的值沒有變,程序輸出a、b和 c的原來值:10,4,3。 2.閱讀下列程序,寫出程序的輸出結(jié)果。 main() { int x=100, a=10, b=20, Ok1=5,Ok2=0; if(a<b)if(b!=15)if(!Ok1) x=1; else if(ok2) x=10; else x=-l; printf("%d\n",x); } 【解】程序預(yù)置變量x的值為100,a的值為10,b的值為20,ok1為5,Ok2為0。程序中給出的if語句可以寫成更結(jié)構(gòu)化的形式如下: if(a<b) { if(b!=15){ if(!Ok1) x=1; else{ if(Ok2) x=10; else x=-l; } } } 由于條件a<b成立,并且條件b!=15也成立,而ok1不等于0,執(zhí)行else后的語句。又因ok2等于0,執(zhí)行else后的語句賦-1給x。所以程序輸出一l。 3.閱讀下列程序,寫出程序的輸出結(jié)果。 main() { int y=9; for(; y>0; y--) if(y%3==0){ printf(”%d”,--y);continue;} } 【解】循環(huán)前,變量y的值為9,其中的循環(huán)語句在y大于0情況下循環(huán),每次循環(huán)后y的值減1。循環(huán)體是當(dāng)y能被3整除時(shí)輸出表達(dá)式--y,輸出的是減1后的y值。這樣,第一次循環(huán)因y為9,能被3整除,輸出8,y也變成8。又經(jīng)兩次循環(huán),y的值變?yōu)?span lang=EN-US>6,又讓y減1變成5,并輸出5;又經(jīng)兩次循環(huán),y的值變成3,讓y減至變成2,輸出2;再經(jīng)兩次循環(huán)后,y的值變成0,結(jié)束循環(huán)。所以程序輸出852。
3.4 程序設(shè)計(jì)題
1.編一個(gè)程序,輸入華氏溫度(F),按下列公式計(jì)算并輸出對(duì)應(yīng)的攝氏溫度(C):C= 5( F-32)/9 【解】利用公式:C=5(F-32)/9,輸入F氏溫度,計(jì)算并輸出對(duì)應(yīng)的C氏溫度,程序要引入兩個(gè)變量,分別用于存儲(chǔ)F氏溫度和C氏溫度,計(jì)算時(shí)應(yīng)采用浮點(diǎn)型,包括公式中的常數(shù)也應(yīng)寫成浮點(diǎn)數(shù),不能采用整型和把常數(shù)寫成整數(shù)。因采用整型編寫,公式中的除運(yùn)算變成整除,會(huì)得出與實(shí)際要求不一致的結(jié)果。程序如下: #include <stdio.h> main() { float f,c;/*變量定義*/ printf(”輸入F氏溫度”); scanf(”%f,&f); c= 5.0*(f-32.0)/9.0; printf(”對(duì)應(yīng)的C氏溫度%6.2f\n”,c); } 2.編一個(gè)程序,輸入一個(gè)整數(shù),輸出其符號(hào)(若≥0,輸出1;若<0輸出-1)。 【解】程序可用if語句判斷輸入數(shù)的符號(hào),并控制輸出1或-l。程序如下: # include<stdio.h> main() { int c;/*變量定義*/ printf("輸入一個(gè)整數(shù)"); scanf(” %d”, &c); if(C>=0) printf("1\n"); else printf("-l\n"); } 3.編一個(gè)程序,輸入X的值,按下列公式計(jì)算并輸出y的值。 X(X≤l) y= {2x-l(l<x<10) 3X-11(10≤X) 【解】輸入x,按公式計(jì)算y。這可用一個(gè)嵌套的if語句分段判斷并計(jì)算出y的值。然后輸出y值。程序如下: # include<stdio.h> main() { int x,y;/*變量定義*/ printf(”輸入一個(gè)整數(shù)”); scanf(”%d”,&x); if( x<=l) y=X; else if(x<10)y=2*x-l; else y=3*X-11;
printf(”y=%d\ n”, y); } 4.編一個(gè)程序,輸入三個(gè)單精度數(shù),輸出其中最小數(shù)。 【解】設(shè)最小數(shù)存于變量min中,為求三個(gè)數(shù)中的最小數(shù),可分以下多步完成,先預(yù)置min為x,然后分別將其余兩個(gè)數(shù)逐一與min比較,當(dāng)它們中的某個(gè)值比存于min中的值更小時(shí),就用它們更新min。寫出程序如下: # include<stdio.h> main() { float X,y,Z,min;/*變量定義*/ printf("輸入三個(gè)單精度浮點(diǎn)數(shù)"); scanf("%f%f%f", &x,&y,&Z); min =x; if(min>y) min= y; if(min>Z) min=Z; printf("浮點(diǎn)數(shù)%f,%f,%f中的最小值是%f\n",X,y,Z,min); } 5.編一個(gè)程序,求出所有各位數(shù)字的立方和等于1099的3位數(shù)。 【解】找出所有各位數(shù)字的立方和等于1l99的3位整數(shù)。 3位整數(shù)是100至999范圍內(nèi)的整數(shù),設(shè)分別用a,b,c存儲(chǔ)3位數(shù)的百位、十位和個(gè)位的數(shù)字,程序用三重循環(huán)求出a,b,c的立方和為1099的3位數(shù)a*100+b*10+c。程序如下: # include <stdio.h> main() { int a,b, c;/*變量定義*/ for(a=1; a<=9;a++) for(b=0; b<=9; b++) for(c=0;c<=9;c++) if(a*a*a+b*b*b+c*c*c==1099) printf("%d\n",(10*a+b)*10+c); } 若用一個(gè)變量i表示3位數(shù),循環(huán)體將3位數(shù)變量i分拆出它的百位、十位和個(gè)位共3個(gè)數(shù)字,然后判這三個(gè)數(shù)字的立方和是否是1099,若是就輸出該變量的值。程序如下: # include<stdio.h> main() { int i,a,b, c;/*變量定義*/ for (i=100;i<=999;i++) { a=i/100; b=(i%100)/10; /*或b=(i/10)%l0*/ c=i%10; if(a*a*a+b*b*b+c*c*c==1099) printf("%d\n", i);
} } 6.編一個(gè)程序,輸入10個(gè)整數(shù),統(tǒng)計(jì)并輸出其中正數(shù)、負(fù)數(shù)和零的個(gè)數(shù)。 【解】輸入10個(gè)整數(shù),統(tǒng)計(jì)其中正數(shù)、負(fù)數(shù)和零的個(gè)數(shù)。程序引入3個(gè)計(jì)數(shù)器變量,用于統(tǒng)計(jì)大于以小于0和等于0的整數(shù)的個(gè)數(shù)。開始時(shí),這3個(gè)計(jì)數(shù)器都置0,然后用循環(huán)逐一輸入10個(gè)整數(shù),并判定當(dāng)前輸入的整數(shù)是大于0,或小于0,或等于0,并按判定結(jié)果累加相應(yīng)計(jì)數(shù)器。最后,程序輸出這3個(gè)計(jì)數(shù)器的值。程序如下: # include<stdio.h> main() { int i,d,n,z,p;/*變量定義*/ n=Z=p=0; for(i=1;i<=10;i++) { print(" 輸入第%d個(gè)整數(shù)", i); scanf("%d",&d); if(d<0)n++; else if(d>0)p++; else z++; } printf("負(fù)數(shù)有%d個(gè),正數(shù)有%d個(gè),零有%d個(gè)。\n",n,p,z); } 7.編程序,按下列公式計(jì)算e的值(精度為1e-6): e=1+1/1!+1/2!+1/3!+…+1/n!+… 【解】按e的冪級(jí)數(shù)展開式計(jì)算e的值。這是典型的求級(jí)數(shù)和計(jì)算問題。通常采用逐項(xiàng)計(jì)算,并累計(jì)的方法。計(jì)算新的項(xiàng)時(shí),可用上一輪循環(huán)計(jì)算出的項(xiàng),這能提高程序的效率。循環(huán)直至當(dāng)前項(xiàng)的值小于精度要求結(jié)束。程序如下: # include<stdio.h> main() { double e,t,i;/*變量定義*/ e=0.0;t=1.0;i=1.0; while(t>=1.0e-6) { e+=t; t/= i; i+= 1.0; } printf(”e=%.6f\n”, e); } 8.編程序,按下列公式計(jì)算y的值(精度為1e-6): y=∑1/r*r+1 【解】按所給公式計(jì)算數(shù)列的和。類似上一小題的解,逐項(xiàng)計(jì)算并累計(jì)。程序如下: # include<stdio.h> main() { double y,r,t;/*變量定義*/ y=0.0;r=1.0; while((t=1.0/(r*r+1.0))>=1.0e-6) { y+=t; r+=1.0; } printf("y=%.6f\n", y); } 9.編一個(gè)程序顯示ASCII代碼0x20至ox6f的十進(jìn)制數(shù)值及其對(duì)應(yīng)字符。 【解】顯示ASCII代碼為十六進(jìn)制0x20至ox6f的字符的十進(jìn)制代碼值與其字符。程序可用一個(gè)循環(huán),讓變量i順序地取0X20至OX6f的值,并逐一輸出其十進(jìn)制代碼和對(duì)應(yīng)的字符,程序如下:
# include<stdio.h> main() { int i,k=0; for(i=0x20; i<=0x6f;i++) { if(k++%10== O)/*每行十個(gè)*/ printf("\n"); printf("%3d(%C)", i,i); } printf("\n"); } 10.用三種循環(huán)語句分別編寫程序顯示1至100的平方值。 【解】用三種循環(huán)語句分別編寫顯示1至100的平方值的程序。直接寫出3個(gè)程序如下: (1) 用輸循環(huán)實(shí)現(xiàn)的程序 # include<stdio.h> main() /*用for循環(huán)*/ { int i,k=0; for(i=l;i<=100;i++) { if(k++%5==0) /*每行五個(gè)*/ printf("\n"); printf("%3d*%3d=%5d",i,i,i*i); } printf("\n"); } (2) 用while循環(huán)實(shí)現(xiàn)的程序 # include<stdio.h> main() /*用 while循環(huán)*/
{ int i,k=0 ; i=1; while(<=100){ if(k++%5==0)/*每行五個(gè)*/ printf("\n"); printf("%3d*%3d=%5d", i,i,i*i); 1++; } printf("\n"); } (3) 用do-while循環(huán)實(shí)現(xiàn)的程序 # include<stdio.h> main() /*用do-while循環(huán)*/ { int i, k=0 ; i=1; do{ if(k++%5==0) /*每行五個(gè)*/ printf("\n"); printf("%3d*%3d=%5d",i,i,i*i); 1++; } while(<=100); printf("\n"); }
|