




版權(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 年度預(yù)算與財(cái)務(wù)目標(biāo)設(shè)定計(jì)劃
- 系列美術(shù)創(chuàng)作主題教案計(jì)劃
- 打破部門壁壘的協(xié)同計(jì)劃
- 電子政務(wù):管理信息化整合之道
- 第五章+第1節(jié)《透鏡》教學(xué)設(shè)計(jì) -2023-2024學(xué)年人教版物理八年級(jí)上學(xué)期
- 第二單元第9課《記錄校園生活》教學(xué)設(shè)計(jì) 2023-2024學(xué)年青島版(2019)初中信息技術(shù)第二冊(cè)
- 2025年山東貨運(yùn)從業(yè)資格模擬考試題app
- 2025年太原貨運(yùn)從業(yè)資格證考試題技巧
- 2025年鄭州貨運(yùn)資格證考試真題
- 2025年高中化學(xué)必修二核心框圖和內(nèi)容結(jié)構(gòu)預(yù)復(fù)習(xí)
- 2025年度事業(yè)單位招聘考試公共基礎(chǔ)知識(shí)模擬試卷及答案(共四套)
- 2024年海東市第二人民醫(yī)院自主招聘專業(yè)技術(shù)人員筆試真題
- 2025年江西陶瓷工藝美術(shù)職業(yè)技術(shù)學(xué)院?jiǎn)握新殬I(yè)技能測(cè)試題庫(kù)1套
- 《計(jì)算機(jī)基礎(chǔ)與應(yīng)用(Office 和 WPS Office )》課件 項(xiàng)目二?計(jì)算機(jī)操作系統(tǒng)配置與應(yīng)用
- 2025年湖南電氣職業(yè)技術(shù)學(xué)院?jiǎn)握新殬I(yè)技能測(cè)試題庫(kù)及參考答案
- 混凝土拌合站拌合運(yùn)輸工程合同
- 機(jī)床操作與數(shù)控編程作業(yè)指導(dǎo)書(shū)
- 2025云南昆明空港投資開(kāi)發(fā)集團(tuán)招聘7人高頻重點(diǎn)模擬試卷提升(共500題附帶答案詳解)
- 2024-2025學(xué)年人教版數(shù)學(xué)六年級(jí)下冊(cè)第二單元百分?jǐn)?shù)(二)單元檢測(cè)(含答案)
- 人教版 八年級(jí)英語(yǔ)下冊(cè) Unit 2 單元綜合測(cè)試卷(2025年春)
- 湖北省武漢市江漢區(qū)2024-2025學(xué)年八年級(jí)(上)期末物理試卷(含解析)
評(píng)論
0/150
提交評(píng)論