第3章 程序流程控制_第1頁(yè)
第3章 程序流程控制_第2頁(yè)
第3章 程序流程控制_第3頁(yè)
第3章 程序流程控制_第4頁(yè)
第3章 程序流程控制_第5頁(yè)
已閱讀5頁(yè),還剩110頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

C語(yǔ)言程序設(shè)計(jì)寶雞文理學(xué)院計(jì)算機(jī)科學(xué)系2基本要求:學(xué)會(huì)使用printf、scanf、putchar和getchar函數(shù)完成簡(jiǎn)單程序。掌握編寫、調(diào)試和運(yùn)行簡(jiǎn)單的順序結(jié)構(gòu)程序。掌握選擇結(jié)構(gòu)的幾種語(yǔ)句的運(yùn)用。掌握循環(huán)結(jié)構(gòu)的幾種語(yǔ)句的使用。學(xué)會(huì)結(jié)構(gòu)化編程的綜合應(yīng)用。重點(diǎn):順序結(jié)構(gòu)程序設(shè)計(jì)。printf、scanf、putchar和getchar函數(shù)的使用。if語(yǔ)句和switch--case語(yǔ)句。while、do—while和for語(yǔ)句的執(zhí)行過(guò)程及while、do—while和for語(yǔ)句的應(yīng)用。break語(yǔ)句和continue語(yǔ)句的功能和區(qū)別。本章教學(xué)與考核內(nèi)容13難點(diǎn):結(jié)構(gòu)化流程圖描述算法。選擇結(jié)構(gòu)的嵌套。循環(huán)結(jié)構(gòu)的嵌套??己四繕?biāo):結(jié)構(gòu)化程序設(shè)計(jì)方法和三種基本結(jié)構(gòu)。格式化輸入/輸出函數(shù)和常用其它常用輸入/輸出函數(shù)的使用。條件運(yùn)算符、條件表達(dá)式。if語(yǔ)句和switch--case語(yǔ)句。三類循環(huán)語(yǔ)句及其編程。嵌套的if語(yǔ)句和嵌套的循環(huán)語(yǔ)句。一些常用的計(jì)算機(jī)程序設(shè)計(jì)算法。本章教學(xué)與考核內(nèi)容243.1結(jié)構(gòu)化程序設(shè)計(jì)的三種基本結(jié)構(gòu)

3.2順序結(jié)構(gòu)

3.3選擇結(jié)構(gòu)3.4循環(huán)結(jié)構(gòu)

第3章程序流程控制5順序結(jié)構(gòu)N-S結(jié)構(gòu)圖流程圖ABAB選擇結(jié)構(gòu)YNABP成立?PTFAB3.1程序的三種基本結(jié)構(gòu)6循環(huán)結(jié)構(gòu)NYP成立?A當(dāng)P成立時(shí)

A直到型循環(huán)A當(dāng)P成立時(shí)YNAP成立?當(dāng)型循環(huán)N-S結(jié)構(gòu)圖流程圖3.1程序的三種基本結(jié)構(gòu)73.2順序結(jié)構(gòu)3.2.1賦值語(yǔ)句賦值語(yǔ)句是由賦值表達(dá)式再加上分號(hào)構(gòu)成的表達(dá)式語(yǔ)句。其一般形式為:變量=表達(dá)式;【例3.1】賦值語(yǔ)句舉例

#include”stdio.h”main(){inta=10,x=5,y=6;a+=a*=6;x=y++;y=++x;

printf(“%d,%d,%d”,a,x,y);

}8賦值語(yǔ)句的使用中需要注意以下幾點(diǎn)1.由于在賦值符“=”右邊的表達(dá)式也可以又是一個(gè)賦值表達(dá)式,下述形式:變量=(變量=…=表達(dá)式);

是成立的,從而形成嵌套的情形。例如:a=b=c=d=e=5;

按照賦值運(yùn)算符的右接合性,等效于:

e=5;d=e;c=d;b=c;a=b;2.在變量說(shuō)明中給變量賦初值和賦值語(yǔ)句的區(qū)別。 給變量賦初值是變量說(shuō)明的一部分,賦初值后的變量與其后的其它同類變量之間仍必須用逗號(hào)間隔,而賦值語(yǔ)句則必須用分號(hào)結(jié)尾。93.在變量說(shuō)明中,不允許連續(xù)給多個(gè)變量賦初值。如inta=b=c=5;是錯(cuò)誤的;必須寫為inta=5,b=5,c=5;而賦值語(yǔ)句允許連續(xù)賦值a=b=c=5;4.賦值表達(dá)式和賦值語(yǔ)句的區(qū)別。 賦值表達(dá)式是一種表達(dá)式,它可以出現(xiàn)在任何允許表達(dá)式出現(xiàn)的地方,而賦值語(yǔ)句則不能。下述語(yǔ)句是合法的:

if((x=y+5)>0)z=x;語(yǔ)句的功能是,若表達(dá)式x=y+5大于0則z=x下述語(yǔ)句是非法的:

if((x=y+5;)>0)z=x;因?yàn)閤=y+5;是語(yǔ)句,不能出現(xiàn)在表達(dá)式中。賦值語(yǔ)句的使用中需要注意以下幾點(diǎn)105.賦值語(yǔ)句的作用是計(jì)算表達(dá)式的值,并賦給變量。(1)對(duì)于任何一個(gè)變量必須先賦值,然后才能引用,否則,未賦初值的變量將以一個(gè)隨機(jī)值參與運(yùn)算。(2)賦值號(hào)兩邊的類型必須一致,但表達(dá)式值為整數(shù)時(shí),它可自動(dòng)轉(zhuǎn)化為實(shí)型后賦給該實(shí)型變量。賦值語(yǔ)句的使用中需要注意以下幾點(diǎn)11printf函數(shù)一般形式

printf(格式控制,參數(shù)2,…,參數(shù)n)

功能:按格式控制所指定的格式,在標(biāo)準(zhǔn)輸出設(shè)備上輸出參數(shù)2、…、參數(shù)n的值。例如有程序段:inta=123,b=100;printf("%d%d%d\n",a,b,a+b);printf("c=%d+%d=%d\n",a,b,a+b);3.2.2格式輸出與輸入12格式輸出函數(shù)的一般形式printf(“格式控制字符串”,輸出參數(shù)表);用雙引號(hào)括起來(lái),控制輸出項(xiàng)的格式

和輸出一些提示信息可以是一個(gè)或多個(gè)輸出項(xiàng).可以是常量或變量表達(dá)式,用逗號(hào)分隔。類型可以是

整型,實(shí)型,字符型和字符串型.具體的講,printf語(yǔ)句,就是把輸出參數(shù)表中的表達(dá)式的值,按照格式控制字符串的格式,依次在指定的位置輸出,如果輸出位置不夠,從左到右依次輸出前幾個(gè)的值。13格式控制用雙引號(hào)括起的字符串,用于指定輸出數(shù)據(jù)的類型、格式、個(gè)數(shù)包括:普通字符和格式說(shuō)明符照原樣輸出

printf("c=%d+%d=%d\n",a,b,a+b);格式說(shuō)明符:指定輸出3個(gè)十進(jìn)制整型數(shù),分別為變量a、b、a+b的值14在printf語(yǔ)句的格式控制字符串中,有三類字符:普通字符:按原樣輸出,主要起提示作用。轉(zhuǎn)義字符:指明特定的操作,如\n換行、\t橫向跳格格式說(shuō)明部分:由%引導(dǎo)的格式字符串組成

輸出參數(shù)表中的表達(dá)式,就是按照格式說(shuō)明部分指定的格式,在格式控制字符串中的相應(yīng)位置輸出的。

格式說(shuō)明部分的一般格式為:

%[flags][width][.prec][F|N|h|L][type]在這里,我們對(duì)常用的幾種形式進(jìn)行介紹!15輸出格式說(shuō)明符整型數(shù)據(jù)

%d以有符號(hào)十進(jìn)制形式輸出整型數(shù)%o以無(wú)符號(hào)八進(jìn)制形式輸出整型數(shù)%x以無(wú)符號(hào)十六進(jìn)制形式輸出整型數(shù)%u以無(wú)符號(hào)十進(jìn)制形式輸出整型數(shù)實(shí)型數(shù)據(jù)

%f以小數(shù)形式輸出實(shí)型數(shù)%e以指數(shù)形式輸出實(shí)型數(shù)%g按數(shù)值寬度最小的形式輸出實(shí)型數(shù)字符型數(shù)據(jù)

%c輸出一個(gè)字符%s輸出字符串其他

%%輸出字符%本身在%和格式符之間可以使用附加說(shuō)明符16附加格式說(shuō)明符l輸出長(zhǎng)整型數(shù)(只可與d、o、x、u結(jié)合用)m指定數(shù)據(jù)輸出的寬度(即域?qū)挘?n對(duì)實(shí)型數(shù)據(jù),指定輸出n位小數(shù);對(duì)字符串,指定左端截取n個(gè)字符輸出+使輸出的數(shù)值數(shù)據(jù)無(wú)論正負(fù)都帶符號(hào)輸出-使數(shù)據(jù)在輸出域內(nèi)按左對(duì)齊方式輸出整數(shù)位數(shù)+小數(shù)位數(shù)+小數(shù)點(diǎn)自動(dòng)對(duì)n位后小數(shù)四舍五入

