C語言程序設(shè)計-第三章第四章-順序分支_第1頁
C語言程序設(shè)計-第三章第四章-順序分支_第2頁
C語言程序設(shè)計-第三章第四章-順序分支_第3頁
C語言程序設(shè)計-第三章第四章-順序分支_第4頁
C語言程序設(shè)計-第三章第四章-順序分支_第5頁
已閱讀5頁,還剩62頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

第三章順序結(jié)構(gòu)

3.1引例3.2結(jié)構(gòu)化程序設(shè)計的三種基本控制結(jié)構(gòu)3.3順序結(jié)構(gòu)3.4順序結(jié)構(gòu)程序設(shè)計※3.2結(jié)構(gòu)化程序設(shè)計的三種基本控制結(jié)構(gòu)結(jié)構(gòu)化程序設(shè)計的方法的主要技術(shù)是模塊化、自頂向下和逐步求精。結(jié)構(gòu)化程序設(shè)計:順序結(jié)構(gòu)分支結(jié)構(gòu)循環(huán)結(jié)構(gòu)3.2.1算法與流程圖符號名稱表示的含義處理框輸入、輸出、賦值等常規(guī)操作判斷框根據(jù)給定條件決定下步要執(zhí)行的路徑流程線箭頭表示流程的方向結(jié)構(gòu)化程序設(shè)計三種結(jié)構(gòu)的基本流程圖語句A語句B順序結(jié)構(gòu)條件語句A語句B分支結(jié)構(gòu)循環(huán)體循環(huán)結(jié)構(gòu)3.2.2算法舉例交換兩個變量的值。水空醋123attbba圖3-3交換兩瓶液體圖3-4交換兩個變量的值3.3.2符號常量

符號常量的定義通過預(yù)處理命令#define來實現(xiàn)。定義格式如下:

#define符號常量常量計算圓的面積的程序代碼#include<stdio.h>#definePI3.14//定義符號常量PIint

main(void){ doubler; r=3;

printf("小圓面積為%f",PI*r*r); r=7;

printf("大圓面積為%f",PI*r*r); return0;}3.3.3數(shù)據(jù)輸出

輸入、輸出操作是通過函數(shù)調(diào)用實現(xiàn)。

輸入、輸出函數(shù)是在系統(tǒng)文件“stdio.h”中聲明,編寫程序時,始終在程序中加入語句:

#include<stdio.h>

輸出函數(shù)包括

putchar()函數(shù)printf()函數(shù)1.putchar()函數(shù)putchar()函數(shù)是向標(biāo)準(zhǔn)輸出設(shè)備輸出單個字符數(shù)據(jù),其語法格式為:

putchar(輸出參數(shù));其中,輸出參數(shù):字符常量、變量整型常量、變量Putchar()函數(shù)也可以用于輸出控制字符,如putchar('\n')輸出一個換行符。例:使用putchar()函數(shù)#include<stdio.h>int

main(void){ chara,b,c; a='B';b='O';c='Y'; putchar(65);

putchar('');

putchar(a);

putchar(b);

putchar(c); return0;}2.Printf()函數(shù)

printf()函數(shù)則可以向終端輸出若干個任意類型的數(shù)據(jù)。printf()函數(shù)的一般格式:

