計(jì)算機(jī)程序設(shè)計(jì)基礎(chǔ)課件_第1頁(yè)
計(jì)算機(jī)程序設(shè)計(jì)基礎(chǔ)課件_第2頁(yè)
計(jì)算機(jī)程序設(shè)計(jì)基礎(chǔ)課件_第3頁(yè)
計(jì)算機(jī)程序設(shè)計(jì)基礎(chǔ)課件_第4頁(yè)
計(jì)算機(jī)程序設(shè)計(jì)基礎(chǔ)課件_第5頁(yè)
已閱讀5頁(yè),還剩77頁(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)介

喬林計(jì)算機(jī)程序設(shè)計(jì)基礎(chǔ)Email:qiaolin@Tel:62792961喬林計(jì)算機(jī)程序設(shè)計(jì)基礎(chǔ)Email:qiaolin@c第三章程序控制結(jié)構(gòu)學(xué)習(xí)目標(biāo)了解結(jié)構(gòu)化程序設(shè)計(jì)的一般概念熟悉順序結(jié)構(gòu)、分支結(jié)構(gòu)與循環(huán)結(jié)構(gòu)等三種程序流程控制結(jié)構(gòu)掌握C語(yǔ)言實(shí)現(xiàn)分支結(jié)構(gòu)的if語(yǔ)句與switch語(yǔ)句,能熟練應(yīng)用if語(yǔ)句與switch語(yǔ)句編寫(xiě)程序掌握C語(yǔ)言實(shí)現(xiàn)循環(huán)結(jié)構(gòu)的while語(yǔ)句、for語(yǔ)句與do-while語(yǔ)句,能熟練應(yīng)用這三種循環(huán)控制結(jié)構(gòu)編寫(xiě)程序了解三種循環(huán)結(jié)構(gòu)的關(guān)系,掌握在循環(huán)結(jié)構(gòu)中控制程序流程轉(zhuǎn)移的方法第三章程序控制結(jié)構(gòu)學(xué)習(xí)目標(biāo)3.1C語(yǔ)言結(jié)構(gòu)化程序設(shè)計(jì)基礎(chǔ)程序的控制結(jié)構(gòu)(黑箱)單入口單出口的控制結(jié)構(gòu)易于理解三種基本控制結(jié)構(gòu):順序、分支、循環(huán)控制結(jié)構(gòu)可以嵌套,以構(gòu)成更復(fù)雜的控制結(jié)構(gòu)程序的結(jié)構(gòu)化三種基本控制結(jié)構(gòu)可以構(gòu)造任何復(fù)雜的結(jié)構(gòu)化算法結(jié)構(gòu)化程序設(shè)計(jì)原則:自頂向下,逐步求精結(jié)構(gòu)化程序設(shè)計(jì)過(guò)程:首先對(duì)任務(wù)進(jìn)行功能分解,然后使用結(jié)構(gòu)化程序設(shè)計(jì)思想逐一解決各個(gè)子問(wèn)題,最后構(gòu)造原始問(wèn)題的解好處:邏輯性強(qiáng),可讀性好,維護(hù)方便3.1C語(yǔ)言結(jié)構(gòu)化程序設(shè)計(jì)基礎(chǔ)程序的控制結(jié)構(gòu)(黑箱)3.2順序結(jié)構(gòu)順序結(jié)構(gòu)的含義由一組順序執(zhí)行的處理塊組成,每個(gè)處理塊可能包含一條或一組語(yǔ)句,完成一項(xiàng)任務(wù)順序結(jié)構(gòu)是最基本的算法結(jié)構(gòu)語(yǔ)句與復(fù)合語(yǔ)句(語(yǔ)句塊)三種語(yǔ)句結(jié)構(gòu):?jiǎn)握Z(yǔ)句(表達(dá)式;)、空語(yǔ)句(;)、復(fù)合語(yǔ)句({語(yǔ)句序列})3.2順序結(jié)構(gòu)順序結(jié)構(gòu)的含義語(yǔ)句與復(fù)合語(yǔ)句(語(yǔ)句塊)順序結(jié)構(gòu)程序示例分別輸入兩個(gè)復(fù)數(shù)的實(shí)部與虛部,計(jì)算兩個(gè)復(fù)數(shù)的和、差、積、商并輸出結(jié)果#include<stdio.h>intmain(){floata,b,c,d,real,imaginary;printf(“Inputrealsandimaginariesoftwocomplexes\n”);

scanf(“%f,%f,%f,%f”,&a,&b,&c,&d);printf(“Sum:%f+%fi\n”,a+c,b+d);printf(“Difference:%f+%fi\n”,a–c,b–d);

real=a*c–b*d;imaginary=a*d+b*c;printf(“Product:%f+%fi\n”,real,imaginary);

real=(a*c+b*d)/(c*c+d*d);imaginary=(b*c–a*d)/(c*c+d*d);printf(“Quotient:%f+%fi\n”,real,imaginary);return0;}實(shí)際需要輸入4個(gè)實(shí)數(shù)順序結(jié)構(gòu)程序示例分別輸入兩個(gè)復(fù)數(shù)的實(shí)部與虛部,計(jì)算兩個(gè)復(fù)數(shù)的3.3分支結(jié)構(gòu)分支結(jié)構(gòu)(選擇結(jié)構(gòu))的含義根據(jù)某一條件的判斷結(jié)果,確定程序的流程,即選擇哪一個(gè)程序分支中的處理塊去執(zhí)行最基本的分支結(jié)構(gòu)是二路分支結(jié)構(gòu)以條件判斷為起點(diǎn),如果判斷結(jié)果為真,則執(zhí)行A處理塊的操作,否則執(zhí)行B處理塊的操作3.3分支結(jié)構(gòu)分支結(jié)構(gòu)(選擇結(jié)構(gòu))的含義以條件判斷為起點(diǎn)if-else

語(yǔ)句語(yǔ)句格式:if(表達(dá)式)語(yǔ)句1else語(yǔ)句2表達(dá)式必須位于括號(hào)內(nèi),一般為關(guān)系或邏輯表達(dá)式先計(jì)算表達(dá)式值,若為真則執(zhí)行語(yǔ)句1,否則執(zhí)行語(yǔ)句2語(yǔ)句1與語(yǔ)句2可以為復(fù)合語(yǔ)句語(yǔ)句1與語(yǔ)句2只能有一個(gè)被執(zhí)行如果僅僅用于確定某條語(yǔ)句是否執(zhí)行,else分支可以省略if-else語(yǔ)句語(yǔ)句格式:if(表達(dá)式)語(yǔ)句1eif-else

語(yǔ)句示例一輸入一個(gè)字符,判斷它是否為0~9之間的數(shù)字#include<stdio.h>intmain(){charc;printf(“Inputacharacter:”);

c=getchar();

