C語(yǔ)言程序設(shè)計(jì)教程(第三版)(微課版)課件 第3章 程序設(shè)計(jì)基本結(jié)構(gòu)_第1頁(yè)
C語(yǔ)言程序設(shè)計(jì)教程(第三版)(微課版)課件 第3章 程序設(shè)計(jì)基本結(jié)構(gòu)_第2頁(yè)
C語(yǔ)言程序設(shè)計(jì)教程(第三版)(微課版)課件 第3章 程序設(shè)計(jì)基本結(jié)構(gòu)_第3頁(yè)
C語(yǔ)言程序設(shè)計(jì)教程(第三版)(微課版)課件 第3章 程序設(shè)計(jì)基本結(jié)構(gòu)_第4頁(yè)
C語(yǔ)言程序設(shè)計(jì)教程(第三版)(微課版)課件 第3章 程序設(shè)計(jì)基本結(jié)構(gòu)_第5頁(yè)
已閱讀5頁(yè),還剩109頁(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)介

大學(xué)程序設(shè)計(jì)(C)主講:王娟勤西北農(nóng)林科技大學(xué)信息工程學(xué)院程序的三種基本結(jié)構(gòu)3.1順序結(jié)構(gòu)3.2選擇結(jié)構(gòu)程序設(shè)計(jì)3.3第3章程序設(shè)計(jì)基本結(jié)構(gòu)循環(huán)結(jié)構(gòu)程序設(shè)計(jì)3.4

3.1程序的三種基本結(jié)構(gòu)結(jié)構(gòu)化程序設(shè)計(jì)基本思想:任何程序都可以用三種基本結(jié)構(gòu)表示,限制使用無(wú)條件轉(zhuǎn)移語(yǔ)句(goto)結(jié)構(gòu)化程序:由三種基本結(jié)構(gòu)反復(fù)嵌套構(gòu)成的程序優(yōu)點(diǎn):結(jié)構(gòu)清晰,易讀,提高程序設(shè)計(jì)質(zhì)量和效率三種基本結(jié)構(gòu):順序結(jié)構(gòu)AB流程圖PAB真假選擇結(jié)構(gòu)kA1A2AiAnk=k2k=k1k=knk=ki......二分支選擇結(jié)構(gòu)多分支選擇結(jié)構(gòu)注:A,B,A1….An可以是一個(gè)簡(jiǎn)單語(yǔ)句,也可以是一個(gè)基本結(jié)構(gòu)3.1程序的三種基本結(jié)構(gòu)循環(huán)結(jié)構(gòu)當(dāng)型循環(huán)結(jié)構(gòu)直到型循環(huán)結(jié)構(gòu)PA假真AP真假3.1程序的三種基本結(jié)構(gòu)三種結(jié)構(gòu)的特點(diǎn):只有一個(gè)入口和出口結(jié)構(gòu)內(nèi)的每一部分都有機(jī)會(huì)被執(zhí)行到。結(jié)構(gòu)內(nèi)不存在死循環(huán)

3.1程序的三種基本結(jié)構(gòu)結(jié)構(gòu)化程序設(shè)計(jì)的核心思想采用順序、選擇和循環(huán)三種基本結(jié)構(gòu)作為程序設(shè)計(jì)的基本單元只有一個(gè)入口;只有一個(gè)出口;無(wú)死語(yǔ)句,即不存在永遠(yuǎn)都執(zhí)行不到的語(yǔ)句;無(wú)死循環(huán),即不存在永遠(yuǎn)都執(zhí)行不完的循環(huán)。采用“自頂向下、逐步求精”和模塊化的方法進(jìn)行結(jié)構(gòu)化程序設(shè)計(jì)3.1程序的三種基本結(jié)構(gòu)自頂向下、逐步求精的結(jié)構(gòu)化程序設(shè)計(jì)方法BAA2A1B2B1A12A11A22A21B12B11B22B213.1程序的三種基本結(jié)構(gòu)自頂向下、逐步求精的結(jié)構(gòu)化程序設(shè)計(jì)方法3.1程序的三種基本結(jié)構(gòu)例如:?jiǎn)栴}描述某學(xué)院為準(zhǔn)備參加網(wǎng)絡(luò)工程認(rèn)證的人員開(kāi)辦了相應(yīng)的培訓(xùn)課程。當(dāng)首批培訓(xùn)人員參加了認(rèn)證考試后,該學(xué)院自然想知道這些學(xué)生考的如何,以便調(diào)整教學(xué)方案和收費(fèi)標(biāo)準(zhǔn)?,F(xiàn)在需要編寫(xiě)一個(gè)統(tǒng)計(jì)考試結(jié)果的程序。能夠顯示出通過(guò)和沒(méi)有通過(guò)的人數(shù),并且如果通過(guò)人數(shù)不低于總?cè)藬?shù)的70%,顯示提高學(xué)費(fèi)的建議。(已知參加考是的人員有500名。并且已經(jīng)在通過(guò)人的名字旁邊標(biāo)注了1。在未通過(guò)者的名字旁邊標(biāo)出了2。)自頂向下、逐步求精的結(jié)構(gòu)化程序設(shè)計(jì)方法3.1程序的三種基本結(jié)構(gòu)例如:?jiǎn)栴}分析1.程序必須要處理500個(gè)應(yīng)試者的考試結(jié)果,所以要使用循環(huán)。2.每個(gè)考試結(jié)果都是一個(gè)數(shù),即1或2。程序每次讀取一個(gè)結(jié)果后,必須確定該數(shù)是1還是2。3.使用兩個(gè)計(jì)數(shù)器。一個(gè)用于計(jì)算通過(guò)考試的人數(shù),另一個(gè)用于計(jì)算沒(méi)有通過(guò)的人數(shù)。4.程序處理完所有結(jié)果后,必須判斷是否有70%以上的人員通過(guò)了認(rèn)證考試。自頂向下、逐步求精的結(jié)構(gòu)化程序設(shè)計(jì)方法3.1程序的三種基本結(jié)構(gòu)例如:?jiǎn)栴}的頂層表示分析認(rèn)證考試的結(jié)果并決定培訓(xùn)費(fèi)是否提高自頂向下、逐步求精的結(jié)構(gòu)化程序設(shè)計(jì)方法3.1程序的三種基本結(jié)構(gòu)例如:第一次求精結(jié)果初始化變量輸入500個(gè)考試結(jié)果,統(tǒng)計(jì)通過(guò)和未通過(guò)的人數(shù)打印統(tǒng)計(jì)結(jié)果,并決定培訓(xùn)費(fèi)是否提高。自頂向下、逐步求精的結(jié)構(gòu)化程序設(shè)計(jì)方法3.1程序的三種基本結(jié)構(gòu)例如:第二次求精結(jié)果初始化變量將變量passes初始化為0將變量failures初始化為0將變量counter初始化為0自頂向下、逐步求精的結(jié)構(gòu)化程序設(shè)計(jì)方法3.1程序的三種基本結(jié)構(gòu)例如:第二次求精結(jié)果輸入500個(gè)考試結(jié)果,統(tǒng)計(jì)通過(guò)和未通過(guò)的人數(shù)。While人員計(jì)數(shù)器counter小于等于500。

