C語言課件第5章循環(huán)結(jié)構(gòu)程序設(shè)計2_第1頁
C語言課件第5章循環(huán)結(jié)構(gòu)程序設(shè)計2_第2頁
C語言課件第5章循環(huán)結(jié)構(gòu)程序設(shè)計2_第3頁
C語言課件第5章循環(huán)結(jié)構(gòu)程序設(shè)計2_第4頁
C語言課件第5章循環(huán)結(jié)構(gòu)程序設(shè)計2_第5頁
已閱讀5頁,還剩78頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

第5章主要內(nèi)容一、循環(huán)的概念二、用while語句實現(xiàn)循環(huán)三、用do-while語句實現(xiàn)循環(huán)四、用for語句實現(xiàn)循環(huán)五、break語句和continue語句六、循環(huán)嵌套七、應(yīng)用舉例思考求1~100的累加和。分析換一種思路:首先設(shè)置一個累計器sum,其初值為0,利用sum+=n來計算(n依次取1、2、……、100),只要解決以下3個問題即可:

(1)將n的初值置為1;

(2)每執(zhí)行1次“sum+=n;”后,n增1;

(3)當(dāng)n增到101時,停止計算。此時,sum的值就是1~100的累計和。sum=1+2+…+100;.sum=sum+n;格式while(循環(huán)條件表達(dá)式)

{循環(huán)體語句}P70說明1、循環(huán)體如果包含一個以上的語句,必須使用復(fù)合語句形式。2、在循環(huán)體中,必須有使循環(huán)條件趨向于不滿足(假)的語句。3、先判斷表達(dá)式,后執(zhí)行語句。功能當(dāng)表達(dá)式成立(表達(dá)式的值為非0值)時,執(zhí)行while語句中的循環(huán)體語句。執(zhí)行過程表達(dá)式循環(huán)體語句不成立成立§5.1while語句?sum=凵5050舉例例5.1:求1~100的累加和。#include<stdio.h>intmain(){

int

i,sum;i=1;sum=0;while(i<=100)

{

sum=sum+i;i++;

}

printf("sum=%5d\n",sum);return0;}思考1、如果去掉循環(huán)體中的大括號,執(zhí)行過程將會怎樣變化?2、在循環(huán)體中,使循環(huán)條件趨向于不滿足(假)的語句是哪條?3、變量i和sum在循環(huán)外不賦予初值行不行?i=1;sum=0;?1求1~50的累加和.2求1~100的奇數(shù)和.3求1~100的偶數(shù)和.求1到100的奇數(shù)和

#include<stdio.h>

intmain()

{

inti,sum;

i=1;sum=0;

while(i<100)

{

sum=sum+i;

i++;i++;

}

printf("sum=

%d\n",sum);return0;

}運(yùn)行結(jié)果:凵2500說明:(1)循環(huán)體如果包含一個以上的語句,應(yīng)該用花括弧括起來,以復(fù)合語句形式出現(xiàn)。

(2)在循環(huán)體中應(yīng)有使循環(huán)趨向于結(jié)束的語句舉例練習(xí):1、求1到100之間的偶數(shù)和;2、求N!#include<stdio.h>intmain(){

inti,sum=0;i=1;while(i<=100){if(i%2==0)sum=sum+i;i++;}

printf("%d\n",sum);return0;}#include<stdio.h>intmain(){

inti=1,n;floatfac=1;

printf("請輸入n:");

scanf("%d",&n);while(i<=n){fac=fac*i;i++;}printf("%.0f\n",fac);return0;}運(yùn)行結(jié)果:凵2550請輸入n:5運(yùn)行結(jié)果:120利用公式:sum=1-3+5-7+9-11…,求前10項的和。#include<stdio.h>intmain(){

int

s,i,sum,t,n;i=0;n=1,sum=0,t=1,s=1;

while(i<10){sum=sum+t;n=n+2;s=-s;t=s*n;i++;}

printf("sum=%d\n",sum);return0;}s:變化的符號i:第i項n:第i項的絕對值t:第i項的值sum:和運(yùn)行結(jié)果:sum=-10舉例舉例例5.2:設(shè)s=1×2×3×……×n,求s不大于400000時最大的n。#include<stdio.h>intmain(){

intn=1;longints=1;

while(s<=400000){n=n+1;s=s*n;}

printf("不大于400000時的最大n為:%d\ns值為:%ld\n",n-1,s);return0;}運(yùn)行結(jié)果:不大于400000時的最大n為:9s值為:3628800前n項的乘積舉例現(xiàn)有某班20名學(xué)生的C語言成績,求該班學(xué)生的C語言的平均成績。即:輸入20個學(xué)生的成績,計算平均值,輸出平均值。分析:定義變量表示學(xué)生的成績、全班總和、平均成績。算法設(shè)計:

第一步:輸入20個學(xué)生的成績