if(c>=48&&c<=57)printf(“Itisanumber.\n”);

elseprintf(“No,itisnotanumber.\n”);return0;}因:字符以ASCII碼值存儲(chǔ)且數(shù)字的ASCII碼值48~57故:比較ASCII碼值if-else語(yǔ)句示例一輸入一個(gè)字符,判斷它是否為0~9之if-else

語(yǔ)句示例二輸入一個(gè)整數(shù),輸出其絕對(duì)值#include<stdio.h>intmain(){intn,abs;printf(“Enterinteger:”);

scanf(“%d”,&n);

abs=n;

if(abs<0)abs=–abs;printf(“Originalinteger:%d,absolutevalue:%d\n”,n,abs);return0;}if-else語(yǔ)句示例二輸入一個(gè)整數(shù),輸出其絕對(duì)值#incif-elseif-else

語(yǔ)句語(yǔ)句格式if(表達(dá)式1)語(yǔ)句1elseif(表達(dá)式2)語(yǔ)句2…else語(yǔ)句nif-elseif-else語(yǔ)句語(yǔ)句格式if-elseif-else

示例根據(jù)百分制成績(jī)給出優(yōu)秀、通過(guò)或不通過(guò)成績(jī)#include<stdio.h>intmain(){floatscore;

printf(“Inputscore:“);

scanf(“%f“,&score);

if(score>=85&&score<=100)printf(“Excellent.\n“);

elseif(score>=60&&score<85)printf(“Pass.\n“);

elseif(score>=0&&score<60)printf(“Nopass.\n“);

else

printf(“Errorscore.\n“);return0;}if-elseif-else示例根據(jù)百分制成績(jī)給出優(yōu)秀、條件分支的嵌套條件語(yǔ)句的嵌套格式當(dāng)年齡大于50歲時(shí),若工資小于500,則長(zhǎng)200,否則長(zhǎng)300if(age>50)

if(sal<500)

sal+=200;else

sal+=300;若年齡大于50歲且工資小于500,長(zhǎng)200;若年齡不大于50歲,則長(zhǎng)300語(yǔ)法規(guī)定:else與離它最近的if配對(duì)嵌套的條件語(yǔ)句可以實(shí)現(xiàn)復(fù)雜的邏輯判斷if(age>50)

if(sal<500)

sal+=200;else

sal+=300;if(age>50){

if(sal<500)

sal+=200;}else

sal+=300;條件分支的嵌套條件語(yǔ)句的嵌套格式if(age>50)若年條件分支嵌套示例求方程ax2+bx+c=0

的根#include<stdio.h>#include<math.h>//由于用到平方根函數(shù),要用此頭文件intmain(){floata,b,c,x1,x2,p,q,m;//定義實(shí)型變量

printf(“Enter3coefficients:“);

scanf(“%f,%f,%f“,&a,&b,&c);//從鍵盤讀入方程的三個(gè)系數(shù)

if(a==0.0&&b==0&&c==0)//分支1:三個(gè)系數(shù)全為0

printf(“anyvalue\n“);

else

if(a==0&&b!=0)//分支2:系數(shù)a為0,解一元一次方程

printf(“x1=x2=%f\n",–c/b);

else

//分支3:解一元二次方程的兩個(gè)根{

m=b*b–4.0*a*c;…條件分支嵌套示例求方程ax2+bx+c=0的條件分支嵌套示例

if(m>=0){//解實(shí)根

x1=(–b+sqrt(m))/(2.0*a);

x2=(–b–sqrt(m))/(2.0*a);

printf(“x1=%f\n“,x1);//輸出兩個(gè)實(shí)根

printf(“x2=%f\n“,x2);}

else

{

//解虛根

p=–b/(2.0*a);

q=sqrt(–m)/(2.0*a);

printf(“x1=%f+%fi\n“,p,q);

printf(“x2=%f–%fi\n“,p,q);}}return0;}條件分支嵌套示例if(m>=0)switch

分支語(yǔ)法計(jì)算過(guò)程先計(jì)算表達(dá)式的值依次與一組常量比較若相同則執(zhí)行該分支否則轉(zhuǎn)向default分支退出switch語(yǔ)句說(shuō)明switch后面的表達(dá)式必須為整型、字符型或枚舉型case后面必須為常量表達(dá)式,則各個(gè)case值必須不同如果沒(méi)有default子句,且沒(méi)有case子句匹配,則不執(zhí)行case分支中的語(yǔ)句可以有多條,不需要花括號(hào)switch(表達(dá)式){

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

case常量表達(dá)式2:語(yǔ)句組2┇

case常量表達(dá)式n:語(yǔ)句組ndefault:語(yǔ)句組}switch分支語(yǔ)法計(jì)算過(guò)程switch(表達(dá)式)switch

分支流程圖switch分支流程圖switch分支示例一根據(jù)輸入的成績(jī)等級(jí),打印相應(yīng)分?jǐn)?shù)段#include<stdio.h>intmain(){chargrade;

printf(“Inputthegrade(A,B,C,D,E):“);scanf(“%c“,&grade);

switch(grade){case‘A‘:printf(“90-100\n“);break;case‘B‘:printf(“80-89\n“);break;case‘C‘:printf(“70-79\n“);break;case‘D‘:printf(“60-69\n“);break;case‘E‘:printf(“0-59\n“);break;default:printf(“Error\n“);}return0;}switch分支示例一根據(jù)輸入的成績(jī)等級(jí),打印相應(yīng)分?jǐn)?shù)段#switch分支示例一根據(jù)輸入的成績(jī)等級(jí),打印相應(yīng)分?jǐn)?shù)段#include<stdio.h>intmain(){chargrade;

printf(“Inputthegrade(A,B,C,D,E):“);scanf(“%c“,&grade);

switch(grade){case‘A‘:printf(“90-100\n“);case‘B‘:printf(“80-89\n“);case‘C‘:printf(“70-79\n“);case‘D‘:printf(“60-69\n“);case‘E‘:printf(“0-59\n“);default:printf(“Error\n“);}return0;}break的目的是終止switch語(yǔ)句的執(zhí)行。如果沒(méi)有break語(yǔ)句,則程序會(huì)從指定的case分支開(kāi)始,并在該分支結(jié)束后繼續(xù)執(zhí)行下去。除非switch語(yǔ)句結(jié)束,后面的其他case分支或default分支中的語(yǔ)句都會(huì)得到執(zhí)行switch分支示例一根據(jù)輸入的成績(jī)等級(jí),打印相應(yīng)分?jǐn)?shù)段#switch分支示例二根據(jù)輸入的成績(jī)等級(jí),打印是否通過(guò)信息#include<stdio.h>intmain(){chargrade;

printf(“Inputthegrade(A,B,C,D,E):“);scanf(“%c“,&grade);

