chap5循環(huán)程序設(shè)計(jì)課件_第1頁
chap5循環(huán)程序設(shè)計(jì)課件_第2頁
chap5循環(huán)程序設(shè)計(jì)課件_第3頁
chap5循環(huán)程序設(shè)計(jì)課件_第4頁
chap5循環(huán)程序設(shè)計(jì)課件_第5頁
已閱讀5頁,還剩167頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

C語言程序設(shè)計(jì)張紅英2009年第5章循環(huán)結(jié)構(gòu)程序設(shè)計(jì)C語言程序設(shè)計(jì)第5章循環(huán)結(jié)構(gòu)程序設(shè)計(jì)循環(huán)結(jié)構(gòu)程序設(shè)計(jì)while語句(當(dāng)型循環(huán))do—while語句(直到型循環(huán))for語句(當(dāng)型循環(huán))if-goto語句循環(huán)的嵌套break與continue語句循環(huán)結(jié)構(gòu)中的跳轉(zhuǎn)語句循環(huán)結(jié)構(gòu)程序設(shè)計(jì)while語句(當(dāng)型循環(huán))循環(huán)結(jié)構(gòu)中的跳轉(zhuǎn)內(nèi)容回顧選擇結(jié)構(gòu)程序設(shè)計(jì)的應(yīng)用場合:針對(duì)不同的條件做出不同的處理。expABTFkA1A2AiAnk2k1knki......(1)二路分支—if語句(2)多路分支—switch語句內(nèi)容回顧選擇結(jié)構(gòu)程序設(shè)計(jì)的應(yīng)用場合:針對(duì)不同的條件做出不同的循環(huán)結(jié)構(gòu)程序設(shè)計(jì)

循環(huán)結(jié)構(gòu)程序設(shè)計(jì)的應(yīng)用場合:當(dāng)某個(gè)條件滿足時(shí),需要多次反復(fù)進(jìn)行同樣工作。例如:1、求實(shí)數(shù)x的10次方2、求數(shù)列1,2,…,i,…的前n項(xiàng)和3、判斷一個(gè)整數(shù)是否是素?cái)?shù)………………循環(huán)結(jié)構(gòu)程序設(shè)計(jì) 循環(huán)結(jié)構(gòu)程序設(shè)計(jì)的應(yīng)用場合:當(dāng)某個(gè)條件滿足循環(huán)結(jié)構(gòu)的兩種基本類型當(dāng)型循環(huán)while,for直到型循環(huán)do{...}whileexpAFTexpAFT循環(huán)結(jié)構(gòu)的兩種基本類型當(dāng)型循環(huán)直到型循環(huán)expAFTex9.6.1while語句(當(dāng)型循環(huán))特點(diǎn):先判斷,再執(zhí)行while語句的語法格式:注意:

循環(huán)體可能一次也不執(zhí)行。

循環(huán)體可為任意類型語句。

退出while循環(huán)的情況:exp不成立循環(huán)體內(nèi)遇break,return,exit等。exp循環(huán)體FTwhile(exp){循環(huán)體;}9.6.1while語句(當(dāng)型循環(huán))特點(diǎn):先判斷,再執(zhí)行例:求實(shí)數(shù)x的10次方1)問題分析:

輸入xpow=1;i=1;i<=10pow*=x;i++;YN輸出pow結(jié)束開始x10=1*x*…*x

10個(gè)x循環(huán)語句:循環(huán)變量初始化:循環(huán)控制條件:循環(huán)體:循環(huán)變量的修改:i=1;i<=10;pow*=x;i++;

例:求實(shí)數(shù)x的10次方1)問題分析:輸入xpow=例:求實(shí)數(shù)x的10次方輸入xpow=1;i=1;i<=10pow*=x;i++;Y輸出powN結(jié)束開始#include<stdio.h>main(){inti;doublex,pow;printf("Pleaseinputx:");scanf("%lf",&x);pow=1.0;i=1;while(i<=10){

pow*=x;

i++;}printf("Pow=%lf\n",pow);}循環(huán)語句四要素:循環(huán)(控制)變量初始化循環(huán)控制條件循環(huán)體(關(guān)鍵是找規(guī)律)循環(huán)變量的修改例:求實(shí)數(shù)x的10次方輸入xpow=1;i=1;i<=10例:求實(shí)數(shù)x的n(從鍵盤輸入)次方1)問題分析:

輸入x,npow=1;i=1;i<=npow*=x;i++;YN輸出pow結(jié)束開始xn=1*x*…*x

n個(gè)x循環(huán)語句四要素:循環(huán)變量初始化:循環(huán)控制條件:循環(huán)體:循環(huán)變量的修改:i=1;i<=n;pow*=x;i++;

例:求實(shí)數(shù)x的n(從鍵盤輸入)次方1)問題分析:例:求實(shí)數(shù)x的n(從鍵盤輸入)次方輸入x,npow=1;i=1;i<=npow*=x;i++;Y輸出powN結(jié)束開始#include<stdio.h>main(){inti,n;doublex,pow;printf(“Inputxandn:");scanf("%lf%d",&x,&n);pow=1.0;i=1;while(i<=n){

pow*=x;

i++;}printf("Pow=%lf\n",pow);}思考:如果n<0,程序該如何編寫?例:求實(shí)數(shù)x的n(從鍵盤輸入)次方輸入x,npow=1;例題:求x的n(從鍵盤輸入)次方。#include<stdio.h>main(){inti,n,absn;doublex,pow=1.0;printf(“Pleaseinputthexandn:”);scanf(“%lf%d”,&x,&n);absn=n>0?n:-n;i=1;while(i<=absn){pow*=x;

i++;}

if(n<0&&x!=0)pow=1.0/pow;printf(“pow(%f,%d)=%f”,x,n,pow);}Yn<0&&x!=0Npow=1/pow輸出powi++pow*=xwhile(i<=|n|)pow=1,i=1輸入x,n例題:求x的n(從鍵盤輸入)次方。#include<std例:求整數(shù)1~100之和1)問題分析:

