c語言程序設(shè)計-程序控制結(jié)構(gòu)課件_第1頁
c語言程序設(shè)計-程序控制結(jié)構(gòu)課件_第2頁
c語言程序設(shè)計-程序控制結(jié)構(gòu)課件_第3頁
c語言程序設(shè)計-程序控制結(jié)構(gòu)課件_第4頁
c語言程序設(shè)計-程序控制結(jié)構(gòu)課件_第5頁
已閱讀5頁,還剩185頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

第3章程序控制結(jié)構(gòu)煙臺大學(xué)計算機學(xué)院劉培華C

語言程序設(shè)計1第3章程序控制結(jié)構(gòu)煙臺大學(xué)計算機學(xué)院劉培華C本章主要內(nèi)容:C語言中程序設(shè)計的三種結(jié)構(gòu):順序結(jié)構(gòu)選擇結(jié)構(gòu)循環(huán)結(jié)構(gòu)2本章主要內(nèi)容:C語言中程序設(shè)計的三種結(jié)構(gòu):2程序的三種基本結(jié)構(gòu)順序結(jié)構(gòu)N-S結(jié)構(gòu)圖流程圖ABAB選擇結(jié)構(gòu)YNABP成立?PTFAB3程序的三種基本結(jié)構(gòu)順序結(jié)構(gòu)N-S結(jié)構(gòu)圖流程圖ABA選擇結(jié)構(gòu)程序的三種基本結(jié)構(gòu)循環(huán)結(jié)構(gòu)NYP成立?A當(dāng)P成立時

A直到型循環(huán)

A當(dāng)P成立時YNAP成立?當(dāng)型循環(huán)N-S結(jié)構(gòu)圖流程圖4程序的三種基本結(jié)構(gòu)循環(huán)結(jié)構(gòu)NYP成立?A當(dāng)P成立時直到型循環(huán)C語言的語句類型主要內(nèi)容:說明性語句表達(dá)式語句控制語句復(fù)合語句5C語言的語句類型主要內(nèi)容:5說明性語句對程序中使用的變量、數(shù)組、函數(shù)等操作對象進(jìn)行定義、聲明的描述語句只起說明作用,不產(chǎn)生可執(zhí)行的機器指令代碼。

例如:inta,b;

floatfunction(int,int);C程序由函數(shù)組成。函數(shù)的格式:函數(shù)名(參數(shù)表){

說明部分;執(zhí)行部分;}數(shù)據(jù)類型說明語句可執(zhí)行語句6說明性語句對程序中使用的變量、數(shù)組、函數(shù)等操作對象進(jìn)行定義、表達(dá)式后面加一個分號,構(gòu)成表達(dá)式語句x=3;y=y+5;x=a-b&&c||d;printf("x=%d,y=%d\n",x,y);sort(a,10);表達(dá)式語句賦值語句函數(shù)調(diào)用語句注意:①分號是語句必不可少的一部分②單獨的一個分號“;”構(gòu)成一個空語句例如:;(空語句,是最簡單的C語句)7表達(dá)式后面加一個分號,構(gòu)成表達(dá)式語句表達(dá)式語句賦值語句函數(shù)控制語句1.選擇分支控制語句

if()…else…

switch(){…} 2.循環(huán)控制語句

for()…

while()…do…while()3.其他控制語句

break、continue、gotoreturn8控制語句1.選擇分支控制語句8復(fù)合語句用一對花括號“{}”括起來的若干條語句

花括號中可以是說明語句、表達(dá)式語句、控制語句,也可以是復(fù)合語句例如:⑴if(a>b){max=a;min=b;}

⑵for(n=1;n<10;n++)

{p=n+p;if(p>=100)

{

printf(“%d\n”,p);break;

}

}

9復(fù)合語句用一對花括號“{}”括起來的若干條語句9復(fù)合語句(續(xù))復(fù)合語句中如果有說明性語句,應(yīng)該寫在可執(zhí)行語句的前面例如:

main(){inta,b;a=b=100;{floatc=10.23;printf("%f\n",c);}printf("%d%d\n",a,b);}要特別注意:花括號的配對花括號的位置C語言學(xué)習(xí)的難點之一10復(fù)合語句(續(xù))復(fù)合語句中如果有說明性語句,應(yīng)該寫在可執(zhí)行語句3.1順序結(jié)構(gòu)程序設(shè)計3.4.1順序結(jié)構(gòu)程序的一般算法描述變量定義變量賦值運算處理輸出結(jié)果可用:變量初始化賦值語句輸入函數(shù)調(diào)用語句注意各個語句的順序113.1順序結(jié)構(gòu)程序設(shè)計3.4.1順序結(jié)構(gòu)程序的一般算法描3.1.1順序結(jié)構(gòu)程序設(shè)計舉例【例3.1】數(shù)據(jù)交換。從鍵盤輸入a、b的值,輸出交換以后的值。

思路:在計算機中交換變量a和b的值,不能只寫下面兩個賦值語句a=b;b=a;?正確的交換方法:c=a;a=b;b=c;123.1.1順序結(jié)構(gòu)程序設(shè)計舉例【例3.1】數(shù)據(jù)交換。從鍵ab13ab13cba14cba14151516161717181819192020變量定義輸入數(shù)據(jù)輸出數(shù)據(jù)數(shù)據(jù)交換輸出結(jié)果【例3.1】數(shù)據(jù)交換問題的算法描述21變量定義輸入數(shù)據(jù)輸出數(shù)據(jù)數(shù)據(jù)交換輸出結(jié)果【例3.1】數(shù)據(jù)交換程序:main(){inta,b,c;printf("\ninputa,b:");scanf("%d,%d",&a,&b);printf("\nbeforeexchange:a=%db=%d\n",a,b);c=a;a=b;b=c;printf("afterexchange:a=%db=%d\n",a,b);}程序運行情況如下:inputa,b:32,57

beforeexchange:a=32b=57afterexchange:a=57b=32

22程序:main()程序運行情況如下:22舉例:【例3.2】已知三條邊a、b、c,求三角形面積。計算三角形面積的海倫公式:其中:設(shè)定義:整型變量a、b、c實型變量s、area23舉例:【例3.2】已知三條邊a、b、c,求三角形面積。計算程序如下:#include"math.h"main(){inta,b,c;floats,area;scanf("%d,%d,%d",&a,&b,&c);s=(a+b+c)/2.0f;area=sqrt(s*(s-a)*(s-b)*(s-c));printf("area=%8.3f\n",area);}程序運行情況如下:3,4,5

