c語言順序和選擇結(jié)構(gòu)程序設(shè)計(jì)_第1頁
c語言順序和選擇結(jié)構(gòu)程序設(shè)計(jì)_第2頁
c語言順序和選擇結(jié)構(gòu)程序設(shè)計(jì)_第3頁
c語言順序和選擇結(jié)構(gòu)程序設(shè)計(jì)_第4頁
c語言順序和選擇結(jié)構(gòu)程序設(shè)計(jì)_第5頁
已閱讀5頁,還剩54頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

第4章

順序與選擇結(jié)構(gòu)

程序設(shè)計(jì)4.1結(jié)構(gòu)化程序設(shè)計(jì)4.1.1結(jié)構(gòu)化程序設(shè)計(jì)思想的產(chǎn)生

結(jié)構(gòu)化程序設(shè)計(jì)思想:圍繞系統(tǒng)功能自頂向下,逐步細(xì)化和精化。細(xì)化過程:對(duì)系統(tǒng)功能逐層分解出許多易于理解和實(shí)現(xiàn)的、邏輯上相對(duì)獨(dú)立的子功能,形成一棵功能樹。

4.1.2

結(jié)構(gòu)化程序設(shè)計(jì)的三種基本結(jié)構(gòu)

(順序結(jié)構(gòu))(選擇結(jié)構(gòu))(循環(huán)結(jié)構(gòu))實(shí)例說明三種結(jié)構(gòu)接通電源啟動(dòng)電腦玩游戲(順序結(jié)構(gòu))拋硬幣正面朝上上自習(xí)真看影碟假門沒開真假按門鈴(循環(huán)結(jié)構(gòu))(選擇結(jié)構(gòu))1.控制語句––改變語句的執(zhí)行順序共有9種控制語句:

if()~else~(條件)

for()~(循環(huán))

while()~(循環(huán))

do~while(循環(huán))4.2語句與分程序C程序的執(zhí)行部分由執(zhí)行語句構(gòu)成,執(zhí)行語句的種類主要有:控制語句、函數(shù)調(diào)用語句、表達(dá)式語句、空語句、復(fù)合語句(分程序)等。

continue(結(jié)束本次循環(huán))

switch(多分支選擇)

break(中止整個(gè)循環(huán))

goto(轉(zhuǎn)移)

return(函數(shù)返回)()表示條件,~表示語句2.函數(shù)調(diào)用語句3.表達(dá)式語句函數(shù)調(diào)用語句由函數(shù)名、實(shí)際參數(shù)以及分號(hào)構(gòu)成。eg:printf(“hello");表達(dá)式加;如:i=i+1;i++;

x+y;

其函數(shù)調(diào)用也可理解為表達(dá)式語句.5.復(fù)合語句4.空語句

;任何事情都不做.用{}括起來的一系列語句。如:{z=x+y;t=z/100;printf("%f",t);}順序結(jié)構(gòu)流程圖:表示ABAB先執(zhí)行A,再執(zhí)行B.4.3順序結(jié)構(gòu)程序設(shè)計(jì)特點(diǎn):程序按語句從上到下的排列順序依此執(zhí)行,每條語句必須執(zhí)行且只能執(zhí)行一次,沒有執(zhí)行不到或執(zhí)行多次的語句。順序程序設(shè)計(jì)的步驟為:(1)用預(yù)處理命令包含文件或進(jìn)行宏定義;(2)定義變量;(3)為變量賦初值(用輸入函數(shù)或賦值語句);(4)計(jì)算;(5)輸出結(jié)果(用輸出函數(shù))順序程序設(shè)計(jì)的步驟順序結(jié)構(gòu)程序舉例例4-1:已知圓柱體半徑6米,高7米,求體積。分析:輸入量:底面半徑高輸出量:體積假設(shè):用變量r表示半徑變量h表示高 變量s表示底面積變量v表示體積中間的處理過程:

s=PI*r*r;v=s*h;

都是實(shí)型數(shù)據(jù)例4-1程序流程:#include“stdio.h”#definePI3.14159main(){floatr,h,s,v;r=6;h=7;s=PI*r*r;v=s*h;

printf(“V=%f\n”,v);}整個(gè)程序的流程:定義4個(gè)實(shí)型變量r,h,v,s給半徑r和高h(yuǎn)賦值S=PI*r*r;V=s*h;輸出體積v和側(cè)面積s例4-2