2)程序步驟:定義變量sum存儲(chǔ)累加結(jié)果,并初始化為0定義變量i用以存儲(chǔ)數(shù)列通項(xiàng),初值為1給sum不斷的加i,同時(shí)i也加1生成下一個(gè)項(xiàng)sum=1+2+…+100實(shí)質(zhì)上為等差為1的數(shù)列前100項(xiàng)和例:求整數(shù)1~100之和1)問題分析:su加數(shù)的范圍:i=1~i=100求和過程:sum=sum+i;i++;此時(shí),sum=1;i=2;sum=sum+i;i++;此時(shí),sum=1+2;i=3;sum=sum+i;i++;此時(shí),sum=1+2+3;i=4;

sum=sum+i;i++;此時(shí),sum=1+2+…+99;i=100;sum=sum+i;i++;

此時(shí),sum=1+2+…+99+100;i=101;i=1;i<=100sum+=i;i++;YN輸出sum結(jié)束開始sum=0;例:求整數(shù)1~100之和加數(shù)的范圍:i=1~i=100i=1;i<=100su例:求整數(shù)1~100之和i=1;i<=100sum+=i;i++;YN輸出sum結(jié)束開始sum=0;#include<stdio.h>main(){inti,sum;sum=0;i=1;while(i<=100){

sum+=i;

i++;}printf("Sum=%d\n",sum);}例:求整數(shù)1~100之和i=1;i<=100sum+=i例:求整數(shù)1~n之和1)問題分析:

sum=1+2+…+n實(shí)質(zhì)上為等差為1的數(shù)列前n項(xiàng)和輸入nsum=0;i=1;i<=nsum+=i;i++;YN輸出sum結(jié)束開始循環(huán)語句四要素:循環(huán)變量初始化:循環(huán)控制條件:循環(huán)體:循環(huán)變量的修改:i=1;i<=n;sum+=i;i++;

例:求整數(shù)1~n之和1)問題分析:sum=例:求整數(shù)1~n之和輸入nsum=0;i=1;i<=nsum+=i;i++;YN輸出sum結(jié)束開始#include<stdio.h>main(){inti,sum,n;printf("Pleaseinputn:");scanf("%d",&n);sum=0;i=1;while(i<=n){

sum+=i;

i++;}printf("Sum=%d\n",sum);}例:求整數(shù)1~n之和輸入nsum=0;i=1;i<=n例:求整數(shù)1~n

之間偶數(shù)之和問題分析:sum=2+4+……實(shí)質(zhì)上為等差為2的數(shù)列輸入nsum=0;i=2;i<=nsum+=i;i+=2;YN輸出sum結(jié)束開始循環(huán)語句四要素:循環(huán)變量初始化:循環(huán)控制條件:循環(huán)體:循環(huán)變量的修改:i=2;i<=nsum+=i;i+=2;

例:求整數(shù)1~n之間偶數(shù)之和問題分析:sum=2+4+……例:求整數(shù)1~n之間偶數(shù)之和輸入nsum=0;i=2;i<=nsum+=i;i+=2;YN輸出sum結(jié)束開始#include<stdio.h>main(){inti,sum,n;printf("Pleaseinputn:");scanf("%d",&n);sum=0;i=2;while(i<=n){

sum+=i;

i+=2;}printf("Sum=%d\n",sum);}例:求整數(shù)1~n之間偶數(shù)之和輸入nsum=0;i=2;i例:求整數(shù)sum=1-2+3-4……n#include<stdio.h>main(){inti,sum,n,s=1;printf("Pleaseinputn:");scanf("%d",&n);sum=0;

i=1;while(i<=n){

sum+=s*i;

s=-s;

i++;}printf("Sum=%d\n",sum);}例:求整數(shù)sum=1-2+3-4……n#include練習(xí):求n!1)問題分析:

1*2*…*n實(shí)質(zhì)上為等差為1的數(shù)列前n項(xiàng)乘積輸入nsum=0;i=1;i<=nsum+=i;i++;YN輸出sum結(jié)束開始fact=1;fact*fact#include<stdio.h>main(){inti,fact,n;printf("Pleaseinputn:");scanf("%d",&n);fact=1;i=1;while(i<=n){

fact*=i;

i++;}printf("Sum=%lf\n",fact);}練習(xí):求n!1)問題分析:1*2*…*n輸入5.1while語句——說明while語句之前必須預(yù)先設(shè)置判斷的初始條件

防止“死循環(huán)”的發(fā)生在循環(huán)體中必須有使循環(huán)趨向結(jié)束的操作,即在循環(huán)體中要有能讓邏輯表達(dá)式值改變的語句

正確使用復(fù)合語句

當(dāng)循環(huán)體中含多條語句時(shí),需用{}將這些語句括起來,構(gòu)成一個(gè)復(fù)合語句while()后面不能加分號(hào);如果后面緊跟分號(hào),編譯系統(tǒng)認(rèn)為循環(huán)體是一條空語句,造成“死循環(huán)”。

在循環(huán)體中,語句的先后位置必須符合邏輯否則會(huì)影響運(yùn)算結(jié)果。思考程序段的輸出?sum=0;i=1;while(i<=100){i++;sum=sum+i;}運(yùn)行后,輸出:5150原因是什么?

5.1while語句——說明while語句之前必須練習(xí)用公式求π的近似值,直到最后一項(xiàng)絕對(duì)值小于10-6為止。#include<stdio.h>#include<math.h>main(){floatpi,t,s,n;pi=0;

t=n=s=1;while(fabs(t)>=1E-6){pi+=t;

s=-s;n+=2;t=s/n;}pi*=4;printf(“pi=%f”,pi);}pi=0t=1;s=1n=1while(fabs(t)>=1e-6)pi=pi+ts=-sn=n+2t=s/npi=pi*4輸出pi練習(xí)用公式求π的近似值,直到最后一項(xiàng)絕對(duì)值#includ練習(xí)從鍵盤上輸入一批正整數(shù),求它們的累加和及平均值。#include<stdio.h>main(){intsum=0,count=0,x;floataver;