第二步:計算成績總和(用累加求和的方法)

第三步:計算平均值(總和/人數(shù))

第四步:輸出平均值如果定義20個變量保存20個成績,程序中計算成績總和會有什么問題?回顧例題:求1到100的奇數(shù)和

#include<stdio.h>

intmain()

{

inti,sum;

i=1;sum=0;

while(i<100)

{

sum=sum+i;

i=i+2;

}

printf("sum=

%d\n",sum);return0;

}用while循環(huán)實現(xiàn)累加求和累加項是誰?累加項是如何不斷被更新的?ii=i+2;例題現(xiàn)有某班20名學(xué)生的C語言成績,求該班學(xué)生的C語言的平均成績。即:輸入20個學(xué)生的成績,計算平均值,輸出平均值。運(yùn)行結(jié)果:

請輸入學(xué)生成績:23凵89凵67凵78凵94凵56凵34凵83凵90

凵67凵48凵72凵81凵65凵74凵87凵73凵67凵90凵98

20名學(xué)生的C語言平均成績?yōu)椋?1.8#include<stdio.h>intmain(){floatscore,total=0,average;

inti=1;

printf("請輸入學(xué)生成績:");

while(i<=20){

scanf("%f",&score);total=total+score;i++;}average=total/20;printf("20名學(xué)生的C語言平均成績?yōu)椋?5.1f\n",average);return0;}total前i名學(xué)生的成績的和score每一名學(xué)生的成績average

平均成績i用來計數(shù)舉例

從鍵盤輸入一個非負(fù)整數(shù),判斷m是否是素數(shù)。素數(shù)(質(zhì)數(shù)):只能被1和它本身整除的數(shù)。判別方法:57:若2~56之間的每一個數(shù)都不能整除56,則57為素數(shù),否則57不是素數(shù)。m,k=m-1,i=2~k:若每一個i的值都不能整除m,則m為素數(shù),否則m不是素數(shù)。flag=1;k=m-1;for(i=2;i<=k;i++)if(m%i==0)flag=0;if(flag==1)printf(“yes!”);elseprintf(“no!”);k=m-1;for(i=2;i<=k;i++)if(m%i==0)break;if(i>=k+1)printf(“yes!”);elseprintf(“no!”);k=m-1;k=[m/2];[(m+1)/2];k=[sqrt(m)];[sqrt(m+1)]#include"math.h"#include"stdio.h"intmain(){

int

m,flag=0,i=2,k;

printf("請輸入一個非負(fù)整數(shù):\n");

scanf("%d",&m);k=sqrt(m);

while(i<k&&flag==0) {

if(m%i==0) flag=1;//m不是素數(shù),修改flag的值

elsei++; }

if(flag==0)

printf("%d是素數(shù)。\n",m); else

printf("%d不是素數(shù)。\n",m); return0;}舉例求兩個非負(fù)整數(shù)m和n的最大公約數(shù)和最小公倍數(shù)。#include<stdio.h>intmain(){int

m,n,t;

printf("請輸入兩個非負(fù)整數(shù):");

scanf("%d%d",&m,&n);t=(m<=n)?m:n;while(m%t!=0||n%t!=0)//t能否整除m、nt--;

printf("最大公約數(shù)為:%d\n",t);t=(m>n)?m:t;while(t%m!=0||t%n!=0)//m、n能否整除tt++;

printf("最小公倍數(shù)為:%d\n",t);return0;}找m、n中較小數(shù)找m、n中較大數(shù)格式do

{循環(huán)體語句}while(循環(huán)條件表達(dá)式);說明1、循環(huán)體如果包含一個以上的語句,必須使用復(fù)合語句形式。2、在循環(huán)體中,必須有使循環(huán)條件趨向于不滿足(假)的語句。3、先執(zhí)行循環(huán)體語句,后判斷表達(dá)式的值。含義執(zhí)行do-while語句中的循環(huán)體語句,直到表達(dá)式的值為假(0)才跳出循環(huán)。執(zhí)行過程至少執(zhí)行一次§5.2do-while語句表達(dá)式循環(huán)體語句假真舉例例5.6求1~100之間的奇數(shù)和。

#include<stdio.h>intmain(){inti,sum;i=1;sum=0;do{sum=sum+i;i++;

i++;}while(i<=100);printf("sum=%5d\n",sum);return0;}思考1、如果去掉循環(huán)體中的大括號會怎樣?2、在循環(huán)體中,使循環(huán)條件趨向于不滿足(假)的語句是哪條?運(yùn)行結(jié)果:凵2500舉例while和do-while循環(huán)的比較。

#include<stdio.h>intmain(){int

i,sum=0;scanf("%d",&i);while(i<=10){sum=sum+i;i++;}printf("sum=%d\n",sum);return0;}#include<stdio.h>intmain(){int