switch(grade){case‘A‘:case‘B‘:case‘C‘:case‘D‘:printf(“Pass\n“);break;case‘E‘:printf(“Fail\n“);break;default:printf(“Error\n“);}return0;}如果邏輯上確實(shí)如此,則不同的case分支可以使用同一個(gè)語(yǔ)句組,這也許是特意不在某些case分支中使用break的唯一正當(dāng)理由switch分支示例二根據(jù)輸入的成績(jī)等級(jí),打印是否通過(guò)信息3.4循環(huán)結(jié)構(gòu)循環(huán)結(jié)構(gòu)的含義根據(jù)某一條件的判斷結(jié)果,反復(fù)執(zhí)行某一處理塊的過(guò)程最基本的循環(huán)結(jié)構(gòu)是當(dāng)循環(huán)進(jìn)入循環(huán)結(jié)構(gòu),判斷循環(huán)條件,如果循環(huán)條件的結(jié)果為真,則執(zhí)行A處理塊的操作,即循環(huán)一次,然后再次判斷循環(huán)條件,當(dāng)循環(huán)條件為假時(shí),循環(huán)結(jié)束3.4循環(huán)結(jié)構(gòu)循環(huán)結(jié)構(gòu)的含義進(jìn)入循環(huán)結(jié)構(gòu),判斷循環(huán)條件,while

循環(huán)while循環(huán)格式:while(表達(dá)式)循環(huán)體while循環(huán)流程先判斷后執(zhí)行:表達(dá)式為真時(shí),執(zhí)行一遍循環(huán)體(一次迭代),返回重新計(jì)算表達(dá)式的值以確定是否重復(fù)執(zhí)行循環(huán)體;若表達(dá)式為假,則終止循環(huán)為保證循環(huán)終止,循環(huán)體內(nèi)應(yīng)有能改變表達(dá)式值的語(yǔ)句while循環(huán)while循環(huán)格式:while(表達(dá)式)while循環(huán)示例使用while循環(huán)求兩個(gè)正整數(shù)的最小公倍數(shù)#include<stdio.h>intmain(){intm,n,result;

printf(“Inputtwopositiveintegersm,n:“);

scanf(“%d,%d“,&m,&n);if(m>0&&n>0){

result=m<n?n:m;

while(result%m!=0||result%n!=0)result++;

printf(“Theleastcommonmultipleofmandnis%d.\n“,result);}else

printf(“thenumbermornisnotapositiveinteger.\n“);return0;}while循環(huán)示例使用while循環(huán)求兩個(gè)正整數(shù)的最小do-while

循環(huán)do-while循環(huán)格式:do{循環(huán)體}while(表達(dá)式);do-while循環(huán)流程先執(zhí)行后判斷:先執(zhí)行一遍循環(huán)體(一次迭代),計(jì)算表達(dá)式的值,表達(dá)式為真時(shí)重復(fù)執(zhí)行循環(huán)體,否則終止循環(huán)(循環(huán)體至少執(zhí)行一次,這與while循環(huán)不同)為保證循環(huán)終止,循環(huán)體內(nèi)應(yīng)有能改變表達(dá)式值的語(yǔ)句do-while循環(huán)do-while循環(huán)格式:do{do-while循環(huán)示例反復(fù)求兩個(gè)正整數(shù)的最小公倍數(shù),直到輸入的兩個(gè)數(shù)均為1時(shí)結(jié)束#include<stdio.h>intmain(){intm,n,result;

do{

printf(“Inputtwopositiveintegersm,n:“);scanf(“%d,%d“,&m,&n);if(m>0&&n>0){

result=m<n?n:m;while(result%m!=0||result%n!=0)result++;

printf(“Theleastcommonmultipleofmandnis%d.\n“,result);}else

printf(“thenumbermornisnotapositiveinteger.\n“);

}while(m!=1||n!=1);return0;}do-while循環(huán)示例反復(fù)求兩個(gè)正整數(shù)的最小公倍數(shù),直到for

循環(huán)for循環(huán)格式for(表達(dá)式1;表達(dá)式2;表達(dá)式3)循環(huán)體for循環(huán)流程先判斷后執(zhí)行:先執(zhí)行表達(dá)式1(循環(huán)初始化),再計(jì)算表達(dá)式2以根據(jù)其結(jié)果決定是否執(zhí)行一遍循環(huán)體(為真時(shí)執(zhí)行),計(jì)算表達(dá)式3的值(循環(huán)再次“初始化”),返回重新計(jì)算表達(dá)式2的值以確定循環(huán)是否終止for循環(huán)for循環(huán)格式for循環(huán)示例一計(jì)算#include<stdio.h>intmain(){intresult,k;

result=0;

//累加器變量,設(shè)置初始值(本例設(shè)為0)

for(k=1;k<=100;k++)//循環(huán)計(jì)算

result+=k*k;//累加

printf(“Theresult:%d\n“,result);

return0;}for循環(huán)示例一計(jì)算#include<stdio.h>三種循環(huán)結(jié)構(gòu)的比較三種循環(huán)結(jié)構(gòu)可以互換使用for循環(huán)與while循環(huán)常見(jiàn),do-while循環(huán)少見(jiàn)while循環(huán)常用于不需要或很少需要初始化的場(chǎng)合for循環(huán)常用于需要簡(jiǎn)單初始化和通過(guò)遞增遞減運(yùn)算控制循環(huán)體執(zhí)行的場(chǎng)合for循環(huán)將所有循環(huán)控制因素都放在循環(huán)頭部,循環(huán)結(jié)構(gòu)最清晰通過(guò)省略循環(huán)頭部的一個(gè)或多個(gè)表達(dá)式,for循環(huán)也可能非常復(fù)雜三種循環(huán)結(jié)構(gòu)的比較三種循環(huán)結(jié)構(gòu)可以互換使用for循環(huán)示例二程序讀入一個(gè)字符串,然后反向打印輸出#include<stdio.h>#include<string.h>intmain(){chars[50],c;inti,j;

printf(“Inputastring:“);scanf(“%s“,s);for(i=0,j=strlen(s)–1;i<j;i++,j––){

c=s[i];s[i]=s[j];s[j]=c;}

printf(“%s\n“,s);return0;}for循環(huán)示例二程序讀入一個(gè)字符串,然后反向打印輸出#infor循環(huán)示例三打印九九乘法表#include<stdio.h>intmain(){inti,j,k;for(i=1;i<=9;i++){

for(j=i;j<=9;j++){

k=i*j;

printf(“%d×%d=%d\t“,i,j,k);}

printf(“\n“);}return0;}如果一個(gè)循環(huán)體內(nèi)包含另一個(gè)循環(huán)則稱循環(huán)嵌套或多重循環(huán)三種循環(huán)都可以嵌套,但嵌套時(shí)內(nèi)外層循環(huán)不能發(fā)生交叉發(fā)生嵌套時(shí),內(nèi)層循環(huán)經(jīng)常需要使用外層循環(huán)的某些值作為控制條件for循環(huán)示例三打印九九乘法表#include<stdi循環(huán)控制轉(zhuǎn)移:break