輸入下一個(gè)考試結(jié)果至變量result。if此結(jié)果是通過(guò)

變量passes加一else

變量failures加一

人員計(jì)數(shù)器counter加一。自頂向下、逐步求精的結(jié)構(gòu)化程序設(shè)計(jì)方法3.1程序的三種基本結(jié)構(gòu)例如:第二次求精結(jié)果打印統(tǒng)計(jì)結(jié)果,并決定培訓(xùn)費(fèi)是否提高。打印通過(guò)認(rèn)證的人數(shù)。打印未通過(guò)認(rèn)證的人數(shù)。if變量passes的值除500大于等于0.7

打印提高培訓(xùn)費(fèi)。自頂向下、逐步求精的結(jié)構(gòu)化程序設(shè)計(jì)方法3.1程序的三種基本結(jié)構(gòu)求精結(jié)果源程序?qū)⒆兞縫asses初始化為0將變量failures初始化為0將變量counter初始化為0While人員計(jì)數(shù)器counter小于等于500。輸入下一個(gè)考試結(jié)果至變量result。

if此結(jié)果是通過(guò)變量passes加一

else

變量failures加一人員計(jì)數(shù)器counter加一。打印通過(guò)認(rèn)證的人數(shù)。打印未通過(guò)認(rèn)證的人數(shù)。if變量passes的值除500大于等于0.7

打印提高培訓(xùn)費(fèi)。#include<stdio.h>intmain(void){intpasses=0;intfailures=0;intcounter=1;intresult;while(counter<=500){printf("Enterresult(1=pass,2=fail):");scanf("%d",&result);if(result==1)passes++;elsefailures++;counter+=1;}printf("Passeds%d",passes);printf("Failed%d",failures);if(passes/500.0>=0.7)printf("Raisetuition\n");return0;}3.2順序結(jié)構(gòu)例3-1:從鍵盤(pán)輸入三角形三條邊的值,計(jì)算三角形的面積。海倫公式為:

,其中p=(a+b+c)/2#include<stdio.h>#include<math.h>//內(nèi)含開(kāi)平方函數(shù)sqrt,所以必須包含進(jìn)來(lái)intmain(){floata,b,c,p,s;printf("Inputthreeedgesoftriangle:\n");scanf("%f,%f,%f",&a,&b,&c);p=(a+b+c)/2;s=sqrt(p*(p-a)*(p-b)*(p-c));printf("theareaofthetriangleis%f\n",s);return0;}問(wèn)題#include<stdio.h>#include<math.h>intmain(){floata,b,c,p,s;printf("Inputthreeedgesoftriangle:\n");scanf("%f,%f,%f",&a,&b,&c);p=(a+b+c)/2;s=sqrt(p*(p-a)*(p-b)*(p-c));printf("theareaofthetriangleis%f\n",s);return0;}三角形三條邊如果不能構(gòu)成三角形呢?if語(yǔ)句switch語(yǔ)句選擇結(jié)構(gòu)設(shè)計(jì)舉例3.3選擇結(jié)構(gòu)程序設(shè)計(jì)

根據(jù)給定的條件進(jìn)行判斷,以決定執(zhí)行某個(gè)分支程序段。一、if語(yǔ)句(條件選擇語(yǔ)句)if語(yǔ)句的兩種形式形式一(單分支):

if

(表達(dá)式)

語(yǔ)句或

if

(表達(dá)式)

語(yǔ)句表達(dá)式語(yǔ)句非0=0例:if(x>y)printf("%d",x);

例:if(x>y)printf("%d",x);

3.3選擇結(jié)構(gòu)程序設(shè)計(jì)例3-2輸入兩個(gè)實(shí)數(shù),按照數(shù)值由小到大的順序輸出。#include<stdio.h>intmain(){floata,b,t;scanf("%f,%f",&a,&b);if(a>b){t=a;a=b;b=t;}printf("%5.2f,%5.2f\n",a,b);return0;}輸入:3.6,-3.2-3.20,3.60交換兩個(gè)變量的值3.3選擇結(jié)構(gòu)程序設(shè)計(jì)#include<stdio.h>intmain(){floata,b,c,t;scanf("%f,%f,%f",&a,&b,&c);if(a>b){t=b;b=a;a=t;}if(a>c){t=c;c=a;a=t;}if(b>c){t=c;c=b;b=t;}printf("%5.2f,%5.2f,%5.2f\n",a,b,c);return0;}abc543353544t例3-3輸入三個(gè)數(shù),按從小到大順序輸出.3.3選擇結(jié)構(gòu)程序設(shè)計(jì)形式二(雙分支):