area=6.000

實際上還需要判斷a、b、c是否能構(gòu)成三角形,即應(yīng)該進(jìn)行選擇判斷處理24程序如下:#include"math.h"程序運行情況如if語句if語句的一般形式if語句的嵌套switch語句switch語句的一般形式break語句選擇結(jié)構(gòu)程序設(shè)計舉例3.2選擇結(jié)構(gòu)程序設(shè)計25if語句3.2選擇結(jié)構(gòu)程序設(shè)計25簡單分支語句語句一般格式if(表達(dá)式)

語句功能:計算表達(dá)式的值,如果是一個非0值(即邏輯真),就執(zhí)行內(nèi)嵌語句,否則(即邏輯假)跳過內(nèi)嵌語句,順序執(zhí)行后續(xù)語句。內(nèi)嵌語句,可為:賦值語句函數(shù)調(diào)用語句控制語句復(fù)合語句空語句可為算術(shù)、關(guān)系、邏輯、賦值等表達(dá)式26簡單分支語句語句一般格式功能:內(nèi)嵌語句,可為:可為算術(shù)、關(guān)系簡單分支語句的算法:例如:⑴if(x>0)m++;⑵if(a>b){c=a;a=b;b=c;}

表達(dá)式非0

TF

語句N-S結(jié)構(gòu)圖語句流程圖NY表達(dá)式非0?27簡單分支語句的算法:例如:表達(dá)式非0N-S結(jié)構(gòu)雙重分支語句語句一般格式if(表達(dá)式)

語句1

else語句2

功能:計算表達(dá)式的值,如果它的值是一個非0值(邏輯真),就執(zhí)行內(nèi)嵌語句1,之后跳過內(nèi)嵌語句2,執(zhí)行后續(xù)語句;否則跳過內(nèi)嵌語句1,執(zhí)行內(nèi)嵌語句2,之后執(zhí)行后續(xù)語句。

28雙重分支語句語句一般格式28雙重分支語句的算法:例如:⑴if(x>0)m++;elsem--;⑵if(ch>='a'&&ch<='z')

{ch=ch-32;

printf("%c\n",ch);}elseprintf("%c\n",ch);

表達(dá)式非0

TF

語句1語句2N-S結(jié)構(gòu)圖語句1

語句2流程圖NY表達(dá)式非0?29雙重分支語句的算法:例如:表達(dá)式非0N-S結(jié)構(gòu)圖多重分支語句語句一般格式if(表達(dá)式1)

語句1

elseif(表達(dá)式2)

語句2

……elseif(表達(dá)式m)

語句m

else語句

n功能:依次計算并判斷表達(dá)式i,為非0時執(zhí)行后面的語句,都為0時,執(zhí)行語句n無論執(zhí)行完那個語句分支,都轉(zhuǎn)到后續(xù)語句30多重分支語句語句一般格式30多重分支語句的算法流程圖表達(dá)式2?表達(dá)式1?語句n語句1

語句2

語句m…YNYNNY表達(dá)式m?31多重分支語句的算法流程圖表達(dá)式2?表達(dá)式1?語句n語句1多重分支語句的算法N-S結(jié)構(gòu)圖表達(dá)式1?

TF

表達(dá)式2?語句1TF

語句2…

表達(dá)式m?TF

語句m語句n例如:if(a<0)x=-1;elseif(a==0)x=0;elsex=1;32多重分支語句的算法N-S結(jié)構(gòu)圖表達(dá)式1?if語句的簡單應(yīng)用【例3.3】輸入一個字符,如果是大寫字母,則將其轉(zhuǎn)換為小寫字母輸出,否則直接輸出。輸入:用getchar或scnaf函數(shù)ch是否為大寫字母:ch>='A'&&ch<='Z'(或ch>=65&&ch<=90)大寫字母轉(zhuǎn)換為小寫字母:ch=ch+32輸出:用putchar或printf函數(shù)思路:33if語句的簡單應(yīng)用【例3.3】輸入一個字符,如果是大寫字母,程序:#include"stdio.h"main(){charch;ch=getchar();if(ch>='A'&&ch<='Z')ch=ch+32;printf("%c\n",ch);}程序運行情況如下:Gg

可使用條件表達(dá)式代替putchar(ch>='A'&&ch<='Z'?ch+32:ch);putchar('\n')34程序:#include"stdio.h"程序運行情況如下

if語句的嵌套如果if的內(nèi)嵌語句中又使用了一個if語句,則構(gòu)成if語句的嵌套。

【例4.a】比較兩個整數(shù)的關(guān)系。#include<stdio.h>main(){intx,y;printf("EnterintegerXandY:");scanf("%d%d",&x,&y);

if(x!=y)

if(x>y)printf("X>Y\n");

elseprintf("X<Y\n");

elseprintf("X=Y\n");}應(yīng)該正確判斷:if的內(nèi)嵌語句if和else的配對提倡縮格書寫有利于閱讀程序35if語句的嵌套如果if的內(nèi)嵌語句中又使用了一個if語句,則

if語句嵌套的形式簡單if語句的嵌套形式if(表達(dá)式)if語句雙重(或多重)分支if語句的嵌套形式if(表達(dá)式)if語句else

if語句可以是各種形式的if語句可以是各種形式的if語句如果是簡單if語句,必須用“{}”括起36if語句嵌套的形式簡單if語句的嵌套形式可以是各種形式的例如:if(a>b) if(a>c) if(a>d)m=1; elsem=2; elsem=3; 問題:哪一個else和哪一個if相匹配?規(guī)則:在嵌套的if~else語句中,else總是與上面的離它最近的尚未配對的if

配對。37例如:if(a>b) 問題:哪一個else和舉例【例3.4】輸入一個數(shù),判斷它是奇數(shù)還是偶數(shù),如果是奇數(shù)則進(jìn)一步判斷它是否為5的倍數(shù)。

定義變量x輸入x的值

x是奇數(shù)

TF

