版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
第3章選擇結(jié)構(gòu)程序設(shè)計3.1統(tǒng)計輸入的一行字符中各類字符的數(shù)量3.2簡單菜單選擇響應(yīng)3.3個人所得稅計算3.4綜合應(yīng)用——星期幾的判斷本章學(xué)習(xí)目標(biāo)字符型數(shù)據(jù)的輸入與輸出邏輯運(yùn)算符與邏輯表達(dá)式多路決策判斷技術(shù)else-if語句及if語句的嵌套簡單菜單選擇響應(yīng)即switch語句Break語句的作用3.1統(tǒng)計輸入的一行字符中各類字符的數(shù)量
3.1.1字符類型3.1.2字符型數(shù)據(jù)的輸入getchar()和輸出putchar()函數(shù)3.1.3邏輯運(yùn)算符和邏輯表達(dá)式3.1.4多路決策判斷else-if語句3.1.5程序解析3.1.1字符類型1.字符常量(1)可打印字符可直接從輸出設(shè)備中打印出來的字符,是用單引號括起來的一個字符。(2)不可打印字符不可打印字符指的是該字符不能直接從輸出設(shè)備輸出,是將反斜杠(\)后面的字符轉(zhuǎn)換成另外的意義。見表3-1表3-1轉(zhuǎn)義字符及其含義字符形式
含義\n換行,將當(dāng)前位置移到下一行開頭\t水平制表(跳到下一個tab位置)\b退格,將當(dāng)前位置移到前一列\(zhòng)r回車,將當(dāng)前位置移到本行開頭\f換頁,將當(dāng)前位置移到下頁開頭\\反斜杠字符“\”\'單引號字符\''雙引號字符\ddd
1到3位8進(jìn)制數(shù)所代表的字符\xhh
1到2位16進(jìn)制數(shù)所代表的字符字符變量用來存放字符常量,并且只能存放一個字符。字符變量的定義形式如下:
charcl,c2;2.字符變量將一個字符常量放到一個字符變量中,實際上并不是把該字符本身放到內(nèi)存單元中去,而是將該字符的相應(yīng)的ASCII碼放到存儲單元中。3.字符數(shù)據(jù)在內(nèi)存中的存儲形式及其使用方法【例3-1】向字符變量賦以整數(shù)。intmain(){charcl,c2;
cl=97;c2=98;printf("%c%c\n",cl,c2);printf("%d%d\n",cl,c2);return0;}運(yùn)行結(jié)果:
ab9798
3.1.2字符型數(shù)據(jù)的輸入getchar()和輸出putchar()函數(shù)1.單個字符輸入函數(shù)getchar()
該函數(shù)的功能是從標(biāo)準(zhǔn)輸入設(shè)備上讀入一個字符,函數(shù)的值就是從輸入設(shè)備上得到的字符。getchar()函數(shù)沒有參數(shù),一般調(diào)用形式為:
c=getchar();【例3-2】從輸入設(shè)備讀入字符后輸出該字符。源程序#include<stdio.h>intmain(){charc;c=getchar();printf("%c",c);return0;}運(yùn)行結(jié)果1如果輸入:a↙則輸出:a運(yùn)行結(jié)果2如果輸入:1↙則輸出:1運(yùn)行結(jié)果3如果輸入:welcometochina↙則輸出:w2.單個字符輸出函數(shù)putchar()該函數(shù)的功能從標(biāo)準(zhǔn)輸出設(shè)備上輸出一個字符。函數(shù)putchar()的一般調(diào)用格式為:
putchar(輸出參數(shù));【例3-3】用putchar()輸出字符變量和字符常量。#include<stdio.h>intmain(){charch;printf("Enteracharacter:");/*輸入提示*/ch=getchar();/*變量ch接收從鍵盤輸入的一個字符*/putchar(ch);/*輸出存放在變量ch中的字符*/putchar('?');/*輸出字符常量"?"*/}運(yùn)行結(jié)果Enteracharacter:a↙a?【例3-4】用putchar()輸出豎排字符OK!。程序分析:用putchar('\n')輸出一個換行符,使輸出的當(dāng)前位置移到下一行的開頭,實現(xiàn)輸出豎排字符。#include<stdio.h>main(){chara,b,c;a='O';b='K';c='!';putchar(a);putchar('\n');putchar(b);putchar('\n');putchar(c);putchar('\n');}運(yùn)行結(jié)果OK!3.1.3邏輯運(yùn)算符和邏輯表達(dá)式
邏輯表達(dá)式就是用邏輯運(yùn)算符將邏輯運(yùn)算對象連接起來的式子,它的值反映了邏輯運(yùn)算的結(jié)果。c語言提供了3種邏輯運(yùn)算符,見表3-2。表3-2邏輯運(yùn)算符目
數(shù)單
目雙
目運(yùn)算符!&&||名
稱邏輯非邏輯與邏輯或優(yōu)先級高
——〉
低3.1.3邏輯運(yùn)算符和邏輯表達(dá)式
邏輯運(yùn)算符的優(yōu)先級與其它種類的運(yùn)算符相比,其優(yōu)先關(guān)系從高到低如下所示:?。ㄟ壿嫹牵?gt;算數(shù)運(yùn)算—>關(guān)系運(yùn)算—>&&(邏輯與)—>||(邏輯或)—>賦值運(yùn)算邏輯運(yùn)算符的功能見表3-3表3-3邏輯運(yùn)算的真值表ab!aa&&ba||b假假真真假真假真真真假假假假假真假真真真【例3-5】寫出滿足下列條件的c語言表達(dá)式。ch是空格或者回車。number是奇數(shù)。year是閏年,即year能被4整除但不能被100整除,或year能被400整除。ch是英文字母解答:邏輯表達(dá)式(ch=='')||(ch=='\n')。關(guān)系表達(dá)式number%2!=0。邏輯表達(dá)式(year%4==0&&year%100?。?)||(year%400==0)。邏輯表達(dá)式(ch>='a'&&ch<='z')||(ch>='A'&&ch<='Z')3.1.4多路決策判斷else-if語句else-if語句是最常用的實現(xiàn)多路選擇的方法,其一般形式為:
if(表達(dá)式1)語句1elseif(表達(dá)式2)語句2……elseif(表達(dá)式n-1)語句n-1else語句nelse-if語句執(zhí)行過程
假表達(dá)式1表達(dá)式2語句1語句2語句n-1語句n真表達(dá)式n-1真假真假假……【例3-6】某百貨公司為了促銷,采用購物打折優(yōu)惠方法:每位顧客一次購物①在500元以上者,按九五折優(yōu)惠。②在1000元以上者,按九折優(yōu)惠。③在1500元以上者,按八五折優(yōu)惠。④在2000元以上者,按八折優(yōu)惠。編寫程序,計算優(yōu)惠后的價格。程序分析,見圖3-4,其中d用來表示折扣,m表示商品總金額。假m<500m<1000d=1真真假真假假m<1500d=0.95真d=0.90d=0.85d=0.80m<2000解題步聚:(1)定義浮點型變量:d表示折扣,m表示購物金額,amount表示優(yōu)惠后的價格。(2)輸入購物金額m。(3)根據(jù)流程圖3-4:計算折扣d。(4)計算amount=m*d。(5)輸出amount。#include<stdio.h>main(){floatm,d,amount;printf("請輸入所購商品總金額:");scanf("%f",&m);if(m<500)d=1;elseif(m<1000)d=0.95;elseif(m<1500)d=0.90;elseif(m<2000)d=0.85;elsed=0.80;amount=m*d;printf("優(yōu)惠價為:%6.2f\n",amount);}運(yùn)行結(jié)果請輸入所購商品總金額:1600↙優(yōu)惠價為:1360.00【例3-7】企業(yè)發(fā)放的獎金根據(jù)利潤提成。①利潤(I)低于或等于10萬元時,獎金可提10%;②利潤高于10萬元,低于20萬元時,低于10萬元的部分按10%提成,高于10萬元的部分,可提成7.5%;③20萬到40萬之間時,高于20萬元的部分,可提成5%;④40萬到60萬之間時高于40萬元的部分,可提成3%;⑤60萬到100萬之間時,高于60萬元的部分,可提成1.5%,高于100萬元時,超過100萬元的部分按1%提成;要求從鍵盤輸入當(dāng)月利潤I,求應(yīng)發(fā)放獎金總數(shù)?解題步聚:(1)定義變量:i表示當(dāng)月利潤,bonus1,bonus2,bonus4,bonus6,bonus10分別用來表示10萬元、20萬元、40萬元、60萬元、100萬元的獎金,bonus表示應(yīng)發(fā)放的獎金。(2)輸入一個變量的值i。(3)根據(jù)當(dāng)月利潤i分別落入不同的提成計算段(共6種),而計算bonus。(4)最后輸出bonus。#include<stdio.h>main(){longinti;intbonus1,bonus2,bonus4,bonus6,bonus10,bonus;printf("請輸入當(dāng)月利潤:");scanf("%ld",&i);bonus1=100000*0.1;bonus2=bonus1+100000*0.075;bonus4=bonus2+200000*0.05;bonus6=bonus4+200000*0.03;bonus10=bonus6+400000*0.015;if(i<=100000) bonus=i*0.1; elseif(i<=200000)bonus=bonus1+(i-100000)*0.075; elseif(i<=400000)bonus=bonus2+(i-200000)*0.05; elseif(i<=600000)bonus=bonus4+(i-400000)*0.03; elseif(i<=1000000)bonus=bonus6+(i-600000)*0.015; else bonus=bonus10+(i-1000000)*0.01;printf("應(yīng)發(fā)放獎金:%d",bonus);}運(yùn)行結(jié)果請輸入當(dāng)月利潤:300000↙應(yīng)發(fā)放獎金:225003.1.5程序解析【例3-8】輸入一行字符,統(tǒng)計其中英文字母、數(shù)字字符和其他字符的個數(shù)。程序分析(1)定義整型變量:digit、letter和other,其中,digit表示數(shù)字字符個數(shù),letter表示英文字符個數(shù),other表示其他字符的個數(shù);定義字符型變量ch。(2)然后把鍵盤輸入字符存儲到變量ch中。(3)判斷鍵盤輸入的字符ch是否是換行,如果是換行,則ch是'\n',輸出digit,letter,other的值。(4)否則根據(jù)ch的值,分別判斷(共3種,數(shù)字,字母,其他),進(jìn)行累加。(5)重復(fù)(2)、(3)、(4),直到鍵盤輸入換行符為止。#include<stdio.h>intmain(){
intdigit=0,letter=0,other=0; charch;
printf("請輸入一行字符:");
aa:ch=getchar(); if(ch=='\n') {printf("digit=%d,letter=%d,other=%d",digit,letter,other); return0; } elseif((ch>='a'&&ch<='z')||(ch>='A'&&ch<='Z'))letter++; elseif(ch>='0'&&ch<='9')digit++;elseother++;
goto
aa;}運(yùn)行結(jié)果請輸入一行字符:please1314!↙letter=6,digit=4,other=23.2簡單菜單選擇響應(yīng)3.2.1switch語句
switch語句處理多分支選擇問題,有3種情況
1.在switch語句的每個語句段中都使用break語句switch(表達(dá)式){case常量表達(dá)式1:語句段1;break;case常量表達(dá)式2:語句段2;break;....…case常量表達(dá)式n:語句段n;break;default:語句段n+1;break;}
例如:輸入:6.1-2.6輸出:3.5程序分析(1)定義字符變量operator:表示運(yùn)算符,雙精度變量value1,value2用來表示操作數(shù)。(2)輸入變量的值value1,operator,value2。(3)用switch()語句根據(jù)變量operator進(jìn)行五分支判斷(+、-、*、/和其他),并計算相應(yīng)的表達(dá)式,輸出結(jié)果。【例3-9】輸入一個形式如“操作數(shù)運(yùn)算符操作數(shù)”的四則運(yùn)算表達(dá)式,輸出運(yùn)算結(jié)果。#include<stdio.h>int
main(void){charoperator;doublevalue1,value2;
printf("請輸入一個表達(dá)式:");
scanf("%lf%c%lf",&value1,&operator,&value2);
switch(operator){case'+':
printf("=%.2f\n",value1+value2);break;case'-':
printf("=%.2f\n",value1-value2);break;case'*':
printf("=%.2f\n",value1*value2);break;case'/':
printf("=%.2f\n",value1/value2);break;default:
printf("Unknownoperator\n");break;}return0;}運(yùn)行結(jié)果1Typeinanexpression:6.1-2.6↙=3.5運(yùn)行結(jié)果2Typeinanexpression:6.1%2.6↙Unknownoperator2.在switch中不使用break語句break語句在switch語句中是可選的,不使用break的switch語句是:switch(表達(dá)式){case常量表達(dá)式1:語句段1;case常量表達(dá)式2:語句段2;……case常量表達(dá)式n:語句段n;default:語句段n+1;}【例3-10】分析執(zhí)行下面的程序,輸出結(jié)果是什么。#include<stdio.h>voidmain()
{
intm=20;
switch(m)
{
case19:m+=1;
case20:m+=1;
case21:m+=1;
case22:m+=1;
}
printf("%d\n",m);
}運(yùn)行結(jié)果233.在switch的某些語句段中使用break
【例3-11】輸入一行字符,統(tǒng)計其中空格、數(shù)字字符和其他字符的個數(shù)。解題步驟:(1)定義整型變量:space、digit和other,其中,space表示空格個數(shù),digit表示數(shù)字字符個數(shù),other表示其他字符的個數(shù);定義字符型變量ch。(2)然后把鍵盤輸入字符存儲到變量ch中。(3)判斷鍵盤輸入的字符ch是否是換行,如果是換行,則ch是'\n',輸出space,digit,other的值。(4)否則根據(jù)ch的值,分別判斷(共3種,數(shù)字,字母,其他),進(jìn)行累加。(5)重復(fù)(2)、(3)、(4),直到鍵盤輸入換行符為止。#include<stdio.h>intmain(){intblank=0,digit=0,other=0;charch;blank=0;printf("請輸入一行字符:");aa:ch=getchar();switch(ch){case'':{blank++;gotoaa;
}case'0':case'1':case'2':case'3':case'4':
case'5':case'6':case'7':case'8':case'9':{digit++;
goto
aa;}case'\n':break;default:{other++;
goto
aa;}}
printf("blank=%d,digit=%d,other=%d\n",blank,digit,other);return0;}【例3-12】簡單菜單選擇響應(yīng),根據(jù)菜單選擇要啟動的操作系統(tǒng),選擇1:啟動windows;選擇2:啟動linux;選擇3:啟動unix;選擇4:啟動solaris。程序分析(1)定義字符變量ch。(2)用printf()函數(shù)輸出菜單。(3)鍵盤輸入單個字符賦給變量ch。(4)用switch()語句根據(jù)用戶輸入編號ch進(jìn)行五分支操作,當(dāng)用戶輸入編號1~4,啟動相應(yīng)的操作系統(tǒng);輸入其他值,顯示警告信息。3.2.2程序解析#include<stdio.h>Intmain(){ charinputchar; inputchar='\0';
printf("\n");
printf("PLEASESELECTSTARTOS\n");
printf("1WINDOWSos\n");printf("2LINUXos\n"); printf("3UNIXos\n"); printf("4SOLARISos\n"); ch=getchar();
switch(ch) { case'1':
printf("WINDOWSstarting\n"); break; case'2':
printf("LINUXstarting\n"); break;
case'3':
printf("UNIXstarting\n"); break; case'4':
printf("SOLARISstarting\n"); break; default:
printf("WARNING........\n");
printf("SYSTEMERROR,POWEROFF.\n"); }}運(yùn)行結(jié)果1PLEASESELECTSTARTOS;1WINDOWSos2LINUXos3UNIXos4SOLARISos1↙WINDOWSstarting運(yùn)行結(jié)果2PLEASESELECTSTARTOS;1WINDOWSos2LINUXos3UNIXos4SOLARISos5↙WARNING........SYSTEMERROR,POWEROFF.3.3個人所得稅計算3.3.1多分支結(jié)構(gòu)與嵌套的if語句它的一般形式如下:if(表達(dá)式1)if(表達(dá)式2)語句1else語句2elseif(表達(dá)式3)語句3else語句4【例3-13】顯示學(xué)生成績與等級,要求如下:①90分以上者,等級為A;②80分以上者,等級為B;③60分以上者,等級為C;④其它等級為D;解題步驟:(1)定義int變量x:表示學(xué)生成績。(2)輸入變量x。(3)用嵌套的if語句進(jìn)行判斷,輸出學(xué)生成績等級。main(){intx;
printf("pleaseinputx(0<=x<=100):");
scanf("%d",&x);
if(x>100||x<0)
printf("x=%ddataerror!\n",x);else{if(x>=90)
printf("x=%disgradeA!\n",x);elseif(x>=80)printf("x=%disgradeB!\n",x);
elseif(x>=60)printf("x=%disgradeC!\n",x);elseprintf("x=%disgradeD!\n",x);}}運(yùn)行結(jié)果1pleaseinputx(0<=x<=100):86↙x=86isgradeB!運(yùn)行結(jié)果2pleaseinputx(0<=x<=100):110↙x=110isdataerror!【例3-14】一元二次方程求解程序分析(1)定義float變量:a,b,c:表示一元二次方程系數(shù),d表示判別式,a2=2*a,x1,x2表示根。(2)輸入變量a,b,c。(3)用嵌套的if語句進(jìn)行判斷:若a=0,解一元一次方程;否則,解一元二次方程;若d>0,輸出實根,否則輸出復(fù)根。
if(d>=0){x2=sqrt(d)/a2;
printf("realroot:\n");/*輸出實根*/printf("root1=%.2f,root2=%.2f\n",x1+x2,x1-x2);}else{x2=sqrt(-d)/a2;
printf("complexroot:\n");/*輸出復(fù)根*/printf("root1=%.2f+%.2fi\n",x1,x2);printf("root2=%.2f-%.2fi\n",x1,x2);}}}運(yùn)行結(jié)果1Inputa,b,c
0,2,4↙root=-2運(yùn)行結(jié)果2Inputa,b,c
2,3,4↙root=-2complexroot:root1=-0.75+1.20iroot2=-0.75+1.20i3.3.2程序解析【例3-15】設(shè)計個人所得稅計算程序?!岸惙ā币?guī)定,工資、薪金所得,使用超額累進(jìn)稅率,以每月收入額減去2000元后的余額,為應(yīng)納稅所得額。其稅率見表3.4。(程序見書上)表3.4稅率表級數(shù)全月應(yīng)納稅所得額稅率(%)級數(shù)全月應(yīng)納稅所得額稅率(5%)1不超過500元5640000
溫馨提示
- 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024-2025學(xué)年廣西百色市德??h數(shù)學(xué)三年級第一學(xué)期期末統(tǒng)考試題含解析
- 信息技術(shù)在小學(xué)教育中的應(yīng)用與挑戰(zhàn)
- 2025中國郵政集團(tuán)云南省分公司第一期招考見習(xí)人員79人高頻重點提升(共500題)附帶答案詳解
- 2025中國聯(lián)通河南省分公司春季校園招聘68人高頻重點提升(共500題)附帶答案詳解
- 2025中國移動總部春季校園招聘高頻重點提升(共500題)附帶答案詳解
- 2025中國電信??诜止菊衅父哳l重點提升(共500題)附帶答案詳解
- 2025中國煙草總公司鄭州煙草研究院招聘6人(第二批)高頻重點提升(共500題)附帶答案詳解
- 2025中國建筑第七工程局限公司南方公司校園招聘高頻重點提升(共500題)附帶答案詳解
- 2025中國華電集團(tuán)天順礦業(yè)限責(zé)任公司招聘20人高頻重點提升(共500題)附帶答案詳解
- 2025中國人壽保險股份限公司銅仁分公司招聘79人高頻重點提升(共500題)附帶答案詳解
- 《特種設(shè)備重大事故隱患判定準(zhǔn)則》知識培訓(xùn)
- 山東省棗莊市滕州市2023-2024學(xué)年高二上學(xué)期期末考試政治試題 含答案
- 四川省簡陽市禾豐鎮(zhèn)初級中學(xué)-2025年蛇年寒假特色作業(yè)【課件】
- 《外盤期貨介紹》課件
- 滬教版(上海)七年級上學(xué)期全部章節(jié)知識點總結(jié)
- GB/T 45004-2024鋼鐵行業(yè)低碳企業(yè)評價指南
- 2024年全國統(tǒng)一電力市場建設(shè)情況及展望報告-中國電力企業(yè)聯(lián)合會(潘躍龍)
- 2024年07月11396藥事管理與法規(guī)(本)期末試題答案
- 《PMC培訓(xùn)資料》課件
- 2024年招商部門工作計劃(3篇)
- DB21T 2748-2017 拉氏鱥池塘養(yǎng)殖技術(shù)規(guī)范
評論
0/150
提交評論