if

(表達(dá)式)

語(yǔ)句1

else

語(yǔ)句2或

if

(表達(dá)式)

語(yǔ)句1

else

語(yǔ)句2或

if

(表達(dá)式)

語(yǔ)句1

else

語(yǔ)句2

例:

if(x>y)max=x;elsemax=y;表達(dá)式語(yǔ)句1語(yǔ)句2非0=0例:if(x>y)max=x;elsemax=y;例:if(x>y)max=x;elsemax=y;

3.3選擇結(jié)構(gòu)程序設(shè)計(jì)例3-4寫(xiě)程序,判斷某一年是否閏年。可構(gòu)造判斷是否是閏年的條件式:(year%4==0&&year%100!=0)||(year%400==0)#include<stdio.h>intmain(){intyear;

scanf("%d",&year);if((year%4==0&&year%100!=0)||(year%400==0))printf("%disaleapyear.\n",year);elseprintf("%disnotaleapyear.\n",year);

return0;}3.3選擇結(jié)構(gòu)程序設(shè)計(jì)if語(yǔ)句嵌套:一般形式:if(表達(dá)式1)if(表達(dá)式2)語(yǔ)句1else語(yǔ)句2elseif(表達(dá)式3)語(yǔ)句3else語(yǔ)句4內(nèi)嵌if內(nèi)嵌ifif(表達(dá)式1)if(表達(dá)式2)

語(yǔ)句1else

語(yǔ)句2內(nèi)嵌ifif(表達(dá)式1)if(表達(dá)式2)

語(yǔ)句1else

語(yǔ)句3

內(nèi)嵌ifif(表達(dá)式1)

語(yǔ)句1elseif(表達(dá)式3)

語(yǔ)句3else

語(yǔ)句4內(nèi)嵌if3.3選擇結(jié)構(gòu)程序設(shè)計(jì)例3-5

:輸入兩數(shù)并判斷其大小關(guān)系。#include<stdio.h>intmain(){intx,y;printf("Enterintegerx,y:");scanf("%d,%d",&x,&y);if(x!=y)if(x>y)printf("X>Y\n");elseprintf("X<Y\n");elseprintf("X==Y\n");return0;}運(yùn)行:Enterintegerx,y:12,23

X<Y

Enterintegerx,y:12,6

X>YEnterintegerx,y:12,12

X==Y3.3選擇結(jié)構(gòu)程序設(shè)計(jì)if~else配對(duì)原則:

缺省{}時(shí),else總是和它上面離它最近的未配對(duì)的if配對(duì)。if(……)if(……)if(……)else…...else…...else…...3.3選擇結(jié)構(gòu)程序設(shè)計(jì)例:if(a==b)if(b==c)printf("a==b==c");elseprintf("a!=b");修改:if(a==b){if(b==c)printf("a==b==c");}elseprintf("a!=b");實(shí)現(xiàn)if~else正確配對(duì)方法:加{}3.3選擇結(jié)構(gòu)程序設(shè)計(jì)29例3-6考慮下面程序輸出結(jié)果:int

main(){intx=100,a=10,b=20;intv1=5,v2=0;if(a<b)if(b!=15)if(!v1)x=1;elseif(v2)x=10;x=-1;printf("%d",x);return0;}結(jié)果:-13.3選擇結(jié)構(gòu)程序設(shè)計(jì)=0=0=0=0≠0≠0≠0≠0輸入x,y單位圓上單位圓內(nèi)X軸下方X軸上X軸上方打印結(jié)果

y=0x2+y2≤1x2+y2=1

y≥0#include<stdio.h>intmain(){floatx,y,z;scanf("%f%f",&x,&y);z=x*x+y*y;printf("%.2f,%.2f\t",x,y);if(z<=1)if(z==1)printf("在單位圓上\n");elseprintf("在單位圓內(nèi)\n");elseif(y>=0)if(y>0)printf("在單位圓外,x軸上方\n");elseprintf("在單位圓外,x軸上\n");elseprintf("在單位圓外,x軸下方\n");

return0;}例3-7在直角坐標(biāo)系中有一個(gè)以原點(diǎn)為中心的單位圓,今任給一點(diǎn)(x,y),試判斷該點(diǎn)是在單位圓內(nèi)、單位圓上,還是單位圓外?若在單位圓外,那么是在x軸的上方,在x軸上,還是在x軸的下方?例如:輸入一個(gè)人的收入,計(jì)算他的工資指數(shù),工資指數(shù)按以下方式計(jì)算:index0.41000<salary0.3800<salary<=10000.2600<salary<=8000.1400<salary<=6000salary<=4003.3選擇結(jié)構(gòu)程序設(shè)計(jì)二用if…elseif…else語(yǔ)句構(gòu)成多分支選擇結(jié)構(gòu)if

(表達(dá)式1)

語(yǔ)句1;elseif

(表達(dá)式2)

語(yǔ)句2;elseif

(表達(dá)式3)

語(yǔ)句3;…...elseif

(表達(dá)式n)語(yǔ)句n;else

語(yǔ)句n+1;例:if(salary>1000)index=0.4;elseif(salary>800)index=0.3;elseif(salary>600)index=0.2;elseif(salary>400)index=0.1;elseindex=0;index0.41000<salary0.3800<salary<=10000.2600<salary<=8000.1400<salary<=6000salary<=400≠0=0=0≠0≠0≠0=0

=0表達(dá)式1

語(yǔ)句1表達(dá)式2表達(dá)式3表達(dá)式n

語(yǔ)句2語(yǔ)句3語(yǔ)句n語(yǔ)句n+1例:if(salary>1000)index=0.4;elseif(salary>800&&salary<=1000)index=0.3;elseif(salary>600&&salary<=800)index=0.2;elseif(salary>400&&salary<=600)index=0.1;elseindex=0;3.3選擇結(jié)構(gòu)程序設(shè)計(jì)多分支:if(表達(dá)式1)