輸出“odd”x是5的倍數(shù)輸出“even”TF是5的倍數(shù)38舉例【例3.4】輸入一個數(shù),判斷它是奇數(shù)還是偶數(shù),如果是奇程序:main(){intx;scanf("%d",&x);

if(x%2!=0)

{printf("%disanodd\n",x);

if(x%5==0)printf("%disthetimesof5\n",x);

}

elseprintf("%disaneven\n",x);}思考:如果沒有,算法和輸出如何?39程序:main()思考:如果沒有,算法和輸出如何?39學(xué)習(xí)if語句的難點if~else語句的配對正確用表達(dá)式描述條件例如:當(dāng)x大于5小于10時令x自增if(5<x<10)x++;正確判斷內(nèi)嵌語句例如:if(x<y)x=x+3;y=y-2;elsex=x-3;y=y+2;if(x>5&&x<10)x++;{}{}40學(xué)習(xí)if語句的難點if~else語句的配對正確判斷內(nèi)嵌語switch語句switch語句的一般形式

switch(表達(dá)式){case常量表達(dá)式1:語句序列1case常量表達(dá)式2:語句序列2

……case常量表達(dá)式n:語句序列ndefault:語句序列n+1

}功能:計算表達(dá)式的值,與常量表達(dá)式的值比較,等于第i個值時,順序執(zhí)行語句序列i、i+1、…、n+1若與所有常量表達(dá)式值都不相等,執(zhí)行語句序列n+1。

41switch語句switch語句的一般形式41switch語句的算法描述N-S結(jié)構(gòu)圖計算表達(dá)式常量表達(dá)式1語句序列1常量表達(dá)式2語句序列2…………常量表達(dá)式n語句序列ndefault語句序列n+1例如:switch(a){case5:printf("&");case2:printf("#");default:printf("$");}當(dāng)a等于5,輸出:&#$當(dāng)a等于2,輸出:#$當(dāng)a是其他值,輸出:$42switch語句的算法描述N-S結(jié)構(gòu)圖計算常量表達(dá)式1語句序說明:“case常量表達(dá)式i:”等價于語句標(biāo)號,計算出的表達(dá)式值等于哪個語句標(biāo)號,就從哪個位置開始順序向下執(zhí)行語句序列?!嗾Z句位置影響運行結(jié)果例如:switch(a){case2:printf("#");default:printf("$");case5:printf("&");}switch與break語句結(jié)合才能實現(xiàn)程序的分支break;break;break;43說明:“case常量表達(dá)式i:”等價于語句標(biāo)號,計算出的表switch語句的簡單應(yīng)用【例3.5】已知x=100,y=15,要求輸入一個算術(shù)運算符(+、-、*或/),并對x和y進(jìn)行指定的算術(shù)運算。

思路:設(shè)x和y為float型變量并賦初值;輸入的運算符op為char型變量;根據(jù)op的值(為'+'、'-'、'*'、'/')進(jìn)行x和y的相加、相減、相乘、相除運算(選擇分支);還要考慮到輸入字符不是+、-、*或/時的情況44switch語句的簡單應(yīng)用【例3.5】已知x=100,y=1程序:#include"stdio.h"main(){floatx=100,y=15,z;charop;op=getchar();switch(op){case'+':z=x+y;break;case'-':z=x-y;break;case'*':z=x*y;break;case'/':z=x/y;break;default:z=0;}if((int)z!=0)printf("%f%c%f=%f\n",x,op,y,z);elseprintf("%cisnotanoperator\n",op);}實型數(shù)通常不使用z==0或z!=0的比較可用if((int)z)代替45程序:#include"stdio.h"實型數(shù)通常不使用z選擇結(jié)構(gòu)程序設(shè)計舉例【例3.6】求一元二次方程ax2+bx+c=0的根。

思路:一元二次方程的根取決于系數(shù)a,b,c求根公式:

判別式d=b2-4ac

當(dāng)

d=0時,方程有兩個相等的實根:x1=x2=-b/(2*a)當(dāng)d>0時,方程有兩個不相等的實根:x1=(-b+sqrt(d))/(2*a)x2=(-b-sqrt(d))/(2*a)

當(dāng)d<0時,方程有兩個虛根:x1=jp+ipix2=jp-ipi實部

jp=-b/(2*a)

虛部

ip=sqrt(-d)/(2*a)46選擇結(jié)構(gòu)程序設(shè)計舉例【例3.6】求一元二次方程ax2+bx+算法:定義變量a、b、c、d、x1、x2、jp、ip輸入系數(shù)a、b、ca==0TF

計算d=b*b-4*a*c

不是二d==0

次方程TFd>0

計算重根TF

輸出重根計算實根計算虛根輸出實根輸出虛根47算法:定義變量a、b、c、d、x1、x2、jp、ip4程序:#include"math.h"main(){floata,b,c,d,x1,x2,lp,ip;

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

printf("theequation");

if(fabs(a)<1e-6)printf("isnotquadratic");

else

{d=b*b-4*a*c;

if(fabs(d)<=1e-6)

/*相等的實根*/

{printf("hastwoequalroots:\n");

printf("x1=x2=%8.4f\n",-b/(2*a));

}48程序:#include"math.h"48程序(續(xù)):

elseif(d>1e-6)

/*不相等的實根*/

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

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

printf("hastworealroots:\n");

printf("x1=%8.4f,x2=%8.4f\n",x1,x2);

}

else

/*虛根*/

{

lp=-b/(2*a);ip=sqrt(-d)/(2*a);

printf("hastwocomplexroots:\n");

printf("x1=%8.4f+%8.4fi\n",lp,ip);

printf("x2=%8.4f-%8.4fi\n",lp,ip);

}

}

}運行jc4_649程序(續(xù)):elseif(d>1e-6)舉例(續(xù)):【例3.7】輸入年份,判別該年是否為閏年。思路:年份year為閏年的條件為①

能夠被4整除,但不能被100整除的年份;②

能夠被400整除的年份。只要滿足任意一個就可以確定它是閏年。例如:1996年、2000年是閏年1998年、1900年不是閏年設(shè)定標(biāo)志變量leap,只要符合其中一個條件的就是閏年,令leap=1;否則令leap=0

50舉例(續(xù)):【例3.7】輸入年份,判別該年是否為閏年。思路算法:定義變量year、leap

輸入年份year

能被4整除且不能被100整除?

TF

能被400整除?

leap=1

TFleap=1leap=0leap=1?TF

