章程序控制結(jié)構(gòu)選擇結(jié)構(gòu)_第1頁(yè)
章程序控制結(jié)構(gòu)選擇結(jié)構(gòu)_第2頁(yè)
章程序控制結(jié)構(gòu)選擇結(jié)構(gòu)_第3頁(yè)
章程序控制結(jié)構(gòu)選擇結(jié)構(gòu)_第4頁(yè)
章程序控制結(jié)構(gòu)選擇結(jié)構(gòu)_第5頁(yè)
已閱讀5頁(yè),還剩77頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1要求:深刻理解在計(jì)算機(jī)中各類(lèi)型數(shù)據(jù)在內(nèi)存中的存儲(chǔ)形式、取值范圍和能夠?qū)λM(jìn)行的操作;深刻理解各基本類(lèi)型作了short、long、unsigned擴(kuò)展之后與原類(lèi)型之間的區(qū)別;深刻理解各種整型常量的形式,字符常量、轉(zhuǎn)義字符和符號(hào)常量的意義和作用。熟練掌握每一種變量的定義格式;深刻理解每一個(gè)算術(shù)運(yùn)算符的功能、使用格式、計(jì)算結(jié)果,尤其是/、%、++、--;深刻理解賦值運(yùn)算符(=)的意義、注意與數(shù)學(xué)中的等號(hào)相區(qū)別;復(fù)合賦值運(yùn)算符的執(zhí)行過(guò)程和執(zhí)行結(jié)果。練習(xí)23一、選擇題:以下敘述中正確的是:

(a)C程序由主函數(shù)組成

(b)C程序由函數(shù)組成

(c)C程序由函數(shù)和過(guò)程組成

(d)C程序由子函數(shù)組成√42.以下不能正確表示算式——

的是:

(a)(a*b)/c*d(b)a*b/(c*d)(c)a/c*b/d(d)a*b/c/d√解答:c語(yǔ)言中表達(dá)式的計(jì)算是按算符的優(yōu)先級(jí)來(lái)進(jìn)行的。abcd53.以下的變量定義中合法的是:

(a)float3_four=3.4;(b)int_abc_=22;(c)doublea=1+4e2.0;(d)shortdo=15;√64.C語(yǔ)言中運(yùn)算對(duì)象必須是整型的運(yùn)算符是:

(a)%=(b)/(c)=(d)**√“必須是整型”:確切地說(shuō)應(yīng)該是不能是float型75.若有intk=11;則表達(dá)式

(k++*1/3)的值是:

(a)0(b)3(c)11(d)12√執(zhí)行過(guò)表達(dá)式后k的值是:12二、填空:891.一個(gè)C程序必須有一個(gè)_____函數(shù)一個(gè)C程序必定從______函數(shù)開(kāi)始執(zhí)行。主主102.C語(yǔ)言中的標(biāo)識(shí)符可分為_(kāi)______、______________和預(yù)定義標(biāo)識(shí)符三類(lèi)。關(guān)鍵字用戶(hù)標(biāo)識(shí)符預(yù)定義標(biāo)識(shí)符:系統(tǒng)定義的、用于貶義預(yù)處理命令中的標(biāo)識(shí)符。如:include、define等113.C語(yǔ)言程序中的數(shù)據(jù),在計(jì)算機(jī)內(nèi)存儲(chǔ)器中最小的存儲(chǔ)單位稱(chēng)為_(kāi)_____,其中只能存放_(tái)______進(jìn)制數(shù)。位二122.5數(shù)據(jù)的輸出和輸入13輸出和輸入輸出—計(jì)算機(jī)向外部輸出設(shè)備(顯示器,打印機(jī)等)輸出數(shù)據(jù)輸入—從輸入設(shè)備(鍵盤(pán),鼠標(biāo),掃描儀等)向計(jì)算機(jī)輸入數(shù)據(jù)C語(yǔ)言本身不提供輸入輸出語(yǔ)句,輸入和輸出操作是由C函數(shù)庫(kù)中的函數(shù)來(lái)實(shí)現(xiàn)的在使用系統(tǒng)庫(kù)函數(shù)時(shí),要用預(yù)編譯命令“#include”包含有關(guān)的頭文件

–#include<stdio.h>//標(biāo)準(zhǔn)輸入輸出庫(kù)函數(shù)14

格式輸出函數(shù)printf

printf函數(shù)一般格式:

printf(格式控制,輸出表列)格式控制是由雙引號(hào)括起來(lái)的字符串,它包含三種信息:·格式說(shuō)明:由“%”和格式字符組成,如%d,%f等。它的作用是將輸出的數(shù)據(jù)按照指定的格式輸出?!て胀ㄗ址盒枰瓨虞敵龅淖址??!まD(zhuǎn)義字符:用于控制輸出。輸出表列是一些要輸出的數(shù)據(jù)。

普通字符輸出表列

printf(“sum=%d\n”,

sum);

格式說(shuō)明

轉(zhuǎn)義字符

printf("%d,%d\n",a,b);15格式說(shuō)明項(xiàng):由“%”與格式字符組成,其作用是將數(shù)據(jù)轉(zhuǎn)換為指定的格式輸出,按不同類(lèi)型的數(shù)據(jù)有以下不同的格式字符:

%d、%ld,按整型數(shù)據(jù)的實(shí)際長(zhǎng)度輸出。

%md、%mld,m為指定的輸出字段的寬度,如數(shù)據(jù)的位數(shù)小于m,則左端補(bǔ)空;若數(shù)據(jù)位數(shù)大于m,則按實(shí)際長(zhǎng)度輸出。

%c:用于輸出一個(gè)字符。

%f:用于以小數(shù)形式輸出實(shí)數(shù)(包括單、雙精度);

%m.nf、%m.nlf,指定輸出的數(shù)據(jù)共占m位,其中包括n位小數(shù),如數(shù)據(jù)的位數(shù)小于m,則左端補(bǔ)空;若數(shù)據(jù)位數(shù)大于m,按實(shí)際長(zhǎng)度輸出。小數(shù)位數(shù)被截?cái)鄷r(shí)按四舍五入輸出。

格式輸出函數(shù)printf

16inta=-1,b=25,c=125;longx=356142;printf("%d,%5d\n",a,b);printf("%5d,%2d\n",c,c);printf("%ld,%d\n",x,x);輸出結(jié)果為:例2.5.1:17格式輸入函數(shù)scanf

scanf函數(shù)一般格式:

scanf(格式控制,地址表列)scanf函數(shù)的功能是按照指定的格式輸入數(shù)據(jù),可以輸入任意類(lèi)型的多個(gè)數(shù)據(jù)。格式控制與printf函數(shù)含義相同,它由若干個(gè)格式說(shuō)明構(gòu)成,其作用是控制轉(zhuǎn)換輸入數(shù)據(jù)的類(lèi)型。地址表列由若干個(gè)地址構(gòu)成,它們可以是變量的地址,也可以是字符串的首地址。18標(biāo)準(zhǔn)格式輸入函數(shù)的功能:scanf函數(shù)可以從標(biāo)準(zhǔn)輸入設(shè)備輸入任意類(lèi)型的多個(gè)數(shù)據(jù)(一般為鍵盤(pán)),存入指定的變量單元中。例:scanf(“%d,%f”,&a,&b);意味著從鍵盤(pán)讀入兩個(gè)數(shù)據(jù),分別存入變量a和b中。%d:按十進(jìn)制整數(shù)格式讀入;%f:按十進(jìn)制整數(shù)格式讀入;19格式輸入函數(shù)scanf中格式控制串的格式應(yīng)與地址表列中變量的順序相一致;scanf中格式控制串的格式應(yīng)與輸入數(shù)據(jù)的格式相一致;當(dāng)語(yǔ)句格式如下時(shí):scanf(“%d,%f”,&a,&b);輸入數(shù)據(jù)的格式應(yīng)為:12,3.14如果語(yǔ)句寫(xiě)成:scanf(“%d%f”,&a,&b);輸入數(shù)據(jù)的格式應(yīng)為:123.14思考:如何分隔數(shù)據(jù)?用隱含的分隔符:在輸入數(shù)據(jù)中用空格或換行符分隔數(shù)據(jù)。

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

輸入數(shù)據(jù)345

或輸入345

則a=3,b=4,c=5使用顯示分隔符:在格式說(shuō)明符中還可以有其它字符,在輸入字符時(shí)應(yīng)輸入與這些字符相同的字符。

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

輸入數(shù)據(jù)3,4,5

則a=3,b=4,c=5

20212.6數(shù)學(xué)函數(shù)22數(shù)學(xué)函數(shù)使用數(shù)學(xué)庫(kù)中的函數(shù)時(shí),應(yīng)該首先用預(yù)處理命令#include<math.h>