語(yǔ)句1elseif

(表達(dá)式2)

語(yǔ)句2elseif

(表達(dá)式3)

語(yǔ)句3…...elseif

(表達(dá)式n)語(yǔ)句n;else

語(yǔ)句n+1;例:

if(salary>1000)index=0.4;elseif(salary>800)index=0.3;elseif(salary>600)index=0.2;elseif(salary>400)index=0.1;elseindex=0;3.3選擇結(jié)構(gòu)程序設(shè)計(jì)如:if(a==b&&x==y)printf("a=b,x=y");if(3)printf("OK");if('a')printf("%d",'a');說(shuō)明:if后面的表達(dá)式類型任意如:if(x)if(x!=0)

if(!x)

if(x==0)3.3選擇結(jié)構(gòu)程序設(shè)計(jì)說(shuō)明:語(yǔ)句可以是復(fù)合語(yǔ)句(用{}括起來(lái))。例考慮下面程序的輸出結(jié)果:

#include<stdio.h>intmain(){intx,y,t;scanf("%d,%d",&x,&y);if(x>y)t=x;x=y;y=t;elsex++;y++;printf("%d,%d\n",x,y);return0;}CompileError!3.3選擇結(jié)構(gòu)程序設(shè)計(jì)例3-8-1(x<0)

求y=0(x=0)1(x>0)

#include<stdio.h>intmain(){intx,y;scanf("%d",&x);if(x<0)y=-1;elseif(x==0)y=0;elsey=1;printf("x=%d,y=%d\n",x,y);return0;}輸入:3輸出:x=3,y=1輸入:-4輸出:x=-4,y=-1輸入:0輸出:x=0,y=03.3選擇結(jié)構(gòu)程序設(shè)計(jì)#include<stdio.h>intmain(){charc;printf("Enteracharacter:");c=getchar();if(c<0x20)printf("Thecharacterisacontrolcharacter\n");elseif(c>='0'&&c<='9')printf("Thecharacterisadigit\n");elseif(c>='A'&&c<='Z')printf("Thecharacterisacapitalletter\n");elseif(c>='a'&&c<='z')printf("Thecharacterisalowerletter\n");elseprintf("Thecharacterisothercharacter\n");return0;}例3-9判斷輸入字符種類(控制字符、數(shù)字字符、大寫(xiě)字母、小寫(xiě)字母和其他字符)。運(yùn)行:Enteracharacter:

Thecharacterisacontrolcharacter運(yùn)行:Enteracharacter:8

Thecharacterisadigit運(yùn)行:Enteracharacter:D

Thecharacterisacapitalletter運(yùn)行:Enteracharacter:h

Thecharacterisalowerletter運(yùn)行:Enteracharacter:F1

Thecharacterisothercharacter3.3選擇結(jié)構(gòu)程序設(shè)計(jì)三、switch語(yǔ)句(開(kāi)關(guān)分支語(yǔ)句)一般形式:(多分支選擇)switch(表達(dá)式){case常量表達(dá)式1:

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

語(yǔ)句2;…….case常量表達(dá)式n:

語(yǔ)句n;default:

語(yǔ)句n+1;}執(zhí)行過(guò)程:當(dāng)表達(dá)式的值與某一個(gè)case后面的常量表達(dá)式值相等時(shí),執(zhí)行此case后面的語(yǔ)句。否則,執(zhí)行default后面的語(yǔ)句。3.3選擇結(jié)構(gòu)程序設(shè)計(jì)#include<stdio.h>intmain(){intc;printf("Entermornorhorother:");c=getchar();switch(c){case'm':printf("\nGoodmorning!\n");break;case'n':printf("\nGoodnight!\n");break;case'h':printf("\nHello!\n");break;default:printf("\n????????\n");break;}return0;}例3-10根據(jù)輸入字母輸出字符串。3.3選擇結(jié)構(gòu)程序設(shè)計(jì)例switch(score){case'A':printf("Verygood!");case'B':printf("Good!");case'C':printf("Pass!");case'D':printf("Fail!");default:printf("dataerror!");}運(yùn)行結(jié)果:score為'A'時(shí),輸出:

Verygood!Good!Pass!Fail!dataerror!例switch(grade){case'A':printf("Verygood!");break;case'B':printf("Good!");break;case'C':printf("Pass!");break;case'D':printf("Fail!");break;default:printf("dataerror!");}break與switch聯(lián)用,強(qiáng)迫控制立即退出switch。①防止從一個(gè)case下落到另一個(gè)case中;②防止因case和default位置的改變而影響程序的運(yùn)行結(jié)果。break語(yǔ)句3.3選擇結(jié)構(gòu)程序設(shè)計(jì)switch(ch){case'0':case'1':case'2':case'3':case'4':case'5':case'6':case'7':case'8':case'9':digit++;break;case'':case'\n':case'\t':white++;break;default:character++;break;}①

每個(gè)case中的常量或常量表達(dá)式的值應(yīng)互不相同,否則會(huì)出現(xiàn)矛盾的結(jié)果。②

如果每個(gè)case和default中都有break語(yǔ)句,那么,case和default出現(xiàn)的次序不會(huì)影響程序的運(yùn)行結(jié)果。③

允許多個(gè)case共用一個(gè)語(yǔ)句序列。說(shuō)明:3.3選擇結(jié)構(gòu)程序設(shè)計(jì)④

字符常數(shù)出現(xiàn)在case中,它們會(huì)自動(dòng)轉(zhuǎn)換成整型。⑤

switch可以嵌套使用,要求內(nèi)層的switch必須完全包含在外層的某個(gè)case中,允許內(nèi)、外層switch的case中含有相同的常數(shù),不會(huì)引起誤會(huì)。如

switch(x){case1:switch(y){case0:printf("dividedbyzero");break;case1:printf("Itisright");break;}case2:……}⑥