i,sum=0;scanf("%d",&i);do{sum=sum+i;i++;}while(i<=10);printf("sum=%d\n",sum);return0;}輸入:1輸入:11sum=55輸出:sum=55sum=0輸出:sum=11此程序的功能?什么情況下兩者結(jié)果相同?舉例例5.7設(shè)有一張厚為x毫米,面積足夠大的紙,將它不斷對折。試問對折多少次后,其厚度可達(dá)8848米的珠穆朗瑪峰的高度。P76#include<stdio.h>intmain(){

inti=0;floatx;

printf("請輸入紙張的厚度:");

scanf("%f",&x);x=x*0.001;//將毫米轉(zhuǎn)換為米

do{x=x*2;i=i+1;}while(x<8848);

printf("折疊次數(shù)=%d\n",i);return0;}數(shù)據(jù)描述:x:紙張厚度i:對折次數(shù)對折后紙張厚度運(yùn)行結(jié)果:請輸入紙張的厚度:1

折疊次數(shù)=24格式for(表達(dá)式1;表達(dá)式2;表達(dá)式3)語句P77for(循環(huán)變量賦初值;循環(huán)條件;循環(huán)變量增值)語句執(zhí)行過程(1)先求解表達(dá)式1;(2)求解表達(dá)式2,若其值為真,則執(zhí)行循環(huán)體語句,然后執(zhí)行第(3)步;若為假,則結(jié)束循環(huán),轉(zhuǎn)到第(5)步;(3)求解表達(dá)式3;(4)轉(zhuǎn)向步驟(2);(5)循環(huán)結(jié)束,執(zhí)行for語句下面的一個語句?!?.3for語句表達(dá)式2循環(huán)體語句假真求解表達(dá)式1求解表達(dá)式3sum=5050舉例求1~100的累加和。#include<stdio.h>intmain(){inti,sum;sum=0;for(i=1;i<=100;i++)sum=sum+i;printf(“sum=%5d\n”,sum);return0;}?1求1~55的累加和.2求1~100的奇數(shù)和.3求1~100的偶數(shù)和.for(表達(dá)式1;表達(dá)式2;表達(dá)式3)語句說明三個表達(dá)式都可以省略。表達(dá)式2循環(huán)體語句假真求解表達(dá)式3表達(dá)式1省略需在循環(huán)體外賦初值循環(huán)體語句求解表達(dá)式1求解表達(dá)式3表達(dá)式2省略恒真循環(huán)表達(dá)式2循環(huán)體語句假真求解表達(dá)式1表達(dá)式3省略兩種情況?結(jié)果?說明1i=1;for(;i<=10;i++)sum=sum+i;2for(i=1;

;i++)sum=sum+i;?3for(i=1;i<=10;){sum=sum+i;i++;}for(i=1;i<=10;i++)sum=sum+i;表達(dá)式1可以省略,但其后的分號不可以省略。沒有循環(huán)結(jié)束條件,構(gòu)成了死循環(huán)for(i=1;i<=10;i++)sum=sum+i;說明45for(;;)sum=sum+i;6表達(dá)式1和表達(dá)式3可以是與循環(huán)變量無關(guān)的表達(dá)式。for(;i<=10;){sum=sum+i;i++;}7表達(dá)式2一般是關(guān)系表達(dá)式,也可以是數(shù)值或字符表達(dá)式。while(i<=10){sum=sum+i;i++;}while(1)sum=sum+i;表達(dá)式1和表達(dá)式3可以同時省略,此時等同于while語句。for(sum=0,i=1;i<=100,i++)sum=sum+i;例建議:for語句中只放與循環(huán)控制有關(guān)的語句。說明:①for(i=0;(c=getchar())!=′\n′;i+=c);

在表達(dá)式2中先從終端接收一個字符賦給c,然后判斷此賦值表達(dá)式的值是否不等于′\n′(換行符),如果不等于′\n′,就執(zhí)行循環(huán)體。注意:此for語句的循環(huán)體為空語句,把本來要在循環(huán)體內(nèi)處理的內(nèi)容放在表達(dá)式3中,作用是一樣的??梢奻or語句功能強(qiáng),可以在表達(dá)式中完成本來應(yīng)在循環(huán)體內(nèi)完成的操作。說明:②for(;(c=getchar())!=′\n′;)

printf(″%c″,c);

for語句中只有表達(dá)式2,而無表達(dá)式1和表達(dá)式3。其作用是每讀入一個字符后立即輸出該字符,直到輸入一個“換行”為止。請注意,從終端鍵盤向計算機(jī)輸入時,是在按Enter鍵以后才將一批數(shù)據(jù)一起送到內(nèi)存緩沖區(qū)中去的。運(yùn)行情況:Computer↙(輸入)Computer(輸出)而不是Ccoommppuutteerr舉例#include<stdio.h>intmain(){floatsum=0.0;