輸入三角形的三條邊,求三角形的面積。分析:已知∶三角形的三條邊a,b,c。

求解∶三角形的面積area。

計(jì)算公式∶設(shè)s=(a+b+c)/2area=開始給a,b,c賦值計(jì)算s=(a+b+c)/2計(jì)算area=結(jié)果輸出結(jié)束#include<math.h>main(){floata,b,c,s,area;

scanf(“%f%f%f”,&a,&b,&c);s=(a+b+c)/2.0;area=sqrt(s*(s-a)*(s-b)*(s-c));

printf(“a=%fb=%fc=%fs=%f”,a,b,c,s);

printf(“area=%f”,area);}例4-3從鍵盤輸入一個(gè)大寫字母,要求改用小寫字母輸出。分析:已知∶字符變量c1為大寫字母。求解∶將字符變量c2中放入相應(yīng)的小寫字母。計(jì)算公式∶c2=c1+32(小寫改成大寫字母?)開始計(jì)算c2=c1+32輸出c1結(jié)束輸入一大寫字母放入c1中輸出c2#include<stdio.h>main(){charc1,c2;c1=getchar();

/*鍵盤輸入一個(gè)大寫字母*/

printf(“%c,%d\n”,c1,c1);c2=c1+32;printf(“%c,%d\n”,c2,c2);}輸入:A

輸出:A,65

a,97

例4-4求ax2+bx+c=0的根,a,b,c由鍵盤輸入,設(shè)b2-4ac>0#include<math.h>main(){floata,b,c,delta,x1,x2,p,q;

