C語言課件3-三種基本結(jié)構(gòu)程序設(shè)計(jì)_第1頁
C語言課件3-三種基本結(jié)構(gòu)程序設(shè)計(jì)_第2頁
C語言課件3-三種基本結(jié)構(gòu)程序設(shè)計(jì)_第3頁
C語言課件3-三種基本結(jié)構(gòu)程序設(shè)計(jì)_第4頁
C語言課件3-三種基本結(jié)構(gòu)程序設(shè)計(jì)_第5頁
已閱讀5頁,還剩33頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

第三章

三種基本結(jié)構(gòu)的程序設(shè)計(jì)2025/1/623.1順序結(jié)構(gòu)3.2分支(條件)結(jié)構(gòu)3.3循環(huán)結(jié)構(gòu)退出2025/1/63 3.1順序結(jié)構(gòu)順序結(jié)構(gòu)程序是按書寫順序執(zhí)行的語句構(gòu)成的程序段。語句1語句2返回2025/1/64 3.2分支結(jié)構(gòu)(條件結(jié)構(gòu))3.2.1基本if語句(單分支結(jié)構(gòu))3.2.2if-else語句(雙分支結(jié)構(gòu))3.2.3if嵌套語句(分支嵌套的一般形式)3.2.4if-else-if語句(分支嵌套的特殊形式)3.2.5switch-case語句(開關(guān)分支結(jié)構(gòu))3.2.6goto語句(無條件分支結(jié)構(gòu))返回2025/1/65if(表達(dá)式)語句;注:表達(dá)式可以是任意表達(dá)式,為“非0”則執(zhí)行語句。語句表達(dá)式?0非0返回 3.2.1基本if語句(單分支結(jié)構(gòu))2025/1/66if(表達(dá)式)語句1;else語句2;語句1語句2表達(dá)式?非00 3.2.2if-else語句(雙分支結(jié)構(gòu))2025/1/67[例3.1]輸入一個(gè)整數(shù),判斷奇偶。#include<stdio.h>voidmain(){intn;

printf("Inputaninteger\n");

scanf("%d",&n);if(n%2==0)printf("Theintegeriseven\n");elseprintf("Theintegerisodd\n");}返回2025/1/68if后和else后的語句可再包含if語句。3.2.3if嵌套語句(分支嵌套的一般形式)例:if(n>0)

if(a>b)c=a;

elsec=b;例’:if(n>0){if(a>b)c=a;}

elsec=b;注:else總是與前面最近的并且沒有與其他else匹配的if相匹配。2025/1/69[例3.2]求一個(gè)點(diǎn)所在的象限。#include<stdio.h>voidmain(){floatx,y;

printf("Inputthecoordinateofapoint.\n");

printf("x=");

scanf("%f",&x);

printf("y=");

scanf("%f",&y);

if(x>0)

if(y>0)printf("Thepointisin1stquadrant.\n");elseprintf("Thepointisin4thquadrant.\n");else

if(y>0)printf("Thepointisin2ndquadrant.\n");elseprintf("Thepointisin3rdquadrant.\n");}返回2025/1/610if(表達(dá)式1)語句1;elseif(表達(dá)式2)語句2;……elseif(表達(dá)式n)語句n;else語句n+1;表達(dá)式1?語句2假(0)真(非0)語句1表達(dá)式2?假(0)表達(dá)式n?假(0)語句n+1語句n真(非0)真(非0)3.2.4if-else-if語句(分支嵌套的特殊形式)2025/1/611[例3.3]求解符號(hào)函數(shù)。#include<stdio.h>voidmain(){int

x,sign;

printf("Pleaseinputanumber\n");

scanf("%d",&x);

if(x>0)sign=1;else

if(x==0)sign=0;elsesign=-1;

printf("Thesignis%d\n",sign);}2025/1/612[例3.4]設(shè)計(jì)求ax2+bx+c=0的一元二次方程解的程序。#include<stdio.h>#include<math.h>voidmain(){floata,b,c,d,x1,x2,p,q;

printf("a,b,c=?");

scanf("%f%f%f",&a,&b,&c);

printf("Theequation");