是閏年不是閏年year%400==0year%4==0&&year%100!=051算法:定義變量year、leapyear%400==0yea程序:main(){intyear,leap;scanf("%d",&year);if(year%4==0&&year%100!=0)leap=1;elseif(year%400==0)leap=1;elseleap=0;if(leap==1)printf("%disaleapyear\n",year);elseprintf("%disnotaleapyear\n",year);}52程序:main()52作業(yè)1、P102:一、選擇題 二、讀程序 三、程序填空2、P107:四(1、2、3)上機調(diào)試并整理,在課程網(wǎng)站提3、P108: 實驗4順序結(jié)構(gòu)程序設(shè)計 實驗5選擇結(jié)構(gòu)程序設(shè)計53作業(yè)1、P102:53while循環(huán)控制do-while循環(huán)控制for循環(huán)控制用goto語句實現(xiàn)循環(huán)控制循環(huán)結(jié)構(gòu)中的跳轉(zhuǎn)語句循環(huán)的嵌套循環(huán)結(jié)構(gòu)程序設(shè)計舉例3.3循環(huán)結(jié)構(gòu)54while循環(huán)控制3.3循環(huán)結(jié)構(gòu)54while循環(huán)控制語句一般格式while(表達(dá)式)

語句

一般為關(guān)系表達(dá)式或邏輯表達(dá)式,也可以是C語言其他類型的合法表達(dá)式

用來控制循環(huán)體是否執(zhí)行稱為內(nèi)嵌語句,可以是基本語句、控制語句,也可以是復(fù)合語句是循環(huán)重復(fù)執(zhí)行的部分55while循環(huán)控制語句一般格式一般為關(guān)系表達(dá)式或邏輯表達(dá)功能:計算表達(dá)式的值,為非0(邏輯真)時,重復(fù)執(zhí)行內(nèi)嵌語句,每執(zhí)行一次,就判斷一次表達(dá)式的值,直到表達(dá)式的值為0時結(jié)束循環(huán),轉(zhuǎn)去執(zhí)行while后面的語句。

當(dāng)表達(dá)式為真語句N-S結(jié)構(gòu)圖NY流程圖表達(dá)式非0?語句循環(huán)控制條件循環(huán)體56功能:計算表達(dá)式的值,為非0(邏輯真)時,重復(fù)執(zhí)行內(nèi)嵌語句例如:【例3.8】編寫程序,求100個自然數(shù)的和即:

s=1+2+3+…+100

思路:尋找加數(shù)與求和的規(guī)律

加數(shù)i——從1變到100,每循環(huán)一次,使i增1,直到i的值超過100。i的初值設(shè)為1。求和——設(shè)變量

sum存放和,循環(huán)求sum=sum+i,直至i超過100。

57例如:【例3.8】編寫程序,求100個自然數(shù)的和思路:尋找加算法和程序:main(){inti,sum;i=1;sum=0;while(i<=100)

{sum=sum+i;i++;

}printf("sum=%d\n",sum);}程序輸出結(jié)果:sum=5050i:循環(huán)控制變量sum:累加器

i=1,sum=0當(dāng)i<=100sum=sum+ii++輸出sum58算法和程序:main()程序輸出結(jié)果:i:循環(huán)控制變量注意:如果while的(表達(dá)式)值為0,則循環(huán)體一次也不執(zhí)行

(例如當(dāng)i的初值=101)。在循環(huán)體中必須有使循環(huán)趨向結(jié)束的操作,否則循環(huán)將無限進(jìn)行(死循環(huán))。在循環(huán)體中,語句的先后位置必須符合邏輯,否則會影響運算結(jié)果。思考程序段的輸出?……while(i<=100){i++;sum=sum+i;}運行后,輸出:sum=5150原因是什么?

59注意:如果while的(表達(dá)式)值為0,則循環(huán)體一次也注意(續(xù)):為了保證循環(huán)正常運行,應(yīng)該特別注意:循環(huán)控制條件的描述

控制條件的初始狀態(tài)(初始值)

循環(huán)體內(nèi)部對控制條件的影響60注意(續(xù)):為了保證循環(huán)正常運行,應(yīng)該特別注意:60do-while語句語句一般格式do語句

while(表達(dá)式);

功能:先執(zhí)行內(nèi)嵌語句(循環(huán)體),之后計算表達(dá)式的值,不為0(邏輯真)時,再執(zhí)行循環(huán)體并判斷條件,直到表達(dá)式的值為0結(jié)束循環(huán),轉(zhuǎn)去執(zhí)行while下面的語句。61do-while語句語句一般格式61

do-while循環(huán)的算法循環(huán)體當(dāng)表達(dá)式為真N-S結(jié)構(gòu)圖NY循環(huán)體表達(dá)式非0?流程圖main(){inti=1,sum=0;do{sum=sum+i;i++;}while(i<=100);printf("%d\n",sum);}用do-while語句求100個自然數(shù)的和62do-while循環(huán)的算法循環(huán)體N-說明:while和do-while都能實現(xiàn)循環(huán)控制,while結(jié)構(gòu)程序通常都可以轉(zhuǎn)換成do-while結(jié)構(gòu)區(qū)別:do-while語句先執(zhí)行循環(huán)體再判斷條件,循環(huán)體至少執(zhí)行一次;while語句先判斷條件再執(zhí)行循環(huán)體,循環(huán)體有可能一次也不執(zhí)行do—while循環(huán)體中一定要有能使表達(dá)式值趨于0的操作(如i++),否則會出現(xiàn)死循環(huán)。