intn;

for(n=1;n<=30;n++)sum=sum+(float)n/(float)(n+1);

printf("sum=%5.2f\n",sum);return0;}例5.8:計算。格式表達(dá)式1,表達(dá)式2,…,表達(dá)式nP79說明1.逗號表達(dá)式常用于for循環(huán)語句中。2.并不是在所有出現(xiàn)逗號的地方都組成逗號表達(dá)式,如:int

a,b,c;scanf("%d%d%d",&a,&b,&c);含義從左到右,依次計算各表達(dá)式的值,最后一個表達(dá)式的值即為整個逗號表達(dá)式的值。逗號運(yùn)算符和逗號表達(dá)式

思考是不是所有出現(xiàn)逗號的地方都組成逗號表達(dá)式。?舉例例5.10若a=5,求下列表達(dá)式及經(jīng)過運(yùn)算后a的值:a=(3+2,7+8)a=2*5,a*3(a=3*5,a*4),a+5,a+=10結(jié)果:15結(jié)果:10結(jié)果:25格式while(表達(dá)式1){…if(表達(dá)式2)break;

…}舉例

…...sum=0;for(i=1;i<=10;i++){if(i>5)break;sum=sum+i;}

printf(“sum=%5d\n”,sum);…...while(表達(dá)式1){…if(表達(dá)式2)conitue;

…}結(jié)束整個循環(huán)結(jié)束本次循環(huán)

…...sum=0;for(i=1;i<=10;i++){if(i<=5)continue;sum=sum+i;}

printf(“sum=%5d\n”,sum);…...§5.4break和continue語句舉例例5.11分析下面程序的運(yùn)行結(jié)果。結(jié)束整個循環(huán)#include<stdio.h>intmain(){

inti=0,a=0;

while(i<20){if(i%10==0)break;elsei++;}i+=11;a+=i;

printf("%d\n",a);return0;}

ii%10第1次執(zhí)行循環(huán)00條件表達(dá)式i%10==0成立,執(zhí)行break語句,跳出循環(huán)運(yùn)行結(jié)果:11舉例例5.12:輸出100以內(nèi)能被7整除的最大數(shù)。結(jié)束整個循環(huán)#include"stdio.h"intmain(){

intn;

for(n=100;n>=1;n--)if(n%7==0){printf("100以內(nèi)能被7整除的最大數(shù)為:“);

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

break;}return0;}

nn%7第1次執(zhí)行循環(huán)1002第2次執(zhí)行循環(huán)

99

1第3次執(zhí)行循環(huán)980第4次執(zhí)行循環(huán)時條件表達(dá)式n%7==0成立,執(zhí)行break語句,跳出循環(huán)運(yùn)行結(jié)果:100以內(nèi)能被7整除的最大數(shù)為:98舉例例5.13:分析下面程序的運(yùn)行結(jié)果。結(jié)束本次循環(huán)#include"stdio.h"intmain(){

inti=0,s=0;do{if(i%2)//n為奇數(shù)

{i++;continue;}i++;s+=i;}while(i<7);

printf("%d\n",s);return0;}

ii%2i++scontinue

是否執(zhí)行第1次執(zhí)行循環(huán)0011否第2次執(zhí)行循環(huán)1

121是第3次執(zhí)行循環(huán)2034

否第4次執(zhí)行循環(huán)3144

是第5次執(zhí)行循環(huán)4059否第6次執(zhí)行循環(huán)5169是第7次執(zhí)行循環(huán)60716否此時條件表達(dá)式1<7不成立,結(jié)束循環(huán)運(yùn)行結(jié)果:16#include<stdio.h>intmain(){

inti;for(i=1;i<=5;i++){ if(i>3)break; if(i%2)printf("*"); elsecontinue;

printf("#"); }

printf("$\n");return0;}分析如下程序的輸出結(jié)果:

*#*#$舉例舉例把100~200之間的能被13整除的數(shù)輸出。

#include"stdio.h"

intmain()

{

intn;

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

{

if(n%13!=0)

continue;

else

printf("%d",n);

}

printf("\n");

return0;

}運(yùn)行結(jié)果:104117130143156169182195說明:當(dāng)n不能被13整除時,執(zhí)行continue語句,結(jié)束本次循環(huán)(即跳過printf函數(shù)語句),只有n能被13整除時才執(zhí)行printf函數(shù)。結(jié)束本次循環(huán)1、三種循環(huán)語句在處理循環(huán)問題時,一般可以相互替代。2、對于循環(huán)次數(shù)固定的問題,用for語句實現(xiàn)比較簡單。3、對于循環(huán)次數(shù)不確定的問題,可用while語句或do-while語句實現(xiàn)。4、while語句:先判斷,后執(zhí)行。