if(fabs(a)<1e-6)printf("isnotquadratic.\n");else{d=b*b-4*a*c;

if(fabs(d)<1e-6)printf("hastwoequalroots:%8.4f\n",-b/(2*a));else

if(d>=1e-6)

{x1=(-b+sqrt(d))/(2*a);x2=(-b-sqrt(d))/(2*a);

printf("hasdistinctrealroots:%8.4fand%8.4f\n",x1,x2);}else

{p=-b/(2*a);q=sqrt(-d)/(2*a);

printf("hascomplexroots:\n");printf("%8.4f+%8.4fi\t",p,q);printf("%8.4f-%8.4fi\n",p,q);}}}返回輸入a,b,ca==0?非二次方程d=b2-4acd==0?d>0?不相等實(shí)根不相等虛根相等實(shí)根YNYNYN2025/1/613switch(表達(dá)式){case常量表達(dá)式1:

語句組1case常量表達(dá)式2:

語句組2……case常量表達(dá)式n:

語句組ndefault:

語句組n+1}注:①在VC6.0下,表達(dá)式和常量表達(dá)式為任何整型、字符型或枚舉類型。②每一個(gè)case后的常量表達(dá)式值必須互不相同。③default位置任意,是所有case皆不滿足時(shí)的入口;若無default且無匹配常量表達(dá)式,則不執(zhí)行任何操作。④語句組不須加{}。⑤break無條件轉(zhuǎn)向本層復(fù)合結(jié)構(gòu)的下一條語句。3.2.5switch-case語句(開關(guān)分支結(jié)構(gòu))常量表達(dá)式1計(jì)算表達(dá)式值語句組1語句組2語句組n語句組n+1常量表達(dá)式2常量表達(dá)式ndefault…………break;break;break;計(jì)算表達(dá)式值語句組1語句組2語句組n語句組n+1……常量表達(dá)式1常量表達(dá)式2常量表達(dá)式ndefault……break;break;break;2025/1/614[例3.5]根據(jù)考試成績的等級(jí)打印百分制分?jǐn)?shù)段。#include<stdio.h>voidmain(){chargrade;

printf("Inputthegrade:");

scanf("%c",&grade);

switch(grade){case'A':printf("85~100\n");break;

case'B':printf("70~84\n");break;

case'C':printf("60~69\n");break;

case'D':printf("<60\n");break;

default:printf("error\n");}}2025/1/615[例3.6]判別某考試成績等級(jí)是否大于60分。#include<stdio.h>voidmain(){chargrade;

printf("Inputthegrade:");

scanf("%c",&grade);

switch(grade){case'A':

case'B':

case'C':printf(">=60\n");break;

case'D':printf("<60\n");break;

default:printf("error\n");}}2025/1/616[例3.7]switch語句的嵌套。#include<stdio.h>voidmain(){intx=1,y=0,a=0,b=0;

switch(x){case1:

switch(y){case0:a++;break;case1:b++;}case2:a++;b++;break;case3:a++;b++;}

printf("a=%d,b=%d\n",a,b);}2025/1/617[例3.8]輸入年、月,輸出該月天數(shù)。#include<stdio.h>voidmain(){int

year,month,days,flag=1;

printf("input

year,month=?\n");

scanf("%d%d",&year,&month);

switch(month){case1:case3:case5:case7:case8:case10:case12:days=31;break;case4:case6:case9:case11:days=30;break;case2:if((year%4==0)&&(year%100!=0)||(year%400==0))days=29;elsedays=28;break;default:flag=0;printf("monthiserror\n");}

if(flag)printf("year=%d,month=%d,days=%d\n",year,month,days);}年號(hào)能被4整除但不能被100整除,或者年號(hào)能被400整除的年均是閏年。返回2025/1/618goto

語句標(biāo)號(hào);注:語句標(biāo)號(hào)用標(biāo)識(shí)符表示,用來表示程序的某個(gè)位置。loop:if(i<=100){sum+=i;i++;

goto

loop;}返回 3.2.6goto語句(無條件分支結(jié)構(gòu))2025/1/619 3.3循環(huán)結(jié)構(gòu)(重復(fù)結(jié)構(gòu))循環(huán)語句:在給定條件成立時(shí),反復(fù)執(zhí)行某個(gè)程序段(循環(huán)體)。

3.3.1if-goto語句構(gòu)成的循環(huán)結(jié)構(gòu)

3.3.2while語句

3.3.3do-while語句

3.3.4for語句

3.3.5break語句

3.3.6continue語句

3.3.7程序舉例返回2025/1/620[例3.9]求S=1+2+…+100的和。#include<stdio.h>voidmain(){int

i,sum=0;i=1;

loop:if(i<=100){sum+=i;i++;

goto

loop;}

printf("SUM=%d\n",sum);}返回

3.3.1if-goto語句構(gòu)成的循環(huán)結(jié)構(gòu)2025/1/621while(表達(dá)式)語句;注:①先判斷,后執(zhí)行循環(huán)體;②循環(huán)體最少執(zhí)行0次,即表達(dá)式不成立時(shí);③死循環(huán):while(1),即循環(huán)體內(nèi)無改變表達(dá)式的值使之為假的語句,也無跳出循環(huán)的語句。while(表達(dá)式)?語句0非0 3.3.2while語句2025/1/622[例3.10]求S=1+2+…+100的和。#include<stdio.h>voidmain(){int

i,sum=0;i=1;

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

printf("SUM=%d\n",sum);}2025/1/623[例3.11]求兩個(gè)正數(shù)的最大公因子。#include<stdio.h>voidmain(){int

m,n,r;

printf("Pleasetypeintwopositiveintegers\n");

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

while(n){r=m%n;m=n;n=r;}