語(yǔ)句輸出5行、每行10個(gè)隨機(jī)數(shù),若隨機(jī)數(shù)大于20,000,本行輸出結(jié)束#include<stdlib.h>#include<stdio.h>#include<time.h>intmain(){inti,j,r;

srand(time(NULL));

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

for(j=1;j<=10;j++){

r=rand();printf(“%6d\t“,r);if(r>20000)break;}

printf(“\n“);}return0;}srand():設(shè)置隨機(jī)數(shù)種子的函數(shù)time():獲取時(shí)間的函數(shù)rand():產(chǎn)生隨機(jī)數(shù)的函數(shù)break終止當(dāng)前循環(huán)的執(zhí)行,在存在循環(huán)嵌套的場(chǎng)合,它并不能終止外層循環(huán)的執(zhí)行循環(huán)控制轉(zhuǎn)移:break語(yǔ)句輸出5行、每行10個(gè)隨機(jī)數(shù),循環(huán)控制轉(zhuǎn)移:continue

語(yǔ)句輸入一串字符,以回車結(jié)束輸入,程序統(tǒng)計(jì)并輸出其中小寫(xiě)字母的個(gè)數(shù)#include<stdio.h>intmain(){charc;intnum=0;

printf(“Enterastring:\n“);

while((c=getchar())!=‘\n‘){if(c<97||c>122)continue;

//非小寫(xiě)字母,本次循環(huán)結(jié)束

num++;}

printf(“%d\n“,num);return0;}continue終止的是當(dāng)前循環(huán)的當(dāng)前一次迭代,而不是整個(gè)循環(huán),當(dāng)前循環(huán)的下一次迭代仍會(huì)執(zhí)行循環(huán)控制轉(zhuǎn)移:continue語(yǔ)句輸入一串字符,以回車結(jié)結(jié)構(gòu)化程序設(shè)計(jì)注意事項(xiàng)要保證結(jié)構(gòu)的完整性不允許結(jié)構(gòu)層次間的交叉!要保證操作的完整性一個(gè)基本結(jié)構(gòu)就是一個(gè)完整的操作單元,程序只能從入口進(jìn)出口出程序最好不要有多入口多出口,尤其不能從外部進(jìn)入循環(huán)或條件分支內(nèi)部結(jié)構(gòu)化程序設(shè)計(jì)注意事項(xiàng)要保證結(jié)構(gòu)的完整性要保證操作的完整性3.5結(jié)構(gòu)化程序設(shè)計(jì)應(yīng)用示例一打印小于n的所有個(gè)位不等于9的素?cái)?shù),n的具體值由用戶輸入,要求分行輸出,每行輸出10個(gè)數(shù)#include<stdio.h>intmain(){inti,j,n,line=0;

printf(“Pleaseinputn:“);scanf(“%d“,&n);if(n<=1){printf(“Nonumbertooutput!\n“);return1;}for(i=2;i<=n;i++){//逐一取出待查數(shù)據(jù)

for(j=2;j<i;j++)if(i%j==0)break;//該數(shù)非素?cái)?shù),終止內(nèi)層循環(huán)if(i==j&&i%10!=9){//若該數(shù)為素?cái)?shù)且個(gè)位不等于9,打印輸出

printf(“%d,“,i);line++;if(line==10){printf(“\n“);line=0;}}}

printf(“\n“);return0;}使用for循環(huán)3.5結(jié)構(gòu)化程序設(shè)計(jì)應(yīng)用示例一打印小于n的所有個(gè)位不等于3.5結(jié)構(gòu)化程序設(shè)計(jì)應(yīng)用示例一#include<stdio.h>intmain(){inti,j,n,line=0;

printf(“Pleaseinputn:“);scanf(“%d“,&n);if(n<=1){printf(“Nonumbertooutput!\n“);return1;}

i=2;while(i<=n){//逐一取出待查數(shù)據(jù)

j=2;while(j<i&&i%j!=0)j++;//求該數(shù)的約數(shù)if(i==j&&i%10!=9){//若該數(shù)為素?cái)?shù)且個(gè)位不等于9,打印輸出

printf(“%d,“,i);line++;if(line==10){printf(“\n“);line=0;}}

i++;}

printf(“\n“);return0;}使用while循環(huán)3.5結(jié)構(gòu)化程序設(shè)計(jì)應(yīng)用示例一#include<std3.5結(jié)構(gòu)化程序設(shè)計(jì)應(yīng)用示例二百元買百雞(窮舉):已知公雞每只5元,母雞每只3元,小雞1元3只,可買公雞、母雞、小雞幾只#include<stdio.h>intmain(){intx,y,z;for(x=0;x<=100;x++)for(y=0;y<=100;y++)for(z=0;z<=100;z++)if(x+y+z==100&&15*x+9*y+z==300)

printf(“x=%d,y=%d,z=%d\n“,x,y,z);}設(shè)x、y、z分別表示可買的公雞、母雞、小雞的個(gè)數(shù),有不定方程組:3.5結(jié)構(gòu)化程序設(shè)計(jì)應(yīng)用示例二百元買百雞(窮舉):已知公3.5結(jié)構(gòu)化程序設(shè)計(jì)應(yīng)用示例二百元買百雞(窮舉):已知公雞每只5元,母雞每只3元,小雞1元3只,可買公雞、母雞、小雞幾只#include<stdio.h>intmain(){intx,y,z;for(x=0;x<=

20;x++)for(y=0;y<=33;y++)for(z=0;z<=100;z++)if(x+y+z==100&&15*x+9*y+z==300)

printf(“x=%d,y=%d,z=%d\n“,x,y,z);}設(shè)x、y、z分別表示可買的公雞、母雞、小雞的個(gè)數(shù),有不定方程組:#include<stdio.h>intmain(){intx,y,z;for(x=0;x<=100;x++)for(y=0;y<=100;y++)for(z=0;z<=100;z++)if(x+y+z==100&&15*x+9*y+z==300)

printf(“x=%d,y=%d,z=%d\n“,x,y,z);}3.5結(jié)構(gòu)化程序設(shè)計(jì)應(yīng)用示例二百元買百雞(窮舉):已知公3.5結(jié)構(gòu)化程序設(shè)計(jì)應(yīng)用示例三輸出裴波那契數(shù)列前30項(xiàng)值(遞推)#include<stdio.h>intmain(){intn1,n2,n,count;

n1=0;n2=1;

printf(“%10d%10d“,n1,n2);for(count=3;count<=30;count++){

n=n1+n2;

printf(“%10d“,n);if(count%5==0)printf(“\n“);//控制每行輸出5個(gè)數(shù)

n1=n2;n2=n;}