do-while語句:先執(zhí)行,后判斷。§6.7幾種循環(huán)語句的比較概念一個循環(huán)體內(nèi)又包含另一個完整的循環(huán)結(jié)構(gòu),稱為循環(huán)嵌套。舉例例5.15馬克思曾經(jīng)做過這樣一道趣味數(shù)學(xué)題:有30個人在一家小飯館里用餐,其中有男人、女人和小孩。每個男人花3先令,每個女人花2先令,每個小孩花1先令,共花去50先令。問男人、女人和小孩各幾人(男人、女人和小孩均存在)?P83#include"stdio.h"intmain(){int

man,women,child;

for(man=1;man<29;man++)

for(women=1;women<=29-man;women++) {child=30-man-women;

if(man*3+women*2+child*1==50)

printf("man=%-6dwowen=%-6dchild=%-6d\n",man,women,child);}return0;}§5.5循環(huán)嵌套男人人數(shù),最多28人女人人數(shù),29-man小孩人數(shù)=30-man-women運(yùn)行結(jié)果:man=1women=18chile=11man=2women=16chile=12man=3women=14chile=13man=4women=12chile=14man=5women=10chile=15man=6women=8chile=16man=7women=6chile=17man=8women=4chile=18man=9women=2chile=19舉例例5.16打印乘法口訣表。#include"stdio.h"intmain(){inti,j,result;for(i=1;i<=9;i++){for(j=1;j<=9;j++){result=i*j;//計算i行j列上的元素值

printf("%d*%d=%-3d\t",i,j,result);}printf("\n");}return0;}

resulti=1,j=11*1j=21*2j=31*3

j=91*9i=2,j=12*1j=22*2

┇j=92*9……i=9,j=19*1j=29*2┇j=99*91*1=11*2=2…1*9=92*1=22*2=4…2*9=18…9*1=99*2=18…9*9=81

124369481216#include<stdio.h>intmain(){

int

i,j;for(i=1;i<=4;i++)

{for(j=1;j<=i;j++)printf(“%4d”,i*j);

printf(“\n”);

}

return0;}思考1#include<stdio.h>intmain(){

inti,j;for(i=1;i<=4;i++)

{for(j=1;j<=5-i;j++)printf(“%4d”,i*j);

printf(“\n”);

}

return0;}思考2

1234246364#include<stdio.h>intmain(){

inti,j;for(i=1;i<=4;i++)

{for(j=1;j<=4-i;j++)printf(“%4c”,’‘);for(j=5-i;j<=4;j++)printf(“%4d”,i*j);

printf(“\n”);

}return0;}思考34686912481216#include<stdio.h>intmain(){

inti,j;for(i=1;i<=4;i++)

{for(j=1;j<=i-1;j++)printf(“%4d”,’‘);for(j=i;j<=4;j++)printf(“%4d”,i*j);

printf(“\n”);

}return0;}思考4

123446891216舉例例5.17求Fibonacci數(shù)列的前40個數(shù)。按每行4個進(jìn)行輸出。#include"stdio.h"intmain(){

intn;longintf1,f2;f1=1;f2=1;printf("%10d%10d",f1,f2);

for(n=1;n<=19;n++){if(n%2==0)

printf("\n");f1=f1+f2;f2=f2+f1;printf("%10d%10d",f1,f2);}

printf("\n");return0;}特點:第1、2個數(shù)為1、1。從第三個數(shù)開始,該數(shù)是其前面兩個數(shù)之和。F1=1(n=1)F2=1(n=2)Fn=Fn-1+Fn-2(n>=3)

1123581321345589144……§5.8程序舉例求Si=a+aa+aaa+……+的值。如a=5,i=3時,即求表達(dá)式5+55+555的值。a和i由鍵盤輸入。舉例#include"math.h"#include"stdio.h"intmain(){intj,i,a,s=0;

printf("請輸入a和i的值:\n");

scanf("%d%d",&a,&i);longintsum=0

for(j=1;j<=i;j++){s=s+a*(int)pow(10,(j-1));sum=sum+s;}

printf("SUM=%ld\n",sum);return0;}pow()函數(shù):求xy程序顯示:請輸入a和i的值:用戶輸入:53并回車程序輸出:SUM=615i:第i項n:第i項的分母t:第i項的值sum:和舉例利用公式:sum=1+1/3+1/5+1/7+1/9…,求前10項的和。#include<stdio.h>#include<math.h>intmain(){

int

s,i,n;floatt,sum;i=0;n=1,sum=0,t=1.0;

while(i<10){sum=sum+t;n=n+2;t=1.0/n;i++;}

printf("sum=%.2f\n",sum);return0;}運(yùn)行結(jié)果:sum=2.13舉例利用公式sum=1-3+5-7+9-11…求前10項的和。#include<stdio.h>#include<math.h>intmain(){

int

s,i,sum,t,n;i=0;n=1,sum=0,t=1,s=1;