printf("Theirgreatestcommondivisoris%d.\n",m);}返回歐幾里得算法(輾轉(zhuǎn)相除法):①輸入兩個(gè)正數(shù)m和n;②m除以n,余數(shù)為r,n->m,r->n;③若n=0,則m是最大公因子,結(jié)束;否則轉(zhuǎn)②。2025/1/624do語句;while(表達(dá)式);注:①先執(zhí)行循環(huán)體,后判斷;②無論表達(dá)式成立與否,循環(huán)體最少執(zhí)行1次;③死循環(huán):while(1),即循環(huán)體內(nèi)無改變表達(dá)式的值使之為假的語句,也無跳出循環(huán)的語句。dowhile(表達(dá)式)?語句0非0 3.3.3do-while語句2025/1/625[例3.12]求S=1+2+…+100的和。#include<stdio.h>voidmain(){int

i,sum=0;i=1;

do{sum+=i;i++;}while(i<=100);

printf("SUM=%d\n",sum);}2025/1/626#include<stdio.h>voidmain(){int

i,r;

printf("Inputaninteger\n");

scanf("%d",&i);

do{r=i%10;

printf("%d",r);}while((i/=10)!=0);

printf("\n");}返回算法:提取最后一位數(shù)字,用取模10求得。[例3.13]將一個(gè)整數(shù)的各位數(shù)字顛倒后輸出。2025/1/627for(表達(dá)式1;表達(dá)式2;表達(dá)式3)語句;注:①表達(dá)式1:變量賦初值;表達(dá)式2:循環(huán)條件;表達(dá)式3:循環(huán)后修正變量,使循環(huán)趨向結(jié)束;語句:循環(huán)體。②先判斷,后執(zhí)行;循環(huán)體最少執(zhí)行0次;③表達(dá)式1和3省略時(shí),相當(dāng)于while循環(huán)。④死循環(huán):表達(dá)式3省略時(shí),循環(huán)體內(nèi)應(yīng)有改變表達(dá)式2的值使之為假的語句。表達(dá)式2省略時(shí),無終止條件,則循環(huán)體內(nèi)應(yīng)有跳出循環(huán)的語句,如break、goto、return等。⑤適用于解決已知循環(huán)次數(shù)或已知開始條件和結(jié)束條件的重復(fù)問題。表達(dá)式2?語句0非0表達(dá)式1表達(dá)式3 3.3.4for語句2025/1/628[例3.14]求S=1+2+…+100的和。#include<stdio.h>voidmain(){int

i,sum=0;

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

printf("SUM=%d\n",sum);}2025/1/629[例3.15]求菲波那契數(shù)列的前20個(gè)數(shù)。#include<stdio.h>voidmain(){int

i,a,b,c;a=0;b=1;printf("%10d%10d",a,b);

for(i=3;i<=20;i++){c=a+b;printf("%10d",c);a=b;b=c;if(i%5==0)printf("\n");

}

printf("\n");}a0=0a1=1ai=ai-1+ai-2,i≥2返回2025/1/630break語句的兩個(gè)用途:①跳出本層switch語句;②跳出本層循環(huán)。switch表達(dá)式?語句組1break;語句組2break;語句組nbreak;語句組n+1break;…...常量1常量2常量ndefaultcase 3.3.5break語句表達(dá)式2?………...假(0)真(非0)for表達(dá)式1表達(dá)式3真(非0)do………...while(表達(dá)式)?假(0)while(表達(dá)式)?…………假(0)真(非0)break;break;break;2025/1/631[例3.16]求調(diào)和級(jí)數(shù)中第多少項(xiàng)的值大于10。調(diào)和級(jí)數(shù)的第n項(xiàng)形式為:1+1/2+1/3+…+1/n#include<stdio.h>#defineLIMIT10voidmain(){intn;floatsum;sum=0;n=1;

for(;;){sum=sum+1.0/n;if(sum>LIMIT)break;n++;

}printf("n=%d\n",n);}返回2025/1/632continue作用:只能用于循環(huán)語句中,立即結(jié)束本次循環(huán),轉(zhuǎn)去判斷循環(huán)條件是否成立。while(表達(dá)式)?…………假(0)真(非0)do………...while(表達(dá)式)?假(0)真(非0)假(0)表達(dá)式2?………...真(非0)for表達(dá)式1表達(dá)式3continue;continue;continue; 3.3.6continue語句2025/1/633[例3.17]求輸入的正數(shù)之和。#include<stdio.h>#defineNUM5voidmain(){int

i,n,sum=0;

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

scanf("%d",&n);

if(n<=0)continue;sum+=n;

}

printf("SUM=%d\n",sum);}2025/1/634無條件分支結(jié)構(gòu)語句的三種形式:

goto語句:轉(zhuǎn)向標(biāo)號(hào)所在位置。

continue語句:轉(zhuǎn)向本層循環(huán)的末尾,結(jié)束本次循環(huán)。

break語句:轉(zhuǎn)向本層復(fù)合結(jié)構(gòu)的下一語句。返回2025/1/635#include<stdio.h>voidmain(){int

x,y,z;

for(x=1;x<=20;x++)

for(y=1;y<=33;y++){z=100-x-y;if((z%3==0)&&(5*x+3*y+z/3==100))

printf("cock=%d\then=%d\tchiken=%d\n",x,y,z);

}}舉例:公雞一,值錢五;母雞一,值錢三

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(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)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論