switch只能進(jìn)行相等性檢查,而if不但可進(jìn)行相等性檢查,還可以計(jì)算關(guān)系或邏輯表達(dá)式。因此,switch不能完全替代if。3.3選擇結(jié)構(gòu)程序設(shè)計(jì)例3-11:從鍵盤(pán)輸入一個(gè)公元0年以后的年份,判斷該年的生肖并在屏幕上輸出生肖。#include<stdio.h>intmain(){intyear,x;printf("請(qǐng)輸入年份:");scanf("%d",&year);x=year%12;printf("%d年的生肖是:",year);switch(x){case0:printf("猴\n");break;case1:printf("雞\n");break;case2:printf("狗\n");break;case3:printf("豬\n");break;case4:printf("鼠\n");break;case5:printf("牛\n");break;case6:printf("虎\n");break;case7:printf("兔\n");break;case8:printf("龍\n");break;case9:printf("蛇\(yùn)n");break;case10:printf("馬\n");break;case11:printf("羊\n");break;}return0;}3.3選擇結(jié)構(gòu)程序設(shè)計(jì)例3-12求方程ax2+bx+c=0的根。分析:

求方程的根,有多種不同的情形,應(yīng)采用選擇結(jié)構(gòu)解決??赡艿那樾稳缦拢孩賏=0,不是二次方程。②b2-4ac=0,有兩個(gè)相等實(shí)根:-b/(2*a)。③b2-4ac>0,有兩個(gè)不等實(shí)根。

X1=-b/(2*a)+sqrt(b*b-4*a*c)/(2*a)X2=-b/(2*a)-sqrt(b*b-4*a*c)/(2*a)④b2-4ac<0,有兩個(gè)復(fù)根。

實(shí)部p:-b/(2*a)

虛部q:Sqrt(-(b*b-4*a*c))/(2*a)四、選擇結(jié)構(gòu)設(shè)計(jì)舉例3.3選擇結(jié)構(gòu)程序設(shè)計(jì)算法:

a=0真假b2-4ac=0b2-4ac>0真假真假輸出非二次方程輸出兩個(gè)相等實(shí)根-b/(2*a)輸出兩個(gè)實(shí)根計(jì)算實(shí)根X1=-b/(2*a)+sqrt(b*b-4*a*c)/(2*a)X2=-b/(2*a)-sqrt(b*b-4*a*c)/(2*a)計(jì)算虛根實(shí)部p:-b/(2*a)虛部q:Sqrt(-(b*b-4*a*c))/(2*a)輸出兩個(gè)虛根

p+qi,p-qi3.3選擇結(jié)構(gòu)程序設(shè)計(jì)#include<stdio.h>#include<math.h>intmain(){ floata,b,c,disc,x1,x2,realpart,imagpart; scanf("%f,%f,%f",&a,&b,&c); printf("Theequation"); if(fabs(a)<=1e-6) printf("isnotaquadratic\n"); else { disc=b*b-4*a*c; if(fabs(disc)<=1e-6) printf("hastwoequalroots:%8.4f\n",-b/(2*a));

3.3選擇結(jié)構(gòu)程序設(shè)計(jì)

else if(disc>1e-6){ x1=(-b+sqrt(disc))/(2*a);x2=(-b-sqrt(disc))/(2*a);

printf("hasdistinctrealroots:%8.4fand%8.4f\n",x1,x2); }else { realpart=-b/(2*a); imagpart=sqrt(-disc)/(2*a); printf("hascomplexroots:\n"); printf("%8.4f+%8.4fi\n",realpart,imagpart);printf("%8.4f-%8.4fi\n",realpart,imagpart); } }return0;}例例3-13運(yùn)輸公司對(duì)用戶計(jì)算運(yùn)費(fèi)。設(shè)路程為s,則運(yùn)費(fèi)折扣標(biāo)準(zhǔn)如下:

s<250沒(méi)有折扣

250≤s<5002%折扣

500≤s<10005%折扣

1000≤s<20008%折扣

2000≤s<300010%折扣

3000≤s15%折扣計(jì)算公式:f=p*w*s*(1-d)其中:p:每噸每千米貨物基本運(yùn)費(fèi)

w:貨物重量

s:距離

d:折扣3.3選擇結(jié)構(gòu)程序設(shè)計(jì)分析:由于本題中不同路程對(duì)應(yīng)的折扣不同,所以運(yùn)費(fèi)計(jì)算應(yīng)根據(jù)不同路程和折扣,分為6種不同情形。

本題可采用以下兩種方法解決:

多分支if語(yǔ)句

(根據(jù)路程s的不同情形,進(jìn)行不同計(jì)算)

switch語(yǔ)句

(由于折扣的變化點(diǎn)對(duì)應(yīng)的路程均是250的倍數(shù),因此可用s/250的值,作為case后面的常量表達(dá)式的值。)3.3選擇結(jié)構(gòu)程序設(shè)計(jì)#include<stdio.h>intmain(){ ints,c; floatp,w,d,f; scanf("%f,%f,%d",&p,&w,&s); if(s<250) d=0; elseif(s<500) d=2; elseif(s<1000) d=5; elseif(s<2000) d=8;

例3-13(采用多分支if語(yǔ)句)3.3選擇結(jié)構(gòu)程序設(shè)計(jì)

elseif(s<3000) d=10; else d=15;f=p*w*s*(1-d/100.0); printf("freight=%15.4f\n",f);return0;}3.3選擇結(jié)構(gòu)程序設(shè)計(jì)#include<stdio.h>intmain(){ ints,c; floatp,w,d,f; scanf("%f,%f,%d",&p,&w,&s); if(s>=3000)c=12; elsec=s/250; switch(c) { case0:d=0;break; case1:d=2;break; case2: case3:d=5;break; case4:

例3-13(采用switch語(yǔ)句)3.3選擇結(jié)構(gòu)程序設(shè)計(jì)