while(i<10){sum=sum+t;n=n+2;s=-s;t=s*n;i++;}

printf("sum=%d\n",sum);return0;}s:變化的符號i:第i項n:第i項的絕對值t:第i項的值sum:和運(yùn)行結(jié)果:sum=-10舉例利用公式:

/4=1-1/3+1/5-1/7+…求

的近似值,直到某一項的絕對值小于10-6為止。#include<stdio.h>#include<math.h>intmain(){

ints;floatn,t,pi;t=1;pi=0;n=1.0;s=1;

while((fabs(t))>1e-6)

{

pi=pi+t;n=n+2;s=-s;t=s/n;}pi=pi*4;

printf("pi=%10.6f\n",pi);return0;}思考:使用那一種循環(huán)控制語句?pi=1-1/3+…輸出4*pis=1(-1)n=1,3,5,7…t=s/n運(yùn)行結(jié)果:sum=3.141594舉例輸出101~200之間的全部素數(shù)。每行輸出10個。#include<stdio.h>#include<math.h>voidmain(){

intm,k,i,n=0;for(m=101;m<=200;m=m+2){k=sqrt(m);for(i=2;i<=k;i++)if(m%i==0)break;if(i>=k+1)

{printf("%d",m);n=n+1;if(n%10==0)printf("\n");

}

}

printf("\n");}正常結(jié)束循環(huán)m不是素數(shù)例5.18用雙重for循環(huán)打印出下列圖形。P86

* *** ***** ******* ***** *** *

#include"stdio.h"intmain(){

int

i,j;

for(i=1;i<=4;i++)

{

for(j=1;j<=4-i;j++)

printf("");

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

printf("*");

printf("\n");

}for(i=1;i<=3;i++)

{

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

printf("");

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

printf("*");

printf("\n");

}return0;}打印上三角(1-4行)打印下三角(1-3行)舉例#include"stdio.h"intmain(){charch;

intletter=0,space=0,number=0,other=0;

printf("請輸入一串字符");scanf("%c",&ch);

while(ch!='\n')

{if(ch>='a'&&ch<='z'||ch>='A'&&ch<='Z')letter++;elseif(ch=='')space++; elseif(ch>='0'&&ch<='9')number++; elseother++;

scanf("%c",&ch);}

printf("字符數(shù)=%d\n空格數(shù)=%d\n數(shù)字?jǐn)?shù)=%d\n其它字符的個數(shù)=%d\n",letter,space,number,other);return0;}letter:字符個數(shù)space:空格個數(shù)number:數(shù)字個數(shù)other:其它字符個數(shù)例5.19例

輸入一行字符,分別統(tǒng)計出其中英文字母、空格、數(shù)字和其它字符的個數(shù)。舉例舉例譯密碼。輸入一行字符,輸出其相應(yīng)的密碼。譯碼規(guī)律:將字母變成其后的第4個字母,非字母字符不變。#include<stdio.h>voidmain(){charc;while((c=getchar())!='\n'){if((c>'a'&&c<='z')||(c>'A'&&c<='Z')){

c=c+4;if((c>'Z'&&c<='Z'+4)||c>'z')c=c-26;

}

printf("%c\n",c);}}循環(huán)部分編程及上機(jī)要注意的問題:1、for循環(huán)的末尾不能有:for(i=0;i<10;i++);

2、循環(huán)控制變量在循環(huán)體內(nèi)最好不要重新賦值:x=a;for(x=1;x<=n;x++)

sn=sn+x;x=x*10+a;3、注意循環(huán)中使用的{}m=a;for(x=1;x<=n;x++){sn=sn+m;m=m*10+a;}for(x=1;x<=n;x++){y=(pow(10,x)-1)*a/9

sn=sn+y;}4、countine的用法:當(dāng)countine后面沒有語句時,可以省略for(x=1,t=0;x<=n;x++){t=t+a;

sn=sn+t;a=a*10;}if(i%7==0)

printf(“%8d”,i);else

countine;注意一.選擇題C語言程序的三種基本結(jié)構(gòu)是順序結(jié)構(gòu)、選擇結(jié)構(gòu)和()。A.遞歸結(jié)構(gòu) B.轉(zhuǎn)移結(jié)構(gòu)C.循環(huán)結(jié)構(gòu) D.嵌套結(jié)構(gòu)2.

下面程序段中while循環(huán)執(zhí)行的次數(shù)是()。

intt=0;

while(t=1)t=t+1;A.無限次 B一次也不行C執(zhí)行一次 D有語法錯,不能執(zhí)行3.以下程序的輸出結(jié)果是()。

#include<stdio.h>

intmain(){inti,sum;for(i=1;i<6;i++)sum+=i;

printf("%d\n",sum);return0;}A.15 B.14 C.0 D.不確定作業(yè)及練習(xí)4.設(shè)x和y均為int型變量,則執(zhí)行下面的循環(huán)后,x值為()。