printf(“\n“);}3.5結(jié)構(gòu)化程序設(shè)計(jì)應(yīng)用示例三輸出裴波那契數(shù)列前30項(xiàng)值3.5結(jié)構(gòu)化程序設(shè)計(jì)應(yīng)用示例四設(shè)計(jì)一個(gè)簡(jiǎn)單的菜單程序運(yùn)行時(shí),首先顯示一個(gè)菜單畫(huà)面用以提示輸入操作選擇操作員從菜單上選擇一個(gè)操作(即輸入相應(yīng)的代碼,例如1、2等),程序接收選擇后調(diào)用相應(yīng)的函數(shù)完成操作假設(shè)系統(tǒng)提供select()、insert()、update()和del()函數(shù),分別用以實(shí)現(xiàn)選擇、插入、更新與刪除等相應(yīng)操作3.5結(jié)構(gòu)化程序設(shè)計(jì)應(yīng)用示例四設(shè)計(jì)一個(gè)簡(jiǎn)單的菜單程序3.5結(jié)構(gòu)化程序設(shè)計(jì)應(yīng)用示例四#include<stdio.h>voidinsert();voidselect();voiddel();voidupdate();intmain(){

/*generatemenu*/charop;

printf(“\n********************************“);

/*生成菜單*/

printf(“\n*MenuOptions*“);

printf(“\n*1.Insert*“);

printf(“\n*2.Select*“);

printf(“\n*3.Delete*“);

printf(“\n*4.Update*“);

printf(“\n*5.Exit*“);

printf(“\n********************************“);3.5結(jié)構(gòu)化程序設(shè)計(jì)應(yīng)用示例四#include<std3.5結(jié)構(gòu)化程序設(shè)計(jì)應(yīng)用示例四/*selectionoperation*/while(1){

printf(“\nPleaseenterselection:“);scanf(“%d“,&op);switch(op){/*根據(jù)輸入,選擇分支走向*/

case‘1‘:insert();break;case‘2‘:select();break;case‘3‘:del();break;case‘4‘:update();break;case‘5‘:break;default:printf(“\nSelectionerror!“);break;}if(op==‘5’)break;/*退出循環(huán)*/}}//結(jié)束主函數(shù)3.5結(jié)構(gòu)化程序設(shè)計(jì)應(yīng)用示例四/*selectio作業(yè)第71-72頁(yè):第二題(填空題)第8、9、11小題第72-73頁(yè):第三題(編程題)第2、4小題作業(yè)第71-72頁(yè):第二題(填空題)喬林計(jì)算機(jī)程序設(shè)計(jì)基礎(chǔ)Email:qiaolin@Tel:62792961喬林計(jì)算機(jī)程序設(shè)計(jì)基礎(chǔ)Email:qiaolin@c第三章程序控制結(jié)構(gòu)學(xué)習(xí)目標(biāo)了解結(jié)構(gòu)化程序設(shè)計(jì)的一般概念熟悉順序結(jié)構(gòu)、分支結(jié)構(gòu)與循環(huán)結(jié)構(gòu)等三種程序流程控制結(jié)構(gòu)掌握C語(yǔ)言實(shí)現(xiàn)分支結(jié)構(gòu)的if語(yǔ)句與switch語(yǔ)句,能熟練應(yīng)用if語(yǔ)句與switch語(yǔ)句編寫(xiě)程序掌握C語(yǔ)言實(shí)現(xiàn)循環(huán)結(jié)構(gòu)的while語(yǔ)句、for語(yǔ)句與do-while語(yǔ)句,能熟練應(yīng)用這三種循環(huán)控制結(jié)構(gòu)編寫(xiě)程序了解三種循環(huán)結(jié)構(gòu)的關(guān)系,掌握在循環(huán)結(jié)構(gòu)中控制程序流程轉(zhuǎn)移的方法第三章程序控制結(jié)構(gòu)學(xué)習(xí)目標(biāo)3.1C語(yǔ)言結(jié)構(gòu)化程序設(shè)計(jì)基礎(chǔ)程序的控制結(jié)構(gòu)(黑箱)單入口單出口的控制結(jié)構(gòu)易于理解三種基本控制結(jié)構(gòu):順序、分支、循環(huán)控制結(jié)構(gòu)可以嵌套,以構(gòu)成更復(fù)雜的控制結(jié)構(gòu)程序的結(jié)構(gòu)化三種基本控制結(jié)構(gòu)可以構(gòu)造任何復(fù)雜的結(jié)構(gòu)化算法結(jié)構(gòu)化程序設(shè)計(jì)原則:自頂向下,逐步求精結(jié)構(gòu)化程序設(shè)計(jì)過(guò)程:首先對(duì)任務(wù)進(jìn)行功能分解,然后使用結(jié)構(gòu)化程序設(shè)計(jì)思想逐一解決各個(gè)子問(wèn)題,最后構(gòu)造原始問(wèn)題的解好處:邏輯性強(qiáng),可讀性好,維護(hù)方便3.1C語(yǔ)言結(jié)構(gòu)化程序設(shè)計(jì)基礎(chǔ)程序的控制結(jié)構(gòu)(黑箱)3.2順序結(jié)構(gòu)順序結(jié)構(gòu)的含義由一組順序執(zhí)行的處理塊組成,每個(gè)處理塊可能包含一條或一組語(yǔ)句,完成一項(xiàng)任務(wù)順序結(jié)構(gòu)是最基本的算法結(jié)構(gòu)語(yǔ)句與復(fù)合語(yǔ)句(語(yǔ)句塊)三種語(yǔ)句結(jié)構(gòu):?jiǎn)握Z(yǔ)句(表達(dá)式;)、空語(yǔ)句(;)、復(fù)合語(yǔ)句({語(yǔ)句序列})3.2順序結(jié)構(gòu)順序結(jié)構(gòu)的含義語(yǔ)句與復(fù)合語(yǔ)句(語(yǔ)句塊)順序結(jié)構(gòu)程序示例分別輸入兩個(gè)復(fù)數(shù)的實(shí)部與虛部,計(jì)算兩個(gè)復(fù)數(shù)的和、差、積、商并輸出結(jié)果#include<stdio.h>intmain(){floata,b,c,d,real,imaginary;printf(“Inputrealsandimaginariesoftwocomplexes\n”);

scanf(“%f,%f,%f,%f”,&a,&b,&c,&d);printf(“Sum:%f+%fi\n”,a+c,b+d);printf(“Difference:%f+%fi\n”,a–c,b–d);

real=a*c–b*d;imaginary=a*d+b*c;printf(“Product:%f+%fi\n”,real,imaginary);