case5:case6:case7:d=8;break; case8: case9: case10: case11:d=10;break; case12:d=15;break; } f=p*w*s*(1-d/100.0); printf("freight=%15.4f\n",f);return0;}3.3選擇結(jié)構(gòu)程序設(shè)計(jì)例3-14:用switch語(yǔ)句實(shí)現(xiàn):從鍵盤(pán)上輸入一個(gè)學(xué)生的成績(jī),輸出該學(xué)生的成績(jī)和等級(jí):(90-100:A級(jí),80-89:B級(jí),60-79:C級(jí),0-59:D級(jí))#include<stdio.h>intmain(){intx;printf("Pleaseinputx:\n");scanf("%d",&x);switch(x/10){case10:case9:printf("x=%d→A\n",x);break;case8:printf("x=%d→B\n",x);break;case7:case6:printf("x=%d→C\n",x);break;3.3選擇結(jié)構(gòu)程序設(shè)計(jì)case5:case4:case3:case2:case1:case0:printf("x=%d→D\n",x);break;default:printf("x=%ddataerror!\n",x);}return0;}3.3選擇結(jié)構(gòu)程序設(shè)計(jì)練習(xí):課本106三、編程題2、3、4題3.3選擇結(jié)構(gòu)程序設(shè)計(jì)for語(yǔ)句while語(yǔ)句do~while語(yǔ)句循環(huán)嵌套輔助控制語(yǔ)句循環(huán)結(jié)構(gòu)程序設(shè)計(jì)舉例3.4循環(huán)結(jié)構(gòu)程序設(shè)計(jì)for語(yǔ)句一般形式:for([表達(dá)式1];[

表達(dá)式2];[

表達(dá)式3])

循環(huán)體語(yǔ)句;執(zhí)行流程:表達(dá)式2循環(huán)體假(0)真(非0)表達(dá)式1表達(dá)式33.4循環(huán)結(jié)構(gòu)程序設(shè)計(jì)for語(yǔ)句一般應(yīng)用形式:for(循環(huán)變量賦初值;循環(huán)條件;循環(huán)變量增值){

循環(huán)體語(yǔ)句;}#include<stdio.h>intmain(){inti,sum=0;for(i=1;i<=100;i++)sum+=i;printf("%d",sum);return0;}例

用for循環(huán)求∑n。

n=11003.4循環(huán)結(jié)構(gòu)程序設(shè)計(jì)for語(yǔ)句一般應(yīng)用形式:for(表達(dá)式1];[

表達(dá)式2];[

表達(dá)式3){

循環(huán)體語(yǔ)句;}說(shuō)明:for語(yǔ)句中表達(dá)式1,表達(dá)式2,表達(dá)式3類型任意,都可省略,但分號(hào);不可省無(wú)限循環(huán):for(;;)3.4循環(huán)結(jié)構(gòu)程序設(shè)計(jì)①for語(yǔ)句是先判斷后執(zhí)行。就是說(shuō),如果開(kāi)始時(shí)循環(huán)條件不成立,循環(huán)體一次也不被執(zhí)行。例如程序段

x=10;for(y=10;y!=x;++y)printf("%d",y);中的循環(huán)體不被執(zhí)行。②for循環(huán)的循環(huán)體可以是多條語(yǔ)句,這些語(yǔ)句必須放在一對(duì)花括號(hào)中。例如:

intx;doublez;for(x=100;x!=65;x-=5){z=sqrt((double)x);printf("Thesquarerootof%d:%.2f\n",x,z);}for語(yǔ)句的使用注意事項(xiàng)3.4循環(huán)結(jié)構(gòu)程序設(shè)計(jì)

③可用逗號(hào)表達(dá)式實(shí)現(xiàn)兩個(gè)或多個(gè)循環(huán)控制變量。例如,語(yǔ)句

for(i=0,j=1;j<n&&i<n;i++,j++)printf("%d",i+j);中,初始化部分和增值部分有兩個(gè)變量,它們同時(shí)控制循環(huán)。這種形式經(jīng)常用在數(shù)組和字符串的操作中。for語(yǔ)句的使用注意事項(xiàng)3.4循環(huán)結(jié)構(gòu)程序設(shè)計(jì)④三個(gè)表達(dá)式的位置可以改變,但效果相同。

for(i=1;i<=5;i++)printf("%d",i);

i=1;for(;i<=5;i++)printf("%d",i);i=1;for(;i<=5;){printf("%d",i);

i++;}

i=1;for(;;){printf("%d",i);

i++;

if(i>5)break;}3.4循環(huán)結(jié)構(gòu)程序設(shè)計(jì)⑤循環(huán)體可以是空語(yǔ)句。

for(i=0;i<1000;++i);這個(gè)程序的功能是延遲一小段時(shí)間,這一小段時(shí)間用來(lái)計(jì)算循環(huán)變量的值和判斷循環(huán)是否終止。⑥注意防止出現(xiàn)“死循環(huán)”。無(wú)休止的循環(huán)稱為“死循環(huán)”。例如

main(){intx=10;for(;x<=10;x--)printf(“%d”,++x);}

該程序會(huì)輸出無(wú)數(shù)個(gè)“11”而不能正常終止。3.4循環(huán)結(jié)構(gòu)程序設(shè)計(jì)【例】

將50以內(nèi)的奇數(shù)在屏幕上顯示出來(lái)。

#include<stdio.h>intmain(){inti;for(i=1;i<50;i+=2)printf("%d",i);//循環(huán)體

printf("\n");

return0;

}3.4循環(huán)結(jié)構(gòu)程序設(shè)計(jì)while語(yǔ)句一般形式:while(表達(dá)式)

