版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
第4章
程序的控制結(jié)構(gòu)7/24/20231第4章7/24/20231第4章程序的控制結(jié)構(gòu)本章主要教學(xué)內(nèi)容
算法的描述方法基本控制結(jié)構(gòu)及基本控制語句常用算法程序的基本版式結(jié)構(gòu)化程序設(shè)計(jì)的基本思想程序測試與改錯(cuò)7/24/20232第4章程序的控制結(jié)構(gòu)本章主要教學(xué)內(nèi)容算法的描述方法7/24.1算法的概念及其描述數(shù)據(jù)結(jié)構(gòu)+算法=程序算法:為解決一個(gè)具體問題而采取的確定的有限的操作步驟。算法特性:有窮性確定性
有效性
沒有輸入或有多個(gè)輸入
有一個(gè)或多個(gè)輸出
7/24/202334.1算法的概念及其描述數(shù)據(jù)結(jié)構(gòu)+算法=程序7/24/20算法的分類數(shù)值運(yùn)算算法:解決的是求數(shù)值解的問題,例如用輾轉(zhuǎn)相除法求兩個(gè)數(shù)的最大公約數(shù)等非數(shù)值運(yùn)算算法:主要用于解決需要用分析推理、邏輯推理才能解決的問題,例如人工智能中的許多問題,查找、分類等問題7/24/20234算法的分類數(shù)值運(yùn)算算法:7/24/20234算法的描述方法自然語言表示傳統(tǒng)的流程圖表示N-S結(jié)構(gòu)化流程圖表示
偽代碼表示7/24/20235算法的描述方法自然語言表示7/24/20235構(gòu)成程序的三種基本結(jié)構(gòu)順序結(jié)構(gòu)選擇結(jié)構(gòu)(分支結(jié)構(gòu))循環(huán)結(jié)構(gòu)已經(jīng)證明,任何程序均可只用這三種結(jié)構(gòu)綜合描述只用這三種結(jié)構(gòu)編制的程序,叫結(jié)構(gòu)化程序程序必須符合結(jié)構(gòu)化規(guī)則7/24/20236構(gòu)成程序的三種基本結(jié)構(gòu)順序結(jié)構(gòu)7/24/20236結(jié)構(gòu)化程序設(shè)計(jì)的核心思想采用順序、選擇和循環(huán)三種基本結(jié)構(gòu)作為程序設(shè)計(jì)的基本單元只有一個(gè)入口;只有一個(gè)出口;無死語句,即不存在永遠(yuǎn)都執(zhí)行不到的語句;無死循環(huán),即不存在永遠(yuǎn)都執(zhí)行不完的循環(huán)。采用“自頂向下、逐步求精”和模塊化的方法進(jìn)行結(jié)構(gòu)化程序設(shè)計(jì)7/24/20237結(jié)構(gòu)化程序設(shè)計(jì)的核心思想采用順序、選擇和循環(huán)三種基本結(jié)構(gòu)作為4.2順序結(jié)構(gòu)BANS圖傳統(tǒng)流程圖BA7/24/202384.2順序結(jié)構(gòu)BANS圖傳統(tǒng)流程圖BA7/24/20238順序結(jié)構(gòu)——應(yīng)用舉例(1)例:設(shè)半徑為1.5,求圓周長及面積。解:(1)問題分析:(算法)step1:給出圓的半徑r=1.5step2:求圓的周長及面積step3:輸出結(jié)果公式:圓周長=2*3.14*r圓面積=3.14*r*r7/24/20239順序結(jié)構(gòu)——應(yīng)用舉例(1)例:設(shè)半徑為1.5,求圓周長及面積開始r=1.5L=2*3.14*rs=3.14*r*r輸出L,s結(jié)束(2)畫出流程圖7/24/202310開始r=1.5L=2*3.14*rs=3.14*r*r輸出#include<stdio.h>#definePI3.14main(){floatr,l,s;r=1.5;l=2*PI*r;s=PI*r*r;printf("\nl=%f,s=%f",l,s);}(3)根據(jù)流程圖編程7/24/202311#include<stdio.h>(3)根據(jù)流程圖編順序結(jié)構(gòu)——應(yīng)用舉例(2)例4.1設(shè)銀行存款利率rate為2.25%,存款期為n年,本金為captial元,編程計(jì)算n年后的本利之和deposit解:(1)問題分析:(算法)step2:給出年n、本金captial(鍵盤輸入)step3:n年后本利之和depositstep4:輸出結(jié)果公式:deposit=captial*(1+rate)nstep1:給出存款利率rate7/24/202312順序結(jié)構(gòu)——應(yīng)用舉例(2)例4.1設(shè)銀行存款利率rate為開始rate=0.0225輸入n和captialdepoist=captial*(1+rate)n輸出depoist結(jié)束(2)畫出流程圖7/24/202313開始rate=0.0225輸入n和captialdepois(3)根據(jù)流程圖編程#include<math.h>#include<stdio.h>main(){
intn;doublerate=0.0225;doublecapital,deposit;printf("pleaseenteryear,capital:");scanf("%d%lf",&n,&capital);deposit=capital*pow(1+rate,n);printf("deposit=%lf\n",deposit);}7/24/202314(3)根據(jù)流程圖編程#include<math.h>7/以#開始的編譯預(yù)處理命令
main(){局部變量說明語句;
執(zhí)行語句;}簡單的C程序結(jié)構(gòu)框架7/24/202315以#開始的編譯預(yù)處理命令簡單的C程序結(jié)構(gòu)框架7/24/202編譯預(yù)處理命令文件包含編譯預(yù)處理命令#include指示編譯系統(tǒng)將一個(gè)源文件嵌入到含有#include指令的源文件中該指令所在的位置處。使用形式:#include<頭文件名>/"頭文件名"注意:以#開頭;每條一行;不是C語句7/24/202316編譯預(yù)處理命令文件包含編譯預(yù)處理命令#include指示編譯查詢情況編譯預(yù)處理命令(1)用<>將頭文件名括起,則在include子目錄中查詢(2)用"
"將頭文件名括起,則先在當(dāng)前目錄中查找若無繼續(xù)搜索C子目錄。7/24/202317查詢情況編譯預(yù)處理命令(1)用<>將頭文件名括起,則在(2)常用函數(shù)對(duì)應(yīng)的頭文件函數(shù)頭文件名數(shù)學(xué)函數(shù)math.h字符串函數(shù)string.h輸入、輸出函數(shù)stdio.h動(dòng)態(tài)存儲(chǔ)分配函數(shù)stdlib.h/malloc.h7/24/202318常用函數(shù)對(duì)應(yīng)的頭文件函數(shù)4.3選擇結(jié)構(gòu)作用:根據(jù)條件控制程序流向。條件的組成:問題的提出:各種類型的常量、變量、表達(dá)式(常用:關(guān)系/邏輯表達(dá)式)注意各種表達(dá)式的用法7/24/2023194.3選擇結(jié)構(gòu)作用:根據(jù)條件控制程序流向。條件的組成:問題簡單分支選擇(單分支)結(jié)構(gòu)yesno語句A條件成立否條件表達(dá)式.T..F.語句格式:
if(表達(dá)式)語句/語句組;7/24/202320簡單分支選擇(單分支)結(jié)構(gòu)yesno語句A條件成立否條件表達(dá)雙分支選擇結(jié)構(gòu)yesno程序段A程序段B條件成立否條件表達(dá)式.T..F.語句1語句2格式:If(表達(dá)式)語句1/語句組1;else語句2/語句組2;7/24/202321雙分支選擇結(jié)構(gòu)yesno程序段A程序段B條件成立否條件表達(dá)式多分支選擇結(jié)構(gòu)表達(dá)式語句1TF語句2表達(dá)式表達(dá)式語句3語句4TTFF表達(dá)式1語句1TF語句2表達(dá)式2表達(dá)式3語句3語句4TTFF7/24/202322多分支選擇結(jié)構(gòu)表達(dá)式語句1TF語句2表達(dá)式表達(dá)式語句3語句4多分支選擇結(jié)構(gòu)
if(表達(dá)式)語句1;elseif(表達(dá)式2)語句2;:elseif(表達(dá)式m)語句m;else語句n;一般形式:7/24/202323多分支選擇結(jié)構(gòu)if(表達(dá)式)語句1;一般形式:7/24分支嵌套
if(表達(dá)式1)
if(表達(dá)式2)語句1;else語句2;
else
if(表達(dá)式3)語句3;else語句4;一般形式:7/24/202324分支嵌套if(表達(dá)式1)一般形式:7/24/20232使用if語句需注意事項(xiàng)(1)條件判斷表達(dá)式一定用圓括號(hào)括起。(2)復(fù)合語句必須用{}引起。(3)每一個(gè)else必須與一個(gè)if項(xiàng)匹配。(4)else總是與離它最近的if相匹配。7/24/202325使用if語句需注意事項(xiàng)(1)條件判斷表達(dá)式一定用圓括號(hào)括體型判斷。按“體指數(shù)”對(duì)肥胖程度進(jìn)行劃分:體指數(shù)t=體重w/(身高h(yuǎn))2(w單位為公斤,h單位為米)當(dāng)t<18時(shí),為低體重;當(dāng)t介于18和25之間時(shí),為正常體重;當(dāng)t介于25和27之間時(shí),為超重體重;當(dāng)t>=27時(shí),為肥胖。編程從鍵盤輸入你的身高h(yuǎn)和體重w,根據(jù)給定公式計(jì)算體指數(shù)t,然后判斷你的體重屬于何種類型。用3種方法編程:算法1:用不帶else子句的if語句編程(ex45_1)算法2:用在if子句中嵌入if語句的形式編程(ex45_2)算法3:用在else子句中嵌入if語句的形式編程(ex45_3)
例4.57/24/202326體型判斷。按“體指數(shù)”對(duì)肥胖程度進(jìn)行劃分:例4.57/24/例:計(jì)算并輸出下列分段函數(shù)值y=0x01x>0#include<stdio.h>main(){floatx,y;printf("inputx:");scanf("%f",&x);
y=0;if(x>0)y=1;printf("y=%f\n",y);}7/24/202327例:計(jì)算并輸出下列分段函數(shù)值y=0x0#inc用switch語句構(gòu)成的多分支結(jié)構(gòu)多路選擇switch
(表達(dá)式)
{
case
常數(shù)1:
語句序列1;
case
常數(shù)2:
語句序列2;
…………
default:
語句序列3;
}default可以沒有,但最好不省略不要忘記break7/24/202328用switch語句構(gòu)成的多分支結(jié)構(gòu)多路選擇7/24/202例4.8編程設(shè)計(jì)一個(gè)簡單的計(jì)算器程序。(ex48)要求根據(jù)用戶從鍵盤輸入的表達(dá)式:
操作數(shù)1運(yùn)算符op操作數(shù)2計(jì)算表達(dá)式的值,指定的運(yùn)算符為加(+)、減(-)、乘(*)、除(/)7/24/202329例4.8編程設(shè)計(jì)一個(gè)簡單的計(jì)算器程序。(ex48)7/24/使用switch語句應(yīng)注意(1)各常量表達(dá)式的值不可相同。(2)case后可有多個(gè)語句,不用{}括起。(3)常量表達(dá)式僅是一個(gè)語句標(biāo)號(hào)。(4)各case及default子句的順序可隨意。(5)每個(gè)分支執(zhí)行后,利用break語句跳出。7/24/202330使用switch語句應(yīng)注意(1)各常量表達(dá)式的值不可相同。4.4循環(huán)結(jié)構(gòu)引入循環(huán)的目的:簡化程序、提高編程效率三種循環(huán)方式當(dāng)型循環(huán)直到型循環(huán)步長型循環(huán)7/24/2023314.4循環(huán)結(jié)構(gòu)引入循環(huán)的目的:簡化程序、提高編程效率三種循循環(huán)結(jié)構(gòu)的流程圖條件PA當(dāng)型循環(huán)直到循環(huán)真假假條件PA假真假條件P條件PA假7/24/202332循環(huán)結(jié)構(gòu)的流程圖條件PA當(dāng)型循環(huán)直到循環(huán)真假假條件PA假循環(huán)語句——while一般形式:while(表達(dá)式)
{ 語句;}只要表達(dá)式的值為非0,就重復(fù)執(zhí)行語句,直到表達(dá)式值為0時(shí)止先判斷,后執(zhí)行7/24/202333循環(huán)語句——while一般形式:7/24/202333例:找出100以內(nèi)的奇數(shù)。
main(){int
I=1;
while(I<=100)
{printf("%d",I);
I+=2;}}注意:(1)while構(gòu)成的是“當(dāng)型”循環(huán)。(2)循環(huán)體中一定有對(duì)于循環(huán)控制變量的操作。7/24/202334例:找出100以內(nèi)的奇數(shù)。main()注意:(1)whi循環(huán)語句——do-while一般形式:do
{
語句;
}while
(表達(dá)式);首先執(zhí)行語句,然后判斷表達(dá)式的值。如果表達(dá)式為0,繼續(xù)向下執(zhí)行,否則,再次執(zhí)行語句,再次判斷表達(dá)式的值語句會(huì)被至少執(zhí)行一次7/24/202335循環(huán)語句——do-while一般形式:7/24/2023例:找出100以內(nèi)的奇數(shù)。
main(){int
I=1;
while(I<=100)
{printf("%d",I);
I+=2;}}
main(){int
I=1;
do
{printf("%d",I);
I+=2;}
while(I<=100);}7/24/202336例:找出100以內(nèi)的奇數(shù)。main()main()7/2循環(huán)語句——for一般形式:for(表達(dá)式1;表達(dá)式2;表達(dá)式3)
{ 語句;}表達(dá)式2執(zhí)行循環(huán)體計(jì)算表達(dá)式1的值計(jì)算表達(dá)式3的值跳出循環(huán)TF工作過程:7/24/202337循環(huán)語句——for一般形式:表達(dá)式2執(zhí)行循環(huán)體計(jì)算表達(dá)式1有關(guān)for的說明(1)
for(表達(dá)式1;表達(dá)式2;表達(dá)式3)
{ 語句;}相當(dāng)于:
表達(dá)式1;
while
(表達(dá)式2){
語句;
表達(dá)式3;
}7/24/202338有關(guān)for的說明(1)for(表達(dá)式1;表達(dá)式2在for和while語句之后一般沒有分號(hào)有分號(hào)表示循環(huán)體就是分號(hào)之前的內(nèi)容(空循環(huán)體)while(i<100);
i++;for(i=0;i<100;i++);
printf("%d",i);for通常有一個(gè)循環(huán)變量控制循環(huán)的次數(shù),不要在循環(huán)體內(nèi)改變這個(gè)變量有關(guān)for的說明(2)7/24/202339在for和while語句之后一般沒有分號(hào)有關(guān)for的說明
for語句中的表達(dá)式1、表達(dá)式3可為逗號(hào)表達(dá)式。如:for(i=0,j=1;j<n&&i<n;i++,j++)表達(dá)式1和表達(dá)式3可以沒有或者是用逗號(hào)分隔的多個(gè)表達(dá)式的組合。如:for(;i<=5;)有關(guān)for的說明(3)7/24/202340for語句中的表達(dá)式1、表達(dá)式3可為逗號(hào)表達(dá)式。如:main(){floatx,sum;while(x!=9999){if(x<0.0)sum+=x;printf("\nsum=%f",sum);scanf("%f",&x);}scanf("%f",&x);}例:給定一組數(shù)據(jù)如下,編程對(duì)負(fù)數(shù)求和。12,45,67.8,-12.5,-35.67,567.89方法1:用while7/24/202341main(){floatx,sum;while(x例:給定一組數(shù)據(jù)如下,編程對(duì)負(fù)數(shù)求和。12,45,67.8,-12.5,-35.67,567.89方法2:用formain()floatx,sum=0;for(i=1;i<=6;i++)if(x<0.0)sum+=x;}{scanf("%f",&x);printf("\nsum=%f",sum);inti;}{7/24/202342例:給定一組數(shù)據(jù)如下,編程對(duì)負(fù)數(shù)求和。12,45,67.8,選擇三種循環(huán)的一般原則如果循環(huán)次數(shù)已知,用for如果循環(huán)次數(shù)未知,用while如果循環(huán)體至少要執(zhí)行一次,用do-while這只是“一般”原則,不是“原則”7/24/202343選擇三種循環(huán)的一般原則如果循環(huán)次數(shù)已知,用for7/24/2
猜數(shù)游戲:先由計(jì)算機(jī)“想”一個(gè)數(shù)請(qǐng)人猜,如果人猜對(duì)了,則計(jì)算機(jī)給出提示:“Right!”,否則提示:“Wrong!”,并告訴人所猜的數(shù)是大還是小。(ex46)例4.6分析:Step1:計(jì)算機(jī)想一個(gè)數(shù);Step2:人猜一個(gè)數(shù);Step3:判斷三種情況并給出相應(yīng)結(jié)果。7/24/202344猜數(shù)游戲:先由計(jì)算機(jī)“想”一個(gè)數(shù)請(qǐng)人猜,如果人猜對(duì)了,猜數(shù)游戲用到的庫函數(shù)(1)隨機(jī)函數(shù)rand()#include<stdlib.h>RAND_MAX在stdlib.h中定義,不大于雙字節(jié)整數(shù)的最大值32767產(chǎn)生[0,RAND_MAX]之間的隨機(jī)數(shù)magic=rand();產(chǎn)生[0,b-1]之間的隨機(jī)數(shù)magic=rand()%b;產(chǎn)生[a,a+b-1]之間的隨機(jī)數(shù)magic=rand()%b+a;7/24/202345猜數(shù)游戲用到的庫函數(shù)(1)隨機(jī)函數(shù)rand()7/24/20
猜數(shù)游戲:先由計(jì)算機(jī)“想”一個(gè)1到100之間的數(shù)請(qǐng)人猜,如果人猜對(duì)了,則結(jié)束游戲,否則計(jì)算機(jī)給出提示,告訴人所猜的數(shù)是太大還是太小,直到人猜對(duì)為止。計(jì)算機(jī)記錄人猜的次數(shù),以此來反映猜數(shù)者“猜”的水平。(ex49)例4.9運(yùn)行程序發(fā)現(xiàn)問題每次運(yùn)行程序,機(jī)器所想的數(shù)都是一樣的;用函數(shù)rand所產(chǎn)生的隨機(jī)數(shù)只是偽隨機(jī)數(shù)。7/24/202346猜數(shù)游戲:先由計(jì)算機(jī)“想”一個(gè)1到100之間的數(shù)請(qǐng)人猜猜數(shù)游戲用到的庫函數(shù)(2)隨機(jī)函數(shù)srand為函數(shù)rand()設(shè)置隨機(jī)數(shù)種子來實(shí)現(xiàn)對(duì)函數(shù)rand所產(chǎn)生的偽隨機(jī)數(shù)的“隨機(jī)化”通過鍵入隨機(jī)數(shù)種子,產(chǎn)生[0,100]之間的隨機(jī)數(shù)scanf("%u",&seed);srand(seed);magic=rand()%100+1;改進(jìn)例4.9(ex49_1)7/24/202347猜數(shù)游戲用到的庫函數(shù)(2)隨機(jī)函數(shù)srand7/24/202猜數(shù)游戲用到的庫函數(shù)(3)隨機(jī)函數(shù)srand:為函數(shù)rand()設(shè)置隨機(jī)數(shù)種子來實(shí)現(xiàn)對(duì)其產(chǎn)生的偽隨機(jī)數(shù)的“隨機(jī)化”使用計(jì)算機(jī)讀取其時(shí)鐘值并把該值自動(dòng)設(shè)置為隨機(jī)數(shù)種子,產(chǎn)生[0,100]之間的隨機(jī)數(shù)函數(shù)time()返回以秒計(jì)算的當(dāng)前時(shí)間值,該值被轉(zhuǎn)換為無符號(hào)整數(shù)并用作隨機(jī)數(shù)發(fā)生器的種子#include<time.h>srand(time(NULL));magic=rand()%100+1;再改進(jìn)例4.9(ex49_2)7/24/202348猜數(shù)游戲用到的庫函數(shù)(3)隨機(jī)函數(shù)srand:為函數(shù)rand永遠(yuǎn)不會(huì)退出的循環(huán)為死循環(huán)for(;;){}while(1){}do
{}while(1);一般情況下,要極力避免死循環(huán)絕大多數(shù)程序不需要死循環(huán)。如果出現(xiàn),往往都是bug時(shí)間過長的循環(huán)會(huì)造成“假死”效果,也要考慮解決死循環(huán)7/24/202349永遠(yuǎn)不會(huì)退出的循環(huán)為死循環(huán)死循環(huán)7/24/202349例4.11國王的許諾相傳國際象棋是古印度舍罕王的宰相達(dá)依爾發(fā)明的。舍罕王十分喜歡象棋,決定讓宰相自己選擇何種賞賜。位聰明的宰相指著8×8共64格的象棋盤說:陛下,請(qǐng)您賞給我一些麥子吧,就在棋盤的第一個(gè)格子中放1粒,第2格中放2粒,第3格放4粒,以后每一格都比前一格增加一倍,依此放完棋盤上的64個(gè)格子,我就感恩不盡了舍罕王讓人扛來一袋麥子,他要兌現(xiàn)他的許諾。
國王能兌現(xiàn)他的許諾嗎?試編程計(jì)算舍罕王共要多少麥子賞賜他的宰相,這些麥子合多少立方米?
(已知1立方米麥子約1.42e8粒)
總粒數(shù)為:sum=1+2+22+23+…+263
7/24/202350例4.11國王的許諾相傳國際象棋是古印度舍罕王的宰相達(dá)依爾#defineCONST1.42e8#include<stdio.h>#include<math.h>main(){
int
n;
double
term,sum=0;
/*累加求和變量賦初值*/
for
(n=1;n<=64;n++)
{
term=
pow(2,n-1);
/*根據(jù)累加項(xiàng)的規(guī)律計(jì)算累加項(xiàng)
*/
sum=sum+term;
/*作累加運(yùn)算*/
}
printf("sum=%e\n",sum);/*打印總麥粒數(shù)*/
printf("volum=%e\n",sum/CONST);/*打印折合的總麥粒體積數(shù)*/}方法17/24/202351#defineCONST1.42e8方法17/24/2方法2#defineCONST1.42e8/*定義符號(hào)常量CONST值為1.42e8*/#include<stdio.h>main(){
int
n;
double
term=1,sum=1;/*累乘求積、累加求和變量賦初值*/
for
(n=2;n<=64;n++)
{
term=term*2;/*根據(jù)后項(xiàng)總是前項(xiàng)的2倍計(jì)算累加項(xiàng)*/
sum=sum+term;
/*作累加運(yùn)算*/
}
printf("sum=%e\n",sum);
/*打印總麥粒數(shù)*/
printf("volum=%e\n",sum/CONST);/*打印折合的總麥粒體積數(shù)*/}
7/24/202352方法2#defineCONST1.42e8/循環(huán)嵌套結(jié)構(gòu)形式for(){:while(){:do{:}while();}}7/24/202353循環(huán)嵌套結(jié)構(gòu)形式for(使用嵌套的循環(huán)時(shí),應(yīng)注意的問題在嵌套的各層循環(huán)體中,使用復(fù)合語句(即用一對(duì)大花括號(hào)將循環(huán)體語句括起來)保證邏輯上的正確性
內(nèi)層和外層循環(huán)控制變量不應(yīng)同名,以免造成混亂
嵌套的循環(huán)最好采用右縮進(jìn)格式書寫,以保證層次的清晰性
循環(huán)嵌套不能交叉,即在一個(gè)循環(huán)體內(nèi)必須完整的包含著另一個(gè)循環(huán)
7/24/202354使用嵌套的循環(huán)時(shí),應(yīng)注意的問題在嵌套的各層循環(huán)體中,使用復(fù)合合法的嵌套循環(huán)7/24/202355合法的嵌套循環(huán)7/24/202355例4.14編程輸出如下形式的九九表7/24/202356例4.14編程輸出如下形式的九九表7/24/202356#include<stdio.h>main(){ intm,n;
for(m=1;m<10;m++)
printf("%4d",m);/*打印表頭*/
printf("\n");
for(m=1;m<10;m++)
printf("-"); printf("\n");
for(m=1;m<10;m++) {
for(n=1;n<10;n++) {
printf("%4d",m*n); }
printf("\n");
}}例4.147/24/202357#include<stdio.h>例4.147/24/2例4.15將上例輸出格式改變成下三角格式打印7/24/202358例4.15將上例輸出格式改變成下三角格式打印7/24/202#include<stdio.h>main(){ intm,n;
for(m=1;m<10;m++)
printf("%4d",m);/*打印表頭*/
printf("\n");
for(m=1;m<10;m++)
printf("-");
printf("\n");
for(m=1;m<10;m++) {
for(n=1;n<=m;n++) {
printf("%4d",m*n); }
printf("\n"); }}例4.157/24/202359#include<stdio.h>例4.157/24/2例4.16馬克思手稿中有一道趣味數(shù)學(xué)題:有30個(gè)人,其中有男人、女人和小孩,在一家飯館里吃飯共花了50先令,每個(gè)男人各花3先令,每個(gè)女人各花2先令,每個(gè)小孩各花1先令,問男人、女人和小孩各有幾人?
解方程組窮舉法7/24/202360例4.16馬克思手稿中有一道趣味數(shù)學(xué)題:有30個(gè)人,其中有方法1:窮舉x,y,z的所有組合#include<stdio.h>main(){
intx,y,z;
printf("Man\tWomen\tChildern\n");
for(x=0;x<=30;x++)
for(y=0;y<=30;y++)
for(z=0;z<=30;z++)
if(x+y+z==30&&3*x+2*y+z==50)
printf("%3d\t%5d\t%8d\n",x,y,z);}
7/24/202361方法1:窮舉x,y,z的所有組合#include<stdi方法2:改進(jìn)算法#include<stdio.h>
main(){
intx,y,z;
printf("Man\tWomen\tChildern\n");
for(x=0;x<=16;x++)
for(y=0;y<=25;y++){z=30–x-y;
if(3*x+2*y+z==50)
printf("%3d\t%5d\t%8d\n",x,y,z);}}
7/24/202362方法2:改進(jìn)算法#include<stdio.h>7/24.5流程的轉(zhuǎn)移控制goto語句break語句continue語句return語句標(biāo)準(zhǔn)庫函數(shù)exit()
7/24/2023634.5流程的轉(zhuǎn)移控制goto語句7/24/202363goto語句一般形式goto語句標(biāo)號(hào);……語句標(biāo)號(hào):……或語句標(biāo)號(hào):…………goto語句標(biāo)號(hào);功能:無條件轉(zhuǎn)去執(zhí)行語句標(biāo)號(hào)所指語句行。7/24/202364goto語句一般形式7/24/202364(1)語句標(biāo)號(hào)用標(biāo)識(shí)符表示。(2)語句標(biāo)號(hào)一定為函數(shù)段中存在的。(3)該語句不可濫用。使用goto語句要注意標(biāo)號(hào)舉例error:goto舉例goto
error;不能用整數(shù)作語句標(biāo)號(hào)7/24/202365(1)語句標(biāo)號(hào)用標(biāo)識(shí)符表示。(2)語句標(biāo)號(hào)一定為函數(shù)段中存在使用之后,程序仍然是單入口,單出口不要使用一個(gè)以上的標(biāo)號(hào)不要用goto往回跳,要向下跳不要讓goto制造出永遠(yuǎn)不會(huì)被執(zhí)行的代碼使用goto語句的原則7/24/202366使用之后,程序仍然是單入口,單出口使用goto語句的原則7break
與continue
語句
break語句的作用:循環(huán)中使用break語句可提前結(jié)束整個(gè)循環(huán)。
continue語句的作用:循環(huán)中使用continue語句可提前結(jié)束本次循環(huán)7/24/202367break與continue語句break語句的作用:break
與continue
語句示意圖假假真真break表達(dá)式1表達(dá)式2循環(huán)語句的下一條語句循環(huán)語句的下一條語句假假真真contiue表達(dá)式1表達(dá)式2continue7/24/202368break與continue語句示意圖假假真真break有關(guān)break
與continue的說明(1)break語句可用于switch結(jié)構(gòu),也可用于循環(huán)中;(2)continue語句僅用于循環(huán)中;(3)break與continue均只影響包含它的結(jié)構(gòu)中;(4)break與continue少用為妙;7/24/202369有關(guān)break與continue的說明(1)break#include<stdio.h>#definePI3.14main(){intr;floatarea;for(r=1;r<=10;r++){
area=PI*r*r;if(area>50.0)
break;printf("面積等于%f\n",area);
}printf("現(xiàn)在r=%d\n",r);}例7/24/202370#include<stdio.h>#define例#include<stdio.h>#definePI3.14main(){intr;floatarea;for(r=1;r<=10;r++){area=PI*r*r;if(area<50.0)
continue;printf("面積等于%f\n",area);}}7/24/202371例#include<stdio.h>#defineExit()
函數(shù)exit(0)作用是終止整個(gè)程序的執(zhí)行,強(qiáng)制返回操作系統(tǒng)
調(diào)用該函數(shù)需要嵌入頭文件<stdlib.h>7/24/202372Exit()函數(shù)exit(0)7/24/202372例4.19從鍵盤任意輸入一個(gè)正整數(shù),編程判斷它是否是素?cái)?shù),若是素?cái)?shù),輸出“Yes!”;否則,輸出“No!”問題分析:概念:素?cái)?shù)是指除了能被1和它本身整除外,不能被其他任何整數(shù)整除的數(shù);判斷素?cái)?shù)的方法:把m作為被除數(shù),把i=2~(m-1)依次做為除數(shù),若余數(shù)都不為0,則說明是素?cái)?shù)。簡單判斷方法:只需用2~的數(shù)去除m,即可得到正確的判定結(jié)果。7/24/202373例4.19從鍵盤任意輸入一個(gè)正整數(shù),編程判斷它是否是素?cái)?shù),若#include<math.h>main(){
intm,i,k;
printf("Pleaseenteranumber:");
scanf("%d",&m); k=sqrt(m);
for(i=2;i<=k;i++) {
if(m%i==0) {
printf("No!\n");
gotoend; } }
printf("Yes!\n");end:
printf("Programisover!\n");}Pleaseenteranumber:
6
Programisover!No!方法1:用goto7/24/202374#include<math.h>Pleaseenter方法1:用goto#include<math.h>main(){
intm,i,k;
printf("Pleaseenteranumber:");
scanf("%d",&m); k=sqrt(m);
for(i=2;i<=k;i++) {
if(m%i==0) {
printf("No!\n");
gotoend; } }
printf("Yes!\n");end:
printf("Programisover!\n");}Pleaseenteranumber:
5
Programisover!Yes!7/24/202375方法1:用goto#include<math.h>Ple#include<math.h>main(){
intm,i,k;
printf("Pleaseenteranumber:");
scanf("%d",&m); k=sqrt(m);
for(i=2;i<=k;i++){
if(m%i==0)
break;
}
if(i>k)
printf("Yes!\n");
else
printf("No!\n");
printf("Programisover!\n");}Plea
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年武漢市中醫(yī)醫(yī)院醫(yī)師崗位招聘備考題庫完整答案詳解
- 2025年玉環(huán)市流動(dòng)人口服務(wù)中心招聘流動(dòng)人口專管員備考題庫及一套完整答案詳解
- 中國鐵路青藏集團(tuán)有限公司2026年招聘全日制普通高校大專(高職)畢業(yè)生備考題庫(二)附答案詳解
- 2025年杭州市上城區(qū)望江街道社區(qū)衛(wèi)生服務(wù)中心編外招聘備考題庫及完整答案詳解一套
- 2025年嘉峪關(guān)市第四幼兒園保健醫(yī)招聘備考題庫及答案詳解1套
- 2025年永修吳城候鳥小鎮(zhèn)旅游運(yùn)營管理有限公司面向社會(huì)公開招聘勞務(wù)派遣制工作人員12人備考題庫完整答案詳解
- 2025年學(xué)年第一學(xué)期廈門市翔安區(qū)舫山第二小學(xué)公開招聘頂崗非在編合同教師備考題庫及一套參考答案詳解
- 2025年臨滄市嘉育中學(xué)誠招各學(xué)科教師52人備考題庫完整答案詳解
- 2025年杭州地鐵科技有限公司招聘工作人員備考題庫(第一批)及1套參考答案詳解
- 2025年吉安市市直機(jī)關(guān)事業(yè)單位編外工作人員招聘備考題庫(四十九)及答案詳解參考
- 老人贍養(yǎng)協(xié)議書
- 污水處理廠運(yùn)行及問題-污水廠的運(yùn)營與維護(hù)方案
- 教科版九年級(jí)物理上冊(cè)導(dǎo)學(xué)案:7.4.電磁繼電器
- QT400前軸承座上半鑄造工藝設(shè)計(jì)
- 全國中學(xué)語文青年教師教學(xué)展示活動(dòng)一等獎(jiǎng)《三顧茅廬》教學(xué)展示課件
- 工業(yè)區(qū)位因素與區(qū)位選擇課件(1)中圖版版
- 《人工智能基礎(chǔ)及應(yīng)用》 習(xí)題及參考答案 王方石 第1-9章
- 2024屆高考地理一輪復(fù)習(xí)+課件+工業(yè)區(qū)位因素
- 標(biāo)準(zhǔn)作業(yè)指導(dǎo)書模板(SOP)
- 科室質(zhì)控小組活動(dòng)內(nèi)容及要求
- 北京師范大學(xué)珠海校區(qū)
評(píng)論
0/150
提交評(píng)論