指明要用到的數(shù)學(xué)函數(shù)的描述所在的頭文件。調(diào)用數(shù)學(xué)函數(shù)時(shí),要給出函數(shù)名,后面是一對(duì)圓括號(hào),括號(hào)內(nèi)是使用函數(shù)所需的參數(shù),參數(shù)可以是常量、變量或表達(dá)式。例2.6.1:計(jì)算并打印2的3次方的語(yǔ)句可以寫(xiě)成::

printf(“%7.2f”,pow(2.0,3.0));調(diào)用的數(shù)學(xué)函數(shù)pow需要兩個(gè)參數(shù),這兩個(gè)參數(shù)都是double型的,返回值也是double型的語(yǔ)句執(zhí)行結(jié)果為:打印8.00。23常用數(shù)學(xué)函數(shù)函數(shù)名功能舉例fabs(x)計(jì)算x的絕對(duì)值fabs(-3.5)等于3.5sqrt(x)計(jì)算x的非負(fù)平方根sqrt(16.0)等于4.0exp(x)計(jì)算指數(shù)函數(shù)exexp(1.0)等于2.71828log(x)計(jì)算x的自然對(duì)數(shù)lnxlog(2.718282)等于1.0log10(x)計(jì)算以10為底的對(duì)數(shù)函數(shù)log10xLog10(10.0)等于1.0pow(x,y)計(jì)算xypow(2.0,3.0)等于8.0sin(x)正弦函數(shù)sin(0.0)等于0.0cos(x)余弦函數(shù)cos(0.0)等于1.024第3章程序控制結(jié)構(gòu)25教學(xué)目標(biāo)學(xué)習(xí)三種結(jié)構(gòu)的程序設(shè)計(jì)方法順序結(jié)構(gòu)程序設(shè)計(jì)選擇結(jié)構(gòu)程序設(shè)計(jì)循環(huán)結(jié)構(gòu)程序設(shè)計(jì)掌握每一種語(yǔ)句的格式、功能、執(zhí)行過(guò)程和執(zhí)行結(jié)果,并學(xué)習(xí)如何將這些語(yǔ)句組織成程序?qū)W習(xí)邏輯問(wèn)題的解題思路,及遞推、迭代的方法26三種控制結(jié)構(gòu)順序結(jié)構(gòu)選擇結(jié)構(gòu)循環(huán)結(jié)構(gòu)AB⑴BAPyesno⑵noPAyes⑶27

順序結(jié)構(gòu)程序設(shè)計(jì)實(shí)現(xiàn)順序結(jié)構(gòu)的語(yǔ)句順序結(jié)構(gòu)的程序中的語(yǔ)句是按照從上到下的順序逐行排列的;程序的執(zhí)行順序是按語(yǔ)句的排列順序進(jìn)行的。完成順序程序設(shè)計(jì)的語(yǔ)句包括:賦值語(yǔ)句復(fù)合語(yǔ)句函數(shù)調(diào)用語(yǔ)句2829由一組語(yǔ)句組成,并放在一對(duì)花括號(hào)“{}”中間語(yǔ)句格式:

{第1條語(yǔ)句;

… 第n條語(yǔ)句;}復(fù)合語(yǔ)句

整個(gè)main程序就是一個(gè)大的復(fù)合語(yǔ)句。復(fù)合語(yǔ)句是一個(gè)整體,在語(yǔ)法結(jié)構(gòu)上與一個(gè)單一語(yǔ)句相同。函數(shù)調(diào)用語(yǔ)句C程序中,需要使用很多復(fù)雜的功能,例如:輸入數(shù)據(jù)、輸出數(shù)據(jù)、數(shù)學(xué)公式的使用(sin(x)、cos(x)、ex等)。這些功能的使用是通過(guò)函數(shù)調(diào)用來(lái)實(shí)現(xiàn)的。系統(tǒng)把一些獨(dú)立的功能編制成標(biāo)準(zhǔn)函數(shù),提供給使用者調(diào)用的格式。兩個(gè)最常用的標(biāo)準(zhǔn)函數(shù):格式輸出函數(shù)格式輸入函數(shù)3031例:設(shè)1990年我國(guó)工業(yè)產(chǎn)值是100,如果每年以7.4%的速度增長(zhǎng),求20年后我國(guó)的工業(yè)產(chǎn)值是多少?分析:計(jì)算產(chǎn)值的公式是:安排計(jì)算步驟寫(xiě)出完整的程序 p1=p0(1+r)n