例如:%ld——輸出十進(jìn)制長(zhǎng)整型數(shù)%m.nf——右對(duì)齊,m位域?qū)?,n位小數(shù)或n個(gè)字符%-m.nf——左對(duì)齊17格式輸出printf函數(shù)運(yùn)用示例:1.printf(“It’sfun!”);輸出:It’sfun!inta=1,b=2;printf(“%d,%d”,a,b);輸出:1,23.inta=1,b=2;printf(“a=%d\nb=%d”,a,b);輸出:a=1b=2inta=1,b=2;printf(“%d”,a+b);輸出:3inta=1,b=2;printf(“a+b”);輸出:a+b18【例3.2】整型數(shù)據(jù)的輸出main(){inta=11,b=22;intm=-1;longn=123456789;printf("%d%d\n",a,b);printf("a=%d,b=%d\n",a,b);printf("m:%d,%o,%x,%u\n",m,m,m,m);printf("n=%d\n",n);printf("n=%ld\n",n);}程序輸出:1122a=11,b=22m:-1,177777,ffff,65535n=123456789n=123456789例jc1_a19【例3.3】實(shí)型數(shù)據(jù)的輸出main(){floatx=1234.56,y=1.23456789;doublez=1234567.123456789;printf("x=%f,y=%f\n",x,y);printf("z=%f\n",z);printf("z=%e\n",z);printf("z=%g\n",z);printf("z=%18.8f\n",z);printf("x=%10.3f\n",x);printf("x=%-10.3f\n",x);printf("x=%4.3f\n\n",x);}程序輸出:x=1234.560059,y=1.234568z=1234567.123457z=1.23457e+06z=1234570z=1234567.12345679x=1234.560x=1234.560x=1234.560例jc2_b20【例3.4】字符型數(shù)據(jù)的輸出main(){intm=97;charch='B';printf("m:%d%c\n",m,m);printf("ch:%d%c\n",ch,ch);printf("%s\n","student");printf("%10s\n","student");printf("%-10s\n","student");printf("%10.3s\n","student");printf("%.3s\n\n","student");}21【例3.5】#include<stdio.h>main(){inta=65,i=-2;charc=‘a(chǎn)’;floatb=1.34576;doubled=4.65;unsignedj=65535;printf(“\n%s”,”hello”);printf(“\n%d,%c,%d,%u,%u,%d”,a,a,i,i,j,j);printf(“\n%.3f,%.4lf”,b,d);printf(“\n%d,%d”,a+i,i++);}例jc4_c22注意:printf函數(shù)格式控制中的格式說(shuō)明符與輸出參數(shù)的個(gè)數(shù)和類型必須一一對(duì)應(yīng)。格式說(shuō)明符的%和后面的描述符之間不能有空格。除%X、%E、%G外類型描述符必須是小寫字母。長(zhǎng)整型數(shù)應(yīng)該用%ld(或%lo、%lx、%lu)格式輸出,否則會(huì)出現(xiàn)輸出錯(cuò)誤。printf函數(shù)的參數(shù)可以是常量、變量或表達(dá)式。在計(jì)算各參數(shù)值時(shí),TurboC采用從右至左的順序求值。232格式輸入函數(shù)scanf函數(shù)調(diào)用的一般形式scanf(格式控制,地址參數(shù)2…,地址參數(shù)n);功能:按格式控制指定的格式,從標(biāo)準(zhǔn)輸入設(shè)備(即鍵盤)交互輸入數(shù)據(jù),并依次存放到對(duì)應(yīng)地址參數(shù)指定的變量中(即將輸入值賦給變量)。

例如:scanf("%d%f",&a,&f);scanf("%o,%f",&b,&x);scanf("a=%d,b=%d",&a,&b);24格式控制用雙引號(hào)括起的字符串,用于指定輸入數(shù)據(jù)的類型、格式、個(gè)數(shù)以及輸入的形式

包括:普通字符和格式說(shuō)明符照原樣輸入

scanf("a=%d,b=%d",&a,&b);格式說(shuō)明符:指定輸入2個(gè)十進(jìn)制整型數(shù)賦給變量a和b25輸入格式說(shuō)明符整型數(shù)據(jù)

%d輸入十進(jìn)制整型數(shù)%u輸入無(wú)符號(hào)的十進(jìn)制整型數(shù)%o輸入八進(jìn)制整型數(shù)%x輸入十六進(jìn)制整型數(shù)實(shí)型數(shù)據(jù)

%f輸入小數(shù)形式的單精度實(shí)型數(shù)%e輸入指數(shù)形式的單精度實(shí)型數(shù)字符型數(shù)據(jù)

%c輸入單個(gè)字符%s輸入一個(gè)字符串在%和格式符之間可以使用附加說(shuō)明符26附加格式說(shuō)明符l與d、o、x、u結(jié)合輸入長(zhǎng)整型數(shù)與f結(jié)合輸入double型數(shù)m指定數(shù)據(jù)輸入的寬度(即域?qū)挘?忽略讀入的數(shù)據(jù)(即不將讀入數(shù)據(jù)賦給相應(yīng)變量)例如:%ld、%lo——輸入十進(jìn)制、八進(jìn)制長(zhǎng)整型數(shù)%lf、%le——輸入雙精度實(shí)型數(shù)%mf——輸入m位數(shù)(域?qū)挘?*d——忽略輸入的一個(gè)整型數(shù)對(duì)float和double型指整數(shù)位數(shù)+小數(shù)點(diǎn)+小數(shù)位數(shù)27

輸入數(shù)據(jù)時(shí)要嚴(yán)格按照scanf語(yǔ)句中格式控制字符串的形式輸入。看下面的例子:1.scanf(“%d%d”,&a,&b);輸入:12回車或者1回車2回車2.scanf(“%d,%d”,&a,&b);輸入:1,2回車3.Scanf(“a=%d,b=%d”,&a,&b);輸入:a=1,b=2回車28例如:scanf("%d%d%d",&a,&b,&c);輸入3個(gè)整型十進(jìn)制數(shù),以空白符(空格、tab鍵或回車鍵)分隔