63說明:while和do-while都能實現(xiàn)循環(huán)控制,whido-while語句的簡單應(yīng)用【例3.9】用輾轉(zhuǎn)相除法求m和n的最大公約數(shù)定義m、n、rm<nTFm和n交換r=m%nm=nn=r當(dāng)r!=0時輸出最大公約數(shù)m64do-while語句的簡單應(yīng)用【例3.9】用輾轉(zhuǎn)相除法求m算法和程序:main(){intm,n,r;scanf("%d,%d",&m,&n);if(m<n){r=m;m=n;n=r;}

do{r=m%n;m=n;n=r;}while(r!=0);printf("%d\n",m);}程序運行情況如下:24,601265算法和程序:main()程序運行情況如下:65for語句語句一般格式for(表達(dá)式1;表達(dá)式2;表達(dá)式3)語句功能:計算表達(dá)式1的值,再判斷表達(dá)式2,如果其值為非0(邏輯真),則執(zhí)行內(nèi)嵌語句(循環(huán)體),并計算表達(dá)式3;之后再去判斷表達(dá)式2,一直到其值為0時結(jié)束循環(huán),執(zhí)行后續(xù)語句。循環(huán)初始條件循環(huán)控制條件循環(huán)體66for語句語句一般格式功能:循環(huán)初始條件循環(huán)控制條件循環(huán)體說明:for語句中的表達(dá)式,分別對應(yīng)著循環(huán)控制中的三個基本組成部分,即:表達(dá)式1:循環(huán)控制變量的初始化(只執(zhí)行1次),允許是逗號表達(dá)式。表達(dá)式2:循環(huán)判斷條件,是循環(huán)的入口,若條件滿足則執(zhí)行循環(huán)體,否則結(jié)束循環(huán)。表達(dá)式3:改變循環(huán)控制變量操作(循環(huán)控制變量的增量),執(zhí)行完循環(huán)體后,執(zhí)行該語句;執(zhí)行完畢,轉(zhuǎn)去執(zhí)行表達(dá)式2。67說明:67for語句的算法N-S結(jié)構(gòu)圖for(表達(dá)式1;表達(dá)式2;表達(dá)式3)語句NY流程圖計算表達(dá)式1語句計算表達(dá)式3表達(dá)式2為真?例如:main(){inti,sum;sum=0;

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

printf("sum=%d\n",sum);}可部分或全部省略,但“;”不可省略68for語句的算法N-S結(jié)構(gòu)圖for(表達(dá)式1;表達(dá)式2;表省略for語句的表達(dá)式⑴表達(dá)式1、2、3全省略,即:for(;;)

就等同于:while(1),會無限循環(huán)(死循環(huán))注意:在省略某個表達(dá)式時,應(yīng)在適當(dāng)位置進(jìn)行循環(huán)控制的必要操作,以保證循環(huán)的正確執(zhí)行⑵省略表達(dá)式1和表達(dá)式3,即:for(;表達(dá)式2;)

就等同于:while(

表達(dá)式2)⑶省略表達(dá)式2,即:

for(表達(dá)式1;;表達(dá)式3)

就等同于:表達(dá)式1;while(1){…表達(dá)式3;}69省略for語句的表達(dá)式⑴表達(dá)式1、2、3全省略,即:注意:說明:所有用while

語句實現(xiàn)的循環(huán)都可以用for

語句實現(xiàn)。

等價于:for(表達(dá)式1;表達(dá)式2;表達(dá)式3)

語句;表達(dá)式1;while(表達(dá)式2){

語句;

表達(dá)式3;

}70說明:所有用while語句實現(xiàn)的循環(huán)都可以用for語句for語句的簡單應(yīng)用【例3.10】求n!,即計算p=1×2×3×…×n的值。

思路:求階乘與求累加的運算處理過程類似,只要將“+”變?yōu)椤?”。設(shè)置:乘數(shù)i

,初值為1,終值為n(n是循環(huán)控制終值,需要從鍵盤輸入)累乘器p

,每次循環(huán)令p=p*i71for語句的簡單應(yīng)用【例3.10】求n!,即計算p=1×2程序:main(){inti,n;longp;

p=1;

printf("Entern:");scanf("%d",&n);for(i=1;i<=n;i++)

p=p

*

i;printf("p=%ld\n",p);}思考:如何輸出1!,2!,…,n!?如何求s=1!+2!+…+n!?72程序:main()思考:72幾種循環(huán)語句的比較while和do-while語句的表達(dá)式只有一個,for語句有三個。while和for先判斷循環(huán)條件后執(zhí)行循環(huán)體,do-while語句先執(zhí)行循環(huán)體后判斷循環(huán)條件。while語句多用于循環(huán)次數(shù)不定的情況do-while語句多用于至少要運行一次的情況for語句多用于要賦初值或循環(huán)次數(shù)固定的情況73幾種循環(huán)語句的比較while和do-while語句的表達(dá)式只用goto語句實現(xiàn)循環(huán)有興趣的同學(xué)自學(xué)不提倡使用goto語句注意:goto語句能實現(xiàn)程序無條件轉(zhuǎn)移,為編程提供了便利。但是無限制地使用,會破壞程序的結(jié)構(gòu)化程度。因此應(yīng)限制使用。74用goto語句實現(xiàn)循環(huán)有興趣的同學(xué)自學(xué)注意:74【例3.11】計算s=1+2+3+4+……+100,使用goto語句實現(xiàn)#include<stdio.h>main(){inti=1,s=0;

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

gotoloop;

}printf("%d\n",s);}75【例3.11】計算s=1+2+3+4+……+100,使用go循環(huán)結(jié)構(gòu)中的跳轉(zhuǎn)語句有如下三種語句實現(xiàn)跳轉(zhuǎn):continue語句break語句goto語句在循環(huán)語句的循環(huán)體中使用,可以進(jìn)行循環(huán)的流程控制76循環(huán)結(jié)構(gòu)中的跳轉(zhuǎn)語句有如下三種語句實現(xiàn)跳轉(zhuǎn):76后續(xù)語句…continue;

…YN表達(dá)式?后續(xù)語句…continue;…表達(dá)式?YNcontinue語句及應(yīng)用功能:中斷循環(huán)體的本次執(zhí)行(即跳過循環(huán)體中尚未執(zhí)行的語句),立即開始執(zhí)行下一次循環(huán)。while語句do-while語句后續(xù)語句計算表達(dá)式3計算表達(dá)式1…continue;…表達(dá)式2?YNfor語句77后續(xù)語句…YN表達(dá)式?后續(xù)語句…表達(dá)式?YNcontinue例如:⑴intx,n=0,s=0;while(n<10){scanf("%d",&x);

if(x<0)continue;

s+=x;n++;};

⑵intx,n=0,s=0;do{scanf("%d",&x);

if(x<0)continue;

s+=x;n++;}while(n<10);

⑶for(n=0,s=0;n<10;n++){scanf("%d",&x);

if(x<0)continue;

s+=x;}78例如:⑴intx,n=0,s=0;⑵intx,n=0應(yīng)用舉例【例3.12】把100~200之間能被7整除的數(shù),以十個數(shù)為一行的形式輸出,最后輸出一共有多少個這樣的數(shù)。

for(n=100;n<=200;n++)n不能被7整除

TF終止本次循環(huán)輸出n

輸出10個數(shù)

TF