scanf("%f%f%f",&a,&b,&c);delta=b*b-4*a*c;p=-b/(2*a);q=sqrt(delta)/(2*a);x1=p+q;x2=p-q;printf(”x1=%fx2=%f",x1,x2);}運(yùn)行情況:a=1,b=3,c=2x1=-1.000000x2=-2.0000004.4選擇結(jié)構(gòu)程序設(shè)計(jì)選擇結(jié)構(gòu)程序設(shè)計(jì)就是通過判斷從兩種或兩種以上的可能中確定問題的解。書寫語句之前,應(yīng)首先確定要判斷的是什么條件,以及當(dāng)判斷結(jié)果為不同的情況(“真”或“假”)時(shí)應(yīng)該執(zhí)行什么樣的操作。1if的三種形式功能:

當(dāng)表達(dá)式值非0時(shí),執(zhí)行語句A,否則不執(zhí)行語句A.表達(dá)式語句A=00形式1

if(表達(dá)式)

語句A其流程圖:4.4.2

if語句如:

intx;

scanf(“%d”,&x);if(x<0) x=-x;

printf(“%d”,x);如:

if(3)prinft("o.k");if('a')…1.表達(dá)式可以是邏輯、關(guān)系,甚至是算術(shù)表達(dá)式。

2.上述形式中的語句必須以分號(hào)結(jié)束

3.上述形式中的語句可以是由{}括起來的復(fù)合語句。此時(shí),在{}外可以不用分號(hào).注意的問題:形式2

if(表達(dá)式)

語句Aelse

語句B功能:

表達(dá)式為非0,

執(zhí)行語句A

表達(dá)式為0,

執(zhí)行語句B表達(dá)式語句A語句B0=0例:

if(x>y) printf("%d",x); elseprintf("%d",y);書寫語句之前,應(yīng)首先確定要判斷的是什么條件,以及當(dāng)判斷結(jié)果為不同的情況(“真”或“假”)時(shí)應(yīng)該執(zhí)行什么樣的操作。例4-5:編程求

x2+3x-1(x<=3)Y=x2-2x+5(x>3)顯然,這應(yīng)該是一個(gè)分支結(jié)構(gòu)的程序。它要根據(jù)x的不同取值范圍,求得不同的y。判斷條件:x<=3嗎?結(jié)構(gòu)如下:如果x<=3那么y=x*x+3*x-1否則y=x*x-2*x+5用c語言表示:

if(x<=3)

y=x*x+3*x-1;else y=x*x-2*x+5;輸入輸出分析:輸入:x輸出:y變量類型:單精度實(shí)型流程圖開始輸入xX<=3?Y=x*x-2*x+5Y=x*x+3*x-1輸出y結(jié)束YN程序4-5.c:Main(){ floatx,y;

printf(“inputx:”);

scanf(“%f”,&x); if(x<=3) y=x*x+3*x-1; else y=x*x-2*x+5;

printf(“y=%f”,y);}注意程序的書寫采用縮進(jìn)式,也稱為鋸齒形書寫格式。例4-6:求最大或最小值main(){

inta,b,c,max;

printf("inputa,b,c=");

scanf("%d,%d,%d",&a,&b,&c); if(a>b) max=a; else max=b; if(c>max) max=c;

printf("maxis:%d\n",max);}這是一種常見的求最大最小值的方法。增加變量,通常取名為max或min,用于存放最大或最小值.把a(bǔ),b的最大值放到max中如果c大于max,則把c放到max中練習(xí):任意輸入3個(gè)整數(shù),找出最小的一個(gè)。main(){

inta,b,c,min;

printf("inputa,b,c=");

scanf("%d,%d,%d",&a,&b,&c); if(a<b) min=a; else min=b; if(c<min) min=c;

printf("minis:%d\n",min);}main(){

inta,b,c,t;

printf("inputa,b,c=");

scanf("%d,%d,%d",&a,&b,&c); if(a>b) { t=a; a=b; b=t; } if(a>c) { t=a; a=c; c=t; } if(b>c) { t=b; b=c; c=t; } printf("%5d%5d%5d\n",a,b,c);}滿足條件,就需要執(zhí)行多條語句,則必須用{}把這些語句括起來,成為復(fù)合語句例4-7:任意輸入3個(gè)整數(shù),按從小到大的順序輸出形式3

if(表達(dá)式1)語句1

elseif(表達(dá)式2)語句2elseif(表達(dá)式3)語句3……elseif(表達(dá)式n)語句nelse語句n+1下一條語句功能:按表達(dá)式的順序進(jìn)行判斷,最早值為真的表達(dá)式n將引起相應(yīng)語句n的執(zhí)行,并且不再判斷其他條件,跳轉(zhuǎn)到下一條語句執(zhí)行。若全部表達(dá)式為假,則執(zhí)行語句n+1。流程:表達(dá)1表達(dá)2表達(dá)3表達(dá)n語句1語句2語句3語句n語句n+1語句1……0=0=0000例4-8

對(duì)學(xué)生成績的判斷:分?jǐn)?shù)小于60是“不及格”,否則,小于70是“及格”;否則,小于80是“中”;否則,小于90是“良”,否則是“優(yōu)秀”。用如下程序表示:#include"stdio.h"main(){intscore;scanf("%d",&score);if(score<60)printf("不及格");

elseif(score<70) printf("及格");

elseif(score<80) printf("中");

elseif(score<90) printf("良");

else

printf("優(yōu)秀");}4.4.3.if語句的嵌套if(表達(dá)式1)內(nèi)嵌ifelse內(nèi)嵌注意:else與最近的if配對(duì).一般形式在上述形式的if語句中,又可以是if語句–––稱為嵌套。if(表達(dá)式2)語句1if(表達(dá)式3)語句3else語句2else語句4例:

if()if()語句2else語句3if(){if()語句1}

else…所以:必要時(shí)加{}.if()語句1else#include"math.h"main(){ floatx,y;

printf("inputx=");

scanf("%f",&x); if(x<=2) y=x*(x-3)+2.5; else if(x<=7) y=sqrt(7-x); else y=(x-5)/3;

printf("x=%7.3fy=%7.3f\n",x,y);}此處不需要寫成X>2&&x<=7例4-9:分段函數(shù)

x*(x-3)+2.5(x<=2)y=(x<=7)(x-5)/3(x>7)如果x<=2那么

y=……..否則

如果x<=7

那么

y=……

否則