scanf("%d,%o,%f",&a,&b,&x);輸入3個(gè)數(shù),以“,”分隔scanf("a=%d,b=%d",&a,&b);輸入的形式是:a=32,b=28(普通字符要照原樣輸入)29【例3.6】main(){inta,b,c;longm;floatx;doubley;charch,string[20];printf("inputa,b,c,m:");scanf("%d%o%x%ld",&a,&b,&c,&m);printf("a=%d,b=%d,c=%d,m=%ld\n",a,b,c,m);printf("inputx,y:");scanf("%f%lf",&x,&y);getchar();printf("x=%f,y=%f\n",x,y);printf("inputch,string:");scanf("%c%s",&ch,string);printf("ch=%c,string=%s\n\n",ch,string);}運(yùn)行jc530使用scanf函數(shù)應(yīng)注意:要求在程序運(yùn)行中輸入數(shù)據(jù),輸入的數(shù)據(jù)個(gè)數(shù)和類型必須與格式說(shuō)明符一一對(duì)應(yīng)。地址參數(shù)形式:&變量名(除數(shù)組或指針變量)即:參數(shù)的第二部分一定是地址列表,不能是表達(dá)式,請(qǐng)記得在變量前加上&。

格式控制中有普通字符時(shí),必須照原樣輸入。格式控制中無(wú)普通字符時(shí),輸入的數(shù)值型數(shù)據(jù)和字符串用空格間隔,也可以用回車鍵、tab鍵分隔,字符型數(shù)據(jù)不必分隔。double型數(shù)據(jù)輸入時(shí),必須用%lf或%le格式實(shí)型數(shù)輸入時(shí)域?qū)挷荒苡胢.n形式的附加說(shuō)明即:實(shí)數(shù)不許規(guī)定精度,像%10.4f是不合法的。

為了減少不必要的輸入量,除了逗號(hào)、分號(hào)、空格符以外,格式控制中盡量不要出現(xiàn)普通字符,也不要使用‘\n’

、‘\t’

等轉(zhuǎn)義字符%后面有數(shù)字,可以自動(dòng)截取該長(zhǎng)度的數(shù)據(jù)作為輸入值。如果輸入時(shí)類型不匹配則停止處理,返回0。31scanf("%c%c%c",&ch1,&ch2,&ch3);要輸入:abc

不能輸入:a

b

c

注意數(shù)值型數(shù)據(jù)與char型數(shù)據(jù)的混合輸入注意(續(xù)):格式符之間若無(wú)普通字符,則:輸入的數(shù)值型數(shù)據(jù)用空白符分隔輸入的char型數(shù)據(jù)不必分隔

例如:scanf("%d%d",&m,&n);scanf("%c",&ch);錯(cuò)誤輸入:32

28

a

正確輸入:32

28a

32intputchar(int)

向標(biāo)準(zhǔn)輸出設(shè)備(一般為顯示器)輸出一個(gè)字符,并返回該字母的ASCII碼值。參數(shù)可以是字符常量、變量或整型常量、變量。如:#include<stdio.h>main(){inta=65;charc=‘d’;putchar(a);putchar(97);putchar(‘\n’);putchar(c);}3.2.3字符輸入輸出函數(shù)1.字符輸出函數(shù)輸出為:Aad332.字符輸入函數(shù)intgetchar(void)

從輸入設(shè)備(一般為鍵盤)上輸入一個(gè)字符。它每被調(diào)用一次,就從標(biāo)準(zhǔn)輸入設(shè)備上取一個(gè)字符,返回值是該字符的ASCII編碼值,可以賦給字符變量或整型變量。例:#include<stdio.h>main(){inti,j;charc;i=getchar();putchar(i);j=getchar();putchar(j);c=getchar();putchar(c);}思考:以下三種不同的輸入,輸出情況如何?

1.abcdefg2.ab3.abcdefg

執(zhí)行g(shù)etchar()時(shí)輸入字符以回車結(jié)束,同時(shí)回車字符也可以做為輸入的字符。

注意Ch3_1343.2順序結(jié)構(gòu)程序設(shè)計(jì)4.順序結(jié)構(gòu)程序的一般算法描述變量定義變量賦值運(yùn)算處理輸出結(jié)果可用:變量初始化賦值語(yǔ)句輸入函數(shù)調(diào)用語(yǔ)句注意各個(gè)語(yǔ)句的順序35順序結(jié)構(gòu)程序設(shè)計(jì)舉例【例3.7】數(shù)據(jù)交換。從鍵盤輸入a、b的值,輸出交換以后的值。

思路:在計(jì)算機(jī)中交換變量a和b的值,不能只寫下面兩個(gè)賦值語(yǔ)句a=b;b=a;?正確的交換方法:c=a;a=b;b=c;36程序: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);}程序運(yùn)行情況如下:inputa,b:32,57

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

area=6.000實(shí)際上還需要判斷a、b、c是否能構(gòu)成三角形,即應(yīng)該進(jìn)行選擇判斷處理運(yùn)行jc3_16393.3選擇結(jié)構(gòu)3.3.1if語(yǔ)句(1)if語(yǔ)句的一般形式(2)if語(yǔ)句的嵌套3.3.2switch語(yǔ)句(1)switch語(yǔ)句的一般形式(2)break語(yǔ)句選擇結(jié)構(gòu)程序設(shè)計(jì)舉例40簡(jiǎn)單分支語(yǔ)句語(yǔ)句一般格式

if(表達(dá)式)

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

c=a;a=b;b=c;}

表達(dá)式非0TF

語(yǔ)句N-S結(jié)構(gòu)圖語(yǔ)句流程圖NY表達(dá)式非0?42雙重分支語(yǔ)句語(yǔ)句一般格式if(表達(dá)式)

語(yǔ)句1else語(yǔ)句2

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

43雙重分支語(yǔ)句的算法:例如:⑴