循環(huán)體語(yǔ)句;執(zhí)行流程:表達(dá)式循環(huán)體假(0)真(非0)特點(diǎn):先判斷表達(dá)式,后執(zhí)行循環(huán)體3.4循環(huán)結(jié)構(gòu)程序設(shè)計(jì)#include<stdio.h>intmain(){inti,sum=0;i=1;while(i<=100){sum=sum+i;i++;}printf("%d",sum);return0;}循環(huán)初值循環(huán)終值循環(huán)變量增值循環(huán)條件循環(huán)體例

用while循環(huán)求∑n。

n=1

1003.4循環(huán)結(jié)構(gòu)程序設(shè)計(jì)說(shuō)明:循環(huán)體有可能一次也不執(zhí)行;循環(huán)體可為任意類型語(yǔ)句;循環(huán)體包含一個(gè)以上的語(yǔ)句,要用{}括起;循環(huán)體中應(yīng)有修改循環(huán)變量的語(yǔ)句,使循環(huán)趨向于結(jié)束;下列情況,退出while循環(huán)條件表達(dá)式不成立(為零)循環(huán)體內(nèi)遇break,return,goto無(wú)限循環(huán):while(1)

循環(huán)體;3.4循環(huán)結(jié)構(gòu)程序設(shè)計(jì)例

顯示1~10的平方。#include<stdio.h>intmain(){inti=1;while(i<=10){i++;}return0;}運(yùn)行結(jié)果:1*1=12*2=43*3=94*4=165*5=256*6=367*7=498*8=649*9=8110*10=100printf("%d*%d=%d\n",i,i,i*i);3.4循環(huán)結(jié)構(gòu)程序設(shè)計(jì)同類題目:級(jí)數(shù)求和1.1-2+3-…-1002.求n!3.4.5.a+aa+aaa+…+aa…aa

n個(gè)a#include<stdio.h>intmain(void){ints=0,i=1;

while(i<=100)

{s=s+i;/*s+=i;*/i++;}

printf("s=%d\n",s);return0;}3.4循環(huán)結(jié)構(gòu)程序設(shè)計(jì)同類題目:級(jí)數(shù)求和5.a+aa+aaa+…+aa…aa

n個(gè)a6.1+22+333+4444+55555+666666#include<stdio.h>intmain(void){ints=0,i=1;

while(i<=100)

{s=s+i;/*s+=i;*/i++;}

printf("s=%d\n",s);return0;}

3.4循環(huán)結(jié)構(gòu)程序設(shè)計(jì)t=1,pi=0,n=1.0,s=1當(dāng)|t|>=1e-6pi=pi+tn=n+2s=-st=s/npi=pi*4輸出pi分子:1,-1,1,-1…分母:1,3,5,7,...為止最后一項(xiàng)的絕對(duì)值小于的近似值,直到公式求用61071513114--+-=pp+…63.4循環(huán)結(jié)構(gòu)程序設(shè)計(jì)#include<stdio.h>#include<math.h>intmain(){ints;floatn,t,pi;t=1;pi=0;n=1.0;s=1;while(fabs(t)>1e-6){pi=pi+t;n=n+2;s=-s;t=s/n;}pi=pi*4;printf("pi=%10.6f\n",pi);return0;}3.4循環(huán)結(jié)構(gòu)程序設(shè)計(jì)【例7】自然常數(shù)e的計(jì)算公式為請(qǐng)編制程序計(jì)算e的近似值,要求被舍棄的首項(xiàng)<0.000001。#include<math.h>#include<stdio.h>intmain(){intn=1;floate=0,t=1.0;while(fabs(t)>=1E-6){e=e+t;t=t/n;n++;}printf("e=%f\n",e);return0;}3.4循環(huán)結(jié)構(gòu)程序設(shè)計(jì)do~while語(yǔ)句一般形式:do{循環(huán)體語(yǔ)句;}

while(表達(dá)式);執(zhí)行流程:循環(huán)體表達(dá)式假(0)真(非0)while3.4循環(huán)結(jié)構(gòu)程序設(shè)計(jì)特點(diǎn):先執(zhí)行循環(huán)體,后判斷表達(dá)式說(shuō)明:至少執(zhí)行一次循環(huán)體while可轉(zhuǎn)化成do~while結(jié)構(gòu)表達(dá)式循環(huán)體假(0)真(非0)循環(huán)體While循環(huán)3.4循環(huán)結(jié)構(gòu)程序設(shè)計(jì)#include<stdio.h>intmain(){inti,sum=0;i=1;do{sum+=i; i++;}while(i<=100);printf("%d",sum);return0;}例

用do~while循環(huán)求∑n。

n=11003.4循環(huán)結(jié)構(gòu)程序設(shè)計(jì)例:從鍵盤(pán)輸入兩個(gè)整數(shù)m,n,求這兩個(gè)數(shù)的最大公約數(shù)#include<stdio.h>intmain(){intm,n,r;printf("請(qǐng)輸入兩個(gè)整數(shù):"); //輸入數(shù)據(jù)前的提示信息scanf("%d%d",&m,&n); //注意格式控制符do{r=m%n; //求兩個(gè)數(shù)的余數(shù)m=n; //將n值賦給m;n=r; //將r值賦給n;}while(r!=0); //如果余數(shù)不為0,循環(huán)繼續(xù)printf(“兩個(gè)數(shù)的最大公約數(shù)為:%d\n”,m);return0;}方法一:窮舉法方法二:輾轉(zhuǎn)相除法3.4循環(huán)結(jié)構(gòu)程序設(shè)計(jì)編寫(xiě)程序,要求用戶輸入一個(gè)分?jǐn)?shù),然后將其約分為最簡(jiǎn)分式:Enterafraction:8/12Inlowestterms:2/33.4循環(huán)結(jié)構(gòu)程序設(shè)計(jì)