real=(a*c+b*d)/(c*c+d*d);imaginary=(b*c–a*d)/(c*c+d*d);printf(“Quotient:%f+%fi\n”,real,imaginary);return0;}實(shí)際需要輸入4個(gè)實(shí)數(shù)順序結(jié)構(gòu)程序示例分別輸入兩個(gè)復(fù)數(shù)的實(shí)部與虛部,計(jì)算兩個(gè)復(fù)數(shù)的3.3分支結(jié)構(gòu)分支結(jié)構(gòu)(選擇結(jié)構(gòu))的含義根據(jù)某一條件的判斷結(jié)果,確定程序的流程,即選擇哪一個(gè)程序分支中的處理塊去執(zhí)行最基本的分支結(jié)構(gòu)是二路分支結(jié)構(gòu)以條件判斷為起點(diǎn),如果判斷結(jié)果為真,則執(zhí)行A處理塊的操作,否則執(zhí)行B處理塊的操作3.3分支結(jié)構(gòu)分支結(jié)構(gòu)(選擇結(jié)構(gòu))的含義以條件判斷為起點(diǎn)if-else

語(yǔ)句語(yǔ)句格式:if(表達(dá)式)語(yǔ)句1else語(yǔ)句2表達(dá)式必須位于括號(hào)內(nèi),一般為關(guān)系或邏輯表達(dá)式先計(jì)算表達(dá)式值,若為真則執(zhí)行語(yǔ)句1,否則執(zhí)行語(yǔ)句2語(yǔ)句1與語(yǔ)句2可以為復(fù)合語(yǔ)句語(yǔ)句1與語(yǔ)句2只能有一個(gè)被執(zhí)行如果僅僅用于確定某條語(yǔ)句是否執(zhí)行,else分支可以省略if-else語(yǔ)句語(yǔ)句格式:if(表達(dá)式)語(yǔ)句1eif-else

語(yǔ)句示例一輸入一個(gè)字符,判斷它是否為0~9之間的數(shù)字#include<stdio.h>intmain(){charc;printf(“Inputacharacter:”);

c=getchar();

if(c>=48&&c<=57)printf(“Itisanumber.\n”);

elseprintf(“No,itisnotanumber.\n”);return0;}因:字符以ASCII碼值存儲(chǔ)且數(shù)字的ASCII碼值48~57故:比較ASCII碼值if-else語(yǔ)句示例一輸入一個(gè)字符,判斷它是否為0~9之if-else

語(yǔ)句示例二輸入一個(gè)整數(shù),輸出其絕對(duì)值#include<stdio.h>intmain(){intn,abs;printf(“Enterinteger:”);

scanf(“%d”,&n);

abs=n;

if(abs<0)abs=–abs;printf(“Originalinteger:%d,absolutevalue:%d\n”,n,abs);return0;}if-else語(yǔ)句示例二輸入一個(gè)整數(shù),輸出其絕對(duì)值#incif-elseif-else

語(yǔ)句語(yǔ)句格式if(表達(dá)式1)語(yǔ)句1elseif(表達(dá)式2)語(yǔ)句2…else語(yǔ)句nif-elseif-else語(yǔ)句語(yǔ)句格式if-elseif-else

示例根據(jù)百分制成績(jī)給出優(yōu)秀、通過(guò)或不通過(guò)成績(jī)#include<stdio.h>intmain(){floatscore;

printf(“Inputscore:“);

scanf(“%f“,&score);

if(score>=85&&score<=100)printf(“Excellent.\n“);

elseif(score>=60&&score<85)printf(“Pass.\n“);

elseif(score>=0&&score<60)printf(“Nopass.\n“);

else

printf(“Errorscore.\n“);return0;}if-elseif-else示例根據(jù)百分制成績(jī)給出優(yōu)秀、條件分支的嵌套條件語(yǔ)句的嵌套格式當(dāng)年齡大于50歲時(shí),若工資小于500,則長(zhǎng)200,否則長(zhǎng)300if(age>50)

if(sal<500)

sal+=200;else

sal+=300;若年齡大于50歲且工資小于500,長(zhǎng)200;若年齡不大于50歲,則長(zhǎng)300語(yǔ)法規(guī)定:else與離它最近的if配對(duì)嵌套的條件語(yǔ)句可以實(shí)現(xiàn)復(fù)雜的邏輯判斷if(age>50)

if(sal<500)

sal+=200;else

sal+=300;if(age>50){

if(sal<500)

sal+=200;}else

sal+=300;條件分支的嵌套條件語(yǔ)句的嵌套格式if(age>50)若年條件分支嵌套示例求方程ax2+bx+c=0

的根#include<stdio.h>#include<math.h>//由于用到平方根函數(shù),要用此頭文件intmain(){floata,b,c,x1,x2,p,q,m;//定義實(shí)型變量

printf(“Enter3coefficients:“);

scanf(“%f,%f,%f“,&a,&b,&c);//從鍵盤讀入方程的三個(gè)系數(shù)

if(a==0.0&&b==0&&c==0)//分支1:三個(gè)系數(shù)全為0

printf(“anyvalue\n“);

else

if(a==0&&b!=0)//分支2:系數(shù)a為0,解一元一次方程

printf(“x1=x2=%f\n",–c/b);

else

//分支3:解一元二次方程的兩個(gè)根{

m=b*b–4.0*a*c;…條件分支嵌套示例求方程ax2+bx+c=0的條件分支嵌套示例

if(m>=0){//解實(shí)根

x1=(–b+sqrt(m))/(2.0*a);

x2=(–b–sqrt(m))/(2.0*a);

printf(“x1=%f\n“,x1);//輸出兩個(gè)實(shí)根

printf(“x2=%f\n“,x2);}

else

{

//解虛根

p=–b/(2.0*a);

q=sqrt(–m)/(2.0*a);

printf(“x1=%f+%fi\n“,p,q);

printf(“x2=%f–%fi\n“,p,q);}}return0;}條件分支嵌套示例if(m>=0)switch

分支語(yǔ)法計(jì)算過(guò)程先計(jì)算表達(dá)式的值依次與一組常量比較若相同則執(zhí)行該分支否則轉(zhuǎn)向default分支退出switch語(yǔ)句說(shuō)明switch后面的表達(dá)式必須為整型、字符型或枚舉型case后面必須為常量表達(dá)式,則各個(gè)case值必須不同如果沒(méi)有default子句,且沒(méi)有case子句匹配,則不執(zhí)行case分支中的語(yǔ)句可以有多條,不需要花括號(hào)switch(表達(dá)式){

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

case常量表達(dá)式2:語(yǔ)句組2┇

case常量表達(dá)式n:語(yǔ)句組ndefault:語(yǔ)句組}switch分支語(yǔ)法計(jì)算過(guò)程switch(表達(dá)式)switch

分支流程圖switch分支流程圖switch分支示例一根據(jù)輸入的成績(jī)等級(jí),打印相應(yīng)分?jǐn)?shù)段#include<stdio.h>intmain(){chargrade;