if(x>0)m++;elsem--;⑵if(ch>='a'&&ch<='z')

ch=ch-32;printf("%c\n",ch);}

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

表達(dá)式非0TF

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

語(yǔ)句1

語(yǔ)句2流程圖NY表達(dá)式非0?44多重分支語(yǔ)句語(yǔ)句一般格式if(表達(dá)式1)

語(yǔ)句1

elseif(表達(dá)式2)

語(yǔ)句2

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

語(yǔ)句m

else語(yǔ)句

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

語(yǔ)句1

語(yǔ)句2

語(yǔ)句m…YNYNNY表達(dá)式m?46多重分支語(yǔ)句的算法N-S結(jié)構(gòu)圖

表達(dá)式1?

TF

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

語(yǔ)句2…

表達(dá)式m?

TF

語(yǔ)句m語(yǔ)句n例如:if(a<0)x=-1;elseif(a==0)x=0;elsex=1;47if語(yǔ)句的簡(jiǎn)單應(yīng)用【例3.9】輸入一個(gè)字符,如果是大寫字母,則將其轉(zhuǎn)換為小寫字母輸出,否則直接輸出。輸入:用getchar或scnaf函數(shù)ch是否為大寫字母:ch>='A'&&ch<='Z'(或ch>=65&&ch<=90)大寫字母轉(zhuǎn)換為小寫字母:ch=ch+32輸出:用putchar或printf函數(shù)思路:48程序:#include"stdio.h"main(){charch;ch=getchar();if(ch>='A'&&ch<='Z')ch=ch+32;printf("%c\n",ch);}程序運(yùn)行情況如下:G

g運(yùn)行jc4_1可使用條件表達(dá)式代替putchar(ch>='A'&&ch<='Z'?ch+32:ch);putchar('\n')49if語(yǔ)句的嵌套如果if的內(nèi)嵌語(yǔ)句中又使用了一個(gè)if語(yǔ)句,則構(gòu)成if語(yǔ)句的嵌套。

【例3.10】比較兩個(gè)整數(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)嵌語(yǔ)句if和else的配對(duì)運(yùn)行jc4_2提倡縮格書(shū)寫有利于閱讀程序50if語(yǔ)句嵌套的形式簡(jiǎn)單if語(yǔ)句的嵌套形式if(表達(dá)式)if語(yǔ)句雙重(或多重)分支if語(yǔ)句的嵌套形式if(表達(dá)式)if語(yǔ)句else

if語(yǔ)句可以是各種形式的if語(yǔ)句可以是各種形式的if語(yǔ)句如果是簡(jiǎn)單if語(yǔ)句,必須用“{}”括起51例如:⑴if(c<=100)

if(c>=50)printf("50<=c<=100\n");⑵if(c<=100)if(c>=50)printf("50<=c<=100\n");elseprintf("c<50\n");else

if(c<=150)printf("100<c<=150\n");elseprintf("c>150\n");⑶if(c<=100)if(c>=50)printf("50<=c<=100\n");elseprintf("c<50\n")與哪個(gè)if配對(duì)?52再例如:if(a>b) if(a>c) if(a>d)m=1;elsem=2;elsem=3; 問(wèn)題:哪一個(gè)else和哪一個(gè)if相匹配?規(guī)則:在嵌套的if~else語(yǔ)句中,else總是與上面的離它最近的尚未配對(duì)的if

配對(duì)。53舉例【例3.11】輸入一個(gè)數(shù),判斷它是奇數(shù)還是偶數(shù),如果是奇數(shù)則進(jìn)一步判斷它是否為5的倍數(shù)。

定義變量x輸入x的值

x是奇數(shù)

TF

輸出“odd”x是5的倍數(shù)輸出“even”TF是5的倍數(shù)54程序: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);}運(yùn)行jc4_4思考:如果沒(méi)有,算法和輸出如何?55學(xué)習(xí)if語(yǔ)句的難點(diǎn)if~else語(yǔ)句的配對(duì)正確用表達(dá)式描述條件例如:當(dāng)x大于5小于10時(shí)令x自增

if(5<x<10)x++;正確判斷內(nèi)嵌語(yǔ)句例如:if(x<y)x=x+3;y=y-2;elsex=x-3;y=y+2;if(x>5&&x<10)x++;{}{}56熟悉常用的if表達(dá)式形式例如有定義:inta,b=0;a等于什么值時(shí),執(zhí)行b=2;語(yǔ)句?if(a==0)b=2;if(a==1)b=2;if(a!=0)b=2;if(a=1)b=2;if(a=0)b=2;if(a)b=2;if(!a)b=2;等價(jià)于等價(jià)于573.3.2switch語(yǔ)句switch語(yǔ)句的一般形式

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

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

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

/),并對(duì)x和y進(jìn)行指定的算術(shù)運(yùn)算。

思路:設(shè)x和y為float型變量并賦初值;輸入的運(yùn)算符op為char型變量;根據(jù)op的值(為'+'、'-'、'*'、'/')進(jìn)行x和y的相加、相減、相乘、相除運(yùn)算(選擇分支);還要考慮到輸入字符不是+、-、*或/時(shí)的情況61實(shí)型數(shù)通常不使用z==0或z!=0的比較可用if((int)z)代替程序:#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);}運(yùn)行jc4_462注意:switch語(yǔ)句的書(shū)寫格式:語(yǔ)句體本身必須用花括號(hào)括起;case和default后面如果有多條語(yǔ)句,則可以不必使用花括號(hào);case和常量表達(dá)式之間必須有空格;default可以寫在語(yǔ)句體的任何位置,也可以省略不寫break語(yǔ)句可以改變case的語(yǔ)句標(biāo)號(hào)作用,終止后續(xù)case語(yǔ)句序列的執(zhí)行。