其中:p1為n年后的產(chǎn)值,p0為初始值,r為增長(zhǎng)率,n為年數(shù)。

32解決問(wèn)題的步驟:定義變量:輸入:p0,n,r;計(jì)算p1;輸出p1;floatp1,p0,r;p1=p0(1+r)n其中:p1為n年后的產(chǎn)值,p0為初始值,r為增長(zhǎng)率,n為年數(shù)。

intn;33寫(xiě)出完整程序:/*功能:計(jì)算工業(yè)產(chǎn)值*/#include<stdio.h>#include<math.h>voidmain(){intn;floatp0,p1,r;scanf("%d,%f,%f",&n,&p0,&r);p1=p0*pow(1+r,n);printf("p1=%10.4f\n",p1);} p1=p0(1+r)n34

選擇結(jié)構(gòu)程序設(shè)計(jì)35如果小明一分鐘跳繩多于60,那么他的體育成績(jī)?yōu)锳,否則為B引例:聲明變量:floattotal;

charscore;total>60score=‘A’;

score=‘B’;結(jié)束YN步驟圖解:需要選擇結(jié)構(gòu)描述36選擇結(jié)構(gòu)需要解決的兩個(gè)問(wèn)題2.控制結(jié)構(gòu)的結(jié)構(gòu)描述條件表示描述方法邏輯表達(dá)式關(guān)系表達(dá)式1.控制選擇結(jié)構(gòu)執(zhí)行方向的條件表示

if語(yǔ)句switch語(yǔ)句實(shí)現(xiàn)選擇結(jié)構(gòu)的語(yǔ)句37關(guān)系表達(dá)式概念:

用關(guān)系運(yùn)算符將兩個(gè)表達(dá)式(可以是算術(shù)表達(dá)式、關(guān)系表達(dá)式、賦值表達(dá)式或邏輯表達(dá)式)連接起來(lái)的式子,稱(chēng)為關(guān)系表達(dá)式。關(guān)系運(yùn)算符:一、關(guān)系運(yùn)算符和關(guān)系表達(dá)式<<=>>===!=高低優(yōu)先級(jí)關(guān)系運(yùn)算符的優(yōu)先級(jí)低于算數(shù)運(yùn)算符!38關(guān)系表達(dá)式的值為邏輯值“真”或“假”,以1代表“真”,以0代表“假”。例:關(guān)系表達(dá)式“8==4”的值為“假”,表達(dá)式的

值為0。關(guān)系表達(dá)式“5>0”的值為“真”,表達(dá)式的

值為1。關(guān)系表達(dá)式39例3.1:a>b!=c等價(jià)于(a>b)!=cc>a-b等價(jià)于c>(a-b)a=b>c等價(jià)于a=(b>c)例3.2:inta=0,b=1,c=2;a<=c值為?

a<=c<=b值為?

結(jié)合性:從左向右1140注意:1.編程過(guò)程中要區(qū)分單個(gè)等號(hào)(=)與雙等號(hào)(==)進(jìn)行比較時(shí)一定要用關(guān)系運(yùn)算符(==)(=)是賦值運(yùn)算符2.避免將浮點(diǎn)變量用==或者!=與任何數(shù)字比較例3.3:floatx=3.26;If(x==0.0)#defineEPSINON0.00001floatx=3.26;If(x>=EPSINON)設(shè)法轉(zhuǎn)換成“>=”或“<=”不要混淆!41邏輯表達(dá)式概念:由邏輯運(yùn)算符和運(yùn)算量所構(gòu)成的式子,其中運(yùn)算量主要有關(guān)系表達(dá)式和邏輯量?jī)煞N,也可以是C中任意合法表達(dá)式。邏輯運(yùn)算符二、邏輯運(yùn)算符和邏輯表達(dá)式||(邏輯或)&&(邏輯與)!(邏輯非)高低優(yōu)先級(jí)結(jié)合性從左向右42真 真 假 假真 真 真 假 假 真假 真 假 真 真 假假 真 假 假 真 真假 假a b !a !b a&&b a||b邏輯運(yùn)算的真值表43注:1、C語(yǔ)言編譯系統(tǒng)以數(shù)值1代表“真”,以0

代表“假”;

