




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
選擇結(jié)構(gòu)根據(jù)給定的條件是否滿足,決定從給定的條件選擇其一。分為:二路分支多路分支if…else…語句switch語句關(guān)系運(yùn)算符和關(guān)系表達(dá)式關(guān)系運(yùn)算符>大于
>=大于等于<小于
<=小于等于==等于
!=不等于說明:(1)六個關(guān)系運(yùn)算符都是雙目運(yùn)算符;(2)由一個關(guān)系運(yùn)算符連接兩個對象形成的表達(dá)式稱為關(guān)系表達(dá)式,這兩個運(yùn)算對象可以是算術(shù)表達(dá)式、字符表達(dá)式等。運(yùn)算對象為字符數(shù)據(jù)時,比較按其ASCII碼進(jìn)行。例:inti=3,j=5;i*i+j*j>100;例:‘a(chǎn)’>‘b’(3)關(guān)系表達(dá)式的值可以作為整數(shù)值參與運(yùn)算(4)與數(shù)學(xué)表達(dá)式的區(qū)別(5)注意區(qū)分“=”與“==”的差別例:inta=3,b=2,c=1,f;f=a>b>c;例:3<x<100邏輯運(yùn)算符與邏輯表達(dá)式在C語言中有三個邏輯運(yùn)算符&&邏輯與||邏輯或!邏輯非兩個操作對象同時為真時,表達(dá)式的值為真。兩個操作對象之一為真時,表達(dá)式的值為真。當(dāng)操作對象的值為真,則表達(dá)式的值為假。說明:(1)&&和||是雙目運(yùn)算符,!是單目運(yùn)算符(2)&&和||的運(yùn)算級別低于關(guān)系運(yùn)算符,!的運(yùn)算級別高于關(guān)系運(yùn)算符和算術(shù)運(yùn)算符,
注意:
!的結(jié)合方向是從右向左。
&&和||的結(jié)合方向是從左向右,(3)不能確定的情況下,添加括號保證運(yùn)算次序。
盡量避免復(fù)雜煩瑣的邏輯表達(dá)式。例:a=10;b=20;c=30;a=(--b<=a)||(a+b!=c);a=?b=?a=1b=19(5)在邏輯表達(dá)式的求解中,并不是所有的邏輯運(yùn)算符都被執(zhí)行,只有在必須執(zhí)行下一個邏輯運(yùn)
算符才能求出表達(dá)式的解時,才執(zhí)行該運(yùn)算符。例:intx=-1;
執(zhí)行了++x||++x||++x后,x的值是?
x=1(4)參加邏輯運(yùn)算的運(yùn)算對象可以是0(“假”)或
任何非0的數(shù)值(“真”);但運(yùn)算后的結(jié)果和關(guān)系運(yùn)算的結(jié)果一樣,只能是邏輯值0和1。1.簡單的if語句形式:if(表達(dá)式)語句執(zhí)行過程:如果表達(dá)式值非0,執(zhí)行該語句,然后執(zhí)行if的下一個語句;否則直接執(zhí)行if的下一個語句。例:
main(){inta,b,max;printf(”\n請輸入兩個數(shù):”);scanf(”%d%d”,&a,&b);
max=a;if(max<b)max=b;printf(”max=%d”,max);}if語句例:輸入三個整數(shù)x、y、z,把這三個數(shù)由小到大輸出。輸出x,y,x的值交換x,zx>z交換x,yx>y輸入x,y,zYNYN交換y,zy>zYN#include<stdio.h>main(){intx,y,z,t;printf(“Pleaseinputthex,y,z:”);scanf(“%d%d%d”,&x,&y,&z);
if(x>y){t=x;x=y;y=t;}if(x>z){t=x;x=z;z=t;}if(y>z){t=y;y=z;z=t;}printf(“Smalltobig:%d%d%d\n”,x,y,z);}if語句2.if/else語句形式:if(表達(dá)式)語句1else語句2執(zhí)行流程:
如果表達(dá)式值非0,執(zhí)行語句1;否則,執(zhí)行語句2;無論執(zhí)行了哪一路分支之后,都執(zhí)行if的下一條語句。例
if(x>y)max=x;elsemax=y;printf(”max=%d”,max);例.判斷給定的某一年是否是閏年。分析:如果某年能被4整除而不能被100整除,或者能被400整除,那么該年就是閏年,否則就是平年。
if(year%4==0&&year%100!=0||year%400==0)#include<stdio.h>main(){intyear,leap=0;printf("\n請輸入年份(yyyy):");scanf("%d",&year);
/*判斷該年是否是閏年*/
if(year%4==0&&year%100!=0||year%400==0)
leap=1;
if(leap)
/*leap=1,即該年是閏年*/printf("%d年是閏年.\n",year);
else
/*leap=0,即該年是平年*/printf("%d年是平年.\n",year);}例.制作簡單的猜數(shù)字游戲。程序運(yùn)行時自動產(chǎn)生1~5之間的隨機(jī)數(shù),接著等待鍵盤輸入猜的數(shù)字。如果猜對了,顯示“猜對了”相關(guān)信息;否則,如果猜錯了,則顯示“猜錯了”相關(guān)信息。分析:如何產(chǎn)生1~5之間的隨機(jī)數(shù)?1)隨機(jī)數(shù)產(chǎn)生:C語言提供srand()函數(shù),配合rand()函數(shù)可產(chǎn)生介于0~32767之間的隨機(jī)數(shù)(函數(shù)均包含在stdlib.h中)。srand((unsigned)time(NULL));
/*以做隨機(jī)數(shù)產(chǎn)生器的種子,time()函數(shù)包含在time.h中
*/guess=rand();
/*以上面得到的種子產(chǎn)生0~32767的整數(shù)*/2)1~5之間的隨機(jī)數(shù):首先用rand()函數(shù)產(chǎn)生的隨機(jī)數(shù),然后對5求余(rand()%5),產(chǎn)生0~4之間的整數(shù),然后再加1,即rand()%5+1就產(chǎn)生1~5之間的整數(shù)。#include<stdio.h>#include<stdlib.h>#include<time.h>main(){intdata,guess;
srand((unsigned)time(NULL));data=rand()%5+1;printf("請輸入要猜的數(shù)字(限1-5):");scanf("%d",&guess);
if(guess==data)printf("猜對了!~_~,正確數(shù)字為%d!\n",data);
elseprintf("猜錯了!0_0,正確數(shù)字為%d!\n",data);}
例:一個5位數(shù),判斷它是不是回文數(shù),即12321是回文數(shù),個位與萬位相同,十位與千位相同。分析:分解出每一位數(shù)(萬位、千位、十位和個位),然后判斷。輸出不是回文輸出是回文ge=x%10shi=x%100/10qian=x%10000/1000輸入的數(shù)字不是5位數(shù)wan=x/10000輸入長整數(shù)wan>0&&wan<10wan==ge&&qian==shiYNYNmain(){longx;intge,shi,qian,wan;printf("pleaseinputthe5bitsnumber:\n");scanf("%ld",&x);wan=x/10000;
if(wan>0&&wan<10){qian=x%10000/1000;shi=x%100/10;ge=x%10;
if(ge==wan&&shi==qian)
printf("Itispalindromicnumber
!\n");
elseprintf("Itisnotpalindromicnumber
!\n");}
else printf(“Thenumberisnot5bits!\n");}3.if(表達(dá)式1)語句1
elseif(表達(dá)式2)語句2
elseif(表達(dá)式3)語句3
elseif(表達(dá)式m)語句melse語句n...例:有一個函數(shù)如下:x(x<1)y=2x+1(1≤x<10)5x-17(x≥10)編程序,輸入x值,輸出y值main(){floatx,y;printf("Inputx:");scanf("%f",&x);
if(x<1)y=x;
elseif(x<10)y=2*x+1;
elsey=5*x-17;printf("y=%f\n",y);}分析:根據(jù)輸入字符的ASCII碼來判別類型。
例.編寫程序,要求判別鍵盤輸入字符的類別。#include"stdio.h"main(){charc;printf("\nPleaseinputacharacter
:\n");c=getchar();
if(c<32)
printf("Itisacontrolcharacter
!\n");
elseif(c>=’0’&&c<=’9’)
printf("Itisadigit!\n");
elseif(c>=’A’&&c<=’Z’)printf("Itisacapitalletter!\n");
elseif(c>=’a’&&c<=’z’)
printf("Itisalowerletter!\n");
elseprintf("Itisothercharacter!\n");}說明:(1)三種形式的if語句中都出現(xiàn)的“表達(dá)式”,不僅只限于邏輯和關(guān)系表達(dá)式,還可以是任何類型的;(2)if語句中,判斷條件表達(dá)式必須用()括起來,
條件后面不加分號,但語句之后有分號;(4)if和else后的語句可以只有一條,也可以使用{}包括的幾條語句構(gòu)成的復(fù)合語句。(3)else不是語句,不能單獨(dú)使用,與if配對使用;(5)if(x)if(x!=0)(6)if(!x)if(x==0)例考慮下面程序的輸出結(jié)果#include<stdio.h>main(){intx,y,t;scanf(“%d%d”,&x,&y);if(x>y)t=y;y=x;x=t;elsex++;y++;printf(“%d,%d\n”,x,y);}Compile
Error!if語句的嵌套在if語句中:
if(表達(dá)式)語句1else語句2語句1和語句2都可以是另外一條if語句if(表達(dá)式1)
if(表達(dá)式2)語句1
else語句2else
if(表達(dá)式3)語句3
else語句4if(表達(dá)式1)語句1else
if(表達(dá)式2)語句2
else語句3if(表達(dá)式1)
if(表達(dá)式2)語句1
else語句2else語句3說明:(1)else總是與最近的if匹配;(2)else不能單獨(dú)出現(xiàn),總是與if配對使用。例:main(){intx=2,y=-1,z=2;
if(x<y)if(y<0)z=0;elsez+=1;printf(“z=%d\n”,z);}
z=2編寫原則:1、順序執(zhí)行的語句對齊;2、選擇體向內(nèi)縮進(jìn)3~4字符;3、若選擇體內(nèi)嵌套if語句,則該
if語句的選擇體亦繼續(xù)向內(nèi)縮進(jìn);4、若選擇體內(nèi)的語句多于1條,則必須使用{}括起來;5、原則上,選擇體內(nèi)只有一條語句時,可以不使用{}括起來,但如果該語句分成多行編寫時,則使用{}具有更強(qiáng)的可讀性。main(){……;if(a<b){……;if(c<d){ ……;}}else{……;}}條件運(yùn)算符與條件表達(dá)式格式:表達(dá)式1?表達(dá)式2:表達(dá)式3意義:如果表達(dá)式1非0,此表達(dá)式取表達(dá)式2的值如果表達(dá)式1為0,此表達(dá)式取表達(dá)式3的值。例1:intm1=5,m2=3;m1>m2?(m1=1):(m2=-1)m1=?m2=?m1=1m2=3intx=1,y=2,z;z=x>y?++x:y++;x=?y=?z=?x=1y=3z=2例2:switch語句用來實現(xiàn)多路分支形式:switch(表達(dá)式){
case
常量1:語句序列1;
break;
case
常量2:語句序列2;
break;
┇
┇
case
常量n:語句序列n;
break;
default:
語句序列n+1;}執(zhí)行過程:首先計算表達(dá)式的值,若該值與某個case后面的常量相等,則執(zhí)行其后的語句序列,遇到break語句時,跳出switch語句;如果表達(dá)式的值與所有常量都不相等,若存在default則執(zhí)行其后的語句序列,否則什么也不做。說明:switch語句中的表達(dá)式可以為任何類型,一般為整型或字符型,相應(yīng)地常量的類型應(yīng)與其相同;2.同一switch語句的各case常量值,必須互不相同;3.case常量相當(dāng)于語句標(biāo)號;執(zhí)行switch語句時,找到與表達(dá)式值相等的某case常量,從此標(biāo)號開始執(zhí)行下去,對以后的標(biāo)號不再比較,直到“}”為止;一般應(yīng)該在每個case后的語句序列跟一個break語句以便跳出switch正確實現(xiàn)多分支,可認(rèn)為break語句是case中的一部分。4.各個case后面的default語句出現(xiàn)的次序不影響結(jié)果;5.多個case可以共用一組執(zhí)行語句.例main(){inti=10;switch(i){case9:i+=1;case10:i+=1;case11:i+=1;default:i+=1;}printf(“i=%d”,i);}i=13例main(){inta=1,b=0;switch(a){case1:switch(b){case0:printf(“**0**”);break;case1:printf(“**1**”);break;}case2:printf(“**2**”);break;}}**0****2**分析:求解此方程的解,應(yīng)該考慮到各種可能的情況:當(dāng)a=0時,不是二次方程。否則:1)當(dāng)b2-4ac=0時,方程有兩個相等的實根。2)當(dāng)b2-4ac>0時,方程有兩個不相等的實根。3)當(dāng)b2-4ac<0時,方程有兩個共軛的復(fù)根。選擇分支結(jié)構(gòu)程序舉例例.求ax2+bx+c=0方程的解。#include<stdio.h>#include<math.h>main(){
floata,b,c,disc,x1,x2,realpart,imagpart;
printf("\n請輸入方程的三個系數(shù):(a=,b=,c=)\n");
scanf("a=%f,b=%f,c=%f",&a,&b,&c);
if(fabs(a)<=1e-6)
printf("該方程沒有實根。\n");
elsedisc=b*b-4*a*c;
if(fabs(disc)<=1e-6)
printf("該方程有兩個相等的實根:x1=x2=%8.4f\n",-b/(2*a));
elseif(disc>1e-6)
{
x1=(-b+sqrt(disc))/(2*a);
x2=(-b-sqrt(disc))/(2*a);
printf("該方程有兩個不相等的實根:\nx1=%8.4f,x2=%8.4f\n",x1,x2);
}
else
{
realpart=-b/(2*a);
imagpart=sqrt(-disc)/(2*a);
printf("該方程有兩個復(fù)根:\n");
printf("x1=%8.4f+%8.4fi\n",realpart,imagpart);
printf("x2=%8.4f-%8.4fi\n",realpart,imagpart);
}}例.一個超市商品信息管理系統(tǒng),試編寫主程序部分實現(xiàn)簡單的菜單選擇功能。#include”stdio.h”main(){intchoice;printf("\n\n\n********超市管理系統(tǒng)********\n\n");printf("1.錄入商品信息\n\n");printf("2.打印商品信息\n\n");printf("3.更新商品信息\n\n");printf("4.商品信息查詢\n\n");printf("5.商品信息統(tǒng)計\n\n");printf("6.商品銷售排行\(zhòng)n\n");printf("0.退出系統(tǒng)\n\n");printf("請選擇(0-6):");scanf("%d",&choice);
switch(choice){case1:
input_message();break;
/*錄入模塊*/
case2:
output_message();break;
/*輸出模塊*/
case3:
renew_message();break;
/*更新模塊*/
case4:
inquire_message();break;
/*查詢模塊*/
case5:
count_message();break;
/*統(tǒng)計模塊*/
case6:
sort_message();break;
/*排序模塊*/
case0:break;
/*退出系統(tǒng)*/}}
例.請輸入星期幾的第一個字母來判斷是星期幾,如果第一
溫馨提示
- 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 大單元下的教學(xué)評一致性實施課堂-三國兩晉南北朝時期:政權(quán)分立與民族交融(教學(xué)設(shè)計)
- 2025至2031年中國碳鋼毛細(xì)管行業(yè)投資前景及策略咨詢研究報告
- 2025至2031年中國塑料冷卻管行業(yè)投資前景及策略咨詢研究報告
- 2025至2031年中國二線制超聲波液位變送器行業(yè)投資前景及策略咨詢研究報告
- 2025至2030年中國靚膚消斑潔面乳數(shù)據(jù)監(jiān)測研究報告
- 2025至2030年中國膨化食品專用變性淀粉數(shù)據(jù)監(jiān)測研究報告
- 萊蕪花崗巖石牌坊施工方案
- 2025至2030年中國燃油濾器數(shù)據(jù)監(jiān)測研究報告
- 2025至2030年中國燙金全封頂熱縮瓶套數(shù)據(jù)監(jiān)測研究報告
- 路塹邊坡噴漿施工方案
- 智慧農(nóng)業(yè)中的農(nóng)業(yè)機(jī)械與設(shè)備管理技術(shù)
- 公司SWOT分析表模板
- 縱隔腫物的護(hù)理查房
- 新能源汽車概論題庫
- 設(shè)備維保的維修成本和維護(hù)費(fèi)用
- 解決問題的工作方案
- 客運(yùn)站員工安全生產(chǎn)教育培訓(xùn)
- 口腔預(yù)防兒童宣教
- 綠城桃李春風(fēng)推廣方案
- 對使用林地的監(jiān)管事中事后監(jiān)督管理
- 體質(zhì)健康概論
評論
0/150
提交評論