版權(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 教育心理學(xué)在寶寶音樂教育中的應(yīng)用
- 教育中的師生互動(dòng)與學(xué)習(xí)效果關(guān)系
- 心理健康教育的創(chuàng)新與實(shí)踐
- 家庭教育中的情緒表達(dá)與孩子心理健康的關(guān)系研究
- 教育技術(shù)中的創(chuàng)新思維與市場(chǎng)機(jī)遇
- 提升教學(xué)效果的互動(dòng)教學(xué)法在小學(xué)數(shù)學(xué)教學(xué)中的應(yīng)用
- 2025加工人已完成加工義務(wù)-定做人可否行使合同解除權(quán)
- 室內(nèi)設(shè)計(jì)服務(wù)合同(2篇)
- 客戶維護(hù)服務(wù)合同(2篇)
- 安全設(shè)施維護(hù)協(xié)議書(2篇)
- 大數(shù)據(jù)與人工智能ppt
- 中醫(yī)科特色診療規(guī)范
- 建筑工程一切險(xiǎn)條款版
- PEP小學(xué)六年級(jí)英語上冊(cè)選詞填空專題訓(xùn)練
- 古建筑修繕項(xiàng)目施工規(guī)程(試行)
- GA 844-2018防砸透明材料
- 化學(xué)元素周期表記憶與讀音 元素周期表口訣順口溜
- 非人力資源經(jīng)理的人力資源管理培訓(xùn)(新版)課件
- 鉬氧化物還原過程中的物相轉(zhuǎn)變規(guī)律及其動(dòng)力學(xué)機(jī)理研究
- (完整word)2019注冊(cè)消防工程師繼續(xù)教育三科試習(xí)題及答案
- 《調(diào)試件現(xiàn)場(chǎng)管理制度》
評(píng)論
0/150
提交評(píng)論