printf(格式控制字符串,輸出參數(shù)表);printf(“格式控制字符串”,輸出參數(shù)表);“格式控制字符串”用雙引號("")括起來,表示要輸出的格式?!拜敵鰠?shù)表”是需要輸出的一些數(shù)據(jù),可以是常量、變量或表達(dá)式。printf()函數(shù)的輸出參數(shù)必須和格式控制字符串中的格式說明相對應(yīng),并且它們的類型、個數(shù)和位置要一一對應(yīng)。printf("

a=%d,b=%f,c=%c",a,b,c);#include<stdio.h>int

main(void){ chara;

intb; floatc; doubled;

scanf("%c,%d,%f,%lf",&a,&b,&c,&d);

printf("hello%c:第%d名,獎金%f和%f!\n",b,a,c,d); return0;}printf()函數(shù)格式字符

d格式符:用來輸出十進(jìn)制整數(shù)。o格式符:以八進(jìn)制數(shù)形式輸出整數(shù)。x格式符:以十六進(jìn)制形式輸出整數(shù)。f格式符:用來以小數(shù)形式輸出一個實數(shù),包括單、雙精度數(shù)據(jù)。c格式符:輸出一個字符。s格式符:輸出一個字符串。e格式符:以指數(shù)形式輸出實數(shù)3.3.4數(shù)據(jù)輸入1.getchar()函數(shù)2.scanf()函數(shù)1.Getchar()函數(shù)getchar()函數(shù)是字符輸入函數(shù),接收從鍵盤輸入的單個字符數(shù)據(jù)。語法格式為:

變量=getchar();Getchar()函數(shù)只能接收單個字符,輸入數(shù)字也按字符處理。當(dāng)輸入的字符多于一個時,只接收第一個字符。例:getchar()函數(shù)的使用#include<stdio.h>int

main(void){ charch;

ch=getchar();

putchar(); return0;}2.Scanf()函數(shù)Scanf()函數(shù)可以用來輸入任何類型的多個數(shù)據(jù)。scanf()函數(shù)的一般格式為:

scanf(格式控制字符串,地址表列);

“格式控制字符串”:%d,%f,%lf“地址表列”是由若干個地址組成的表列&x是指變量x在內(nèi)存中的地址。

例:scanf()函數(shù)的使用#include<stdio.h>int

main(void){

int

x,y,z

scanf("%d%d%d",&x,&y,&z);

printf("x=%d,y=%d,z=%d",x,y,z); return0;}說明:1.程序運行時,輸入的多個數(shù)據(jù)之間必須用逗號間隔。2.使用scanf()函數(shù)可以輸入一個數(shù)據(jù),如“scanf(“%d”,&x);”也可以輸入多個數(shù)據(jù),此時要求輸入?yún)?shù)和格式控制說明的類型、個數(shù)和位置要一一對應(yīng)?!纠?-5】甲和乙從東西兩地同時出發(fā),相對而行,兩地相距10公里。甲每小時走3公里,乙每小時走2公里,計算過幾小時兩人相遇?用C語言編寫程序?qū)W習(xí)程序設(shè)計語言時,需要考慮的幾個問題:編程時使用哪些類型的數(shù)據(jù)?對這些數(shù)據(jù)需要進(jìn)行哪些操作?如何用C語言完成給定工作?C語言的三個基本內(nèi)容數(shù)據(jù)表達(dá);運算;流程控制;【例3-5】例題分析:(1)數(shù)據(jù)表達(dá)已知條件:兩地距離、甲和乙的速度;未知結(jié)果:相遇時間;可由公式:時間=距離/速度;計算得出結(jié)果;因此,所需變量有距離、速度和時間;(2)運算:時間=距離/速度;(3)流程控制:順序結(jié)構(gòu)?!驹闯绦虼a】#include<stdio.h>int

main(void){ floata,b,s,t; s=10; a=3; b=2;

t=s/(a+b);

printf("甲、乙相遇所需的時間是%.2f小時\n",t);

return0;}

【例3-6】交換兩變量的值。分析:(1)數(shù)據(jù)定義:交換兩變量的值,因此變量至少有兩個;(2)運算:水空醋123

空瓶也是用一個變量表示,因此第一步數(shù)據(jù)定義中增加一個變量作為中間變量。(3)流程控制:順序結(jié)構(gòu)水空醋123attbba圖3-3交換兩瓶液體圖3-4交換兩個變量的值#include<stdio.h>int

main(void){

int

a,b,t;

scanf("%d,%d",&a,&b);

printf("a=%d,b=%d\n",a,b); t=a; a=b; b=t;

printf("a=%d,b=%d\n",a,b); return0;}3.3.5常用數(shù)學(xué)函數(shù)庫函數(shù)

調(diào)用系統(tǒng)庫函數(shù)時,要用“#include”命令將相應(yīng)的頭文件包含到源程序中函數(shù)種類平方根函數(shù)sqrt(x)絕對值函數(shù)fabs(x)冪函數(shù)pow(x,n)指數(shù)函數(shù)exp(x)常用數(shù)學(xué)庫函數(shù)平方根函數(shù):sqrt(x)

絕對值函數(shù):fabs(x)fabs(-3.56)的值為3.56冪函數(shù)pow(x,n)