printf(“Inputthegrade(A,B,C,D,E):“);scanf(“%c“,&grade);

switch(grade){case‘A‘:printf(“90-100\n“);break;case‘B‘:printf(“80-89\n“);break;case‘C‘:printf(“70-79\n“);break;case‘D‘:printf(“60-69\n“);break;case‘E‘:printf(“0-59\n“);break;default:printf(“Error\n“);}return0;}switch分支示例一根據(jù)輸入的成績(jī)等級(jí),打印相應(yīng)分?jǐn)?shù)段#switch分支示例一根據(jù)輸入的成績(jī)等級(jí),打印相應(yīng)分?jǐn)?shù)段#include<stdio.h>intmain(){chargrade;

printf(“Inputthegrade(A,B,C,D,E):“);scanf(“%c“,&grade);

switch(grade){case‘A‘:printf(“90-100\n“);case‘B‘:printf(“80-89\n“);case‘C‘:printf(“70-79\n“);case‘D‘:printf(“60-69\n“);case‘E‘:printf(“0-59\n“);default:printf(“Error\n“);}return0;}break的目的是終止switch語(yǔ)句的執(zhí)行。如果沒(méi)有break語(yǔ)句,則程序會(huì)從指定的case分支開(kāi)始,并在該分支結(jié)束后繼續(xù)執(zhí)行下去。除非switch語(yǔ)句結(jié)束,后面的其他case分支或default分支中的語(yǔ)句都會(huì)得到執(zhí)行switch分支示例一根據(jù)輸入的成績(jī)等級(jí),打印相應(yīng)分?jǐn)?shù)段#switch分支示例二根據(jù)輸入的成績(jī)等級(jí),打印是否通過(guò)信息#include<stdio.h>intmain(){chargrade;

printf(“Inputthegrade(A,B,C,D,E):“);scanf(“%c“,&grade);

switch(grade){case‘A‘:case‘B‘:case‘C‘:case‘D‘:printf(“Pass\n“);break;case‘E‘:printf(“Fail\n“);break;default:printf(“Error\n“);}return0;}如果邏輯上確實(shí)如此,則不同的case分支可以使用同一個(gè)語(yǔ)句組,這也許是特意不在某些case分支中使用break的唯一正當(dāng)理由switch分支示例二根據(jù)輸入的成績(jī)等級(jí),打印是否通過(guò)信息3.4循環(huán)結(jié)構(gòu)循環(huán)結(jié)構(gòu)的含義根據(jù)某一條件的判斷結(jié)果,反復(fù)執(zhí)行某一處理塊的過(guò)程最基本的循環(huán)結(jié)構(gòu)是當(dāng)循環(huán)進(jìn)入循環(huán)結(jié)構(gòu),判斷循環(huán)條件,如果循環(huán)條件的結(jié)果為真,則執(zhí)行A處理塊的操作,即循環(huán)一次,然后再次判斷循環(huán)條件,當(dāng)循環(huán)條件為假時(shí),循環(huán)結(jié)束3.4循環(huán)結(jié)構(gòu)循環(huán)結(jié)構(gòu)的含義進(jìn)入循環(huán)結(jié)構(gòu),判斷循環(huán)條件,while

循環(huán)while循環(huán)格式:while(表達(dá)式)循環(huán)體while循環(huán)流程先判斷后執(zhí)行:表達(dá)式為真時(shí),執(zhí)行一遍循環(huán)體(一次迭代),返回重新計(jì)算表達(dá)式的值以確定是否重復(fù)執(zhí)行循環(huán)體;若表達(dá)式為假,則終止循環(huán)為保證循環(huán)終止,循環(huán)體內(nèi)應(yīng)有能改變表達(dá)式值的語(yǔ)句while循環(huán)while循環(huán)格式:while(表達(dá)式)while循環(huán)示例使用while循環(huán)求兩個(gè)正整數(shù)的最小公倍數(shù)#include<stdio.h>intmain(){intm,n,result;

printf(“Inputtwopositiveintegersm,n:“);

scanf(“%d,%d“,&m,&n);if(m>0&&n>0){

result=m<n?n:m;

while(result%m!=0||result%n!=0)result++;

printf(“Theleastcommonmultipleofmandnis%d.\n“,result);}else

printf(“thenumbermornisnotapositiveinteger.\n“);return0;}while循環(huán)示例使用while循環(huán)求兩個(gè)正整數(shù)的最小do-while

循環(huán)do-while循環(huán)格式:do{循環(huán)體}while(表達(dá)式);do-while循環(huán)流程先執(zhí)行后判斷:先執(zhí)行一遍循環(huán)體(一次迭代),計(jì)算表達(dá)式的值,表達(dá)式為真時(shí)重復(fù)執(zhí)行循環(huán)體,否則終止循環(huán)(循環(huán)體至少執(zhí)行一次,這與while循環(huán)不同)為保證循環(huán)終止,循環(huán)體內(nèi)應(yīng)有能改變表達(dá)式值的語(yǔ)句do-while循環(huán)do-while循環(huán)格式:do{do-while循環(huán)示例反復(fù)求兩個(gè)正整數(shù)的最小公倍數(shù),直到輸入的兩個(gè)數(shù)均為1時(shí)結(jié)束#include<stdio.h>intmain(){intm,n,result;

do{

printf(“Inputtwopositiveintegersm,n:“);scanf(“%d,%d“,&m,&n);if(m>0&&n>0){

result=m<n?n:m;while(result%m!=0||result%n!=0)result++;

printf(“Theleastcommonmultipleofmandnis%d.\n“,result);}else

printf(“thenumbermornisnotapositiveinteger.\n“);

}while(m!=1||n!=1);return0;}do-while循環(huán)示例反復(fù)求兩個(gè)正整數(shù)的最小公倍數(shù),直到for

循環(huán)for循環(huán)格式for(表達(dá)式1;表達(dá)式2;表達(dá)式3)循環(huán)體for循環(huán)流程先判斷后執(zhí)行:先執(zhí)行表達(dá)式1(循環(huán)初始化),再計(jì)算表達(dá)式2以根據(jù)其結(jié)果決定是否執(zhí)行一遍循環(huán)體(為真時(shí)執(zhí)行),計(jì)算表達(dá)式3的值(循環(huán)再次“初始化”),返回重新計(jì)算表達(dá)式2的值以確定循環(huán)是否終止for循環(huán)for循環(huán)格式for循環(huán)示例一計(jì)算#include<stdio.h>intmain(){intresult,k;

result=0;

//累加器變量,設(shè)置初始值(本例設(shè)為0)

for(k=1;k<=100;k++)//循環(huán)計(jì)算

result+=k*k;//累加

printf(“Theresult:%d\n“,result);