switch語(yǔ)句和break語(yǔ)句結(jié)合,可以實(shí)現(xiàn)程序的選擇控制(break語(yǔ)句還可以在循環(huán)語(yǔ)句中使用)允許switch嵌套使用,但同一個(gè)switch語(yǔ)句中,任意兩個(gè)case的常量表達(dá)式值不能相同。63選擇結(jié)構(gòu)程序設(shè)計(jì)舉例【例3.13】求一元二次方程ax2+bx+c=0的根。

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

求根公式:

判別式d=b2-4ac

當(dāng)

d=0時(shí),方程有兩個(gè)相等的實(shí)根:x1=x2=-b/(2*a)當(dāng)d>0時(shí),方程有兩個(gè)不相等的實(shí)根:x1=(-b+sqrt(d))/(2*a)x2=(-b-sqrt(d))/(2*a)當(dāng)d<0時(shí),方程有兩個(gè)虛根:x1=jp+ipix2=jp-ipi實(shí)部

jp=-b/(2*a)

虛部

ip=sqrt(-d)/(2*a)64算法:

定義變量a、b、c、d、x1、x2、jp、ip輸入系數(shù)a、b、ca==0TF

計(jì)算d=b*b-4*a*c

不是二d==0

次方程TFd>0

計(jì)算重根TF

輸出重根計(jì)算實(shí)根計(jì)算虛根輸出實(shí)根輸出虛根65程序:#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)

/*相等的實(shí)根*/

{printf("hastwoequalroots:\n");

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

}66程序(續(xù)):

elseif(d>1e-6)

/*不相等的實(shí)根*/

{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);

}

}

}運(yùn)行jc4_667舉例(續(xù)):【例3.14】輸入年份,判別該年是否為閏年。思路:年份year為閏年的條件為①

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

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

68算法:定義變量year、leap

輸入年份year

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

TF

能被400整除?

leap=1TFleap=1leap=0leap=1?

TF

是閏年不是閏年year%400==0year%4==0&&year%100!=069程序: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);}運(yùn)行jc4_b703.4循環(huán)結(jié)構(gòu)本節(jié)主要內(nèi)容while循環(huán)控制do-while循環(huán)控制for循環(huán)控制用goto語(yǔ)句實(shí)現(xiàn)循環(huán)控制循環(huán)結(jié)構(gòu)中的跳轉(zhuǎn)語(yǔ)句循環(huán)的嵌套循環(huán)結(jié)構(gòu)程序設(shè)計(jì)舉例71本節(jié)教學(xué)目的和基本要求:要求學(xué)生了解循環(huán)結(jié)構(gòu)程序設(shè)計(jì),掌握各種循環(huán)語(yǔ)句應(yīng)用的特點(diǎn)及異同點(diǎn),掌握循環(huán)嵌套及復(fù)合結(jié)構(gòu)。本節(jié)教學(xué)重點(diǎn):各種循環(huán)語(yǔ)句應(yīng)用的特點(diǎn)及異同點(diǎn)。72

scanf(“%f”,&a);s=s+a;scanf(“%f”,&a);s=s+a;………….

這樣重復(fù)一百次,然后輸出s的值。這樣寫顯然非常麻煩。我們注意到程序中的

scanf(“%f”,&a);s=s+a;兩句話是一直重復(fù)的,如果能用一種語(yǔ)句,使這兩句話能自動(dòng)的重復(fù)執(zhí)行一百次,就可以簡(jiǎn)化了書(shū)寫的麻煩,這就是循環(huán)語(yǔ)句。編程解決這樣的一個(gè)問(wèn)題:從鍵盤輸入一百個(gè)學(xué)生的成績(jī),求總成績(jī)。從前面所學(xué),有兩種解決方法。1.設(shè)一百個(gè)變量,分別輸入學(xué)生的成績(jī),然后求和。這種方法浪費(fèi)內(nèi)存空間,顯然不實(shí)際。2.設(shè)一個(gè)變量,每次輸入一個(gè)學(xué)生成績(jī),累加后再輸入下一個(gè)學(xué)生成績(jī),如下:733.4.1while循環(huán)語(yǔ)句一般格式

while(表達(dá)式)

語(yǔ)句

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

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

當(dāng)表達(dá)式為真語(yǔ)句N-S結(jié)構(gòu)圖NY流程圖表達(dá)式非0?語(yǔ)句循環(huán)控制條件循環(huán)體75例如:【例3.15】編寫程序,求100個(gè)自然數(shù)的和即:

s=1+2+3+…+100

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

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

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