2、若邏輯運(yùn)算符左右連接的不是邏輯量或關(guān)系表達(dá)式時(shí),C語(yǔ)言編譯系統(tǒng)以其值非 0代表“真”,以0代表“假”。

例3.4:

若x=-10,則!x的值為0。

若a=3,b=2,則a&&b的值為1。

5&&0||8的值為1。44

邏輯運(yùn)算符的特點(diǎn)特點(diǎn):在邏輯表達(dá)式的求解中并不是所有的運(yùn)算符都被執(zhí)行,只是在必須執(zhí)行下一個(gè)邏輯運(yùn)算符才能求出表達(dá)式的解時(shí),才執(zhí)行下一個(gè)運(yùn)算符。例3.5:a&&b&&c只有a的值為邏輯真時(shí),才計(jì)算b的值;

也只有a與b的值都為邏輯真時(shí),才計(jì)算c的值;例3.6:a||b||c

只有a的值為邏輯假時(shí),才計(jì)算b的值;

也只有a與b的值都為邏輯假時(shí),才計(jì)算c的值;45例3.7:#include<stdio.h>voidmain(){ intx,a=0,b=1,c=2; x=a&&b&&c; printf(“x=%d,a=%d,b=%d,c=%d\n”,x,a,b,c);}二、邏輯運(yùn)算符和邏輯表達(dá)式x=0,a=0,b=1,c=2等效于(a++)&&(b++)&&(c++)思考:x=a++&&b++&&c++;x=0,a=1,b=1,c=246?。ǚ牵┧阈g(shù)運(yùn)算符關(guān)系運(yùn)算符&&||賦值運(yùn)算符各種運(yùn)算符優(yōu)先級(jí):高低例3.8:1.x<y&&m<n

等效于(x<y)&&(m<n)2.A==b||c==d

等效于(a==b)||(c==d)3.!a&&b>c

等效于(!a)&&(b>c)4.5>3&&4||8<4等效于((5>3)&&4)||(8<4)47分析:a>b的值為0→(m=a>b)值為0→表達(dá)式(m=a>b)&&(n=c>d)的值為0運(yùn)算就此結(jié)束,不再進(jìn)行(n=c>d)的運(yùn)算結(jié)果:m為0,n為1例3.10:假設(shè)a=5、b=10、c=15、d=20,求邏輯表達(dá)式的結(jié)果

!a||(a>b)+1&&c<d由原式→!5||(a>b)+1&&c<d→0||(a>b)+1&&c<d→0||(5>10)+1&&c<d→0||0+1&&c<d→0||1&&c<d→0||1&&15<20→0||1&&1→0||1→1例3.9:假設(shè)a=1,b=2,c=3,d=4,m=1,n=1,執(zhí)行表達(dá)式(m=a>b)&&(n=c>d)后m和n的值各為多少??。ǚ牵┧阈g(shù)運(yùn)算符關(guān)系運(yùn)算符&&||賦值運(yùn)算符48選擇結(jié)構(gòu)if語(yǔ)句

if語(yǔ)句、if-else語(yǔ)句、else–if語(yǔ)句

switch語(yǔ)句(多分支語(yǔ)句)

選擇結(jié)構(gòu)通過(guò)條件控制語(yǔ)句來(lái)實(shí)現(xiàn),選擇結(jié)構(gòu)包括:

if-else結(jié)構(gòu)和switch-case結(jié)構(gòu)49if–elseif(表達(dá)式1)語(yǔ)句1;elseif(表達(dá)式2)語(yǔ)句2;…elseif(表達(dá)式m)語(yǔ)句m;else語(yǔ)句n;if(表達(dá)式)語(yǔ)句1;else語(yǔ)句2;else–ififif(表達(dá)式)語(yǔ)句;if語(yǔ)句

50if語(yǔ)句:if(表達(dá)式)語(yǔ)句;根據(jù)給定的條件進(jìn)行判斷,以決定執(zhí)行某個(gè)分支程序段。

表達(dá)式一般為邏輯表達(dá)式或關(guān)系表達(dá)式;也可以為其它表達(dá)式或變量,這時(shí)表達(dá)式值為非0值時(shí)表示“真”。