printf("pleaseinputthedata:");

scanf("%d",&x);while(x>0){sum+=x;count++;

printf("pleaseinputthedata:");

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

aver=1.0*sum/count;

printf("sum=%d,average=%.2f",sum,aver);}sum=0,count=0輸入一個(gè)數(shù)xwhile(x>0)sum+=xcount++輸入一個(gè)數(shù)xaver=sum/count輸出sum,aver練習(xí)從鍵盤上輸入一批正整數(shù),求它們的累加#include**************************************************練習(xí)請?jiān)谄聊簧陷敵鲆韵拢ㄐ袛?shù)m從鍵盤輸入)圖形。#include<stdio.h>main(){intm;printf("pleaseinputm:");scanf("%d",&m);

i=1;while(i<=m){

printf("**********");printf("\n");

i++;}}**********練習(xí)請?jiān)谄聊簧陷敵鲆韵拢ㄐ袛?shù)m從鍵盤**************************************************練習(xí)請?jiān)谄聊簧陷敵鲆韵拢ㄐ袛?shù)m,列數(shù)n均從鍵盤輸入)圖形。#include<stdio.h>main(){ inti,j,m,n; printf("pleaseinputmandn:"); scanf("%d%d",&m,&n); i=1; while(i<=m) { j=1; while(j<=n) { printf("*");

j++; } printf("\n");

i++; }**********練習(xí)請?jiān)谄聊簧陷敵鲆韵拢ㄐ袛?shù)m,列數(shù)****************練習(xí)請?jiān)谄聊簧陷敵鲆韵拢ㄐ袛?shù)m從鍵盤輸入)圖形。#include<stdio.h>main(){inti,j,m;printf("\npleaseinputlines:");scanf("%d",&m);i=1;while(i<=m){j=1;while(j<=m-i){printf("");j++;}j=1;while(j<=2*i-1){printf("*");j++;}printf("\n");i++;}}輸入mi=1while(i<=m)j=1while(j<=m-i)輸出“一個(gè)空格”j++j=1while(j<=2i-1)輸出“一個(gè)*”j++輸出換行i++思考:若屏幕上輸出以下(行數(shù)m從鍵盤輸入)圖形******************************************練習(xí)請?jiān)谄聊簧陷敵鲆韵拢ㄐ袛?shù)m從鍵盤輸入)#incl#include<stdio.h>main(){inti=1,j=0;while(i<=10){j=i*i;printf("%d*%d=%d\n",i,i,j);i++;}}例顯示1-10的平方。j=0i=1while(i<=10)j=i*i輸出ji++運(yùn)行結(jié)果:1*1=12*2=43*3=94*4=165*5=256*6=367*7=498*8=649*9=8110*10=100#include<stdio.h>例顯示1-10的平方例:輸出九九表,輸出格式如下:1*1=11*2=22*2=41*3=32*3=63*3=91*4=42*4=83*4=124*4=161*5=52*5=103*5=154*5=205*5=251*6=62*6=123*6=184*6=245*6=306*6=361*7=72*7=143*7=214*7=285*7=356*7=427*7=491*8=82*8=163*8=244*8=325*8=406*8=487*8=568*8=641*9=92*9=183*9=274*9=365*9=456*9=547*9=638*9=729*9=81例:輸出九九表,輸出格式如下:1*1=11*2=22*2=4例:輸出九九表,輸出格式如下:#include<stdio.h>main(){ inti,j;

i=1; while(i<=9) {

j=1; while(j<=i) { printf("%d*%d=%d\t",j,i,i*j);

j++; } printf("\n");

i++; }}例:輸出九九表,輸出格式如下:#include<stdio循環(huán)結(jié)構(gòu)的特點(diǎn)完整的while循環(huán)包括:1)循環(huán)變量初始化;2)循環(huán)控制條件;3)循環(huán)變量的修改;sum=0i=1while(i<=100)sum=sum+ii++輸出sum循環(huán)結(jié)構(gòu)的特點(diǎn)完整的while循環(huán)包括:sum=0i=1wh5.2do-while語句(直到型循環(huán))特點(diǎn):先執(zhí)行,再判斷while語句的語法格式:注意:

循環(huán)體至少要執(zhí)行一次。

循環(huán)體可為任意類型語句。

退出while循環(huán)的情況:exp不成立循環(huán)體內(nèi)遇break,return,exit等。do{循環(huán)體;}while(exp);expAFT5.2do-while語句(直到型循環(huán))特點(diǎn):先執(zhí)行,再#include<stdio.h>main(){inti,sum=0;i=1;while(i<=100){sum=sum+i;i++;}printf("%d",sum);}例用do-while循環(huán)求sum=0i=1sum=sum+ii=i+1while(i<=100)輸出sum值#include<stdio.h>main(){inti,sum=0;i=1;

do

{sum=sum+i;i++;}while(i<=100);printf("%d",sum);}#include<stdio.h>例用do-while循說明:當(dāng)兩者具有相同的循環(huán)體時(shí)當(dāng)while

后面的表達(dá)式第一次的值為“真”

時(shí),兩種循環(huán)得到的結(jié)果相同。

否則,二者結(jié)果不相同。main(){intsum=0,i;scanf("%d",&i);do{sum=sum+i;i++;}while(i<=10);

printf("sum=%d",sum);

}main(){intsum=0,i;scanf("%d",&i);

while(i<=10){sum=sum+i;i++;}

printf("sum=%d",sum);}當(dāng)i=1時(shí):sum=55當(dāng)i=11時(shí):sum=0當(dāng)i=1時(shí):sum=55當(dāng)i=11時(shí):sum=11說明:當(dāng)兩者具有相同的循環(huán)體時(shí)當(dāng)while后面的表達(dá)式練習(xí)用公式求π的近似值,直到最后一項(xiàng)絕對(duì)值小于10-6為止。#include<stdio.h>#include<math.h>main(){floatpi,t,s,n;pi=0;t=n=s=1;do{pi+=t;s=-s;n+=2;t=s/n;}while(fabs(t)>=1E-6);pi*=4;printf(“pi=%f”,pi);}pi=0n=1;s=1t=1pi=pi+ts=-sn=n+2t=s/nwhile(fabs(t)>=1e-6)pi=pi*4輸出pi練習(xí)用公式求π的近似值,直到最后一項(xiàng)絕對(duì)值#includ練習(xí)從鍵盤上輸入一批正整數(shù),求它們的累加和及平均值。#include<stdio.h>main(){intsum=0,count=0,x;floataver;do