:xnpow(1.1,2)的值為1.21(即1.12)指數(shù)函數(shù)exp(x):exexp(2.3)的值為e2.3以e為底的對數(shù)函數(shù)log(x):lnxlog(123.45)的值為4.815836以10為底的對數(shù)函數(shù)log10(x):log10xlog10(123.45)的值為2.091491。【例3-8】將兩個兩位數(shù)的正整數(shù)a,b合并成一個整數(shù)放在c中。合并的方式是:將a數(shù)的十位和個位依次放在數(shù)c的千位和十位上,b數(shù)的十位和個位數(shù)依次放在數(shù)c的百位和個位上。#include<stdio.h>int

main(void){

inta,a1,a2,b,b1,b2,c;

printf("Inputtwonumbers:");

scanf(“%d,%d",&a,&b); a1=a%10; a2=a/10; b1=b%10; b2=b/10; c=a2*1000+b2*100+a1*10+b1;

printf("c=%d\n",c); return0;}運行結(jié)果Inputtwonumbers:1324c=1234第四章分支結(jié)構(gòu)4.1引例4.2單分支結(jié)構(gòu)(基本的if語句)4.3二分支結(jié)構(gòu)(if—else語句)4.4多分支結(jié)構(gòu)(elseif語句)4.5switch多分支結(jié)構(gòu)4.6分支結(jié)構(gòu)程序設(shè)計※4.1引例從鍵盤輸入一個數(shù),如果該數(shù)為正,打??;否則不打印?!局R點】單分支(if)語句二分支(if—else)語句多分支(elseif)語句

switch語句4.2單分支結(jié)構(gòu)--基本的if語句單分支結(jié)構(gòu)的語法是:if(條件表達(dá)式) {

語句段

}表達(dá)式(也叫做條件表達(dá)式)一般為關(guān)系表達(dá)式或邏輯表達(dá)式if語句的執(zhí)行流程首先對表達(dá)式求解,當(dāng)結(jié)果為真(非0)時,則執(zhí)行指定的語句;否則跳過指定語句,接著執(zhí)行該語句下面的語句。表達(dá)式語句段NY4.2單分支結(jié)構(gòu)(基本的if語句)【例4-1】從鍵盤輸入一個用24小時制表示的時間,把它轉(zhuǎn)換為用12小時制表示的時間并輸出。如:輸入15:30(15點30分),則輸出3:30PM?!纠?-2】輸入三個數(shù)a,b,c,輸出三者之中的最大者。4.3二分支結(jié)構(gòu)(if—else語句)【例4-3】輸入三角形的三個邊長,求三角形的面積。根據(jù)海倫公式:半周長p=(a+b+c)/2,面積s=

數(shù)據(jù)處理流程定義變量、輸入值構(gòu)成三角形?計算并輸出結(jié)果輸出出錯信息NYif—else語句語法結(jié)構(gòu)

if(表達(dá)式){

語句段1

}

else{

語句段2

}執(zhí)行流程 先計算關(guān)鍵字if后“表達(dá)式”的值,如果表達(dá)式的值為“真”(不為0),執(zhí)行語句段1;否則,執(zhí)行語句段2。if—else語句表達(dá)式語句段1語句段2NY【源程序代碼】

#include<stdio.h>#include<math.h>int

main(void){floata,b,c,p,s;printf("請輸入三角形的三條邊:");scanf("%f%f%f",&a,&b,&c);if(a+b>c&&a+c>b&&b+c>a){//若能構(gòu)成三角形,則計算面積

p=(a+b+c)/2;s=sqrt(p*(p-a)*(p-b)*(p-c));printf("三角形的面積是%.2f\n",s);}else//若不能構(gòu)成三角形,輸出出錯信息printf("輸入有誤,不能構(gòu)成三角形!\n");}運行結(jié)果請輸入三角形的三條邊:345三角形的面積是6.00【例4-4】為鼓勵居民節(jié)約用水,自來水公司采取按月用水量分段計費的辦法,居民應(yīng)交水費y(元)與月用水量x(噸)的函數(shù)關(guān)系式如下(設(shè)x≥0)。輸入用戶的月用水量x(噸),計算并輸出該用戶應(yīng)支付的水費y(元)(保留兩位小數(shù))。

x≤15

2.5x-10.5x>15y=f(x)=【源程序代碼】

#include<stdio.h>int

main(void){doublex,y;printf("請輸入用水量(噸):");scanf("%lf",&x);if(x<=15)//if—else語句

y=4*x/3;else y=2.5*x-10.5;printf("您的用水量%.2f噸,\n應(yīng)繳納的水費是%.2f元。\n",x,y);return0;}//if—else語句可以寫成條件表達(dá)式y(tǒng)=x<=15?4*x/3:2.5*x-10.5;運行結(jié)果1請輸入用水量(噸):12您的用水量12.00噸,應(yīng)繳納的水費是16.00元運行結(jié)果2請輸入用水量(噸):18您的用水量18.00噸,應(yīng)繳納的水費是34.50元4.4多分支結(jié)構(gòu)(elseif語句)【例4-6】商店售貨,按購買貨物款的多少分別給予不同的優(yōu)惠折扣,購貨不足200元,沒有折扣;購貨滿200元,不足500元,減價5%;購貨滿500元,不足1000元,減價7.5%;購貨滿1000元,不足2000元,減價10%;購貨2000元以上,減價15%編程計算實際應(yīng)付貨款。數(shù)據(jù)處理流程YNNd=0.05m<200m<500m<10000d=0d=0.075d=0.1YYN定義變量、輸入值m<20000d=0.15計算t,輸出結(jié)果YN4.4.1elseif語句一般形式為:if(表達(dá)式1)

語句段1;elseif(表達(dá)式2)

語句段2;elseif(表達(dá)式3)

語句段3;

…elseif(表達(dá)式n)

語句段n;else

語句段n+1;執(zhí)行流程 依次判斷表達(dá)式的值,當(dāng)出現(xiàn)某個值為真時,則執(zhí)行其對應(yīng)的語句。然后跳到整個if語句之外繼續(xù)執(zhí)行程序。如果所有的表達(dá)式均為假,則執(zhí)行語句n+1。然后繼續(xù)執(zhí)行后續(xù)程序。

YNN語句段2表達(dá)式1表達(dá)式2表達(dá)式n語句段1語句段n語句段n+1YYN…………【源程序代碼】#include<stdio.h>intmain(){doublem,t,d;printf("請輸入購物金額:");scanf("%lf",&m);if(m<200)d=0;//elseif語句elseif(m<500)d=0.05;elseif(m<1000)d=0.075;elseif(m<2000)d=0.1;elsed=0.15;t=m*(1-d);printf("購物款為%.2f元,\n實際應(yīng)付款是%.2f元\n",m,t);return0;}【例4-7】求一元二次方程的ax2+bx+c=0根。

數(shù)據(jù)處理流程計算d=b*b-4*a*cd=b*b-4*a*ca不等于0計算兩個實根并輸出輸出出錯信息YN定義變量、輸入值d大于等于0YN計算兩個虛根并輸出4.4.2多分支結(jié)構(gòu)(嵌套的if—else語句)

一般形式如下:if(表達(dá)式1) if(表達(dá)式2)語句1;

else語句2;else if(表達(dá)式3)語句3;

else語句4;

else和if的匹配準(zhǔn)則:else與最靠近它的、沒有與別的else匹配過的if相匹配。分支嵌套語句執(zhí)行過程語句2表達(dá)式1表達(dá)式2表達(dá)式3語句1語句3語句4YN

N

Y

Y

N【源程序代碼】#include<stdio.h>#include<math.h>int

main(void){doublea,b,c,d,x1,x2,p,q;printf("請輸入方程系數(shù):");scanf("%lf%lf%lf",&a,&b,&c);d=b*b-4*a*c;if(a!=0){

if(d>=0){ x1=(-b+sqrt(d))/(2*a); x2=(-b-sqrt(d))/(2*a); printf("x1=%.2f,x2=%.2f\n",x1,x2); } else{ p=-b/(2*a); q=sqrt(-d)/(2*a);

printf("x1=%.2f+%.2fi\nx2=%.2f-%.2fi\n",p,q,p,q); }}else

printf("輸入的數(shù)據(jù)出錯");//嵌套的if—else語句return0;}【例3-8】從鍵盤輸入一個字符,判斷該字符的類型(大寫字母、小寫字母、數(shù)字或其他控制字符)【源程序代碼】#include<stdio.h>int

main(void){charch;printf("Enteracharacter:");ch=getchar();//從鍵盤輸入一個字符,賦值給變量chif(ch<32)//控制字符的ASCII碼值小于32

printf("Thisisacontrolcharacter\n");elseif(ch>='0'&&ch<='9')//判斷ch是數(shù)字字符

printf("Thisisadigit\n");elseif(ch>='A'&&ch<='Z')//判斷ch是大寫英文字母

printf("Thisisacapitalletter\n");elseif(ch>='a'&&ch<='z')//判斷ch是小寫英文字母

printf("Thisisasmallletter\n");else

printf("Thisisanothercharacter\n");return0;}4.5switch多分支結(jié)構(gòu)

【例4-9】查詢自動售貨機商品的價格。假設(shè)自動售貨機出售4種商品:果汁、礦泉水、巧克力和餅干,售價分別是每份3.5元、1.5元、6.0元和4.0元。在屏幕上顯示以下菜單(編號和選項),用戶可以連續(xù)查詢商品的價格,當(dāng)查詢次數(shù)超過5次時,自動退出查詢;不到5次時,用戶可以選擇退出。當(dāng)用戶輸入編號1~4,顯示相應(yīng)商品的價格(保留兩位小數(shù));輸入0,退出查詢;輸入其他編號,顯示價格為0。[1]請選擇果汁[2]請選擇礦泉水[3]請選擇巧克力[4]請選擇餅干[0]退出查詢【源程序代碼】#include<stdio.h>int

main(void){intchoice,i;doubleprice; for(i=1;i<=5;i++){//可以連續(xù)查詢五次,用for循環(huán)實現(xiàn)

printf("[1]請選擇果汁\n");

printf("[2]請選擇礦泉水\n");

printf("[3]請選擇巧克力\n");

printf("[4]請選擇餅干\n");

printf("[0]退出查詢\n");

printf("請選擇:");

scanf("%d",&choice); if(choice==0)break;//若輸入選項值為0就退出查詢。

switch(choice){//根據(jù)輸入的編號,將相應(yīng)的價格賦值給price case1:price=3.5;break;//用break語句跳出switch語句,下同

case2:price=1.5;break; case3:price=6.0;break; case4:price=4.0;break; default:price=0.0;break; }

printf("price=%0.2f\n",price);}//for循環(huán)結(jié)束

printf("Thanks\n");return0;}4.5.1switch語句一般形式為:switch(表達(dá)式){case常量1:

語句1; break;case常量2:

語句2; break;……case常量n:

語句n; break;default:

語句n+1; break;}switch語句的執(zhí)行流程表達(dá)式語句段1語句段2語句段n語句段n+1表達(dá)式=常量1表達(dá)式=常量2表達(dá)式=常量n其他breakbreakbreakbreakswitch語句在執(zhí)行過程中,有多種情況:1.如果在case后面包含多條執(zhí)行語句時,也不需要像if語句那樣加大括號,進(jìn)入某個case語句后,會自動順序執(zhí)行本case后面的所有執(zhí)行語句。2.default總是放在最后,這時default后不需要break語句。并且,default部分也不是必須的,如果沒有這一部分,當(dāng)switch后面圓括號中表達(dá)式的值與所有case后面的常量表達(dá)式的值都不相等時,則不執(zhí)行任何一個分支直接退出switch語句。此時,switch語句相當(dāng)于一個空語句。

3.在switch-case語句中,多個case可以共用一條執(zhí)行語句4.把case語句下面的break刪除,則程序執(zhí)行流程改變5.使用switch語句時還應(yīng)注意:在case后的各常量表達(dá)式的值不能相同,否則會出現(xiàn)錯誤。

【例4-10】從鍵盤輸入兩個數(shù)(d1、d2)和一個運算符(op),計算d1opd2的值。#include<stdio.h>int

main(void)//完成兩個數(shù)簡單的四則運算{floata,b;//定義兩個操作數(shù)變量charop;//定義一個字符型的操作符變量printf("Pleaseentera,bandop:");scanf("%f%c%f",&a,&op,&b);switch(op)//判斷操作符并進(jìn)行四則運算

{

}return0;}case'+':

printf("%.2f+%.2f=%.2f\n",a,b,a+b);

break;

case'-':

printf("%.2f-%.2f=%.2f\n",a,b,a-b);

break;

case'*':

printf("%.2f*%.2f=%.2f\n",a,b,a*b);

break;

case'/':

if(b!=0.0)//做除法運算時,判斷除數(shù)是否為零

printf("%.2f/%

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論