第6章迴圈結構程式設計習題及答案

2021-03-04 09:58:15 字數 3379 閱讀 8700

第6章迴圈結構程式設計

6-1.比較while語句、do–while語句和for語句的異同。

答:(1)while語句、do-while語句用於條件迴圈,for語句用於計數迴圈。

(2)while語句、for語句是先判斷迴圈條件,後執行迴圈體,如果迴圈條件一開始就不成立,則迴圈體一次也不被執行;而do-while語句是是先執行迴圈體,後判斷迴圈條件,所以迴圈體至少被執行一次。

(3)知道迴圈的次數可選用for語句實現迴圈,不知道迴圈的次數可選用while語句或do-while語句實現迴圈.

(4)一般而言,三種迴圈語句可等價實現.

6-2 仔細閱讀下面的程式,指出程式的執行結果.

#include

void main()

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

}} 答:2

4思考:語句「for(「i=0;++i;i<5」)在編譯時為何會給出語法警告錯誤?當將其改為「for(i=0;i<5;++i)」時,執行結果又將如何?

6-3 仔細閱讀下面的語的程式,指出程式的執行結果。

#include"stdio.h"

void main()

i++;

printf("a=%d,i=%d",a,i);

}答:a=3,i=7

思考:在for迴圈中巢狀著do-while迴圈,那麼do-while迴圈中對i的修改會對for迴圈產生影響嗎?

6-4編寫程式,用1000個單詞」***puter」填充螢幕,每行60個 .

解:#include

void main()

思考:在for迴圈中,」if(i%60==0)printf(「\n」);」語句的作用是什麼?沒有此語句將會是什麼狀況?

6-5輸入一行字元(以$結束),統計其中的數字字元、空格字元出現的次數。

解: #include

void main()

char c;

int d=0,s=0;

printf("請輸入字元(當輸入$時結束):");

while ((c=getchar())!='$')

if(c>='0'&&c<='9')s++;

if(c==' ') d++ ;

printf("數字字元出現的次數為%d\n",d);

printf("空格字元出現的次數為%d\n",s);

}若輸入字元:12 345 abcd 678 xyz$

則執行結果為:數字字元出現的次數為8

空格字元出現的次數為4

思考:此題中的迴圈次數是如何控制的?有何特點?

6-6編寫程式,求1000以內的奇數之和及偶數之和。

解:#include

void main()

printf("奇數之和為%ld\n",m);

printf("偶數之和為%ld\n",n);

}執行結果:奇數之和為250000

偶數之和為249500

思考:在此題中為何選用for迴圈進行控制?用while迴圈或do-while迴圈是否也可以?

6-7 計算π,計算公式π/4=1-1/3+1/5-1/7+…直到最後一項的絕對值小於為止。

解:#include

#include

void main()

pi=pi*4;

printf("pi=%f\n",pi);

}執行結果:pi=3.141594

思考:在此題中為何不選用for迴圈進行控制,而選用while迴圈呢?

6-8編寫程式,求任意兩個整數之間的所有素數。

解:#include

#include

void main()

if(p%10==0)printf("\n");

}printf("\n");

}執行結果:請輸入兩個整數m,n(m11 13 17 19

思考:此題中若輸入的兩個整數m,n分別為13,100時,13這個素數是否被輸出,為什麼?

6-9 編寫程式,求任意兩個整數之間的所有能被3、4、5同時整除的數。

解:#include

void main()

int n,m,i;

printf("請輸入兩個整數m,n(mscanf("%d,%d",&m,&n);

for(i=m;i<=n;i++)

if((i%3==0)&&(i%4==0)&&(i%5==0)) //或寫為if(i%60==0)

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

思考:如果要分行輸出,每行輸出5個數,應該怎麼修改程式?

6-10 編寫程式,求1000至9999之間的回文數.回文數是指正讀與反讀都一樣的數,如1221.

解:#include

void main()

int n, i,j;

for(i=1000;i<=9999;i=i+1000)

for(j=0;j<=9;j++)

n=i+j*100+j*10+i/1000;

printf("%d",n);

printf("\n");

}}執行結果:1001 1111 1221 1331 1441 1551 1661 1771 1881 1991

2002 2112 2222 2332 2442 2552 2662 2772 2882 2992

3003 3113 3223 3333 3443 3553 3663 3773 3883 3993

4004 4114 4224 4334 4444 4554 4664 4774 4884 4994

5005 5115 5225 5335 5445 5555 5665 5775 5885 5995

6006 6116 6226 6336 6446 6556 6666 6776 6886 6996

7007 7117 7227 7337 7447 7557 7667 7777 7887 7997

8008 8118 8228 8338 8448 8558 8668 8888 8888 8998

9009 9119 9229 9339 9449 9559 9669 9999 9999 9999

思考:在此題中,內、外迴圈各起什麼作用?是否可以交換?如果用if語句設計程式,資料的各位數(個位、十位、百位、千位)應該如何分離?

6-11 編寫程式,判斷某乙個整數是否為完數。完數是指其因子之和等於自身的整數,如6=1+2+3請進一步考慮,求任意兩個整數之間的所有完數。

解:#include

void main()

執行結果:請輸入整數:28

28是完數

思考:變數k在此題中起什麼作用?初值為何要被賦0?

迴圈語句「for(i=1;i<=n;i++)」中的判斷式」i注:1000以內的完數有6=1+2+3,28=1+2+4+7+14,496=1+2+4+8+16+31+62+124+248.

第5章迴圈結構程式設計

程式的三種基本結構 順序結構 用來描述依次執行的操作。選擇結構 對判定性問題的處理。迴圈結構 對有規律的重複性的事務的處理。5 1 迴圈結構概述 1 用goto語句和if語句構成迴圈 2 用while語句 3 用do while語句 4 用for語句。5 2 while語句 其一般形式如下 whil...

第3章順序結構程式設計練習題及答案

第3章順序 一 單選題 1 己知int k,m 1 執行語句k m 後k的值是 a 提示 負號與自加運算子同級,結合方向從右向左 a 1 b 0 c 1 d 2 2 若變數a,b已正確定義,且a,b均已正確賦值,下列選項中合法的語句是 b a a b b a c a b 1 d a int b 提示...

第6章習題答案

思考題6 1 1 正確。2 不正確。有可能無解,例如,有唯一解,但無解。3 正確。因為,所以一定有解.4 正確。因為,所以有非零解.習題6 1 1.1 或2 2.1 當且時,有唯一解 當或時,無解 當時,有無窮多個解。2 當且時,有唯一解 當時,無解 當時,有無窮多個解。3 當且時,有唯一解 當時,...