{printf("pleaseinputthedata:");scanf("%d",&x);sum+=x;count++;}while(x>0);

sum-=x;count--;aver=1.0*sum/count;printf("sum=%d,average=%.2f",sum,aver);}sum=0,count=0輸入一個(gè)數(shù)xsum+=xcount++while(x>0)sum=sum-xcount--aver=sum/count輸出sum,aver練習(xí)從鍵盤上輸入一批正整數(shù),求它們的累加#include5.3for語句(簡潔的形式)一般形式:for(表達(dá)式1;表達(dá)式2;表達(dá)式3)

循環(huán)體語句說明:表達(dá)式1:循環(huán)變量初始化表達(dá)式2:循環(huán)控制條件。省略則表示死循環(huán)表達(dá)式3:循環(huán)變量修改。語句:需要重復(fù)執(zhí)行的部分,稱為循環(huán)體5.3for語句(簡潔的形式)一般形式:for(表例用for循環(huán)求#include<stdio.h>main(){inti,sum=0;i=1;while(i<=100){sum=sum+i;i++;}printf("%d",sum);}#include<stdio.h>main(){inti,sum;sum=0;

for(i=1;i<=100;i++)sum=sum+i;printf("%d",sum);}sum=0for(i=1;i<=100;i++)sum=sum+i輸出sum可部分或全部省略,但“;”不可省略例用for循環(huán)求#include<stdio.h>#in說明:for語句中表達(dá)式1、表達(dá)式2、表達(dá)式3類型任意,都可省略,但分號(hào)不可省。

for(i=1;i<=100;i++)sum=sum+i;

for(i=1;i<=100;){

sum=sum+i;

i++;}i=1;for(;i<=100;i++)sum=sum+i;

for(i=1;;i++){

sum=sum+i;

if(i>100)break;}i=1;for(;;){

sum=sum+i;

if(i>100)break;i++;}說明:for語句中表達(dá)式1、表達(dá)式2、表達(dá)式3for(i=1說明:

for中3個(gè)表達(dá)式類型任意可省略,但兩個(gè)“;”都不可??;無限循環(huán):for(;;)for語句可以轉(zhuǎn)換成while結(jié)構(gòu)表達(dá)式2一般是關(guān)系表達(dá)式或邏輯表達(dá)式,但也可以是數(shù)值表達(dá)式或字符表達(dá)式,只要其值為真,就執(zhí)行循環(huán)體注意:在省略某個(gè)表達(dá)式時(shí),應(yīng)在適當(dāng)位置進(jìn)行循環(huán)控制的必要操作,以保證循環(huán)的正確執(zhí)行說明:for中3個(gè)表達(dá)式類型任意可省略,但兩個(gè)“;”注#include<stdio.h>main(){inti,n;longsum;printf(“pleaseinputthen:”);scanf(“%d”,&n);sum=1;for(i=1;i<=n;i++)sum*=i;printf(“\n%d!=%ld”,n,sum);}例求n!。輸入nsum=1for(i=1;i<=n;i++)sum*=i輸出sum思考:如何求s=1!+2!+…+n!?#include<stdio.h>例求n!。輸入nsum練習(xí)從鍵盤上輸入一批正整數(shù),求它們的累加和及平均值。#include<stdio.h>main(){intsum=0,count=0,x;floataver;printf("pleaseinputthedata:");scanf("%d",&x);for(;x>0;){sum+=x;count++;printf("pleaseinputthedata:");scanf("%d",&x);}aver=1.0*sum/count;printf("sum=%d,average=%.2f",sum,aver);}sum=0,count=0輸入一個(gè)數(shù)xfor(;x>0;)sum+=xcount++輸入一個(gè)數(shù)xaver=sum/count輸出sum,aver練習(xí)從鍵盤上輸入一批正整數(shù),求它們的累加#include****************練習(xí)請?jiān)谄聊簧陷敵鲆韵拢ㄐ袛?shù)n從鍵盤輸入)圖形。#include<stdio.h>main(){inti,j,n;printf("\npleaseinputlines:");scanf("%d",&n);for(i=1;i<=n;i++n){for(j=1;j<=n-i;j++) printf("");for(j=1;j<=2*i-1;j++) printf("*");printf("\n");}}輸入nfor(i=1;i<=n;i++)for(j=1;j<=n-i;j++)輸出“一個(gè)空格”for(j=1;j<=2i-1;j++)輸出“一個(gè)*”輸出換行*練習(xí)請?jiān)谄聊簧陷敵鲆韵拢ㄐ袛?shù)n從鍵盤輸入)#incl練習(xí)判斷m是否為素?cái)?shù)。素?cái)?shù)一個(gè)自然數(shù),若除了1和它本身外不能被其他整數(shù)整除如果這個(gè)數(shù)m能被2,3,…,m-1中任何一個(gè)數(shù)整除,說明它不是素?cái)?shù)#include<stdio.h>main(){intm,i,flag;printf("\ninputintegerm:");scanf("%d",&m);flag=1;

for(i=2;i<=m-1;i++){ if(m%i==0) {flag=0;i=m;}} if(flag==1)printf("%dprime\n",m);elseprintf("%disnotprime\n",m);}輸出不是素?cái)?shù)flag==1i=mflag=0輸出是素?cái)?shù)m%i==0for(i=2;i<=m-1;i++)flag=1輸入一個(gè)數(shù)mNYNYi=m的作用:forceiequalstom,exitloop練習(xí)判斷m是否為素?cái)?shù)。素?cái)?shù)一個(gè)自然數(shù),若除了1和它本身外練習(xí)求100到150之間的所有素?cái)?shù)#include<stdio.h>main(){intm;inti,flag;