return0;}for循環(huán)示例一計(jì)算#include<stdio.h>三種循環(huán)結(jié)構(gòu)的比較三種循環(huán)結(jié)構(gòu)可以互換使用for循環(huán)與while循環(huán)常見(jiàn),do-while循環(huán)少見(jiàn)while循環(huán)常用于不需要或很少需要初始化的場(chǎng)合for循環(huán)常用于需要簡(jiǎn)單初始化和通過(guò)遞增遞減運(yùn)算控制循環(huán)體執(zhí)行的場(chǎng)合for循環(huán)將所有循環(huán)控制因素都放在循環(huán)頭部,循環(huán)結(jié)構(gòu)最清晰通過(guò)省略循環(huán)頭部的一個(gè)或多個(gè)表達(dá)式,for循環(huán)也可能非常復(fù)雜三種循環(huán)結(jié)構(gòu)的比較三種循環(huán)結(jié)構(gòu)可以互換使用for循環(huán)示例二程序讀入一個(gè)字符串,然后反向打印輸出#include<stdio.h>#include<string.h>intmain(){chars[50],c;inti,j;

printf(“Inputastring:“);scanf(“%s“,s);for(i=0,j=strlen(s)–1;i<j;i++,j––){

c=s[i];s[i]=s[j];s[j]=c;}

printf(“%s\n“,s);return0;}for循環(huán)示例二程序讀入一個(gè)字符串,然后反向打印輸出#infor循環(huán)示例三打印九九乘法表#include<stdio.h>intmain(){inti,j,k;for(i=1;i<=9;i++){

for(j=i;j<=9;j++){

k=i*j;

printf(“%d×%d=%d\t“,i,j,k);}

printf(“\n“);}return0;}如果一個(gè)循環(huán)體內(nèi)包含另一個(gè)循環(huán)則稱循環(huán)嵌套或多重循環(huán)三種循環(huán)都可以嵌套,但嵌套時(shí)內(nèi)外層循環(huán)不能發(fā)生交叉發(fā)生嵌套時(shí),內(nèi)層循環(huán)經(jīng)常需要使用外層循環(huán)的某些值作為控制條件for循環(huán)示例三打印九九乘法表#include<stdi循環(huán)控制轉(zhuǎn)移:break

語(yǔ)句輸出5行、每行10個(gè)隨機(jī)數(shù),若隨機(jī)數(shù)大于20,000,本行輸出結(jié)束#include<stdlib.h>#include<stdio.h>#include<time.h>intmain(){inti,j,r;

srand(time(NULL));

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

for(j=1;j<=10;j++){

r=rand();printf(“%6d\t“,r);if(r>20000)break;}

printf(“\n“);}return0;}srand():設(shè)置隨機(jī)數(shù)種子的函數(shù)time():獲取時(shí)間的函數(shù)rand():產(chǎn)生隨機(jī)數(shù)的函數(shù)break終止當(dāng)前循環(huán)的執(zhí)行,在存在循環(huán)嵌套的場(chǎng)合,它并不能終止外層循環(huán)的執(zhí)行循環(huán)控制轉(zhuǎn)移:break語(yǔ)句輸出5行、每行10個(gè)隨機(jī)數(shù),循環(huán)控制轉(zhuǎn)移:continue

語(yǔ)句輸入一串字符,以回車結(jié)束輸入,程序統(tǒng)計(jì)并輸出其中小寫(xiě)字母的個(gè)數(shù)#include<stdio.h>intmain(){charc;intnum=0;

printf(“Enterastring:\n“);

while((c=getchar())!=‘\n‘){if(c<97||c>122)continue;

//非小寫(xiě)字母,本次循環(huán)結(jié)束

num++;}

printf(“%d\n“,num);return0;}continue終止的是當(dāng)前循環(huán)的當(dāng)前一次迭代,而不是整個(gè)循環(huán),當(dāng)前循環(huán)的下一次迭代仍會(huì)執(zhí)行循環(huán)控制轉(zhuǎn)移:continue語(yǔ)句輸入一串字符,以回車結(jié)結(jié)構(gòu)化程序設(shè)計(jì)注意事項(xiàng)要保證結(jié)構(gòu)的完整性不允許結(jié)構(gòu)層次間的交叉!要保證操作的完整性一個(gè)基本結(jié)構(gòu)就是一個(gè)完整的操作單元,程序只能從入口進(jìn)出口出程序最好不要有多入口多出口,尤其不能從外部進(jìn)入循環(huán)或條件分支內(nèi)部結(jié)構(gòu)化程序設(shè)計(jì)注意事項(xiàng)要保證結(jié)構(gòu)的完整性要保證操作的完整性3.5結(jié)構(gòu)化程序設(shè)計(jì)應(yīng)用示例一打印小于n的所有個(gè)位不等于9的素?cái)?shù),n的具體值由用戶輸入,要求分行輸出,每行輸出10個(gè)數(shù)#include<stdio.h>intmain(){inti,j,n,line=0;

printf(“Pleaseinputn:“);scanf(“%d“,&n);if(n<=1){printf(“Nonumbertooutput!\n“);return1;}for(i=2;i<=n;i++){//逐一取出待查數(shù)據(jù)

for(j=2;j<i;j++)if(i%j==0)break;//該數(shù)非素?cái)?shù),終止內(nèi)層循環(huán)if(i==j&&i%10!=9){//若該數(shù)為素?cái)?shù)且個(gè)位不等于9,打印輸出

printf(“%d,“,i);line++;if(line==10){printf(“\n“);line=0;}}}

printf(“\n“);return0;}使用for循環(huán)3.5結(jié)構(gòu)化程序設(shè)計(jì)應(yīng)用示例一打印小于n的所有個(gè)位不等于3.5結(jié)構(gòu)化程序設(shè)計(jì)應(yīng)用示例一#include<stdio.h>intmain(){inti,j,n,line=0;

printf(“Pleaseinputn:“);scanf(“%d“,&n);if(n<=1){printf(“Nonumbertooutput!\n“);return1;}

i=2;while(i<=n){//逐一取出待查數(shù)據(jù)

j=2;while(j<i&&i%j!=0)j++;//求該數(shù)的約數(shù)if(i==j&&i%10!=9){//若該數(shù)為素?cái)?shù)且個(gè)位不等于9,打印輸出

printf(“%d,“,i);line++;if(line==10){printf(“\n“);line=0;}}

i++;}

printf(“\n“);return0;}使用while循環(huán)3.5結(jié)構(gòu)化程序設(shè)計(jì)應(yīng)用示例一#include<std3.5結(jié)構(gòu)化程序設(shè)計(jì)應(yīng)用示例二百元買百雞(窮舉):已知公雞每只5元,母雞每只3元,小雞1元3只,可買公雞、母雞、小雞幾只#include<stdio.h>intmain(){intx,y,z;for(x=0;x<

溫馨提示

  • 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)論