換行79應(yīng)用舉例【例3.12】把100~200之間能被7整除的數(shù),算法和程序main(){intn,j=0;for(n=100;n<=200;n++){if(n%7!=0)continue; printf("%6d",n);

j++;

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

}printf("\nj=%d\n",j);}80算法和程序main()80后續(xù)語句…break;…YN表達(dá)式?后續(xù)語句…break;…表達(dá)式?YN循環(huán)中break的應(yīng)用功能:利用break語句能夠強迫終止本層循環(huán),轉(zhuǎn)到后續(xù)語句執(zhí)行。while語句do-while語句后續(xù)語句計算表達(dá)式3計算表達(dá)式1…break;…表達(dá)式2?YNfor語句81后續(xù)語句…YN表達(dá)式?后續(xù)語句…表達(dá)式?YN循環(huán)中break例如:⑴intx,n=0,s=0;while(n<10){scanf("%d",&x);

if(x<0)break;s+=x;n++;};⑵intx,n=0,s=0;do{scanf("%d",&x);

if(x<0)break;s+=x;n++;}while(n<10);⑶for(n=0,s=0;n<10;n++){scanf("%d",&x);

if(x<0)break;s+=x;}82例如:⑴intx,n=0,s=0;⑵intx,n=0循環(huán)的嵌套如果循環(huán)語句的循環(huán)體內(nèi)又包含了另一條循環(huán)語句,則稱為循環(huán)的嵌套例如:

#include<stdio.h>main(){inti,j;

for(i=1;i<10;i++)for(j=1;j<=i;j++)printf((j==i)?"%4d\n":"%4d",i*j);

}外循環(huán)語句內(nèi)循環(huán)語句83循環(huán)的嵌套如果循環(huán)語句的循環(huán)體內(nèi)又包含了另一條循環(huán)語句,則稱注意:while、do-while、for循環(huán)語句可以并列,也可以相互嵌套,但要層次清楚,不能出現(xiàn)交叉。多重循環(huán)程序執(zhí)行時,外層循環(huán)每執(zhí)行一次,內(nèi)層循環(huán)都需要循環(huán)執(zhí)行多次。例如:for(a=1;a<=10;a++){for(b=0;b<=5;b++)

……}外循環(huán)執(zhí)行了10次,內(nèi)循環(huán)執(zhí)行6次循環(huán)正常結(jié)束時,內(nèi)循環(huán)執(zhí)行了10×6=60次84注意:while、do-while、for循環(huán)語句可以并列,舉例2【例3.13】判斷輸入的某個數(shù)m是否為素數(shù)。若是素數(shù),輸出“YES”,若不是,輸出“NO”。

思路:素數(shù)是指只能被1和它本身整除的數(shù),如5、7、11、17、…等。

分別用2、3、…,m-1嘗試能否整除整數(shù)m。如果m能被某個數(shù)整除,則m就不是素數(shù)。這是一種窮舉算法設(shè)除數(shù)為j,從2循環(huán)到m-185舉例2【例3.13】判斷輸入的某個數(shù)m是否為素數(shù)。若是素數(shù),算法和程序:#include"math.h"main(){intj,m,k;printf("Enteranintegernumber:");scanf("%d",&m);for(j=2;j<=m-1;j++)

if(m%j==0)break;printf("%d",m);if(j>=m)printf("YES\n");elseprintf("NO\n");}

輸入一個數(shù)mfor(j=2;j<=m-1;j++)m%j==0TF

退出循環(huán)

j>=mTF輸出"YES“輸出"NO"86算法和程序:#include"math.h"輸入一程序的優(yōu)化對于窮舉法來說,為了提高程序的效率,就要減少嘗試次數(shù)。#include"math.h"main(){intj,m,k;printf("Enteranintegernumber:");scanf("%d",&m);

k=sqrt(m);for(j=2;j<=k;j++)

if(m%j==0)break;printf("%d",m);if(j>=k+1)printf("YES\n");elseprintf("NO\n");}思考:如何輸出100~200中所有的素數(shù)

87程序的優(yōu)化對于窮舉法來說,為了提高程序的效率,就要減少嘗試次舉例5【例3.14】編程序,輸出以下圖形。

****************一共有4行,每行由空格和星號組成:空格數(shù)按行增加,星號按行減少變量

i

控制輸出行數(shù),從1變化到4變量j控制輸出每行的空格和星號:j從1變化到