for(m=101;m<=150;m++)

{flag=1;for(i=2;i<=m-1;i++){if(m%i==0){flag=0;i=m;}}if(flag==1)printf("%5d",m);

}

}輸出mflag==1for(i=2;i<=m-1;i++)flag=1for(m=101;m<=150;m++)i=mflag=0m%i==0NYNY練習(xí)求100到150之間的所有素?cái)?shù)#include<s練習(xí)求100到150之間的所有素?cái)?shù),并設(shè)定每行輸出5個(gè)素?cái)?shù)。#include<stdio.h>main(){intm;inti,flag,count=0;for(m=101;m<=150;m++){flag=1;for(i=2;i<=m-1;i++){if(m%i==0){flag=0;i=m;}}if(flag==1){printf("%5d",m);

count++;if(count%5==0)printf("\n");}}}輸出換行count%5==0count++輸出mflag==1for(i=2;i<=m-1;i++)flag=1for(m=101;m<=150;m++)i=mflag=0m%i==0count=0NYNYNY練習(xí)求100到150之間的所有素?cái)?shù),并設(shè)定每行#incl1、三種循環(huán)語句在功能上是等效的,即任何一種循環(huán)均可以由其它循環(huán)來替代。2、while與for作為當(dāng)型循環(huán),特點(diǎn)是先判斷、再執(zhí)行,而for循環(huán)則是while循環(huán)的更加簡潔的表示方式。

for循環(huán)適用于循環(huán)變量按等差數(shù)列規(guī)律變化的情況。3、do{…}while作為直到型循環(huán),特點(diǎn)是先執(zhí)行、再判斷,其最少要執(zhí)行一次。三種循環(huán)語句的關(guān)系1、三種循環(huán)語句在功能上是等效的,即任何一種循環(huán)均可以由其它三種循環(huán)語句的應(yīng)用while語句多用于循環(huán)次數(shù)不定的情況do-while語句多用于至少要運(yùn)行一次的情況for語句多用于要賦初值或循環(huán)次數(shù)固定的情況比較以下兩條語句:for(i=1,sum=0;sum+=i,i<=100;i++);for(i=1,sum=0;i<=100,sum+=i;i++);/*實(shí)現(xiàn)1+2+3+…+101*//*死循環(huán)*/三種循環(huán)語句的應(yīng)用while語句多用于循環(huán)次數(shù)不定的情況比較5.4if-goto語句一般形式:goto語句標(biāo)號(hào);…標(biāo)號(hào):語句;有興趣的同學(xué)自學(xué)不提倡使用goto語句注意:goto語句能實(shí)現(xiàn)程序無條件轉(zhuǎn)移,為編程提供了便利。但是無限制地使用,會(huì)破壞程序的結(jié)構(gòu)化程度。因此應(yīng)限制使用。5.4if-goto語句一般形式:got5.4if-goto語句功能:無條件轉(zhuǎn)向語句強(qiáng)制中斷執(zhí)行本語句后面的語句,跳轉(zhuǎn)到語句標(biāo)號(hào)標(biāo)識(shí)的語句繼續(xù)執(zhí)行程序說明:不能用整數(shù)作標(biāo)號(hào)只能加在可執(zhí)行語句前面與if語句一起構(gòu)成循環(huán)結(jié)構(gòu)限制使用goto語句#include<stdio.h>main(){inti=1,sum=0;loop:if(i<=100){sum=sum+i;i++;gotoloop;}printf(”%d”,sum);}例求1到100的和。5.4if-goto語句功能:無條件轉(zhuǎn)向語句#incl5.5循環(huán)嵌套

循環(huán)的嵌套,又稱多層循環(huán),應(yīng)用于多個(gè)變量同時(shí)變化的情況。while(){……while(){……}…...}do{……do{……}while();…...}while();for(;;){……do{……}while();……while(){……}…...}while(){……do{……}while();…….}說明:1.外層循環(huán)可包含兩個(gè)以上內(nèi)循環(huán)