76算法和程序:main(){inti,sum;i=1;sum=0;while(i<=100)

{sum=sum+i;i++;

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

i=1,sum=0

當(dāng)i<=100sum=sum+ii++輸出sum77注意:如果while的(表達(dá)式)值為0,則循環(huán)體一次也不執(zhí)行

(例如當(dāng)i的初值=101)。在循環(huán)體中必須有使循環(huán)趨向結(jié)束的操作,否則循環(huán)將無(wú)限進(jìn)行(死循環(huán))。在循環(huán)體中,語(yǔ)句的先后位置必須符合邏輯,否則會(huì)影響運(yùn)算結(jié)果。思考程序段的輸出?

……while(i<=100){i++;sum=sum+i;}運(yùn)行后,輸出:sum=5150原因是什么?

78注意(續(xù)):為了保證循環(huán)正常運(yùn)行,應(yīng)該特別注意:循環(huán)控制條件的描述

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

循環(huán)體內(nèi)部對(duì)控制條件的影響795.2do-while語(yǔ)句語(yǔ)句一般格式

do語(yǔ)句

while(表達(dá)式);

功能:先執(zhí)行內(nèi)嵌語(yǔ)句(循環(huán)體),之后計(jì)算表達(dá)式的值,不為0(邏輯真)時(shí),再執(zhí)行循環(huán)體并判斷條件,直到表達(dá)式的值為0結(jié)束循環(huán),轉(zhuǎn)去執(zhí)行while下面的語(yǔ)句。80do-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語(yǔ)句求100個(gè)自然數(shù)的和81說(shuō)明:while和do-while都能實(shí)現(xiàn)循環(huán)控制,while結(jié)構(gòu)程序通常都可以轉(zhuǎn)換成do-while結(jié)構(gòu)區(qū)別:do-while語(yǔ)句先執(zhí)行循環(huán)體再判斷條件,循環(huán)體至少執(zhí)行一次;while語(yǔ)句先判斷條件再執(zhí)行循環(huán)體,循環(huán)體有可能一次也不執(zhí)行do—while循環(huán)體中一定要有能使表達(dá)式值趨于0的操作(如i++),否則會(huì)出現(xiàn)死循環(huán)。

82do-while語(yǔ)句的簡(jiǎn)單應(yīng)用【例3.16】用輾轉(zhuǎn)相除法求m和n的最大公約數(shù)定義m、n、rm<nTFm和n交換r=m%nm=nn=r

當(dāng)r!=0時(shí)輸出最大公約數(shù)m83算法和程序: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);}運(yùn)行jc5_3程序運(yùn)行情況如下:24,60

12843.4.3for語(yǔ)句語(yǔ)句一般格式

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

語(yǔ)句功能:計(jì)算表達(dá)式1的值,再判斷表達(dá)式2,如果其值為非0(邏輯真),則執(zhí)行內(nèi)嵌語(yǔ)句(循環(huán)體),并計(jì)算表達(dá)式3;之后再去判斷表達(dá)式2,一直到其值為0時(shí)結(jié)束循環(huán),執(zhí)行后續(xù)語(yǔ)句。循環(huán)初始條件循環(huán)控制條件循環(huán)體85for語(yǔ)句的算法N-S結(jié)構(gòu)圖for(表達(dá)式1;表達(dá)式2;表達(dá)式3)

語(yǔ)句NY流程圖計(jì)算表達(dá)式1

語(yǔ)句計(jì)算表達(dá)式3表達(dá)式2為真?例如:main(){inti,sum;sum=0;

for(i=1;i<=100;i++)sum=sum+i;printf("sum=%d\n",sum);}可部分或全部省略,但“;”不可省略86省略for語(yǔ)句的表達(dá)式⑴表達(dá)式1、2、3全省略,即:

for(;;)

就等同于:while(1),會(huì)無(wú)限循環(huán)(死循環(huán))注意:在省略某個(gè)表達(dá)式時(shí),應(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;}87例如:⑴i=1;for(;i<=100;i++)sum+=i;⑵for(i=1;;i++){…if(i>100)……}⑶for(i=1;i<=100;){…i++;…}⑷i=1;for(;;){…if(i>100)…

i++;…}88說(shuō)明:所有用while

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

語(yǔ)句實(shí)現(xiàn)。等價(jià)于:for(表達(dá)式1;表達(dá)式2

;表達(dá)式3)

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

{

語(yǔ)句;

表達(dá)式3;

}89for語(yǔ)句的簡(jiǎn)單應(yīng)用【例3.17】求n!,即計(jì)算p=1×2×3×…×n的值。

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

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

,每次循環(huán)令p=p*i90程序: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!?Sum=sum+p;

運(yùn)行jc5_491熟悉幾個(gè)循環(huán)語(yǔ)句while(!x)x++;當(dāng)x=0

時(shí),執(zhí)行循環(huán)體x++;while((c=getchar())!='\n')n=n+1;n稱為計(jì)數(shù)器,作用是統(tǒng)計(jì)輸入字符的個(gè)數(shù)while(num++<=2);printf("%d\n",num);循環(huán)體是空語(yǔ)句,退出循環(huán)后輸出num的值dox*=-3;while(x>5);先執(zhí)行循環(huán)體x*=-3,再判斷條件(x>5)for(n=0;n<26;n++)printf("%c",n+'A');作用是輸出26個(gè)大寫字母for(sum=0,i=1;i<=100;sum=sum+i,i+=2);作用是計(jì)算100以內(nèi)的奇數(shù)和