while和do~while比較#include<stdio.h>intmain(){inti,sum=0;scanf("%d",&i);do{sum+=i; i++;}while(i<=10);printf("%d",sum);return0;}#include<stdio.h>intmain(){inti,sum=0;scanf("%d",&i);while(i<=10){sum+=i; i++;}printf("%d",sum);return0;}循環(huán)體可能一次也不執(zhí)行循環(huán)體至少執(zhí)行一次3.4循環(huán)結(jié)構(gòu)程序設(shè)計(jì)從鍵盤(pán)輸入任意一個(gè)數(shù)字,判斷是否是素?cái)?shù)(經(jīng)典算法)#include<stdio.h>#include<math.h>intmain(){intm,i,k;printf("pleaseenteraintegernumber:");scanf("%d",&m);k=sqrt(m);for(i=2;i<=k;i++)if(m%i==0)break;if(i>k)printf("%disaprimenumber.\n",m);elseprintf("%disnotaprimenumber.\n",m);return0;}3.4循環(huán)結(jié)構(gòu)程序設(shè)計(jì)從鍵盤(pán)輸入任意一個(gè)數(shù)字,判斷是否是素?cái)?shù)(經(jīng)典算法)#include<stdio.h>#include<math.h>intmain(){intm,i,k,flag=1;printf("pleaseenteraintegernumber:");scanf("%d",&m);k=sqrt(m);for(i=2;i<=k&&flag;i++)if(m%i==0)flag=0;if(flag)printf("%disaprimenumber.\n",m);elseprintf("%disnotaprimenumber.\n",m);return0;}3.4循環(huán)結(jié)構(gòu)程序設(shè)計(jì)#include<stdio.h>intmain(){intx,c;printf("Inputaninteger:");scanf("%d",&x);do{c=x%10;printf("%d",c);}while((x/=10)!=0);printf("\n");return0;}【例】從鍵盤(pán)輸入一個(gè)整數(shù),把這個(gè)整數(shù)中的各位數(shù)字反序顯示出來(lái)。例如,輸入為1234,則輸出為4321。3.4循環(huán)結(jié)構(gòu)程序設(shè)計(jì)#include<stdio.h>intmain(){intx,c,y=0;printf("Inputaninteger:");scanf("%d",&x);do{c=x%10;y=y*10+c;}while((x/=10)!=0);printf("%d\n",y);

return0;}【例】從鍵盤(pán)輸入一個(gè)整數(shù),把這個(gè)整數(shù)中的各位數(shù)字反序顯示出來(lái)。例如,輸入為1234,則輸出為4321。3.4循環(huán)結(jié)構(gòu)程序設(shè)計(jì)循環(huán)的嵌套

循環(huán)的嵌套是指一個(gè)循環(huán)體內(nèi)又包含了另一個(gè)完整的循環(huán)結(jié)構(gòu)。(1)for(;;){……for(;;)……}(3)do{……do{……}while();…...}while();(4)while(){……do{……}while();…….}(5)for(;;){……do{……}while();……while(){……}…...}(2)while(){……while(){……}…...}

for(i=1;i<=10;i++){……for(j=1;j<=20;j++){……}……}外循環(huán)內(nèi)循環(huán)3種循環(huán)(while、do…while、for)可以互相嵌套。如:3.4循環(huán)結(jié)構(gòu)程序設(shè)計(jì)000102030405101112131415202122232425303132333435404142434445505152535455執(zhí)行語(yǔ)句段:for(i=0;i<6;i++)

{

for(j=0;j<6;j++)printf("%d%d",i,j);

putchar('\n');

}●循環(huán)嵌套的特點(diǎn):外循環(huán)執(zhí)行一次,內(nèi)循環(huán)要執(zhí)行完全部循環(huán)。循環(huán)的嵌套的特點(diǎn)輸出結(jié)果:3.4循環(huán)結(jié)構(gòu)程序設(shè)計(jì)打印九九表:1×1=11×2=22×2=41×3=32×3=63×3=91×4=42×4=83×4=124×4=161×5=52×5=103×5=154×5=205×5=251×6=62×6=123×6=184×6=245×6=306×6=361×7=72×7=143×7=214×7=285×7=356×7=427×7=491×8=82×8=163×8=244×8=325×8=406×8=487×9=568×8=641×9=92×9=183×9=274×9=365×9=456×9=547×9=638×9=729×9=813.4循環(huán)結(jié)構(gòu)程序設(shè)計(jì)打印九九表:#include"stdio.h"intmain(){inti,j;for(i=1;i<=9;i++){for(j=1;j<=i;j++) printf("%d*%d=%-4d",j,i,i*j);printf("\n");}return0;}3.4循環(huán)結(jié)構(gòu)程序設(shè)計(jì)問(wèn)題:輸出圖形*********************

inti,j;for(i=1;i<=6;i++){for(j=1;j<=i;j++)putchar('*');printf("\n");}3.4循環(huán)結(jié)構(gòu)程序設(shè)計(jì)問(wèn)題:輸出圖形*********************

**************************

inti,j;for(i=1;i<=6;i++){for(j=1;j<=6-i+1;j++)putchar('*');printf("\n");}

inti,j;for(i=1;i<=4;i++){for(j=1;j<=4-i+1;j++)putchar('');for(j=1;j<=i;j++)putchar('*');printf("\n");}

inti,j;for(i=1;i<=4;i++){for(j=1;j<=4-i+1;j++)putchar('');for(j=1;j<=2*i-1;j++)putchar('*');printf("\n");}****************

*********3.4循環(huán)結(jié)構(gòu)程序設(shè)計(jì)

輔助控制語(yǔ)句break語(yǔ)句功能:用在循環(huán)語(yǔ)句和switch語(yǔ)句中,終止并跳出循環(huán)體或開(kāi)關(guān)語(yǔ)句。說(shuō)明:break只能終止并跳出最近一層的結(jié)構(gòu)break不能用于循環(huán)語(yǔ)句和switch語(yǔ)句之外的任何其它語(yǔ)句之中3.4循環(huán)結(jié)構(gòu)程序設(shè)計(jì)

switch表達(dá)式語(yǔ)句組1break;語(yǔ)句組2break;

溫馨提示

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