版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
第3章分支結(jié)構(gòu)程序設(shè)計(jì)3.1案例中的分支結(jié)構(gòu)程序設(shè)計(jì)3.2關(guān)系運(yùn)算符及其表達(dá)式3.3邏輯運(yùn)算符及其表達(dá)式3.4if語句3.5switch語句3.6運(yùn)算符及其表達(dá)式本章內(nèi)容掌握分支結(jié)構(gòu)的基本概念掌握關(guān)系運(yùn)算和關(guān)系表達(dá)式掌握邏輯運(yùn)算和邏輯表達(dá)式掌握if語句的基本形式和使用方法掌握switch語句的基本形式和使用方法了解C語言的各種運(yùn)算符及表達(dá)式學(xué)習(xí)目標(biāo)3.1案例中的分支結(jié)構(gòu)程序設(shè)計(jì)
學(xué)生信息管理系統(tǒng)程序啟動(dòng)后,首先顯示系統(tǒng)菜單,根據(jù)用戶輸入的數(shù)字,系統(tǒng)要進(jìn)行兩次判斷:
1.判斷用戶輸入的有效性。
2.判斷用戶選擇了哪個(gè)功能模塊。例1:輸入二元一次方程的的三個(gè)系數(shù)a,b,c,求ax2+bx+c=0方程的根#include"stdio.h"#include"math.h"voidmain(){ doublea,b,c,delt,x1,x2; printf(“請(qǐng)輸入系數(shù)abc:\n"); scanf("%lf%lf%lf/n",&a,&b,&c); delt=b*b-4*a*c; x1=(-b+sqrt(delt))/(2*a); x2=(-b-sqrt(delt))/(2*a); printf(“x1=%.3f,x2=%.3f\n",x1,x2);}如何判斷該方程是否有實(shí)根?程序只有三種基本結(jié)構(gòu)順序結(jié)構(gòu)選擇結(jié)構(gòu)循環(huán)結(jié)構(gòu)順序結(jié)構(gòu)#include"stdio.h"#include"math.h"voidmain(){ doublea,b,c,p,area; printf("請(qǐng)輸入三邊長(zhǎng)abc:\n"); scanf("%lf%lf%lf/n",&a,&b,&c); p=(a+b+c)/2; area=sqrt(p*(p-a)*(p-b)*(p-c)); printf("Areais%.3f/n",area);}#include<stdio.h>//例3-1#include<stdlib.h>//exit()用到voidmain() { intchoice; printf("歡迎使用學(xué)生信息管理系統(tǒng)\n"); printf("-----------------------------------------------\n"); printf("1.添加學(xué)生信息2.顯示學(xué)生信息\n"); printf("3.修改學(xué)生信息4.刪除學(xué)生信息\n"); printf("5.查找學(xué)生信息6.統(tǒng)計(jì)不及格人數(shù)、最高分和平均分\n"); printf("7.按總分排序8.保存至文件(文本方式)\n"); printf("9.從文件讀入(文本方式)10.保存至文件(二進(jìn)制方式)\n"); printf("11.從文件讀入(二進(jìn)制方式)12.退出程序\n"); printf("-----------------------------------------------\n"); printf("請(qǐng)選擇功能模塊,輸入數(shù)字1-12:"); scanf("%d",&choice);
if(choice>=1&&choice<=12)
switch(choice)//根據(jù)用戶輸入的菜單編號(hào),調(diào)用對(duì)應(yīng)的功能模塊
{ case1:printf("調(diào)用添加學(xué)生信息模塊\n");break; case2:printf("調(diào)用顯示學(xué)生信息模塊\n");break; case3:printf("調(diào)用修改學(xué)生信息模塊\n");break; case4:printf("調(diào)用刪除學(xué)生信息模塊\n");break; //…(為節(jié)省篇幅,省略了case8至case11)
case12:exit(0);break;//退出程序
}
else printf("輸入數(shù)字不正確,請(qǐng)重輸1-12:\n");}例如:在例3-1中,如何描述一個(gè)變量的值是否在區(qū)間[1,12]內(nèi)?
C語言中采用關(guān)系表達(dá)式和邏輯表達(dá)式來描述判斷條件。例如:
choice>=1&&choice<=12如何用C語言去描述一個(gè)判斷條件呢?1.關(guān)系運(yùn)算符及其優(yōu)先級(jí)C語言提供6個(gè)關(guān)系運(yùn)算符:>(大于) >=(大于或等于)<(小于)<=(小于或等于)==(等于)!=(不等于)3.2關(guān)系運(yùn)算符及其表達(dá)式優(yōu)先級(jí)和結(jié)合方向
優(yōu)先級(jí)是指當(dāng)多個(gè)運(yùn)算符出現(xiàn)在同一個(gè)表達(dá)式中時(shí),哪一個(gè)運(yùn)算符先進(jìn)行運(yùn)算,運(yùn)算順序直接影響表達(dá)式的值。例如:2+3*5等價(jià)于2+(3*5)c==a>b等價(jià)于c==(a>b)結(jié)合方向:當(dāng)多個(gè)同級(jí)運(yùn)算符出現(xiàn)在同一個(gè)表達(dá)式中時(shí),
哪一個(gè)運(yùn)算符先進(jìn)行運(yùn)算。關(guān)系運(yùn)算符的結(jié)合方向是從左到右。例如:c<=a>b等價(jià)于(c<=a)>b。關(guān)系表達(dá)式關(guān)系表達(dá)式:用關(guān)系運(yùn)算符將兩個(gè)操作數(shù)連接起來
的式子例:a>b,a+b>b+c,(a=3)>(b=5),’a’<‘b’,(a>b)>(b<c)關(guān)系表達(dá)式的值是一個(gè)邏輯值,即“真”或“假”。例:關(guān)系表達(dá)式”a>b”的值為“真”,表達(dá)式的值為1。C語言中沒有專用的邏輯值,1代表真,0代表假例3-2寫出下面程序的運(yùn)行結(jié)果。#include<stdio.h>voidmain(){ inta=3,b=2,c; c=a<b; printf("c=%d\n",c);
if(a<b) printf("a小于b\n"); else
printf("a大于b\n");}inta=3,b=2,c=1,d;d=a-1>b>c;執(zhí)行上述語句后變量d的值是多少?說明:關(guān)系運(yùn)算符的優(yōu)先級(jí)低于算術(shù)運(yùn)算符關(guān)系運(yùn)算符的優(yōu)先級(jí)高于賦值運(yùn)算符有些情況下,只用關(guān)系表達(dá)式并不能完整地描述一個(gè)判斷條件。例如,在例3-1中要判斷變量choice的值是否在區(qū)間[1,12]內(nèi),能否直接寫成if(1<=choice<=12)?3.3邏輯運(yùn)算符及其表達(dá)式#include<stdio.h>voidmain(){ intchoice=20; if(1<=choice<=12) printf("choice落在區(qū)間[1,12]內(nèi)\n"); else printf("choice沒落在區(qū)間[1,12]內(nèi)\n");}執(zhí)行語句后的值是多少?邏輯運(yùn)算符邏輯運(yùn)算符有三個(gè):邏輯與(&&):只有當(dāng)運(yùn)算符兩側(cè)的操作數(shù)都為真時(shí),
結(jié)果為真,否則為假。 10>8&&4<12結(jié)果?邏輯或(||):運(yùn)算符兩側(cè)的操作數(shù)只要有一個(gè)為真,結(jié)果為。
10<8||4>12結(jié)果?邏輯非(!):當(dāng)運(yùn)算符右側(cè)的操作數(shù)為真時(shí),
結(jié)果為假;反之,結(jié)果為真。
!(4>12)結(jié)果?邏輯表達(dá)式邏輯表達(dá)式的值也只能有兩種可能: “真”(用“1”表示) “假”(用“0”表示)邏輯運(yùn)算符連接的操作數(shù)可以是其它表達(dá)式例:設(shè)a=4,b=5:!a的值為0a&&b的值為1a||b的值為1!a||b的值為14&&0||2的值為1任何非零的數(shù)值被認(rèn)作“真”邏輯運(yùn)算符的優(yōu)先級(jí)優(yōu)先級(jí):!>&&>||,
“&&”和“||”低于關(guān)系運(yùn)算符,“!”高于算術(shù)運(yùn)算符結(jié)合性:自左至右1&&0邏輯值為08<3邏輯值為04-1值為3!0邏輯值為15>3邏輯值為1表達(dá)式值為0自左向右運(yùn)算例:5>3&&8<4-!0對(duì)邏輯表達(dá)式求值時(shí),需要注意以下兩點(diǎn):(1)在“&&”表達(dá)式中,如果“&&”左端計(jì)算結(jié)果
為0,則右端便不再計(jì)算。
例如:inta=0,b=10,c; c=a&&(b=100); printf("c=%d,b=%d\n",c,b);(2)在“||”表達(dá)式中,如果“||”左端計(jì)算結(jié)果為1,
則右端便不再計(jì)算。
例如:inta=1,b=10,c; c=a||(b=100); printf("c=%d,b=%d\n",c,b);3.4if語句if語句有三種形式: 單分支條件語句 雙分支條件語句 多分支條件語句單分支條件語句
語法格式如下:
if(條件e)
語句S;例3-3從鍵盤輸入兩個(gè)整數(shù)x和y,求這兩個(gè)數(shù)
的最大值。#include<stdio.h> //注明輸入輸出函數(shù)使用的頭文件voidmain() //定義主函數(shù){ intx,y,max;//定義3個(gè)變量,變量max放x,y中較大數(shù)
printf("請(qǐng)輸入兩個(gè)整數(shù):"); //屏幕輸入提示
scanf("%d%d",&x,&y);//輸入兩個(gè)整數(shù)
max=x;//先假設(shè)x是較大數(shù),將其值賦給max if(x<y) max=y;//若x不是較大數(shù),則將y賦給max printf("max=%d\n",max);//輸出max的值}雙分支條件語句
語法格式如下:
if(條件e)
語句S1;
else
語句S2;例3-4從鍵盤輸入兩個(gè)整數(shù)x和y,求這兩個(gè)
數(shù)的最大值。#include<stdio.h> voidmain() { intx,y,max; printf("請(qǐng)輸入兩個(gè)整數(shù):"); scanf("%d%d",&x,&y); if(x<y) max=y; else max=x; printf("max=%d\n",max);}max=x;if(x<y) max=y;else ;【例3-5】從鍵盤輸入一個(gè)整數(shù),當(dāng)該數(shù)大于或等于0時(shí),輸出它的平方根,否則,顯示輸入數(shù)據(jù)不正確。
#include<stdio.h> //注明輸入輸出函數(shù)使用的頭文件#include<math.h>//注明平方根函數(shù)使用的頭文件voidmain() //定義主函數(shù){ intx; //定義變量
doubley; scanf("%d",&x); //調(diào)用庫函數(shù)從鍵盤輸入數(shù)據(jù)
if(x>=0) { y=sqrt(x); //調(diào)用開平方庫函數(shù)sqrt() printf("%lf\n",y); } else printf("輸入數(shù)據(jù)不正確!\n");//輸出數(shù)據(jù)錯(cuò)誤信息}例3-6從鍵盤輸入一年份,判斷該年是否為閏年。判斷閏年的條件是符合下面二條之一:
(1)能被4整除,但不能被100整除;
(2)能被400整除。#include<stdio.h>voidmain(void){ intyear; printf("請(qǐng)輸入年份:"); scanf("%d",&year); if((year%4==0&&year%100!=0)||year%400==0) printf("%d是閏年\n",year); else printf("%d不是閏年\n",year);}多分支條件語句語法格式如下:if(條件1)語句1;elseif(條件2)語句2;…elseif(條件n)語句n;else
語句n+1;【例3-7】某商場(chǎng)實(shí)行打折促銷活動(dòng),折扣率根據(jù)客戶購買商品的金額來定,兩者的對(duì)應(yīng)關(guān)系如表3-1所示。編寫一個(gè)程序,從鍵盤輸入客戶購買商品的金額后,自動(dòng)計(jì)算出購買商品的金額和應(yīng)付金額。#include<stdio.h> //注明輸入輸出函數(shù)使用的頭文件voidmain() //定義主函數(shù){ doublecost,cost1; //分別表示購買金額和應(yīng)付金額
printf("請(qǐng)輸入購買商品的金額:"); //屏幕提示信息
scanf("%lf",&cost); //輸入數(shù)據(jù)
if(cost>=10000) cost1=cost*0.85; elseif(cost>=5000) cost1=cost*0.9; elseif(cost>=1000) cost1=cost*0.95; else cost1=cost; printf("購買金額為:%.2lf,應(yīng)付金額為%.2lf\n",cost,cost1); }例3-8:學(xué)生成績(jī)可分為五分制與百分制,從鍵盤輸入學(xué)生的百分制成績(jī),將其轉(zhuǎn)換為五分制輸出。百分制與五分制之間的對(duì)應(yīng)關(guān)系如右表所示。百分制五分制90~100A80~89B70~79C60~69D0~59E floatscore; printf("請(qǐng)輸入分?jǐn)?shù):"); scanf("%f",&score); if(score>=90) printf("A\n"); elseif(score>=80) printf("B\n"); elseif(score>=70) printf("C\n"); elseif(score>=60) printf("D\n"); elseif(score>=0) printf("E\n"); else printf("輸入分?jǐn)?shù)不正確!");如果輸入分?jǐn)?shù)大于100,則輸出多少?應(yīng)如何進(jìn)行修改呢?if語句的嵌套if語句的嵌套是指在if語句中又包含了一個(gè)或多個(gè)if語句。其一般格式如右:【例3-10】已知男性60歲退休。女性55歲退休,輸入一個(gè)人的年齡和性別,判斷是退休還是在工作,并輸出結(jié)果。輸入性別時(shí),F(xiàn)或f時(shí)表示女性,M或m時(shí)表示男性。#include<stdio.h>voidmain(){ intage;//變量age表示年齡
charsex;//變量sex表示性別
printf("請(qǐng)輸入性別和年齡F(f)/M(m)):");scanf("%c%d",&sex,&age);//輸入性別和年齡
if(sex==‘m’||sex==‘M’) { if(age>=60) printf("他已退休\n"); else printf("他在工作\n"); }
else { if(sex==‘f’||sex==‘F’) { if(age>=55) printf("她已退休\n"); else printf("她在工作\n");
} else printf("輸入數(shù)據(jù)有誤!\n"); }}例3-9根據(jù)以下分段函數(shù)編寫程序,輸入一個(gè)x值,
輸出相應(yīng)的y值。方法1:#include<stdio.h>voidmain(){ intx,y; scanf("%d",&x); if(x<0) y=-1; if(x==0) y=0; if(x>0) y=1; printf("x=%d,y=%d\n",x,y);}方法2:#include<stdio.h>voidmain(){ intx,y; scanf("%d",&x); if(x<0) y=-1; else if(x==0) y=0; else y=1; printf("x=%d,y=%d\n",x,y);}3.5switch語句在程序設(shè)計(jì)中,可以采用if-elseif語句處理多分支問題,但是,當(dāng)分支很多時(shí),if語句的層次也會(huì)很多,造成程序編寫和閱讀上的困難。語法格式如下:switch(表達(dá)式){ case常量1:
語句序列1;[break;] case常量2:
語句序列2;[break;] … case常量n:
語句序列n;[break;] default:語句序列n+1;}例如,在學(xué)生信息管理系統(tǒng)案例中,根據(jù)用戶輸入的菜單編號(hào),調(diào)用相應(yīng)功能模塊的部分程序代碼如下:scanf("%d",&choice);//choice變量保存有用戶輸入的菜單編號(hào)switch(choice){ case1:add();break;//添加學(xué)生信息
case2:display();break;//顯示學(xué)生信息
case3:modify();break;//修改學(xué)生信息
case4:del(); break;//刪除學(xué)生信息
case5:find();break;//查找學(xué)生信息
case6:compute();break;//統(tǒng)計(jì)不及格人數(shù)、最高分和平均分
case7:sort();break;//按總分排序
case8:save_txt();break;//數(shù)據(jù)保存至文件(文本方式) case9:load_txt();break;//從文件讀取數(shù)據(jù)(文本方式) case10:save_bin();break;//數(shù)據(jù)保存至文件(二進(jìn)制方式) case11:load_bin();break;//從文件讀入數(shù)據(jù)(二進(jìn)制方式) case12:exit(0);break;//退出程序}例3-11從鍵盤輸入一個(gè)算術(shù)運(yùn)算式,輸出計(jì)算結(jié)果,算術(shù)運(yùn)算式的格式如下:aopb,其中,a、b為兩個(gè)整數(shù),op為算術(shù)運(yùn)算符,包括:+、-、*、/、%。#include<stdio.h>voidmain(){ inta,b;charop; printf("請(qǐng)輸入算術(shù)運(yùn)算式:");
scanf("%d%c%d",&a,&op,&b); switch(op) { case‘+’:printf("結(jié)果為:%d\n",a+b);break; case‘-’:printf("結(jié)果為:%d\n",a-b);break; case‘*’:printf("結(jié)果為:%d\n",a*b);break; case‘/’:printf("結(jié)果為:%d\n",a/b);break; case‘%’:printf("結(jié)果為:%d\n",a%b);break; default:printf("數(shù)據(jù)輸入錯(cuò)誤!\n",a/b);
}}
為了避免除0錯(cuò)誤,提高程序的健壯性,上述程序應(yīng)作何修改?case‘/’: if(b==0) printf("被0除錯(cuò)誤!\n"); else printf("結(jié)果為:%d\n",a/b); break; case‘%’: if(b==0) printf("被0除錯(cuò)誤!\n"); else printf("結(jié)果為:%d\n",a%b); break;在switch結(jié)構(gòu)中,如果多個(gè)case的執(zhí)行語句相同,則它們可以共用同一個(gè)語句塊。例3-12:已知1998年的1、3、5、7、8、10、12月有31天,4、6、9、11月有30天,2月有28天。編程從鍵盤輸入1998年的某個(gè)月份,輸出該月有多少天。#include<stdio.h>voidmain(){intx,day;//定義兩個(gè)變量,x保存月份,day保存天數(shù)
printf("請(qǐng)輸入月份(1-12):");scanf("%d",&x);switch(x){ case4: case6: case9: case11:day=30;break;//4、6、9、11月有30天
case2:day=28;break;//2月有28天
default:day=31;//其它月有31天
}printf("%d月的天數(shù)是%d\n",x,day);//輸出顯示月份對(duì)應(yīng)的天數(shù)}如果將程序中case11和case2分支后的break語句省略,寫成如下形式:
case11:day=30; case2:day=28;程序的運(yùn)行結(jié)果會(huì)是怎樣?當(dāng)省略某個(gè)case分支后的break語句時(shí),程序在執(zhí)行完該case分支對(duì)應(yīng)的語句后,并不自動(dòng)退出switch結(jié)構(gòu),而是繼續(xù)依次執(zhí)行下面case分支后的語句(不再進(jìn)行條件檢測(cè)),直至遇到break語句或switch語句結(jié)束。3.6運(yùn)算符及其表達(dá)式1.基本的算術(shù)運(yùn)算符+(加),-(減),*(乘),/(除),%(求余)2.自增、自減運(yùn)算符
m=++i; 等價(jià)于 i=i+1; m=i; m=i++; 等價(jià)于 m=i; i=i+1;
表達(dá)式++i的值為變量i加1之后的值,而表達(dá)式i++的值為變量i加1之前的值。
--i和i--與之類似。例3-13:分析下面程序的執(zhí)行結(jié)果#include<stdio.h>voidmain() //定義主函數(shù){ inti=5,j=5,m,n; m=++i; n=j++; printf("m=%d,n=%d,i=%d,j=%d\n",m,n,i,j);//輸出}賦值運(yùn)算符及其表達(dá)式C語言中包含的賦值運(yùn)算符如下:(1)基本賦值運(yùn)算符= 例如:a=b+1。(2)加賦值運(yùn)算符+= 例如:a+=b+1等價(jià)于a=a+(b+1)。(3)減賦值運(yùn)算符-= 例如:a-=b+1等價(jià)于a=a-(b+1)。(4
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024蘇州智能家居系統(tǒng)裝修服務(wù)合同2篇
- 2025年度LED照明燈具生產(chǎn)與銷售合作協(xié)議3篇
- 2024甲乙雙方關(guān)于高端裝備制造與技術(shù)轉(zhuǎn)讓的協(xié)議
- 2024配電室設(shè)備安裝工程施工合同樣本
- 2024股權(quán)轉(zhuǎn)讓合同協(xié)議
- 2025年度上市公司股東持股鎖定期合同約定3篇
- 獨(dú)奏訓(xùn)練-吉他知到智慧樹章節(jié)測(cè)試課后答案2024年秋四川音樂學(xué)院
- 2025年度廠房買賣附帶環(huán)境風(fēng)險(xiǎn)評(píng)估與治理合同3篇
- 行政訴訟律師聘用合同范本
- 大學(xué)城網(wǎng)絡(luò)升級(jí)改造合同
- (八省聯(lián)考)2025年高考綜合改革適應(yīng)性演練 物理試卷合集(含答案逐題解析)
- 車間修繕合同模板
- 商會(huì)年會(huì)策劃方案范例(3篇)
- (正式版)JBT 9229-2024 剪叉式升降工作平臺(tái)
- 2023版押品考試題庫必考點(diǎn)含答案
- 時(shí)光科技主軸S系列伺服控制器說明書
- 社會(huì)組織績(jī)效考核管理辦法
- 蘇州智能數(shù)控機(jī)床項(xiàng)目投資計(jì)劃書(模板)
- 貼在學(xué)校食堂門口的對(duì)聯(lián)_在圖書館門前貼的對(duì)聯(lián)
- 計(jì)數(shù)培養(yǎng)基適用性檢查記錄表
- 大瀝鎮(zhèn)志愿服務(wù)隊(duì)備案成立步驟
評(píng)論
0/150
提交評(píng)論