92幾種循環(huán)語(yǔ)句的比較while和do-while語(yǔ)句的表達(dá)式只有一個(gè),for語(yǔ)句有三個(gè)。while和for先判斷循環(huán)條件后執(zhí)行循環(huán)體,do-while語(yǔ)句先執(zhí)行循環(huán)體后判斷循環(huán)條件。while語(yǔ)句多用于循環(huán)次數(shù)不定的情況do-while語(yǔ)句多用于至少要運(yùn)行一次的情況for語(yǔ)句多用于要賦初值或循環(huán)次數(shù)固定的情況933.4.4循環(huán)結(jié)構(gòu)中的跳轉(zhuǎn)語(yǔ)句continue&break有如下三種語(yǔ)句實(shí)現(xiàn)跳轉(zhuǎn):continue語(yǔ)句break語(yǔ)句goto語(yǔ)句在循環(huán)語(yǔ)句的循環(huán)體中使用,可以進(jìn)行循環(huán)的流程控制94后續(xù)語(yǔ)句…continue;

…YN表達(dá)式?后續(xù)語(yǔ)句…continue;…表達(dá)式?YNcontinue語(yǔ)句及應(yīng)用功能:中斷循環(huán)體的本次執(zhí)行(即跳過(guò)循環(huán)體中尚未執(zhí)行的語(yǔ)句),立即開(kāi)始執(zhí)行下一次循環(huán)。while語(yǔ)句do-while語(yǔ)句后續(xù)語(yǔ)句計(jì)算表達(dá)式3計(jì)算表達(dá)式1…continue;…表達(dá)式2?YNfor語(yǔ)句95例如:⑴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;}96應(yīng)用舉例【例3.18】把100~200之間能被7整除的數(shù),以十個(gè)數(shù)為一行的形式輸出,最后輸出一共有多少個(gè)這樣的數(shù)。

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

TF

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

輸出10個(gè)數(shù)

TF

換行97算法和程序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);}運(yùn)行jc5_798后續(xù)語(yǔ)句…break;…YN表達(dá)式?后續(xù)語(yǔ)句…break;…表達(dá)式?YN循環(huán)中break的應(yīng)用功能:利用break語(yǔ)句能夠強(qiáng)迫終止本層循環(huán),轉(zhuǎn)到后續(xù)語(yǔ)句執(zhí)行。while語(yǔ)句do-while語(yǔ)句后續(xù)語(yǔ)句計(jì)算表達(dá)式3計(jì)算表達(dá)式1…break;…表達(dá)式2?YNfor語(yǔ)句99例如:⑴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;}1003.4.5循環(huán)的嵌套如果循環(huán)語(yǔ)句的循環(huán)體內(nèi)又包含了另一條循環(huán)語(yǔ)句,則稱為循環(huán)的嵌套【例3.19】#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);}運(yùn)行jc5_a外循環(huán)語(yǔ)句內(nèi)循環(huán)語(yǔ)句101注意:while、do-while、for循環(huán)語(yǔ)句可以并列,也可以相互嵌套,但要層次清楚,不能出現(xiàn)交叉。多重循環(huán)程序執(zhí)行時(shí),外層循環(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é)束時(shí),內(nèi)循環(huán)執(zhí)行了10×6=60次102【例3.20】輸出n~m中(0<n<m)能被3整除,且至少有一個(gè)數(shù)字是5的所有數(shù)。算法分析:

1.輸入n與m的值

2.用整型變量a從n~m循環(huán),每次值加13.若a能被3整除,執(zhí)行第4步,否則執(zhí)行第9步

9.返回第2步,察看下一個(gè)a6.i=x%107.若i值不為5,執(zhí)行第8步,否則輸出a,并執(zhí)行第9步8.x=x/10,并返回第5步4.令整型變量x=a5.若x>0,執(zhí)行第6步,否則執(zhí)行第9步103#include<stdio.h>main(){longa,x,i,n,m;scanf(“%ld%ld”,&n,&m);for(a=n;a<=m;a++)if(a%3==0){x=a;while(x>0){i=x%10;if(i==5){printf(“\t%ld”,a);break;}x=x/10;}}}程序:?jiǎn)枺耗馨補(bǔ)%3==0也放到for循環(huán)語(yǔ)句的表達(dá)式2中,寫成a<=m&&a%3==0嗎?答:不可以!104

在前面的例子中,循環(huán)體內(nèi)不但包含有循環(huán)語(yǔ)句,而且還包含有if這樣的分支結(jié)構(gòu)語(yǔ)句,這種循環(huán)體包含分支結(jié)構(gòu)的形式,叫做復(fù)合結(jié)構(gòu)。下面,我們?cè)倏磧蓚€(gè)復(fù)合結(jié)構(gòu)程序設(shè)計(jì)的例子。1053.4.6循環(huán)結(jié)構(gòu)程序設(shè)計(jì)舉例【例3.24】按每行輸出5個(gè)數(shù)的形式輸出Fibonacci數(shù)列的前20項(xiàng)

。思路:Fibonacci數(shù)列的前幾項(xiàng)是:1、1、2、3、5、8、13、21、34、…。此數(shù)列的變化規(guī)律是:1(n=1)1(n=2)fn-1+fn-2

(n>2)fn=設(shè)變量f1、f2和f3,并為f1和f2賦初值1,令f3=f1+f2得到第3項(xiàng);將f1←f2,f2←f3,再求f3=f1+f2得到第4項(xiàng);依此類推求第5項(xiàng)、第6項(xiàng)…這是一種遞推算法應(yīng)采用循環(huán)實(shí)現(xiàn)106算法和程序#defineN20main(){inti,f1,

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(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)論