for(y=1,x=1;y<=50;y++){

if(x>=10)break;if(x%2==1) {x+=5;continue;}x-=3;}

printf("%d",x);A.4 B.6 C.8 D.105.指出程序結(jié)束之時,i,j,k的值()。

#include"stdio.h"

intmain(){

inta=10,b=5,c=5,d=5;

inti=0,j=0,k=0;

for(;a>b;++b)i++;

while(a>++c)j++;dok++;

while(a>d++);return0;}A.i=5j=5k=6 B.i=5j=4k=6C.i=6j=5k=7 D.i=6j=6k=66.下面程序的輸出是()。

#include<stdio.h>

intmain()

{inti,j;for(i=0,j=10;i<j;i+=2)j=j-1;printf("i=%d,j=%d\n",i,j);return0;

}A.i=8,j=6 B.i=8,j=5 C.i=8,j=7 D.i=8,j=87.若已有定義inti,j,k;執(zhí)行語句scanf(“%d%d%2d”,&i,&j,&k);時的鍵盤輸入為:

123<回車>456789<回車>所得的i,j,k的值分別為()。A.123,456和789 B.1,2和3C.123,456和78 D.1,4和788.

若已定義inti,x,則for(i=0,x=0;i<=9&&x!=5;i++,x++)控制的循環(huán)體執(zhí)行()次。A.10 B.9 C.5 D.69.

若已定義a、b為整型變量,用scanf(“%d%d”,&a,&b);語句輸入a、b的值時,不可以用()作為輸入的分隔符。A., B.空格 C.回車 D.Tab10、執(zhí)行下列程序的輸出顯示是()。

intmain()

{intx=1,y=2,z;z=x+++y;

printf(“%d%d%d\n”,x,y,z);return0;}A.223 B.123 C.224 D.13411.有以下程序段,其中x為整形變量:

x=0;

while(!x!=0)x++;一下選項中正確的是()。

A.

退出循環(huán)后x得值為0

B.

退出循環(huán)后x得值為1

C.while的控制表達(dá)是非法

D.

while循環(huán)執(zhí)行無數(shù)次

12.表達(dá)式3&&6&&9的值為()。A.3 B.6 C.9 D.113.以下while循環(huán)中,循環(huán)體執(zhí)行的次數(shù)是()。

k=1;while(--k)k=10;A.10次 B.一次也不執(zhí)行 C.無限次 D.1次14.有以下程序段,其中t為整形變量:

t=1;

while(-1)

{t--;

if(t)break;

}

以下選項中敘述正確的是()。

循環(huán)1次也不執(zhí)行 B.循環(huán)執(zhí)行一次C.循環(huán)控制表達(dá)式不合法 D.循環(huán)執(zhí)行兩次15.有以下程序段,其中x為整形變量:

x=-1;do

{;}

while(x++);

printf(“x=%d\n”,x);

以下選項中敘述正確的是()。

程序錯誤 B.x=1 C.x=-1 D.x=01.下面程序的輸出結(jié)果是________。#include"stdio.h"intmain(){

int

x,i;

for(i=1;i<=100;i++){x=i;if(++x%2==0)if(++x%3==0)if(++x%7==0)

printf("%d\n",x);}return0;}2.下面程序的輸出結(jié)果是________。#include"stdio.h"intmain(){

int

i,k=19;

while(i=k-1){k-=3;if(k%5==0){i++;continue;}elseif(k<5)break;i++;}

printf("i=%d,k=%d\n",i,k);return0;}二.程序分析題3.下面程序的輸出結(jié)果是________。#include"stdio.h"intmain(){int

i,j;floats;

for(i=6;i>4;i--){s=0.0;

for(j=i;j>3;j--)s=s+i*j;}

printf("%f\n",s);return0;}4.下面程序的輸出結(jié)果是________。#include"stdio.h"intmain(){inta=10,b=0;

while(a!=0){--a;if(a%3!=0)continue;b++;

if(a<=4)break;}

printf("b=%d\n",b);return0;}5.下面程序的輸出結(jié)果是________。#include<stdio.h>intmain(){int

i,k=19;

while(i=k-1){k-=3;if(k%5==0){i++;continue;}elseif(k<5)break;i++;

}printf("i=%d,k=%d\n",i,k);return0;}6.下面程序的輸出結(jié)果是________。#include<stdio.h>intmain(){int

i,j;floats;

for(i=6;i>4;i--){s=0.0;

for(j=i;j>3;j--)s=s+i*j;}

printf("%f\n",s);return0}7.下面程序的輸出結(jié)果是

。#include<stdio.h>intmain(){int

a,b;

for(a=1,b=1;a<=100;a++){if(b>=10)break;if(b%3==1){b+=3;continue;}}

printf(“%d\n”,a);return0;}8.下面程序的輸出結(jié)果是