2.嵌套的循環(huán)的執(zhí)行流程5.5循環(huán)嵌套循環(huán)的嵌套,又稱多層5.5循環(huán)嵌套注意:while、do-while、for循環(huán)語句可以并列,也可以相互嵌套,但要層次清楚,不能出現(xiàn)交叉多重循環(huán)程序執(zhí)行時(shí),外層循環(huán)每執(zhí)行一次,內(nèi)層循環(huán)都需要循環(huán)執(zhí)行多次。外循環(huán)執(zhí)行了10次內(nèi)循環(huán)執(zhí)行6次循環(huán)正常結(jié)束時(shí),內(nèi)循環(huán)執(zhí)行了10×6=60次for(a=1;a<=10;a++){for(b=0;b<=5;b++)……}5.5循環(huán)嵌套注意:外循環(huán)執(zhí)行了10次for(a=循環(huán)嵌套在使用中的重點(diǎn)內(nèi)容能夠正確判斷內(nèi)層循環(huán)體的范圍能夠正確判斷內(nèi)層循環(huán)體的執(zhí)行次數(shù)注意內(nèi)層循環(huán)的初值設(shè)定能正確處理內(nèi)層循環(huán)與外層循環(huán)變量的關(guān)系5.5循環(huán)嵌套循環(huán)嵌套在使用中的重點(diǎn)內(nèi)容5.5循環(huán)嵌套閱讀下述程序段,判斷各層循環(huán)體的范圍;判斷各層循環(huán)體執(zhí)行的次數(shù)。5.5循環(huán)嵌套n=6;m=5;for(i=0;i<n;i++){for(j=0;j<m;j++)printf(“%d*%d=%2d”,i,j,i*j);}/*內(nèi)循環(huán)體的運(yùn)行次數(shù):

n*m=6*5=30次*//*外循環(huán)體的運(yùn)行次數(shù):6次*/閱讀下述程序段,判斷各層循環(huán)體的范圍;5.5循環(huán)嵌套5.5循環(huán)嵌套n=6;m=5;for(j=0,i=1;i<n;i++){while(j<i){printf(“While(j<i):j=%d\n”,j);j++;}}/*內(nèi)循環(huán)體的運(yùn)行次數(shù):n-1次*//*外循環(huán)體的運(yùn)行次數(shù):n-1次*/n=6;m=5;for(j=1,i=1;i<n;i++){while(j<i){printf(“While(j<i):j=%d\n”,j);j++;}}/*當(dāng)j=1時(shí)不執(zhí)行while內(nèi)循環(huán)體的運(yùn)行次數(shù):n-2次*//*外循環(huán)體的運(yùn)行次數(shù):n-1次*/5.5循環(huán)嵌套n=6;m=5;/*內(nèi)循環(huán)體的運(yùn)一般格式

break;功能(只能出現(xiàn)在兩種場合)用于switch語句中,其作用是跳出switch語句;用于循環(huán)語句,作用是提前結(jié)束整個(gè)循環(huán)的執(zhí)行5.6break和continue語句……break;……expNY一般格式5.6break和continue語句……exbreak語句只能出現(xiàn)在switch語句或循環(huán)語句的循環(huán)體中在循環(huán)語句、switch語句嵌套使用的情況下,break語句只能跳出(或終止)它所在的結(jié)構(gòu),而不能同時(shí)跳出多層結(jié)構(gòu)。結(jié)果:a=2,b=1結(jié)果:a=8,b=1break語句說明main(){intx=1,y=0,a=0,b=0,i=0;switch(x){case1:

switch(y){case0:a++;break;case1:b++;break;}case2:a++;b++;break;case3:a++;b++;}printf(“\na=%d,b=%d”,a,b);}for(i=0;i<=10;i++){a++;

if(i>5)break;}break語句只能出現(xiàn)在switch語句或循環(huán)語句的循環(huán)體中練習(xí)判斷m是否為素?cái)?shù)。#include<stdio.h>main(){intm,i,flag;printf("\ninputintegerm:");scanf("%d",&m);flag=1;for(i=2;i<=m-1;i++){ if(m%i==0) {flag=0;i=m;}} if(flag==1)printf("%dprime\n",m);elseprintf("%disnotprime\n",m);}輸出不是素?cái)?shù)flag==1i=mflag=0輸出是素?cái)?shù)m%i==0for(i=2;i<=m-1;i++)flag=1輸入一個(gè)數(shù)mNYNYi=m的作用:forceiequalstom,exitloopbreakbreak;練習(xí)判斷m是否為素?cái)?shù)。#include<stdio.h一般格式

continue;功能在循環(huán)語句中強(qiáng)行提前結(jié)束本次循環(huán),而不是終止循環(huán)。5.6break和continue語句……continue;……expNY一般格式5.6break和continue語句……ex只能用于循環(huán)語句的循環(huán)體中作用是使執(zhí)行流程跳過循環(huán)體中continue后面的語句,即提前結(jié)束本次循環(huán)體語句在while和do-while語句中,執(zhí)行continue語句就立即去測試是否繼續(xù)循環(huán)的條件。在for語句中,執(zhí)行continue語句立即計(jì)算表達(dá)式3,然后計(jì)算表達(dá)式2測試?yán)^續(xù)循環(huán)的條件一般地,continue語句都會(huì)位于一個(gè)if語句中,即僅對(duì)滿足某一條件的該次循環(huán)起作用。continue語句說明只能用于循環(huán)語句的循環(huán)體中continue語句說明例輸出100~200之間的偶數(shù)。#include<stdio.h>main(){inti;for(i=100;i<=200;i++){if(i%2!=0)

continue;printf(“%d”,i);}}輸出偶數(shù)continuei%2!=0for(i=100;i<=200;i++)NYbreak;例輸出100~200之間的偶數(shù)。#include<st例求輸入的十個(gè)整數(shù)中奇數(shù)的個(gè)數(shù)及其平均值。#include<stdio.h>main(){inti,count=0,a;floatsum=0;for(i=0;i<10;i++){scanf("%d",&a);

if(a%2==0)continue; count++; sum+=a;}

printf(“Thereare%doddnumber\n",count);printf(“averagevalue:%6.2f\n",sum/count);}輸出個(gè)數(shù)countcount=0輸出平均值sum/countsum+=acount++continuea%2==0輸入整數(shù)afor(i=0;i<10;i++)sum=0NY例求輸入的十個(gè)整數(shù)中奇數(shù)的個(gè)數(shù)及其平均值。#includecoutinue和break語句的比較while(表達(dá)式1){

if(表達(dá)式2)break;

}while(表達(dá)式1){

if(表達(dá)式2)continue;

}……break;……expNY……continue;……expNYcoutinue和break語句的比較while(表達(dá)式1coutinue和break語句的比較#include<stdio.h>main(){inti,sum=0;for(i=1;i<=10;i++){ if(i%5==0)

continue; sum+=i;}printf("thesumis%d\n",sum);}break;coutinue運(yùn)行結(jié)果:thesumis40break運(yùn)行結(jié)果:thesumis10coutinue和break語句的比較#include<s5.7循環(huán)結(jié)構(gòu)程序舉例循環(huán)結(jié)構(gòu)的選擇如果循環(huán)次數(shù)確定,選擇用for語句實(shí)現(xiàn);如果循環(huán)次數(shù)不確定,選擇用while、do-while語句實(shí)現(xiàn)如果要保證循環(huán)體至少執(zhí)行一次,用do-while語句循環(huán)條件的設(shè)計(jì)從循環(huán)的執(zhí)行與退出兩方面考慮若條件隱含需人為構(gòu)造5.7循環(huán)結(jié)構(gòu)程序舉例5.7算法設(shè)計(jì)初步累加、累乘算法:例如1~100的和,N的階乘等算法思想:將前面的計(jì)算結(jié)果累積起來。遞推算法:例如Fibonacci數(shù)列算法思想:利用自身的推導(dǎo)關(guān)系求解問題的方法。利用前面已知數(shù)據(jù)推算出后面未知數(shù)據(jù)。枚舉算法(窮舉法):例如“判斷m是否是素?cái)?shù)”算法思想:列出所有可以情況,逐一檢查每個(gè)情況是否滿足指定的條件。迭代算法:例如“牛頓跌代法”,求解方程近似根算法思想:不斷根據(jù)當(dāng)前變量的值計(jì)算出新值,并用新值替換變量的舊值,每替換一次則向最終結(jié)果接近一次,直到最后滿足要求為止5.7算法設(shè)計(jì)初步累加、累乘算法:例如1~100的和,N【算法思想】:將前面的計(jì)算結(jié)果累積起來。例求n!。一、累加、累乘算法#include<stdio.h>main(){inti,n;longfact;printf(“pleaseinputthen:”);scanf(“%d”,&n);fact=1;for(i=1;i<=n;i++)fact*=i;printf(“\n%d!=%ld”,n,fact);}輸入nfact=1i=1for(i=1;i<=n;i++)fact*=i輸出fact【算法思想】:將前面的計(jì)算結(jié)果累積起來。例求n!。一、累加#include<stdio.h>main(){inti,j,n;longfact,sum=0;printf(“Pleaseinputanaturalnumber:”);scanf(“%d”,&n);for(i=1;i<=n;i++){for(j=1,fact=1;j<=i;j++)fact*=i;sum+=fact;}

printf(“\nThesumof1!~%d!is%ld”,n,sum);}練習(xí):計(jì)算1!+2!+…+n!輸入nsum=0;for(i=1;i<=n;i++)fact=1for(j=1;j<=i;j++)fact*=isum+=fact輸出sum#include<stdio.h>練習(xí):計(jì)算1!+2!+…#include<stdio.h>main(){inti,n;longfact,sum;printf(“Pleaseinputanaturalnumber:”);scanf(“%d”,&n);sum=0;fact=1;for(i=1;i<=n;i++){fact*=i;sum+=fact;}

printf(“\nThesumof1!~%d!is%ld”,n,sum);}練習(xí):計(jì)算1!+2!+…+n!輸入nsum=0fact=1for(i=1;i<=n;i++)fact*=isum+=fact輸出sum#include<stdio.h>練習(xí):計(jì)算1!+2!+…例:兔子繁殖問題(斐波那契數(shù)列問題)

著名意大利數(shù)學(xué)家斐波那契(Fibonacci)1202年提出一個(gè)有趣的問題。某人想知道一年內(nèi)一對(duì)兔子可以生幾對(duì)兔子。他筑了一道圍墻,把一對(duì)大兔關(guān)在其中。已知每對(duì)大兔每個(gè)月可以生一對(duì)小兔,而每對(duì)小兔出生后第三個(gè)月即可成為“大兔”再生小兔。問一對(duì)兔子一年能繁殖幾對(duì)小兔?二、遞推算法例:兔子繁殖問題(斐波那契數(shù)列問題)

著名意大利開始新增對(duì)數(shù)1月2月3月4月5月…▲▲▲▲△△▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲△△△△△△△△△△△△△△△△△△△△…111238+1+1+2=2=3=5月份n兔子數(shù)Fn1F1=12F2=13F3=2=F1+F24F4=3=F2+F35F5=5=F3+F4…nFn=Fn-1+Fn-2Fi=1(i=1)2(i=1)Fi-1+Fi-2初值遞推公式開始新增1月2月3月4月5月…▲▲▲▲△△▲▲▲▲▲▲▲▲▲二、遞推算法【算法思想】:利用自身的推導(dǎo)關(guān)系求解問題的方法。利用已知數(shù)據(jù)推算出后面未知數(shù)據(jù)。例如:Fibonacci(斐波納契)數(shù)列定義如下Fib1=1;(n=1)Fib2=1;(n=2)Fibn=Fibn-1+Fibn-2(n>=3)即:第1項(xiàng)為1,第2項(xiàng)為1,從第3項(xiàng)開始,每項(xiàng)等于前兩項(xiàng)之和,數(shù)列為:1,1,2,3,5,8,13,…..這是一種遞推算法應(yīng)采用循環(huán)實(shí)現(xiàn)二、遞推算法【算法思想】:利用自身的推導(dǎo)關(guān)系求解問題的方法。例:求Fibnacci數(shù)列的前n項(xiàng)#include<stdio.h>main(){ longf,f1,f2,sum=0; inti,n; printf("pleaseinputn:"); scanf("%d",&n);

f1=f2=1; for(i=1;i<=n;i++) { sum+=f1; printf("%10d",f1);

f=f1+f2; f1=f2; f2=f; } printf("\nsumis%ld\n",sum);}例:求Fibnacci數(shù)列的前n項(xiàng)#include<s例:求Fibnacci數(shù)列的前n項(xiàng)#include<stdio.h>main(){inti,n;longfib1,fib2,fib3;printf(“Pleaseinputanaturalnumber:”);scanf(“%d”,&n);fib1=fib2=1;for(i=1;i<=n;i++){printf(“%5d”,fib1);if(i%5==0)printf(“\n”);fib3=fib1+fib2;fib1=fib2;fib2=fib3;}}fib1=fib2=1fib2=fib3fib1=fib2fib3=fib1+fib2輸出fib1for(i=1;i<=n;i++)輸入n例:求Fibnacci數(shù)列的前n項(xiàng)#include<s換硬幣問題問題:編寫程序?qū)崿F(xiàn)用一元人民幣換成一分、兩分、五分的硬幣共50枚x+y+z=50x+2y+5z=100分析:假設(shè)一分、兩分、五分的硬幣各為x,y,z枚。則有:練習(xí):換硬幣問題問題:編寫程序?qū)崿F(xiàn)用一元人民幣換成x+y+方法1.三重循環(huán)#include<stdio.h>main(){inti,j,k;for(i=0;i<=50;i++) for(j=0;j<=50;j++){ for(k=0;k<=50;k++) { if(i+j+k==50&&i+2*j+5*k==100) printf(“%d,%d,%d\n”,i,j,k); }}}方法1.三重循環(huán)#include<stdio.h>方法2.兩重循環(huán)#include<stdio.h>main(){inti,j,k;for(i=0;i<=50;i++) for(j=0;j<=50;j++) {k=50–i–j;if(i+2*j+5*k==100) printf(“%d,%d,%d\n”,i,j,k);}}提示:共50枚硬幣元錢,故5分銀幣數(shù)目可以由1分硬幣和2分銀幣的數(shù)目得到。方法2.兩重循環(huán)#include<stdio.h>提示:方法3.兩重循環(huán)#include<stdio.h>main(){inti,j,k;for(i=0;i<=20;i++) for(j=0;j<=50;j++) {k=50–i–j;if(5*i+2*j+k==100) printf(“%d,%d,%d\n”,k,j,i);}}提示:硬幣共50枚,而5分銀幣不可能超過20枚,同樣2分銀幣不可能超過50枚方法3.兩重循環(huán)#include<stdio.h>提示:方法4.單重循環(huán)#include<stdio.h>main(){inti,j,k;for(k=0;k<13;k++) {j=50–4*k; i=50–j–k; printf(“%d,%d,%d\n”,i,j,k);}}提示:z不超過13x+y+z=50x+2y+5z=100y+4*z=50方法4.單重循環(huán)#include<stdio.h>提示:各種方法性能分析方法1.三重循環(huán):

循環(huán)次數(shù)為51*51*51即132651次。算法的設(shè)計(jì)至關(guān)重要。方法2.兩重循環(huán):

循環(huán)次數(shù)為51*51即2601次。方法3.改進(jìn)的兩重循環(huán):

循環(huán)次數(shù)為21*51即1027次。方法4.單重循環(huán):

循環(huán)次數(shù)為13次。各種方法性能分析方法1.三重循環(huán):算法的設(shè)計(jì)至關(guān)重要。方main(){inta,b;scanf("%d",&a);while(a!=0){b=a%10;a=a/10;printf("%d",b);}}程序運(yùn)行后,如果從鍵盤上輸入1298,則輸出結(jié)果為______。練習(xí):8921main()練習(xí):8921main(){intj,k=0;for(j=1;;j++){k++;while(k<j*j){k++;if(k%3==0){printf("%d,%d",j,k);break;}}}}輸出結(jié)果為______。練習(xí):2,33,64,9……無限循環(huán)

main()練習(xí):2,33,64,9……無限循環(huán)main(){inti,j;for(j=10;j<11;j++){for(i=9;i<j;i++)if(!(j%i))break;if(i>=j-1)printf("%d",j);}}輸出結(jié)果為______。練習(xí):10main()練習(xí):10C程序的基本調(diào)試技術(shù)錯(cuò)誤信息(兩種)Error:嚴(yán)重錯(cuò)誤,非改不可Warning:可能有錯(cuò)誤,也可能沒有錯(cuò)誤程序的基本調(diào)試手段程序跟蹤直接利用集成環(huán)境傳統(tǒng)方法。在程序中直接設(shè)置斷點(diǎn),顯示重要變量內(nèi)容標(biāo)準(zhǔn)數(shù)據(jù)檢驗(yàn)邊界檢查簡化循環(huán)次數(shù)等C程序的基本調(diào)試技術(shù)學(xué)習(xí)要點(diǎn):熟練掌握while、for、do--while語句的語法規(guī)則、應(yīng)用范圍和使用方法。熟練掌握break、continue的功能及使用方法。重點(diǎn):循環(huán)結(jié)構(gòu)的實(shí)現(xiàn)難點(diǎn):循環(huán)語句以及語句的嵌套,控制語句的應(yīng)用。學(xué)習(xí)建議:上機(jī)編程,觀察語法錯(cuò)誤及邏輯錯(cuò)誤,選作相關(guān)習(xí)題。學(xué)習(xí)要點(diǎn):課后作業(yè)(P141)3,4,6,7,8,12,13,14,15,17補(bǔ)充:

編寫程序,編程輸出右側(cè)的圖形。進(jìn)一步的思考:如果要實(shí)現(xiàn)全屏幕該圖形連續(xù)(形式如同地面上鋪設(shè)的地磚)出現(xiàn),該如何實(shí)現(xiàn)。*************課后作業(yè)(P141)3,4,6,7,8,12,13,14,1課后作業(yè)(P141)補(bǔ)充:

已知一張足夠大的紙,厚度為0.2毫米,試編一程序求出對(duì)折多少次后,其厚度能夠超過珠穆朗瑪峰的高度(8848米)。補(bǔ)充:算法填空題

任何一個(gè)大于6的偶數(shù)均可表示為兩個(gè)素?cái)?shù)之和,以下程序?qū)崿F(xiàn)將6~50之間的偶數(shù)表示成兩個(gè)素?cái)?shù)之和。以下程序輸出十對(duì)最小的孿生素?cái)?shù)。所謂孿生素?cái)?shù)是指兩個(gè)相差為2的素?cái)?shù),如3與5,11與13等課后作業(yè)(P141)補(bǔ)充:補(bǔ)充:算法填空題main(){inti,j,m,n;for(m=6;m<=50;m+=2)

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

;i++);if(n==i){for(j=2;

;j++);if(

){printf("%d=%d+%d\n",m,n,m-n);break;}}}}main()88寫在最后成功的基礎(chǔ)在于好的學(xué)習(xí)習(xí)慣Thefoundationofsuccessliesingoodhabits88寫在最后成功的基礎(chǔ)在于好的學(xué)習(xí)習(xí)慣結(jié)束語當(dāng)你盡了自己的最大努力時(shí),失敗也是偉大的,所以不要放棄

溫馨提示

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

最新文檔

評(píng)論

0/150

提交評(píng)論