y=…….(隱含:x>2)(隱含:x>7)例4-10有一函數(shù)y=–1(x<0)0(x=0)1(x>0)編一程序,輸入一個(gè)x值,輸出y值。有以下幾種寫法,請(qǐng)判斷哪些是正確的?程序1:

main(){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);}程序2:將上面程序的if語句改為:

if(x>=0)if(x>0)y=1;elsey=0;elsey=–1;程序3:將上述if語句改為:

y=–1;if(x!=0)if(x>0)y=1;elsey=0;程序4:

y=0;if(x>=0)if(x>0)y=1;elsey=–1;switch語句

C語言中提供了switch語句用于直接實(shí)現(xiàn)多分支選擇結(jié)構(gòu)。switch語句的一般形式為:

switch(表達(dá)式)

{case常量表達(dá)式1:語句1;

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

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

[default:語句組n+1;]}switch語句switch語句的執(zhí)行過程為:先計(jì)算switch后面的表達(dá)式的值;然后使其順次花括號(hào)內(nèi)同各個(gè)case后的常量表達(dá)式的值相比較,若找到相等的常量表達(dá)式i,則執(zhí)行該常量表達(dá)式冒號(hào)后的語句i;若找不到匹配的常量表達(dá)式,此時(shí)要考慮是否有default選項(xiàng),若有,則執(zhí)行default后面的語句直到結(jié)束;否則什么也不執(zhí)行。switch語句在執(zhí)行過程中,若遇到break語句,則跳出switch結(jié)構(gòu),將程序流程轉(zhuǎn)向switch結(jié)構(gòu)外的下一條語句執(zhí)行;若沒有break語句,則從該語句組為入口,依次執(zhí)行其后的所有冒號(hào)后面的語句。【例4.9】用switch語句實(shí)現(xiàn)例4.8。main(){intscore,mark;

printf("\nEnterscore:");

scanf("%d",&score);mark=-1;if(score>=0&&score<=100) mark=score/10;switch語句switch(mark){case10:case9:printf("\nVerygood");break;/*成績≥90*/case8:printf("\nGood");break;/*80≤成績<90*/case7:case6:printf("\nPassed");break;/*60≤成績<80*/case5:case4:case3:case2:case1:case0:printf("\nFailed");break;/*成績<60*/

default:printf("\nEntererror!");/*處理錯(cuò)誤的輸入*/}}switch語句switch結(jié)構(gòu)使用要注意以下幾點(diǎn):

switch后面表達(dá)式的類型,一般為整型、字符型或枚舉類型(枚舉類型將在以后的章節(jié)中介紹)。每個(gè)case后面常量表達(dá)式的值必須互不相同,即不允許對(duì)表達(dá)式的同一個(gè)值有兩種或兩種以上的處理方案。盡管各個(gè)case和default出現(xiàn)的次序不影響程序的執(zhí)行結(jié)果,但是把default放在最后是一種良好的程序設(shè)計(jì)習(xí)慣。多個(gè)case可共有一組執(zhí)行語句。case后面的常量表達(dá)僅起語句標(biāo)號(hào)的作用,并不進(jìn)行條件判斷。系統(tǒng)一旦找到入口標(biāo)號(hào),就從此標(biāo)號(hào)開始執(zhí)行下去,不再進(jìn)行判斷。switch語句switch語句又稱為開關(guān)語句。當(dāng)僅需執(zhí)行一個(gè)開關(guān)時(shí),則在該case后面的語句中必須包含一個(gè)break語句,讓其執(zhí)行后跳出switch語句,否則會(huì)一直執(zhí)行到最后,或遇到下一個(gè)case中的break語句為止。當(dāng)case后面包含一條以上的執(zhí)行語句時(shí),可以不用花括號(hào)括起來,系統(tǒng)會(huì)自動(dòng)識(shí)別并順序執(zhí)行所有語句。default是可選項(xiàng)。但良好的程序設(shè)計(jì)習(xí)慣是,在每個(gè)switch語句中,寫上一條default語句來集中處理例外條件,從而防止一些條件沒有被測試到。條件運(yùn)算符格式:表達(dá)式1?表達(dá)式2:表達(dá)式3功能:先求表達(dá)式1的值,若表達(dá)式1的值為真,則表達(dá)式2的值為整個(gè)表達(dá)式的值,否則表達(dá)式3的值為整個(gè)表達(dá)式的值。Max=(a>b)?a:b;等價(jià)于:

if(a>b)max=a;elsemax=b;例4.5main(){ charch;

printf("input

ch=");

scanf("%c",&ch);

ch=ch>='a'&&ch<='z’?ch-32:ch;

printf("%c\n",ch);}判斷字符ch是否是大寫字母

ch>=‘A'&&ch<=‘Z’

選擇結(jié)構(gòu)程序設(shè)計(jì)舉例【例4.10】求一元二次方程的根。#include"math.h"main(){floata,b,c,disc,x1,x2,rpart,ipart;

printf("\n\npleaseinputa,b,c:");

scanf("%f,%f,%f",&a,&b,&c);/*輸入方程的系數(shù)*/

printf("Theequation");

if(fabs(a)<=1E-6)/*若a等于0,則不是一元二次方程*/ {printf("isnotquadratic");exit(0);}else{disc=b*b-4*a*c;

if(fabs(disc)<=1E-6)/*△=0時(shí),有兩個(gè)相等實(shí)根*/ {printf("hastwoequalroots:%8.4f",-b/(2*a));}elseif(disc>1E-6)/*△>0,有兩個(gè)不等實(shí)根*/選擇結(jié)構(gòu)程序設(shè)計(jì)舉例

{x1=(-b+sqrt(disc))/(2*a);x2=(-b-sqrt(disc))/(2*a);

printf("hastwodistinctrealroots:%8.4f,%8.4f",x1,x2);}else/*△<0,有兩個(gè)共厄復(fù)根*/ {rpart=-b/(2*a);

ipart=sqrt(-disc)/(2*a);

printf("hastwocomplexroots:");printf("\n%8.4f+%8.4fi",rpart,ipart);printf("\n%8.4f-%8.4fi",rpart,ipart); }}}選擇結(jié)構(gòu)程序設(shè)計(jì)舉例程序的運(yùn)行情況如下:①

pleaseinputa,b,c:1,2,1Theequationhastwoequalroots:-1.0000②pleaseinputa,b,c:2,8,6Theequationhasdistinctrealroots:-1.0000,-3.000③pleaseinputa,b,c:1,2,3Theequationhastwocomplexroots:-1.0000+1.4141i-1.0000-1.4141i選擇結(jié)構(gòu)程序設(shè)計(jì)舉例【例4.12】某商店售貨,按購買貨物的款數(shù)多少分別給予不同的優(yōu)惠折扣:購貨不足250元的,沒有折扣;購貨滿250元,不足500元,折扣5%;購貨滿500元,不足1000元,折扣7.5%;購貨滿1000元,不足2000元,折扣10%;購貨滿2000元,折扣15%。①

用嵌套的if結(jié)構(gòu)實(shí)現(xiàn)。選擇結(jié)構(gòu)程序設(shè)計(jì)舉例選擇結(jié)構(gòu)程序設(shè)計(jì)舉例main(){floatm,d,amount;printf("\nEnteryourmoneyforbuying:");scanf("%f",&m);if(m<250)d=0;elseif(m<500)d=5;elseif(m<1000)d=7.5;elseif(m<2000)d=10;elsed=15;amount=m*(1-d/100);printf("\namount=%6.2f",amount);}選擇結(jié)構(gòu)程序設(shè)計(jì)舉例運(yùn)行情況:Enteryourmoneyforbuying:680amount=629.00再運(yùn)行:Enteryourmoneyforbuying:1350amount=1215.00②用switch結(jié)構(gòu)實(shí)現(xiàn)。設(shè)置mark標(biāo)記變量:mark=m/250,根據(jù)mark的值而確定相應(yīng)的折扣。程序如下:main(){floatm,d,amount;

intmark;

printf("\nEnteryourmoneyforbuying:");

scanf("%f",&m);選擇結(jié)構(gòu)程序設(shè)計(jì)舉例mark=m/250;switch(mark){case0:d=0;break;case1:d=5;break;case2:case3:d=7.5;break;case4:case5:case6:d=10;break;default:d=15;}if(d<0)print

溫馨提示

  • 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ì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論