3.2 填充題
1.結(jié)構(gòu)化程序設(shè)計規(guī)定的三種基本結(jié)構(gòu)是________結(jié)構(gòu),選擇結(jié)構(gòu)和_______結(jié)構(gòu)。
【解】結(jié)構(gòu)化程序設(shè)計的三種基本控制結(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++是先求邏輯與的第一個運(yùn)算分量,它是一個關(guān)系式,關(guān)系成立。接著判定第二個邏輯與運(yùn)算分量,又是一個關(guān)系式,由于變量b的值是14,b不小于等于2,運(yùn)算分量的關(guān)系式不成立,導(dǎo)致if語句的條件為假,執(zhí)行else部分。在求且語句的條件時,計算了2個邏輯與分量,使變量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語句中,兩個條件剛巧相反。若將前一個if語句的第一個成分語句與第二個if語句的第二個成分語句合并;第一個if語句的第二個成分語句與第二個if語句的第一個成分語句合并,寫成一條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(luò);i++,j--)k=i+j;
【解】該 for語句以i為0、j為10初始化,循環(huán)條件是 i<=j(luò),每次循環(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.下列程序的功能是輸入一個整數(shù),判斷是不是素數(shù),若為素數(shù)輸出1,否則輸出0,請為程序填空。
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是否是素數(shù),預(yù)置變量y的值為1(x可能是素數(shù)),然后用循環(huán),用2至x/2的整數(shù)i測試對X的整除性,若能被其中的某個整數(shù)整除,則X是合數(shù),置y的值為0(不是素數(shù)),結(jié)束測試循環(huán)。若都不能整除,則X為素數(shù)。i能否整除X,可用求余運(yùn)算X%i等于0來判定。所以程序中的空框可填 X% i==0。測試 X為素數(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);
}
【解】程序中,第一個if語句if(a 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整除時輸出表達(dá)式--y,輸出的是減1后的y值。這樣,第一次循環(huán)因y為9,能被3整除,輸出8,y也變成8。又經(jīng)兩次循環(huán),y的值變?yōu)?,又讓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è)計題
1.編一個程序,輸入華氏溫度(F),按下列公式計算并輸出對應(yīng)的攝氏溫度(C):C= 5( F-32)/9
【解】利用公式:C=5(F-32)/9,輸入F氏溫度,計算并輸出對應(yīng)的C氏溫度,程序要引入兩個變量,分別用于存儲F氏溫度和C氏溫度,計算時應(yīng)采用浮點(diǎn)型,包括公式中的常數(shù)也應(yīng)寫成浮點(diǎn)數(shù),不能采用整型和把常數(shù)寫成整數(shù)。因采用整型編寫,公式中的除運(yùn)算變成整除,會得出與實際要求不一致的結(jié)果。程序如下:
#include
main()
{ float f,c;/*變量定義*/
printf(”輸入F氏溫度”);
scanf(”%f,&f);
c= 5.0*(f-32.0)/9.0;
printf(”對應(yīng)的C氏溫度%6.2f\n”,c);
}
2.編一個程序,輸入一個整數(shù),輸出其符號(若≥0,輸出1;若<0輸出-1)。
【解】程序可用if語句判斷輸入數(shù)的符號,并控制輸出1或-l。程序如下:
# include
main()
{ int c;/*變量定義*/
printf("輸入一個整數(shù)");
scanf(” %d”, &c);
if(C>=0) printf("1\n");
else printf("-l\n");
}
3.編一個程序,輸入X的值,按下列公式計算并輸出y的值。
X(X≤l)
y= {2x-l(l<x<10)
3X-11(10≤X)
【解】輸入x,按公式計算y。這可用一個嵌套的if語句分段判斷并計算出y的值。然后輸出y值。程序如下:
# include<stdio.h>
main()
{ int x,y;/*變量定義*/
printf(”輸入一個整數(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.編一個程序,輸入三個單精度數(shù),輸出其中最小數(shù)。
【解】設(shè)最小數(shù)存于變量min中,為求三個數(shù)中的最小數(shù),可分以下多步完成,先預(yù)置min為x,然后分別將其余兩個數(shù)逐一與min比較,當(dāng)它們中的某個值比存于min中的值更小時,就用它們更新min。寫出程序如下:
# include
main()
{ float X,y,Z,min;/*變量定義*/
printf("輸入三個單精度浮點(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.編一個程序,求出所有各位數(shù)字的立方和等于1099的3位數(shù)。
【解】找出所有各位數(shù)字的立方和等于1l99的3位整數(shù)。 3位整數(shù)是100至999范圍內(nèi)的整數(shù),設(shè)分別用a,b,c存儲3位數(shù)的百位、十位和個位的數(shù)字,程序用三重循環(huán)求出a,b,c的立方和為1099的3位數(shù)a*100+b*10+c。程序如下:
# include
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);
}
若用一個變量i表示3位數(shù),循環(huán)體將3位數(shù)變量i分拆出它的百位、十位和個位共3個數(shù)字,然后判這三個數(shù)字的立方和是否是1099,若是就輸出該變量的值。程序如下:
# include
main()
{ int i,a,b, c;/*變量定義*/
for (i=100;i<=999;i++) {
a=i/100;
b=(i0)/10; /*或b=(i/10)%l0*/
c=i;
if(a*a*a+b*b*b+c*c*c==1099)
printf("%d\n", i);
}
}
北京 | 天津 | 上海 | 江蘇 | 山東 |
安徽 | 浙江 | 江西 | 福建 | 深圳 |
廣東 | 河北 | 湖南 | 廣西 | 河南 |
海南 | 湖北 | 四川 | 重慶 | 云南 |
貴州 | 西藏 | 新疆 | 陜西 | 山西 |
寧夏 | 甘肅 | 青海 | 遼寧 | 吉林 |
黑龍江 | 內(nèi)蒙古 |