版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
C語言程序設計
選擇結構
學習目標if語句switch語句關系運算與邏輯運算23.1選擇結構概述3【例3-1】輸入x的值,求分段函數y=f(x)的值,函數表示如下:
4#include<stdio.h>voidmain(void){
intx,y;
printf("請輸入x的值:");
scanf("%d",&x);
if(x>0) y=x*x;
else
y=0;
printf("y=%d\n",y); }請輸入x的值:0y=0Pressanykeytocontinue選擇結構3.2關系運算與邏輯運算學習運算符應注意的問題功能運算量要求運算量個數(單目運算符?雙目運算符?)要求運算量類型(整型?實型?其它類型?)優(yōu)先級別(優(yōu)先級高?優(yōu)先級低?)結合方向(從左向右?從右向左?)結果的類型53.2.1關系運算種類:<<===>=>!=結合方向——自左向右優(yōu)先級別關系表達式的值是邏輯值"真"或"假",用1和0表示6<<=>>===!=優(yōu)先級6(高)優(yōu)先級7(低)例
c>a+b a>b!=c a==b<c a=b>c例
inta=3,b=2,c=1,d,f; a>b (a>b)==c b+c<a d=a>b
f=a>b>c//3>2,結果為1//1==1,結果為1//b+c=3,a=3,結果為0//a>b結果為1;d=1//f=0
c>(a+b)
(a>b)!=c
a==(b<c)
a=(b>c)注意應避免對實數作相等或不等的判斷注意區(qū)分"="與"=="7inta=0,b=1;if(a=b) printf("aequaltob");elseprintf("anotequaltob");1.0/3.0*3.0==1.0結果為將x==a的判斷修改為:|x-a|≤可改寫為:fabs(1.0/3.0*3.0-1.0)<=1e-6//應該為a==b假3.2.3邏輯運算種類:!&&||邏輯運算真值表8C語言中,運算量:0
表示"假",非0
表示"真",
運算結果:0
表示"假",1
表示"真",aB!a!ba&&ba||b000非0非00非0非01100101010010011優(yōu)先級結合性9!(2)&&(11)||(12)高低!:從右向左&&:從左向右||:從左向右例
a<=x&&x<=ba>b&&x>ya==b||x==y!a||a>b(a<=x)&&(x<=b)(a>b)&&(x>y)(a==b)||(x==y)(!a)||(a>b)例
a=4;b=5;!aa&&ba||b!a||b4&&0||25>3&&2||8<4-!0'c'&&'d'//值為0//值為1//值為1//值為1//值為1//值為1//值為1短路特性邏輯表達式求解時,并非所有的邏輯運算符都被執(zhí)行,只是在必須執(zhí)行下一個邏輯運算符才能求出表達式的解時,才執(zhí)行該運算符10例
a&&b&&c//只在a為真時,才判別b的值;只在a、b都為真時,才判別c的值例
a||b||c//只在a為假時,才判別b的值;只在a、b都為假時,才判別c的值例
a=1;b=2;c=3;d=4;m=1;n=1;(m=a>b)&&(n=c>d)//結果m=0,n=1問題在C語言中,能正確地表示數學關系x≥y≥z的表達式是:(A)(x>=y)&&(y>=z)(B)(x>=y)AND(y>=z)(C)(x>=y>=z)(D)(x>=y)&(y>=z)11
【例3-2】邏輯運算舉例#include<stdio.h>voidmain(void){
intc,x=0,y=-5; printf("%d,%d\n",!x*y,x&&y); x=1; y=1; c=x++||y++; printf("%d,%d,%d\n",x,y,c); x=0; y=0; c=x++&&y++; printf("%d,%d,%d\n",x,y,c);}12-5,02,1,11,1,0c=x||yx=x+1++x:先執(zhí)行x=x+1,再將x的值作為表達式++x的值。x++:先將x的值作為表達式x++的值,再執(zhí)行x=x+1。c=x&&yx=x+1【例3-3】x是float型變量,判斷x是否等于
1/313#include<stdio.h>#include<math.h>voidmain(void){ floatx; x=1/3.0; if(x==1/3.0) printf("x等于1/3\n"); else printf("x不等于1/3\n");}x不等于1/3x等于1/3(fabs(x-1/3.0)<=1e-6)?應避免對實數作相等或不等的判斷3.3兩個分支的if語句if~else~語句的基本形式格式
if(表達式)語句1
else語句2執(zhí)行過程14表達式語句函數調用語句控制語句復合語句空語句表達式語句1語句2TF
說明:if后面的表達式類型任意語句可以是任意類型的語句,最好使用復合語句15考慮下面程序的輸出結果:#include<stdio.h>main(){intx,y;scanf("%d,%d",&x,&y);if(x>y)x=y;y=x;elsex=x+1;y=y+1;printf("%d,%d\n",x,y);}CompileError!if(a==b&&x==y)printf("a=b,x=y");if(3)printf("OK");if(a=2)printf("%d",'a');errorC2181:illegalelsewithoutmatchingif【例3-4】隨機的輸入兩個數,輸出其中的大數16#include<stdio.h>voidmain(void){inta,b;printf("inputtwonumbers:");scanf("%d%d",&a,&b);if(a>b)printf("%d
是最大數\n",a);elseprintf("%d
是最大數\n",b);}inputtwonumbers:033是最大數Pressanykeytocontinue【例3-5】輸入三角形的三邊的邊長,輸出三角形的面積17三角形面積公式18【例3-5】輸入三角形的三邊的邊長,輸出三角形的面積#include<stdio.h>#include<math.h>voidmain(void){
floata,b,c,p,s;printf("請輸入三角形的三邊:\n");scanf("%f%f%f",&a,&b,&c);if(a>0&&b>0&&c>0&&a+b>c&&a+c>b&&b+c>a){ p=(a+b+c)/2; s=sqrt(p*(p-a)*(p-b)*(p-c)); printf("area=%f\n",s);}else printf("輸入數據錯誤!\n");}請輸入三角形的三邊:345area=6.000000Pressanykeytocontinue請輸入三角形的三邊:123輸入數據錯誤!Pressanykeytocontinue3.4一個分支的語句if語句格式
if(表達式)
語句執(zhí)行過程19表達式語句TF【例3-6】從鍵盤上隨機的輸入三個數,輸出最大數2010,62,313456722,23445676,323238
maxabcmaxmax21【例3-6】從鍵盤上隨機的輸入三個數,輸出最大數#include<stdio.h>voidmain(void){inta,b,c,max;printf("輸入三個數:");
scanf("%d%d%d",&a,&b,&c);
max=a;if(b>max)max=b;if(c>max)max=c;printf("%d是最大數\n",max);}輸入三個數:3588是最大數Pressanykeytocontinue【例3-7】從鍵盤上隨機的輸入三個數,從大到小輸出三個數22abcifa<ba
bifa<ca
cifb<cb
cabt=a;a=b;b=t;ABT23【例3-7】從鍵盤上隨機的輸入三個數,從大到小輸出三個數#include<stdio.h>voidmain(void){inta,b,c,t;printf("輸入三個數:");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("%d,%d,%d\n",a,b,c);}輸入三個數:3577,5,3Pressanykeytocontinue3.5多個分支的if語句if~elseif語句的形式
if(表達式1) 語句1
else
if(表達式2)
語句2
else
if(表達式3)
語句3
……
else
語句n執(zhí)行過程24表達式1語句1TF表達式2表達式3語句2語句3語句n……TFTF【例3-8】從鍵盤上輸入一個字符,判斷該字符是數字、大寫字母、小寫字母或其它字符。25ASCII碼表
‘0’~‘9’為數字
‘A’~‘Z’為大寫字母
‘a’~‘z’為小寫字母‘0’≤c≤’9’48≤c≤57‘A’≤c≤’Z’65≤c≤90‘a’≤c≤’z’97≤c≤122c>='0'&&c<='9'c>='A'&&c<='Z'c>='a'&&c<='z'【例3-8】從鍵盤上輸入一個字符,判斷該字符是數字、大寫字母、小寫字母或其它字符。26#include<stdio.h>voidmain(void){charc;printf("請輸入一個字符:");c=getchar();if(c>='0'&&c<='9')printf("%c是數字\n",c);elseif(c>='A'&&c<='Z')printf("%c是大寫字母\n",c);elseif(c>='a'&&c<='z')printf("%c是小寫字母\n",c);elseprintf("%c是其他字符\n",c);}請輸入一個字符:bb是小寫字母Pressanykeytocontinuescanf(“%c”,&c);【例3-9】從鍵盤上輸入學生的成績,輸出學生成績的等級27#include"stdio.h"voidmain(void){intscore;printf("請輸入學生的成績:");scanf("%d",&score);if(score>=90)printf("優(yōu)秀\n");elseif(score>=80)printf("良好\n");elseif(score>=70)printf("中等\n");elseif(score>=60)printf("及格\n");
elseprintf("不及格\n");}請輸入學生的成績:88良好Pressanykeytocontinueelseif(score<90&&score>=80)思考對于score>100和score<0的情況,可以認為是輸入數據錯誤。那么程序將如何改寫?3.6if語句的嵌套在if語句中又包含一個或多個if語句,稱為if語句嵌套一般形式28if(表達式1)
if(表達式2)
語句1
else語句2else
if
(表達式3)語句3
else語句4if..else配對原則當缺省{}時,else總是與
前面的最近的未配對的
if配對29if(exp1)if(exp2)statement1elsestatement2if(exp1)if(exp2)statement1elsestatement2if(exp1){if(exp2)statement1}elsestatement2
書寫程序的縮進規(guī)則同一級別的語句要對齊else語句應與其配對的if語句垂直對齊。大括號放在單獨的一行中,以表明其包含的語句是一個語句塊。每行只放一條語句。30總結if語句的語法規(guī)則表達式必須用括號括起來通常是邏輯表達式或關系表達式,但也可以是其它任意表達式。非0即為真,0則為假else子句,必須與if配對使用語句可以為五種語句中的任何一種31if(表達式)語句1
else語句2If語句常見的編程錯誤在不該出現分號的地方加了分號復合語句的花括號后不應再加分號,否則將會畫蛇添足對于復合語句,忘記加花括號。32if(x>y);
printf(xislargerthany.\n);if(b>a){
t=a;a=b;b=t;};推薦都使用復合語句{}3.7switch語句格式執(zhí)行過程33switch(表達式){caseE1:
語句組1;[break;]
caseE2:
語句組2;[break;]…….
caseEn:
語句組n;[break;][default:
語句組n+1;[break;]]}
switch表達式語句組1語句組2語句組n語句組...E1E2Endefaultcase跳出switch語句,繼續(xù)執(zhí)行switch語句后面的語句default子句可以省略不用注意switch語句的使用規(guī)則E1,E2,…En是常量表達式,且值必須互不相同case語句起到標號的作用,必須用break跳出case后可包含多個可執(zhí)行語句,且不必加{}switch可嵌套多個case可共用一組執(zhí)行語句34switch(score){case5:printf("Verygood!");case4:printf("Good!");case3:printf("Pass!");case2:printf("Fail!");default:printf("dataerror!");}score為5時,輸出:Verygood!Good!Pass!Fail!dataerror!switch(score){case5:printf("Verygood!");break;case4:printf("Good!");break;case3:printf("Pass!");break;case2:printf("Fail!");break;default:printf("dataerror!");break;}score為5時,輸出:Verygood!……case'A':case'B':case'C':printf("score>=60\n");break;……..【例3-10】輸入數字(1-7),輸出對應的英文單詞Monday…Sunday35#include<stdio.h>voidmain(void){inta;printf("inputintegernumber(1-7):");scanf("%d",&a);
36
switch(a)
{
case
1:printf("Monday\n");
case
2:printf("Tuesday\n");
case
3:printf("Wednesday\n");
case
4:printf("Thursday\n");
case
5:printf("Friday\n");
case
6:printf("Saturday\n");
case
7:printf("Sunday\n"); default:printf("Error\n");}}inputintegernumber:5FridaySaturdaySundayErrorbreak;break;break;break;break;break;break;break;inputintegernumber:5Friday【例3-11】計算器程序。用戶輸入兩個運算數和一個四則運算符,輸出計算結果37#include<stdio.h>#include<math.h>voidmain(void){floata,b;charc;printf("輸入表達式:運算數<運算符>運算數\n");scanf("%f%c%f",&a,&c,&b);
38switch(c){case'+':printf("%f\n",a+b);break;case'-':printf("%f\n",a-b);break;case'*':printf("%f\n",a*b);break;case'/':if(fabs(b)<=1e-6) printf("數據錯誤,除數不能為0!\n");else printf("%f\n",a/b);break;default:printf("運算符只能是+,-,*,/!\n");}}輸入表達式:運算數<運算符>運算數3.5+5.69.100000輸入表達式:運算數<運算符>運算數10%3運算符只能是+,-,*,/!輸入表達式:運算數<運算符>運算數2.5/0數據錯誤,除數不能為0!輸入表達式:運算數<運算符>運算數5/2.52.000000【例3-12】從鍵盤上輸入百分制的學生成績,輸出學生成績的等級(優(yōu)秀、良好、中等、及格、不及格)39#include<stdio.h>voidmain(void){intscore;printf("請輸入學生的成績:");scanf("%d",&score);
方案一:40if(score>=0&&score<=100){switch(score){ casescore>=90:printf("優(yōu)秀\n");break;casescore>=80:printf("良好\n");break;casescore>=70:printf("中等\n");break;casescore>=60:printf("及格\n");break;default:printf("不及格\n");break;}}elseprintf("數據錯誤!\n");}
方案二:41switch(score){ case100:
case99: case98: case97: case96: case95: case94: case93: case92: case91: case90:printf("優(yōu)秀\n");break; case89:…………………… }
42if(score>=0&&score<=100){
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 《急性盆腔炎寧瑛》課件
- 《晏子使楚教學》課件
- 《癌癥的預防與治療》課件
- 《日本美食介紹課件》課件
- 2023年浙江省臺州市公開招聘警務輔助人員輔警筆試自考題2卷含答案
- 2021年河南省開封市公開招聘警務輔助人員輔警筆試自考題1卷含答案
- 2022年遼寧省錦州市公開招聘警務輔助人員輔警筆試自考題1卷含答案
- 2022年安徽省六安市公開招聘警務輔助人員輔警筆試自考題2卷含答案
- 最美教師主要事跡
- 《演講與表達》課件
- 春節(jié)家族祭祀活動策劃方案
- 美術概論-課件
- 保潔供方管控要點
- 空氣源熱泵冷暖空調、熱水項目施工方案
- 《行政組織學》期末復習指導
- 廣東省佛山市2022-2023學年高一上學期期末考試英語試題(含答案)
- 五年級上冊道德與法治全冊知識點匯總
- 小學英語“大單元教學”整體設計與案例分析講稿
- 雙引號專項練習歸納
- 海關HS編碼對照表
- 原木樁駁岸施工方案
評論
0/150
提交評論