語(yǔ)句可以是單條語(yǔ)句,也可以是復(fù)合語(yǔ)句(語(yǔ)句塊)組成;還可以是if語(yǔ)句,稱(chēng)if語(yǔ)句嵌套復(fù)合語(yǔ)句51if形式:if(表達(dá)式)語(yǔ)句;計(jì)算表達(dá)式的值;如果表達(dá)式的值非零,則執(zhí)行語(yǔ)句;如果表達(dá)式的值為零,則執(zhí)行if語(yǔ)句后的一條語(yǔ)句。執(zhí)行流程:52例3.11:

輸出成績(jī)高于90分的學(xué)生成績(jī)和學(xué)號(hào)格式:

if(score>90)

printf(“%s%d\n”,No,score);執(zhí)行過(guò)程:計(jì)算表達(dá)式score>90的值;如果表達(dá)式的值非零,即:score>90成立;則輸出該學(xué)生的學(xué)號(hào)和成績(jī);如果表達(dá)式score>90的值為零,即:score>90不成立;則什么也不做。53#include<stdio.h>voidmain(){intn,rem;printf("enteranumber:");scanf("%d",&n);rem=n%2;if(rem==0)printf("thenumber%disanevennumber\n",n);if(rem!=0)printf("thenumber%disanoddnumber!\n",n);}例3.12:判斷一個(gè)數(shù)是偶數(shù)還是奇數(shù)。54例3.13:

輸入兩個(gè)數(shù),按從大到小的順序?qū)⑺鼈冚敵觥?include<stdio.h>voidmain(){

floata,b,t;//定義三個(gè)變量a、b、t

scanf(“%f,%f”,&a,&b);//輸入兩個(gè)數(shù)到a、b中

if(a<b)//如果a小于b,則將a的值與b的值交換

{t=a;a=b;b=t;}printf(“a=%5.2f,b=%5.2\n”,a,b);}復(fù)合語(yǔ)句55if–else形式:if(表達(dá)式)語(yǔ)句1;else語(yǔ)句2;執(zhí)行流程:計(jì)算表達(dá)式的值;如果表達(dá)式的值非零,則執(zhí)行語(yǔ)句1;如果表達(dá)式的值為零,則執(zhí)行語(yǔ)句2。56例3.14:如果成績(jī)高于90分則輸出“A”;否則輸出“B”格式:if(score>90)printf(“A”);elseprintf(“B”);

執(zhí)行過(guò)程:計(jì)算表達(dá)式score>90的值;如果表達(dá)式的值非零,即:score>90成立;則輸出“A”;如果表達(dá)式score>90的值為零,即:score>90不成立;則輸出“B”。57#include<stdio.h>voidmain(){intn,rem;printf("enteranumber:");scanf("%d",&n);rem=n%2;if(rem==0)printf("thenumber%disanevennumber\n",n);if(rem!=0)printf("thenumber%disanoddnumber!\n",n);}例3.12可以改寫(xiě)成:else58例3.15:求兩個(gè)數(shù)中較大的數(shù)#include<stdio.h>

voidmain(){inta,b,max;

printf

(“inputtwonumbers:”);

scanf

(“%d%d”,&a,&b);

if

(a>b)

max=a;

else

max=b;

printf

(“max=%d\n”,max);

}條件表達(dá)式可完成同樣的功能59條件運(yùn)算符和條件表達(dá)式條件運(yùn)算符:

?:條件表達(dá)式的形式為:

表達(dá)式1?表達(dá)式2:表達(dá)式3條件表達(dá)式的執(zhí)行過(guò)程:先計(jì)算表達(dá)式1,若其值為非零(為真),則結(jié)果為表達(dá)式2的值,否則就是表達(dá)式3的值。條件表達(dá)式可以看作一個(gè)簡(jiǎn)寫(xiě)的if-else語(yǔ)句。60例3.15可以改寫(xiě)成:#include<stdio.h>

voidmain(){inta,b,max;

printf

(“inputtwonumbers:”);

scanf

(“%d%d”,&a,&b);

if

(a>b)

max=a;

else

max=b;

printf

(“max=%d\n”,max);

}max=a>b?a:b;61else–if形式格式:if(表達(dá)式1)語(yǔ)句1;elseif(表達(dá)式2)語(yǔ)句2;…elseif(表達(dá)式m)語(yǔ)句m;else語(yǔ)句n;62else–if執(zhí)行流程計(jì)算“表達(dá)式1”的值如果“表達(dá)式1”的值非零,則執(zhí)行語(yǔ)句1;該if語(yǔ)句執(zhí)行完畢。如果“表達(dá)式1”的值為零則計(jì)算“表達(dá)式2”的值;如果“表達(dá)式2”的值非零,則執(zhí)行語(yǔ)句2;該if語(yǔ)句執(zhí)行完畢。以此類(lèi)推,……直到最后一個(gè)else語(yǔ)句63例3.16:已知函數(shù)程序段:

if(x<10)y=-1;

elseif(x==10)y=0;

elsey=1;編寫(xiě)程序,輸入一個(gè)x值,輸出對(duì)應(yīng)的y值。

-1(x<10);0(x=10);1(x>10);y=64if語(yǔ)句的嵌套if語(yǔ)句的嵌套:在一個(gè)if語(yǔ)句中又包含了另一個(gè)if語(yǔ)句一般形式:

if(表達(dá)式1)

if(表達(dá)式1-1)語(yǔ)句1-1;

else語(yǔ)句1-2;

else

if(表達(dá)式2)語(yǔ)句2;

else語(yǔ)句3;C語(yǔ)言規(guī)定,else總是和它上面離它最近的未曾匹配的if匹配。65例3.17:1.在if子句中嵌套2.在else子句中嵌套if

(x<=0)

if(x<0)y=-1;

elsey=0;else

y=1;if

(x<0)y=-1;else

if(x==0)y=0;

elsey=1;66if語(yǔ)句只能處理從兩者間選擇之一,當(dāng)要實(shí)現(xiàn)從多種可能中選擇之一時(shí),就要用到if…elseif甚至多重嵌套的if語(yǔ)句。當(dāng)分支較多時(shí),程序變得復(fù)雜冗長(zhǎng),可讀性降低,如:if(x>=90)printf(“優(yōu)秀”);

elseif(x>=80)printf(“良好”);

elseif(x>=60)printf(“通過(guò)”);

elseprintf(“不及格”);其它語(yǔ)句;如何解決這一問(wèn)題?67switch語(yǔ)句switch語(yǔ)句是實(shí)現(xiàn)多分支選擇結(jié)構(gòu)的一個(gè)語(yǔ)句格式switch(算術(shù)表達(dá)式){

case常量表達(dá)式1:語(yǔ)句1;break;case常量表達(dá)式2:語(yǔ)句2;break;

…case常量表達(dá)式n:語(yǔ)句n;break;default:語(yǔ)句n+1;}表達(dá)式值必須為整型、字符型或枚舉類(lèi)型每個(gè)case表達(dá)式的值必須互不相同68例3.18

將1至7中的任意一個(gè)數(shù)字轉(zhuǎn)化成對(duì)應(yīng)的英文星期幾的前三個(gè)字母,如1轉(zhuǎn)化為Mon,7轉(zhuǎn)化為Sun等。

#include<stdio.h>

voidmain(){inta;printf("inputintegernumber:");scanf("%d",&a);switch(a)

{/*對(duì)表達(dá)式a做多次判斷,根據(jù)不同的條件做不同的語(yǔ)句*/case1:printf("Mon\n");break;/*break的作用是跳出該結(jié)構(gòu)*/case2:printf("Tue\n");break;case3:printf("Wed\n");break;case4:printf("Thu\n");break;case5:printf("Fri\n");break;case6:printf("Sat\n");break;case7:printf("Sun\n");break;default:printf("error\n");/*輸入的不是0至7的整數(shù)時(shí)執(zhí)行*/}}69例5根據(jù)分?jǐn)?shù)評(píng)定等級(jí)#include<stdio.h>voidmain(){intscore,grade;printf("Inputascore(0~100):");scanf("%d",&score);grade=score/10;//將成績(jī)整除10,轉(zhuǎn)化成switch語(yǔ)句中的case標(biāo)號(hào)