#include<stdio.h>

intmain(){intI=0;

for(I+=3;I<=5;I=I+2)switch(I%5){case0:printf(“*”);case1:printf(“#”);break;

default:printf(“!”);break;case2:printf(“&”);}return0;}9.當(dāng)給x輸入789時,下面程序段的輸出結(jié)果是________。

intmain(){int

r,x;

printf(“Inputx:”);scanf(“%d”,&x);

while(x!=0){r=x%10;printf(“%d”,r);x=x/10;}return0;}10.下面程序段的輸出結(jié)果是________。

intmain(){intx=2;

while(x--);

printf(“%d\n”,x);return0;}11.下面程序段的輸出結(jié)果是________

intx=3;do{printf(“%3d”,x-=2);}while(!(--x));12.下面程序段的輸出結(jié)果是________。

intn=0;

while(n++<=2);printf(“%d\n”,n);13.下面程序段的輸出結(jié)果是________。

intk=10;

while(k=0)k=k-1;14.下面程序段的輸出結(jié)果是________。

intx;

for(x=3;x<6;x++)printf((x%2)?(“**%d”):(“##%d\n”),x);15.下面程序段的輸出結(jié)果是________。

intmain(){intx=2;

while(x--);

printf(“%d\n”,x);return0;}1.下面程序功能是打印100以內(nèi)個位數(shù)為6且能被3整除的所有數(shù)。

#include<stdio.h>

intmain(){inti,j;for(i=0;⑴;i++)

{j=i*10+6;if(⑵)continue;

printf("%d,",j);}return0;}三、程序填空題2.下面程序的功能是求1至1000之間滿足“用3除余2;用5除余3;用7除余2”的數(shù),且一行只打印五個數(shù)。#include"stdio.h"intmain(){inti=1,j=0;do{if(⑴){printf("%4d",i);j=j+1;if(⑵)printf("\n");}i=i+1;}while(i<1000);return0;}3.下面程序的功能是計算正整數(shù)234的各位數(shù)字之和。

#include<stdio.h>

intmain(){int

n,sum=0;n=234;

while(n){sum+=n%10;n=(1);}

printf(“sum=%d\n”,sum);return0;}4.下面程序的功能是計算xy

。

#include<stdio.h>

intmain(){inti;doublex,y,z;

printf(“Input

x,y”);

scanf(“%f%f”,&x,&y);z=1;for(i=1;(1);i++)z=z*x;

printf(“z=%f\n”,z);return0;}1.輸入一整數(shù)初始值,輸出該初始值后的20個不能被3整除的自然數(shù)。四、編程題#include"stdio.h"intmain(){int

num,count=0;

printf("請輸入初始數(shù)值num的值:\n");

scanf("%d",&num);

while(count<20)

{if(num%3==0)

{num++;continue;}else

{

printf("%d\t",num); count++; num++;

}

}return0;}2.雞和兔一共有40只,腳共有100只,計算雞兔各有多少只。#include"stdio.h"intmain(){int

chicken,rabbit;

for(chicken=1;chicken<40;chicken++)

{rabbit=40-chicken;

if(chicken*2+rabbit*4==100)

printf("雞=%d\t兔=%d\t\n",chicken,rabbit);

}return0;}3.求1+(1+2)+(1+2+3)+…+(1+2+3+…+n)的值。#include"stdio.h"intmain(){ints=0,sum=0,i,n;

printf("請輸入n的值:\n");

scanf("%d",&n);

for(i=1;i<=n;i++){s=s+i;sum=sum+s;}

printf("sum=%d\n",sum);return0;}4.打印出所有的“水仙花數(shù)”。所謂“水仙花數(shù)”是指一個三位數(shù),其各位數(shù)字立方和等于該數(shù)。例:153=13+53+33#include"stdio.h"intmain(){int

num,x,y,z;

for(num=100;num<1000;num++)

{x=num/100;y=num/10%10; z=num%10;

if(x*x*x+y*y*y+z*z*z==num)

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

}return0;}5.輸入兩個正整數(shù)m和n,用輾轉(zhuǎn)相除法求m和n的最大公約數(shù),然后再求它們的最小公倍數(shù)。#include"stdio.h"intmain(){int

m,n,r,temp;

printf("請輸入m和n的值:\n");

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

if(m<n)

{temp=m;m=n;n=temp;

}r=m%n;

while(r!=0)

{m=n;n=r;r=m%n;}

printf("最大公約數(shù)是%d\n",n);return0;}6.求100~200之間的素數(shù),把它們按每行5個數(shù)全部顯示出來,并給出素數(shù)的個數(shù)。#include<stdio.h>#include<math.h>intmain(){int

m,k,i,n=0;

for(m=101;m<=200;m=m+2)

{k=(int)sqrt(m);

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

if(m%i==0)break;

if(i>=k+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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論