i,每次輸出一個空格j從1變化到8-2*i+1,每次輸出一個星號使用雙重循環(huán)實現(xiàn)思路:88舉例5【例3.14】編程序,輸出以下圖形。*******一算法和程序:main(){inti,j;

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

{for(j=1;j<=i;j++)printf("");for(j=1;j<=8-(2*i-1);j++)printf("*");printf("\n");

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

輸出一個空格

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

輸出一個星號換行思考:如何輸出10行圖形?輸出圖形向右平移20個字符位置,應(yīng)如何修改程序?89算法和程序:main()for(i=1;i<=4;i【例3.15】

百錢買百雞。雞翁1,錢值5;雞母1,錢值3;雞雛3,錢值1;何以百錢買百雞?

設(shè)雞翁、雞母、小雞各為x、y、z只,根據(jù)題目要求,列出方程為:

x+y+z=1005x+3y+z/3=100三個未知數(shù),兩個方程,此題有若干個解。解決此類問題采用“試湊法”,把每一種情況都考慮到。90【例3.15】百錢買百雞。雞翁1,錢值5;雞母1,錢值3方法一:最簡單

三個未知數(shù)利用三重循環(huán)來實現(xiàn)for(x=0;x<=100;x++)for(y=0;y<=100;y++)for(z=0;z<=100;z++) {

if(x+y+z==100)&&(5*x+3*y+z/3.0==100) printf(“x=%d,y=%d,z=%d\n”,x,y,z); }三重循環(huán)共執(zhí)行次數(shù)超過一百萬次91方法一:最簡單

三個未知數(shù)利用三重循環(huán)來實現(xiàn)for(x=0;方法二:

從三個未知數(shù)的關(guān)系,利用兩重循環(huán)來實現(xiàn)for(x=0;x<=100;x++)for(y=0;y<=100;y++) {

if(7*x+4*y==100) printf(“x=%d,y=%d,z=%d\n”,x,y,100-x-y); }兩重循環(huán)共執(zhí)行次數(shù)超過一萬次x+y+z=1005x+3y+z/3=100

7x+4y=10092方法二:

從三個未知數(shù)的關(guān)系,利用兩重循環(huán)來實現(xiàn)for(x=方法三:

分析題目,利用一重循環(huán)來實現(xiàn)for(x=0;x<=100;x++) {

if(100-7*x)%4==0) &&(100-7*x)>=0

printf(“x=%d,y=%d,z=%d\n”x,(100-7*x)/4,75+3*x/4); }單循環(huán)共執(zhí)行次數(shù)101次x+y+z=1005x+3y+z/3=100

7x+4y=10093方法三:

分析題目,利用一重循環(huán)來實現(xiàn)for(x=0;x<=方法四:

詳細(xì)分析題目,利用數(shù)據(jù)間的關(guān)系設(shè)計高效算法for(x=0;x<=12;x+=4){

printf(“x=%d,y=%d,z=%d\n”,x,(100-7*x)/4,75+3*x/4);}

單循環(huán)共執(zhí)行4次x+y+z=1005x+3y+z/3=100

7x+4y=1004y和100都是4的倍數(shù)且7與4互質(zhì),所以x必為4的倍數(shù)。94方法四:

詳細(xì)分析題目,利用數(shù)據(jù)間的關(guān)系設(shè)計高效算法for(作業(yè)1、P107: 四(5、6、7、8、9、10)2、P110: 實驗6循環(huán)結(jié)構(gòu)程序設(shè)計95作業(yè)1、P107:95第3章程序控制結(jié)構(gòu)煙臺大學(xué)計算機學(xué)院劉培華C

語言程序設(shè)計96第3章程序控制結(jié)構(gòu)煙臺大學(xué)計算機學(xué)院劉培華C本章主要內(nèi)容:C語言中程序設(shè)計的三種結(jié)構(gòu):順序結(jié)構(gòu)選擇結(jié)構(gòu)循環(huán)結(jié)構(gòu)97本章主要內(nèi)容:C語言中程序設(shè)計的三種結(jié)構(gòu):2程序的三種基本結(jié)構(gòu)順序結(jié)構(gòu)N-S結(jié)構(gòu)圖流程圖ABAB選擇結(jié)構(gòu)YNABP成立?PTFAB98程序的三種基本結(jié)構(gòu)順序結(jié)構(gòu)N-S結(jié)構(gòu)圖流程圖ABA選擇結(jié)構(gòu)程序的三種基本結(jié)構(gòu)循環(huán)結(jié)構(gòu)NYP成立?A當(dāng)P成立時

A直到型循環(huán)

A當(dāng)P成立時YNAP成立?當(dāng)型循環(huán)N-S結(jié)構(gòu)圖流程圖99程序的三種基本結(jié)構(gòu)循環(huán)結(jié)構(gòu)NYP成立?A當(dāng)P成立時直到型循環(huán)C語言的語句類型主要內(nèi)容:說明性語句表達(dá)式語句控制語句復(fù)合語句100C語言的語句類型主要內(nèi)容:5說明性語句對程序中使用的變量、數(shù)組、函數(shù)等操作對象進(jìn)行定義、聲明的描述語句只起說明作用,不產(chǎn)生可執(zhí)行的機器指令代碼。

例如:inta,b;

floatfunction(int,int);C程序由函數(shù)組成。函數(shù)的格式:函數(shù)名(參數(shù)表){

說明部分;執(zhí)行部分;}數(shù)據(jù)類型說明語句可執(zhí)行語句101說明性語句對程序中使用的變量、數(shù)組、函數(shù)等操作對象進(jìn)行定義、表達(dá)式后面加一個分號,構(gòu)成表達(dá)式語句x=3;y=y+5;x=a-b&&c||d;printf("x=%d,y=%d\n",x,y);sort(a,10);表達(dá)式語句賦值語句函數(shù)調(diào)用語句注意:①分號是語句必不可少的一部分②單獨的一個分號“;”構(gòu)成一個空語句例如:;(空語句,是最簡單的C語句)102表達(dá)式后面加一個分號,構(gòu)成表達(dá)式語句表達(dá)式語句賦值語句函數(shù)控制語句1.選擇分支控制語句

if()…else…

switch(){…} 2.循環(huán)控制語句

for()…

while()…do…while()3.其他控制語句

break、continue、gotoreturn103控制語句1.選擇分支控制語句8復(fù)合語句用一對花括號“{}”括起來的若干條語句

花括號中可以是說明語句、表達(dá)式語句、控制語句,也可以是復(fù)合語句例如:⑴if(a>b){max=a;min=b;}

⑵for(n=1;n<10;n++)

{p=n+p;if(p>=100)

{

printf(“%d\n”,p);break;

}

}

104復(fù)合語句用一對花括號“{}”括起來的若干條語句9復(fù)合語句(續(xù))復(fù)合語句中如果有說明性語句,應(yīng)該寫在可執(zhí)行語句的前面例如:

main(){inta,b;a=b=100;{floatc=10.23;printf("%f\n",c);}printf("%d%d\n",a,b);}要特別注意:花括號的配對花括號的位置C語言學(xué)習(xí)的難點之一105復(fù)合語句(續(xù))復(fù)合語句中如果有說明性語句,應(yīng)該寫在可執(zhí)行語句3.1順序結(jié)構(gòu)程序設(shè)計3.4.1順序結(jié)構(gòu)程序的一般算法描述變量定義變量賦值運算處理輸出結(jié)果可用:變量初始化賦值語句輸入函數(shù)調(diào)用語句注意各個語句的順序1063.1順序結(jié)構(gòu)程序設(shè)計3.4.1順序結(jié)構(gòu)程序的一般算法描3.1.1順序結(jié)構(gòu)程序設(shè)計舉例【例3.1】數(shù)據(jù)交換。從鍵盤輸入a、b的值,輸出交換以后的值。

思路:在計算機中交換變量a和b的值,不能只寫下面兩個賦值語句a=b;b=a;?正確的交換方法:c=a;a=b;b=c;1073.1.1順序結(jié)構(gòu)程序設(shè)計舉例【例3.1】數(shù)據(jù)交換。從鍵ab108ab13cba109cba14110151111611217113181141911520變量定義輸入數(shù)據(jù)輸出數(shù)據(jù)數(shù)據(jù)交換輸出結(jié)果【例3.1】數(shù)據(jù)交換問題的算法描述116變量定義輸入數(shù)據(jù)輸出數(shù)據(jù)數(shù)據(jù)交換輸出結(jié)果【例3.1】數(shù)據(jù)交換程序:main(){inta,b,c;printf("\ninputa,b:");scanf("%d,%d",&a,&b);printf("\nbeforeexchange:a=%db=%d\n",a,b);c=a;a=b;b=c;printf("afterexchange:a=%db=%d\n",a,b);}程序運行情況如下:inputa,b:32,57

beforeexchange:a=32b=57afterexchange:a=57b=32

117程序:main()程序運行情況如下:22舉例:【例3.2】已知三條邊a、b、c,求三角形面積。計算三角形面積的海倫公式:其中:設(shè)定義:整型變量a、b、c實型變量s、area118舉例:【例3.2】已知三條邊a、b、c,求三角形面積。計算程序如下:#include"math.h"main(){inta,b,c;floats,area;scanf("%d,%d,%d",&a,&b,&c);s=(a+b+c)/2.0f;area=sqrt(s*(s-a)*(s-b)*(s-c));printf("area=%8.3f\n",area);}程序運行情況如下:3,4,5

area=6.000

實際上還需要判斷a、b、c是否能構(gòu)成三角形,即應(yīng)該進(jìn)行選擇判斷處理119程序如下:#include"math.h"程序運行情況如if語句if語句的一般形式if語句的嵌套switch語句switch語句的一般形式break語句選擇結(jié)構(gòu)程序設(shè)計舉例3.2選擇結(jié)構(gòu)程序設(shè)計120if語句3.2選擇結(jié)構(gòu)程序設(shè)計25簡單分支語句語句一般格式if(表達(dá)式)

語句功能:計算表達(dá)式的值,如果是一個非0值(即邏輯真),就執(zhí)行內(nèi)嵌語句,否則(即邏輯假)跳過內(nèi)嵌語句,順序執(zhí)行后續(xù)語句。內(nèi)嵌語句,可為:賦值語句函數(shù)調(diào)用語句控制語句復(fù)合語句空語句可為算術(shù)、關(guān)系、邏輯、賦值等表達(dá)式121簡單分支語句語句一般格式功能:內(nèi)嵌語句,可為:可為算術(shù)、關(guān)系簡單分支語句的算法:例如:⑴if(x>0)m++;⑵if(a>b){c=a;a=b;b=c;}

表達(dá)式非0

TF

語句N-S結(jié)構(gòu)圖語句流程圖NY表達(dá)式非0?122簡單分支語句的算法:例如:表達(dá)式非0N-S結(jié)構(gòu)雙重分支語句語句一般格式if(表達(dá)式)

語句1

else語句2

功能:計算表達(dá)式的值,如果它的值是一個非0值(邏輯真),就執(zhí)行內(nèi)嵌語句1,之后跳過內(nèi)嵌語句2,執(zhí)行后續(xù)語句;否則跳過內(nèi)嵌語句1,執(zhí)行內(nèi)嵌語句2,之后執(zhí)行后續(xù)語句。

123雙重分支語句語句一般格式28雙重分支語句的算法:例如:⑴if(x>0)m++;elsem--;⑵if(ch>='a'&&ch<='z')

{ch=ch-32;

printf("%c\n",ch);}elseprintf("%c\n",ch);

表達(dá)式非0

TF

語句1語句2N-S結(jié)構(gòu)圖語句1

語句2流程圖NY表達(dá)式非0?124雙重分支語句的算法:例如:表達(dá)式非0N-S結(jié)構(gòu)圖多重分支語句語句一般格式if(表達(dá)式1)

語句1

elseif(表達(dá)式2)

語句2

……elseif(表達(dá)式m)

語句m

else語句

n功能:依次計算并判斷表達(dá)式i,為非0時執(zhí)行后面的語句,都為0時,執(zhí)行語句n無論執(zhí)行完那個語句分支,都轉(zhuǎn)到后續(xù)語句125多重分支語句語句一般格式30多重分支語句的算法流程圖表達(dá)式2?表達(dá)式1?語句n語句1

語句2

語句m…YNYNNY表達(dá)式m?126多重分支語句的算法流程圖表達(dá)式2?表達(dá)式1?語句n語句1多重分支語句的算法N-S結(jié)構(gòu)圖表達(dá)式1?

TF

表達(dá)式2?語句1TF

語句2…

表達(dá)式m?TF

語句m語句n例如:if(a<0)x=-1;elseif(a==0)x=0;elsex=1;127多重分支語句的算法N-S結(jié)構(gòu)圖表達(dá)式1?if語句的簡單應(yīng)用【例3.3】輸入一個字符,如果是大寫字母,則將其轉(zhuǎn)換為小寫字母輸出,否則直接輸出。輸入:用getchar或scnaf函數(shù)ch是否為大寫字母:ch>='A'&&ch<='Z'(或ch>=65&&ch<=90)大寫字母轉(zhuǎn)換為小寫字母:ch=ch+32輸出:用putchar或printf函數(shù)思路:128if語句的簡單應(yīng)用【例3.3】輸入一個字符,如果是大寫字母,程序:#include"stdio.h"main(){charch;ch=getchar();if(ch>='A'&&ch<='Z')ch=ch+32;printf("%c\n",ch);}程序運行情況如下:Gg

可使用條件表達(dá)式代替putchar(ch>='A'&&ch<='Z'?ch+32:ch);putchar('\n')129程序:#include"stdio.h"程序運行情況如下

if語句的嵌套如果if的內(nèi)嵌語句中又使用了一個if語句,則構(gòu)成if語句的嵌套。

【例4.a】比較兩個整數(shù)的關(guān)系。#include<stdio.h>main(){intx,y;printf("EnterintegerXandY:");scanf("%d%d",&x,&y);

if(x!=y)

if(x>y)printf("X>Y\n");

elseprintf("X<Y\n");

elseprintf("X=Y\n");}應(yīng)該正確判斷:if的內(nèi)嵌語句if和else的配對提倡縮格書寫有利于閱讀程序130if語句的嵌套如果if的內(nèi)嵌語句中又使用了一個if語句,則

if語句嵌套的形式簡單if語句的嵌套形式if(表達(dá)式)if語句雙重(或多重)分支if語句的嵌套形式if(表達(dá)式)if語句else

if語句可以是各種形式的if語句可以是各種形式的if語句如果是簡單if語句,必須用“{}”括起131if語句嵌套的形式簡單if語句的嵌套形式可以是各種形式的例如:if(a>b) if(a>c) if(a>d)m=1; elsem=2; elsem=3; 問題:哪一個else和哪一個if相匹配?規(guī)則:在嵌套的if~else語句中,else總是與上面的離它最近的尚未配對的if

配對。132例如:if(a>b) 問題:哪一個else和舉例【例3.4】輸入一個數(shù),判斷它是奇數(shù)還是偶數(shù),如果是奇數(shù)則進(jìn)一步判斷它是否為5的倍數(shù)。

定義變量x輸入x的值

x是奇數(shù)

TF

輸出“odd”x是5的倍數(shù)輸出“even”

溫馨提示

  • 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

提交評論