switch(grade){case10:case9:printf("grade=A\n");break;//標(biāo)號(hào)10和9,都執(zhí)行本行的這條語(yǔ)句

case8:printf("grade=B\n");break;case7:printf("grade=C\n");break;case6:printf("grade=D\n");break;case5:case4:case3:case2:case1:case0:printf("grade=E\n");break;//標(biāo)號(hào)5、4、3、2、1和0都執(zhí)行本行的這條語(yǔ)句

default:printf("Thescoreisoutofrange!\n");

}//成績(jī)超出范圍時(shí),提示出錯(cuò)}注意:switch后面圓括號(hào)中的表達(dá)式的類(lèi)型,ANSI標(biāo)準(zhǔn)允許為任何類(lèi)型,但VisualC++6.0只允許為整型、字符型或枚舉類(lèi)型。case后面常量表達(dá)式的值必須互不相等,否則會(huì)出現(xiàn)互相矛盾的現(xiàn)象。其類(lèi)型應(yīng)該與switch后面表達(dá)式的類(lèi)型相容。case和常量表達(dá)式之間要有空格例如:case10。case和default出現(xiàn)可以在任何位置,其先后次序不影響執(zhí)行結(jié)果,但習(xí)慣上將default放在switch-case結(jié)構(gòu)的底部。case提供了執(zhí)行某一語(yǔ)句序列的入口,起著標(biāo)號(hào)的作用;多個(gè)case可以執(zhí)行同一語(yǔ)句序列。每個(gè)case語(yǔ)句的結(jié)尾不要忘了加break,否則將導(dǎo)致多個(gè)分支重疊。default子句雖然可以省略不用,但最好保留:即使程序真的不需要default處理,也應(yīng)該保留語(yǔ)句:default:break;71選擇結(jié)構(gòu)

程序設(shè)計(jì)舉例72寫(xiě)程序,判斷某一年是否閏年分析:做什么?判斷某一年號(hào)是否為閏年;什么是閏年?年號(hào)能被4整除,但不能被100整除或年號(hào)能被400整除時(shí),該年為閏年。設(shè)計(jì)解題步驟:定義相關(guān)變量:年號(hào)——year輸入原始數(shù)據(jù):輸入年號(hào)(scanf)判斷該年是否為閏年:if((year%4==0&&year%100!=0)||year%400==0))

printf(“%disaleapyear\n”,year);elseprintf(“%disnotaleapyear\n”,year);寫(xiě)出完整程序;73程序#include<stdio.h>voidmain(){intyear;printf(“請(qǐng)輸入年號(hào):\n”);scanf(“%d”,&year);if((year%4==0&&year%100!=0)||year%400==0))

printf(“%disaleapyear\n”,year);elseprintf(“%disnotaleapyear\n”,year);}74求方程ax2+bx+c=0的解分析:方程ax2+bx+c=0的解的情況:a==0:b!=0:唯一根,c/b;b==0:c==0:無(wú)窮多個(gè)根;c!=0:無(wú)解;a!=0:b2-4ac==0:兩個(gè)相同的實(shí)根,-b/(2*a)b2-4ac>0:兩個(gè)不同的實(shí)根,(-b+sqrt(b2-4ac))/(2*a)、(-b-sqrt(b2-4ac))/(2*a)b2-4ac<0:兩個(gè)不同的虛根,-b/(2*a)+i*sqrt(b2-4ac)/(2*a)、-b/(2*a)-i*sqrt(b2-4ac)/(2*a)voidmain(){floata,b,c,k,delta;scanf(“%f,%f,%f”,&a,&b,&c);if(a==0)if(b!=0)printf(“onlyoneroot:%f\n”,c/b);elseif(c==0)printf(“anyroots!”);elseprintf(“noroot!”);else{delta=b*b-4*a*c;if(delta==0)printf(“twosamerealroot:%f\n”,-b/(2*a));elseif(delta>0)printf(“twodifferentrealroots:%f\t%f\n”,(-b+sqrt(delta))/(2*a)、(-b-sqrt(delta))/(2*a));else{k=sqrt(-delta)/(2*a);printf(“twodifferentcomplexroots:%f+%fi\t%f-%fi\n”,-b/(2*a),k,-b/(2*a),k);}}7576輸入4個(gè)整數(shù),按由小到大的順序輸出分析——排序的方法:初始狀態(tài):任意四個(gè)整數(shù)分別存放于a,b,c,d中;最后結(jié)果:按從小到大的順序分別放于a,b,c,d中;過(guò)程:如果a>b則:將a,b的值交換;否則,執(zhí)行步驟2

結(jié)果:a中的值必小于b的值;將c與b比較,如果c<b,將c與b交換;再將b與a比較,如果,a>b則:將a,b的值交換;——結(jié)果:a中的值必小于b的值;b中的值必小于c的值;最后,先將d與c比較,如果,d>=c則:輸出順序?yàn)椋篴,b,c,d否則,如果,d>=b則:輸出順序?yàn)椋篴,

溫馨提示

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

最新文檔

評(píng)論

0/150

提交評(píng)論