《C語(yǔ)言程序設(shè)計(jì)》全套教學(xué)課件_第1頁(yè)
《C語(yǔ)言程序設(shè)計(jì)》全套教學(xué)課件_第2頁(yè)
《C語(yǔ)言程序設(shè)計(jì)》全套教學(xué)課件_第3頁(yè)
《C語(yǔ)言程序設(shè)計(jì)》全套教學(xué)課件_第4頁(yè)
《C語(yǔ)言程序設(shè)計(jì)》全套教學(xué)課件_第5頁(yè)
已閱讀5頁(yè),還剩375頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

第一章C語(yǔ)言概述第1章-C語(yǔ)言概述第2章-C語(yǔ)言程序初體驗(yàn)第3章-選擇結(jié)構(gòu)第4章-循環(huán)結(jié)構(gòu)第5章-數(shù)組第6章-函數(shù)第7章-結(jié)構(gòu)體第8章-指針第9章-進(jìn)階內(nèi)容第10章-文件全套可編輯PPT課件理解程序設(shè)計(jì)語(yǔ)言的來(lái)由掌握程序設(shè)計(jì)語(yǔ)言的概念和分類C語(yǔ)言程序的結(jié)構(gòu)和特點(diǎn)、C語(yǔ)言中的注釋了解使用C語(yǔ)言編程解決實(shí)際問(wèn)題的一般步驟本章目標(biāo)全套可編輯PPT課件1.1什么是程序設(shè)計(jì)語(yǔ)言?計(jì)算機(jī)的工作原理計(jì)算機(jī)內(nèi)部的命令和數(shù)據(jù)均是用0、1串表示!計(jì)算機(jī)只能識(shí)別0、1串,即它的語(yǔ)言是0、1串!并且,它只能做非常簡(jiǎn)單的操作,比如二進(jìn)制加法.全套可編輯PPT課件1.1什么是程序設(shè)計(jì)語(yǔ)言?人與計(jì)算機(jī)的交流鴻溝幫我計(jì)算3加2.1000110000+基本操作人語(yǔ)機(jī)語(yǔ)對(duì)牛彈琴得用一種人、機(jī)雙方都能聽(tīng)到懂的語(yǔ)言進(jìn)行溝通,這種語(yǔ)言就是程序設(shè)計(jì)語(yǔ)言全套可編輯PPT課件1.1什么是程序設(shè)計(jì)語(yǔ)言?機(jī)器語(yǔ)言的誕生讓計(jì)算機(jī)完成兩個(gè)數(shù)相加的任務(wù),程序可能是:011000110000011001100101110011000000110000011011難學(xué)、難記、難寫、難改、難維護(hù)!!moval,num1addal,num2movnum3,al全套可編輯PPT課件1.1什么是程序設(shè)計(jì)語(yǔ)言?高級(jí)程序設(shè)計(jì)語(yǔ)言的產(chǎn)生編譯程序c=a+b這種接近自然語(yǔ)言和數(shù)學(xué)語(yǔ)言的語(yǔ)言,叫做高級(jí)程序設(shè)計(jì)語(yǔ)言。核心概念:(高級(jí))程序設(shè)計(jì)語(yǔ)言是人們讓計(jì)算機(jī)做事情的語(yǔ)言!先后出現(xiàn)幾千種高級(jí)語(yǔ)言,廣泛使用的100多種,其中最常用的有:C、C++、Java、PHP等等+1.2為什么是C語(yǔ)言?1.2為什么是C語(yǔ)言?C語(yǔ)言C語(yǔ)言C語(yǔ)言是古老(1973)而長(zhǎng)青的編程語(yǔ)言,常年占據(jù)各類排行榜前2名,有前(錢)途;在系統(tǒng)軟件、嵌入式開發(fā)領(lǐng)域占據(jù)無(wú)可代替的位置;它的語(yǔ)法是很多其他編程語(yǔ)言的基礎(chǔ),容易過(guò)渡到任何一種語(yǔ)言(特別是C++、Java、C#等);是數(shù)據(jù)結(jié)構(gòu)、操作系統(tǒng)、編譯原理、JAVA等后續(xù)課程前進(jìn)的基石。1.2為什么是C語(yǔ)言?選C語(yǔ)言作為第一門高級(jí)程序設(shè)計(jì)語(yǔ)言的原因:操作系統(tǒng)嵌入式系統(tǒng)驅(qū)動(dòng)程序圖形引擎、游戲引擎圖像處理聲音效果……1.2為什么是C語(yǔ)言?C語(yǔ)言一般用在:1.3揭開C語(yǔ)言面紗【例1?1】制作一個(gè)電子條幅,在屏幕上輸出社會(huì)主義核心價(jià)值觀內(nèi)容。要在屏幕上顯示的內(nèi)容:富強(qiáng)、民主、文明、和諧、自由、平等、公正、法治、愛(ài)國(guó)、敬業(yè)、誠(chéng)信、友善。#include<stdio.h>//編譯預(yù)處理命令,包含頭文件intmain(){//主函數(shù)開始printf(“富強(qiáng)、民主、文明、和諧、自由、平等、公正、法治、愛(ài)國(guó)、敬業(yè)、誠(chéng)信、友善\n”);//輸出內(nèi)容return0;//函數(shù)返回值}//主函數(shù)結(jié)束1.3揭開C語(yǔ)言面紗【例1?2】用C語(yǔ)言編程實(shí)現(xiàn)牛奶價(jià)格計(jì)算問(wèn)題。輸入牛奶的單價(jià)和數(shù)量,計(jì)算牛奶的價(jià)格,考慮到除了牛奶之外,奶奶還可能銷售其他食品,因?yàn)椴煌称穬r(jià)格計(jì)算方法相同,為了更好地重用價(jià)格計(jì)算模塊,價(jià)格計(jì)算部分用函數(shù)實(shí)現(xiàn)。#include<stdio.h>//編譯預(yù)處理命令,包含頭文件intmultiply(intm,intn);//自定義乘法函數(shù)multiply()的聲明intmain(){//主函數(shù)intunitPrice,count,totalPrice;//變量定義,分別表示單價(jià)、數(shù)量和總價(jià)printf(“請(qǐng)輸入牛奶單價(jià):”);//輸出牛奶價(jià)格輸入提示信息scanf(“%d”,&unitPrice);//輸入語(yǔ)句,輸入牛奶單價(jià)printf(“請(qǐng)輸入牛奶數(shù)量:”);//輸出牛奶數(shù)量輸入提示信息scanf(“%d”,&count);//輸入語(yǔ)句,輸入牛奶數(shù)量totalPrice=multiply(unitPrice,count);//調(diào)用函數(shù)multiply計(jì)算牛奶總價(jià)printf(“牛奶總價(jià)為:%d”,totalPrice);//輸出結(jié)果return0;}/*以下為自定義multiply()函數(shù),實(shí)現(xiàn)計(jì)算兩個(gè)數(shù)的乘積。*/intmultiply(intm,intn){inttotal;total=m*n;//兩個(gè)整數(shù)進(jìn)行乘積運(yùn)算returntotal;//返回兩個(gè)數(shù)的和值}必須有且只能有一個(gè)主函數(shù)main(),可在任意位置,整個(gè)程序的入口;C語(yǔ)言程序由一個(gè)或多個(gè)函數(shù)組成,函數(shù)是C程序的基本單位;計(jì)算機(jī)所做的操作都是由C語(yǔ)言程序語(yǔ)句完成,用“;”作為語(yǔ)句終止符。C語(yǔ)言本身沒(méi)有輸入、輸出語(yǔ)句,輸入操作和輸出操作分別由庫(kù)函數(shù)scanf和printf完成。注釋性、說(shuō)明信息通常以//或者/**/形式出現(xiàn),其中//形式的注釋稱為單行注釋,/**/形式的注釋稱為多行注釋或者塊注釋。1.3揭開C語(yǔ)言面紗C語(yǔ)言程序初印象1.4C語(yǔ)言運(yùn)行步驟簡(jiǎn)要介紹實(shí)際操作演示編寫程序編譯運(yùn)行程序代碼二進(jìn)制代碼程序設(shè)計(jì)語(yǔ)言是人們讓計(jì)算機(jī)做事情的語(yǔ)言。學(xué)好C語(yǔ)言很有必要。講解了幾個(gè)簡(jiǎn)單C程序,得到第一印象:由函數(shù)構(gòu)成,函數(shù)由首部和函數(shù)體組成,main函數(shù)為入口,…。第2章C語(yǔ)言程序初體驗(yàn)C語(yǔ)言的標(biāo)識(shí)符、變量、常量;C語(yǔ)言的數(shù)據(jù)類型和數(shù)據(jù)類型轉(zhuǎn)換;C語(yǔ)言的表達(dá)式、賦值運(yùn)算、算術(shù)運(yùn)算、自增自減運(yùn)算;C語(yǔ)言的常用函數(shù);C語(yǔ)言順序結(jié)構(gòu)程序的編寫方法和執(zhí)行過(guò)程。本章目標(biāo)2.1.1

計(jì)算梯形面積2.1來(lái)個(gè)簡(jiǎn)單題——計(jì)算梯形面積2.1.2 標(biāo)識(shí)符和關(guān)鍵字標(biāo)識(shí)符命名規(guī)范:標(biāo)識(shí)符的構(gòu)成:字母(A~Z,a~z)、數(shù)字(0~9)和下劃線(_),第一個(gè)字符必須是字母或下劃線。區(qū)分大小寫。標(biāo)識(shí)符的長(zhǎng)度:受不同編譯器和操作系統(tǒng)的限制。標(biāo)識(shí)符命名建議:見(jiàn)名知意。不能使用關(guān)鍵字作為標(biāo)識(shí)符名字。關(guān)鍵字關(guān)鍵字被賦予了特定含義的標(biāo)識(shí)符,稱為關(guān)鍵字。例如,float,int。共32個(gè)關(guān)鍵字不合法標(biāo)識(shí)符2.1.3基本數(shù)據(jù)類型

4種基本數(shù)據(jù)類型:整型:int,如3,8,5,-210,占用4個(gè)字節(jié),表示數(shù)據(jù)范圍為-32768~32768。單精度浮點(diǎn)型:float,如3.6,8.8,5.2,-1.7,占用4個(gè)字節(jié),有效數(shù)位6~7位,數(shù)值范圍為-3.4e-38~3.4e+38。雙精度浮點(diǎn)型:double,占用8個(gè)字節(jié),有效數(shù)位15~16位,數(shù)值范圍為-1.7e-308~1.7e+308。字符型:char,如’c’、‘A’,占用1個(gè)字節(jié)。ASCII碼字符集請(qǐng)見(jiàn)附錄A。數(shù)據(jù)類型限定符4個(gè)數(shù)據(jù)類型限定符short,long,signed,unsigned。4個(gè)限定符的作用:(1)short、long:限定數(shù)據(jù)的長(zhǎng)度。被short修飾后,該類型占用的空間要比原來(lái)的基本類型更?。籰ong的作用與short正好相反,它會(huì)占用更大的內(nèi)存空間。(2)signed、unsigned:限定數(shù)據(jù)的符號(hào)。用unsigned限定的數(shù)稱為無(wú)符號(hào)數(shù);signed為有符號(hào)數(shù),包括了負(fù)整數(shù)。默認(rèn)情況下,int是有符號(hào)數(shù)。sizeof運(yùn)算符作用:獲取數(shù)據(jù)長(zhǎng)度格式:sizeof(type)返回值:返回type類型所占的存儲(chǔ)字節(jié)個(gè)數(shù)。2.1.4C語(yǔ)言語(yǔ)句C語(yǔ)言語(yǔ)句分為五類:(1)表達(dá)式語(yǔ)句格式:

表達(dá)式;功能:執(zhí)行表達(dá)式所代表的動(dòng)作,完成相應(yīng)的操作。例如:y=a+3;/*賦值語(yǔ)句:計(jì)算a+3的值并將計(jì)算結(jié)果賦給y*/a+3;/*a+3加法語(yǔ)句,計(jì)算結(jié)果沒(méi)有賦值給變量,并無(wú)實(shí)際意義*/++j;/*前綴自增語(yǔ)句:j的值增1*/(2)函數(shù)調(diào)用語(yǔ)句格式:

函數(shù)名(實(shí)際參數(shù)表);功能:將程序流程轉(zhuǎn)入到函數(shù)體中執(zhí)行,并進(jìn)行實(shí)際參數(shù)和形式參數(shù)的傳值(地址),執(zhí)行函數(shù)結(jié)束后,將特定的函數(shù)值返回到主調(diào)函數(shù)。例如:printf("你好,中國(guó)!");/*調(diào)用基本輸出庫(kù)函數(shù)printf(),在屏幕輸出:你好,中國(guó)!*/(3)控制語(yǔ)句分為三類:分支語(yǔ)句:if語(yǔ)句、switch語(yǔ)句,第三章詳細(xì)介紹。循環(huán)語(yǔ)句:dowhile語(yǔ)句、while語(yǔ)句和for語(yǔ)句。第四章詳細(xì)介紹。流程控制語(yǔ)句:break語(yǔ)句、goto語(yǔ)句、continue語(yǔ)句和return語(yǔ)句。具體用法將分在本書第三章、第四章、第六章詳細(xì)介紹。(4)復(fù)合語(yǔ)句將彼此相關(guān)的操作放在一起,使用花括號(hào)“{}”括起來(lái)。例如:{inta,b=2,c;a=b+1;c=a+3;printf(“%d”,c);}變量a,b,c在{}中定義,并使用printf()函數(shù)輸出。(5)空語(yǔ)句只有分號(hào)“;”構(gòu)成的語(yǔ)句稱為空語(yǔ)句。空語(yǔ)句是什么也不執(zhí)行的語(yǔ)句。例如:for(i=1;i<100;i++){;}或作為無(wú)條件轉(zhuǎn)移的標(biāo)號(hào),例如:gotolabel1;…label1:

;2.1.5變量和賦值基本概念在程序運(yùn)行過(guò)程中其值可以改變的量稱為變量。變量聲明(1)單變量聲明數(shù)據(jù)類型

變量名;例如,floattra_area;//聲明變量tra_area,用其表示梯形面積(2)多變量聲明數(shù)據(jù)類型變量名1,變量名2,......,變量名n;例如,inttop,bottom,height;/*一條語(yǔ)句聲明三個(gè)變量*/變量賦值(1)簡(jiǎn)單賦值變量名=表達(dá)式;例如,top=3;//給梯形上底長(zhǎng)度賦值bottom=8;//給梯形下底長(zhǎng)度賦值height=5;//給梯形高賦值(2)連續(xù)賦值變量名1=變量名2=......=變量名n=表達(dá)式;例如,top=bottom=height=5;變量的初始化數(shù)據(jù)類型變量名=表達(dá)式;例如,變量top、bottom和height可以用以下語(yǔ)句進(jìn)行變量初始化:inttop=3,bottom=5,height=8;2.1.6算術(shù)運(yùn)算算術(shù)運(yùn)算符主要包括:加(+)、減(-)、乘(*)、除(/)、求模(%)。算術(shù)運(yùn)算符的優(yōu)先級(jí)(1)當(dāng)表達(dá)式中包含多個(gè)運(yùn)算符時(shí),需要區(qū)分運(yùn)算符之間的優(yōu)先級(jí)。(2)算術(shù)運(yùn)算符號(hào)的優(yōu)先級(jí)與一般的算術(shù)運(yùn)算相同,相對(duì)優(yōu)先級(jí)如下:最高優(yōu)先級(jí):乘(*)、除(/)、求模(%)最低優(yōu)先級(jí):加(+)、減(-)2.1.7格式化輸出函數(shù)格式化輸出函數(shù):printf()默認(rèn)情況下,printf()將程序運(yùn)行結(jié)果輸出到屏幕上。在程序中使用printf()函數(shù),必須要包含頭文件stdio.h。printf()函數(shù)原型為:intprintf(constchar*format,argument1,argument2,...);printf()函數(shù)常見(jiàn)用法:(1)輸出字符串(2)輸出單個(gè)變量printf("變量格式控制符",變量名);(3)輸出多個(gè)變量printf("變量格式控制符1變量格式控制符2,...",變量1,變量2,...);(4)變量與提示信息混合輸出【例2?6】某學(xué)生社團(tuán)定期到對(duì)口幫扶的農(nóng)民工子弟小學(xué)進(jìn)行學(xué)習(xí)輔導(dǎo),社團(tuán)負(fù)責(zé)人在輔導(dǎo)小學(xué)生的過(guò)程中發(fā)現(xiàn)學(xué)生在進(jìn)行算術(shù)運(yùn)算的時(shí)候經(jīng)常出錯(cuò),因此決定組織社團(tuán)成員編寫一個(gè)驗(yàn)算程序幫助學(xué)生進(jìn)行算術(shù)運(yùn)算結(jié)果驗(yàn)算,為了測(cè)試該方法是否可行,先假定兩個(gè)數(shù)分別是20和6,編寫程序計(jì)算這兩個(gè)數(shù)的和、差、積、商、取余的結(jié)果。程序運(yùn)行結(jié)果:numA

=

20,

numB

=

620

+6

=

2620

-

6

=

1420

*

6

=

12020

/6

=3.33333320

%

6

=22.2.1程序解析【例2?7】學(xué)校校園里要鋪設(shè)多個(gè)圓環(huán)形草坪,要求用C語(yǔ)言編程計(jì)算每個(gè)草坪的面積,用鍵盤輸入圓環(huán)的內(nèi)外半徑,要求:結(jié)果保留兩位小數(shù)。2.2加點(diǎn)小難度——計(jì)算圓環(huán)的面積2.2.2常量的使用(1)常量的定義及分類定義:常量即值不可以被程序改變的量。例如:例2-7中用到的圓周率3.1415926。分類:數(shù)值常量、字符常量和字符串常量。常量限定符:const。數(shù)值常量以一個(gè)數(shù)值的形式出現(xiàn),既可以是整數(shù),也可以小數(shù)。例如,語(yǔ)句tra_area=(top+bottom)*height/2中的數(shù)值2,語(yǔ)句annular_area=3.1415926*R*R-3.1415926*r*r;中的3.1415926。整數(shù)常量整數(shù)可以使用十進(jìn)制、八進(jìn)制、十六進(jìn)制來(lái)表示。90/*用十進(jìn)制表示數(shù)值90*/0x5a/*用十六進(jìn)制表示十進(jìn)制數(shù)90*/0132/*用八進(jìn)制表示十進(jìn)制數(shù)90*/注意:前綴中的“0”是阿拉伯?dāng)?shù)字0,不是字母o。實(shí)數(shù)常量實(shí)數(shù)有兩種基本表示方法:(1)采用十進(jìn)制數(shù)形式書寫小數(shù)例如,0.24.24//小數(shù)0.24,省略了整數(shù)部分5.245.//小數(shù)5.0,省略了小數(shù)部分的(2)科學(xué)表示法例如,0.24E3//表示0.24×103,即240.00.24E-2//表示0.24×10-2,即0.0024-5.24E4//表示-5.24×104,即-52400.05e2//表示-5.0×102,即500.0(3)字符常量單引號(hào)(’)括起來(lái)的單個(gè)字符。轉(zhuǎn)義字符是以反斜線“\”開頭,“\”的含義是將其后的字符轉(zhuǎn)換為特定的含義,故稱”轉(zhuǎn)義”字符。常用的轉(zhuǎn)義字符見(jiàn)下表:(4)字符串常量用雙引號(hào)(“”)括起來(lái)的0個(gè)或多個(gè)字符。例如,“Thankyouverymuch”是由多個(gè)字符構(gòu)成的字符串常量?!啊卑?個(gè)字符,表示一個(gè)空串?!癮”是只包含一個(gè)字符的字符串。(5)常量的符號(hào)表示方法使用預(yù)處理指令#define進(jìn)行宏定義。例如,為圓周率定義一個(gè)常量符號(hào)PI,宏定義方法如下:#definePI3.1415926當(dāng)對(duì)程序進(jìn)行編譯時(shí),預(yù)處理器會(huì)將宏替換為其所代表的數(shù)值。例如計(jì)算圓的面積,以下語(yǔ)句:annular_area=PI*R*R-PI*r*r;將變?yōu)椋篴nnular_area=3.1415926*R*R-3.1415926*r*r;【例2?8】將例2-7求圓環(huán)面積中的常量3.1415926用符號(hào)常量表示:【例2?9】某糧倉(cāng)建設(shè)了一批圓錐形的糧倉(cāng),已知圓錐形糧倉(cāng)高和圓口半徑,為了計(jì)算這些糧倉(cāng)能放多少糧食,需要編程計(jì)算圓錐形糧倉(cāng)的體積?!纠??10】在屏幕上輸出:熱烈歡迎新同學(xué)!2.2.3數(shù)據(jù)類型轉(zhuǎn)換自動(dòng)數(shù)據(jù)類型轉(zhuǎn)換(1)賦值運(yùn)算中的自動(dòng)類型轉(zhuǎn)換

當(dāng)賦值號(hào)“=”兩邊的數(shù)據(jù)類型不同時(shí),則在賦值操作前編譯器會(huì)把賦值號(hào)右邊表達(dá)式的類型轉(zhuǎn)換為左邊變量的類型。例如,(2)混合運(yùn)算中的類型自動(dòng)轉(zhuǎn)換編譯器將參與運(yùn)算的所有數(shù)據(jù)先轉(zhuǎn)換為同一種類型,然后再進(jìn)行計(jì)算。例如:數(shù)據(jù)類型的自動(dòng)轉(zhuǎn)換規(guī)則:強(qiáng)制數(shù)據(jù)類型轉(zhuǎn)換格式:(數(shù)據(jù)類型名)表達(dá)式例如,(int)a+b;//先將a強(qiáng)制轉(zhuǎn)化為int型,然后再和b相加(int)(a+b);//先執(zhí)行加法,然后將加法結(jié)果轉(zhuǎn)換為int型(float)100;//將數(shù)值100(默認(rèn)為int類型)轉(zhuǎn)換為float類型(float)a;//將變量a轉(zhuǎn)換為float類型【例2?11】某社團(tuán)組織給希望小學(xué)捐款活動(dòng),編程計(jì)算平均捐款數(shù)?!纠??12】某社團(tuán)組織給希望小學(xué)捐款活動(dòng),編程計(jì)算平均捐款數(shù),并用兩種不同精度輸出捐款總數(shù)。2.2.4格式化輸入函數(shù)格式化輸入函數(shù)scanf():默認(rèn)情況下,scanf()接受從鍵盤輸入的數(shù)據(jù)。必須要包含頭文件stdio.h。scanf()函數(shù)原型:intscanf(char*format[,argument,...]);函數(shù)scanf()用法(1)輸入單個(gè)變量scanf("格式控制符",&變量);

說(shuō)明:&是地址運(yùn)算符,表示變量的內(nèi)存地址,不能省略?!纠??13】在準(zhǔn)備新生入學(xué)迎新時(shí),需要隨時(shí)更新并輸出已經(jīng)報(bào)到的學(xué)生人數(shù),請(qǐng)編寫程序從鍵盤輸入已經(jīng)報(bào)到的人數(shù),并在屏幕上輸出報(bào)到人數(shù),給出完整代碼。例2-13代碼執(zhí)行流程及內(nèi)存和屏幕變化模擬圖(2)輸入多個(gè)變量scanf(“變量格式控制符1

變量格式控制符2...",&變量1,&變量2,...);說(shuō)明:格式控制符與變量的位置和個(gè)數(shù)要一一對(duì)應(yīng)。【例2?14】某社團(tuán)組織給希望小學(xué)捐款活動(dòng),編程計(jì)算平均捐款數(shù),要求:從鍵盤輸入總捐款數(shù)和捐款人數(shù),并用浮點(diǎn)型存儲(chǔ)并輸出捐款總數(shù)。2.3.1自增和自減運(yùn)算符(1)自增、自減運(yùn)算分類自增運(yùn)算:++,變量加1。自增運(yùn)算:--,變量減1。(2)使用形式前綴形式:運(yùn)算符在變量前面。例如:對(duì)變量a的前綴自增、自減運(yùn)算分別是++a和--a。后綴形式:運(yùn)算符在變量后面。例如:對(duì)變量a的后綴自增、自減運(yùn)算分別是a++和a--。2.3來(lái)點(diǎn)與數(shù)學(xué)不一樣的前綴、后綴形式區(qū)別如果獨(dú)立使用自增、自減運(yùn)算時(shí),前綴和后綴的形式效果等價(jià)。例如,語(yǔ)句++a和a++的效果都等價(jià)于語(yǔ)句a=a+1。如果自增、自減運(yùn)算不是獨(dú)立使用,而是作為表達(dá)式的一部分時(shí),區(qū)別在于變量值的自增1或自減1運(yùn)算發(fā)生的時(shí)間不同。【例2?15】獨(dú)立使用自增、自減運(yùn)算的實(shí)例。例:表達(dá)式中的前綴自增、自減運(yùn)算例:表達(dá)式中的后綴自增、自減運(yùn)算先參與表達(dá)式的運(yùn)算,而后再自增、自減運(yùn)算:2.3.2復(fù)合賦值運(yùn)算符使用復(fù)合賦值運(yùn)算符的表達(dá)式稱之為復(fù)合賦值表達(dá)式,其基本格式如下:

變量運(yùn)算符=表達(dá)式它等價(jià)于:

變量=變量運(yùn)算符表達(dá)式【例2?16】加減乘除復(fù)合賦值運(yùn)算符。2.3.3逗號(hào)運(yùn)算符與逗號(hào)表達(dá)式逗號(hào)運(yùn)算符:用逗號(hào)把多個(gè)表達(dá)式聯(lián)接起來(lái),構(gòu)成一個(gè)新的表達(dá)式,這里的逗號(hào)被稱為逗號(hào)運(yùn)算符。逗號(hào)表達(dá)式:由逗號(hào)運(yùn)算符將兩個(gè)以上的表達(dá)式連接而成的表達(dá)式。格式:

表達(dá)式1,表達(dá)式2,…,表達(dá)式n功能:

依次計(jì)算表達(dá)式1的值,表達(dá)式2的值,…,表達(dá)式n的值,最后將表達(dá)式n的值作為整個(gè)表達(dá)式的值。例子:2.4.1庫(kù)函數(shù)的類別及函數(shù)調(diào)用常用庫(kù)函數(shù)的類別(1)標(biāo)準(zhǔn)輸入/輸出函數(shù):包含在頭文件<stdio.h>中。(2)字符類型判斷和轉(zhuǎn)換:定義了判定字符類型和轉(zhuǎn)換的函數(shù),包含在頭文件<ctype.h>中。(3)字符串處理函數(shù):定義了對(duì)字符數(shù)組進(jìn)行操作的函數(shù),包含在頭文件<string.h>中。(4)時(shí)間與日期函數(shù):定義了操作日期和時(shí)間的函數(shù),包含在頭文件<time.h>。(5)數(shù)學(xué)函數(shù):定義常用數(shù)學(xué)函數(shù),如三角函數(shù)、反三角函數(shù)、指數(shù)、對(duì)數(shù)函數(shù)等,包含在頭文件<math.h>中。(6)標(biāo)準(zhǔn)庫(kù)函數(shù):定義通用工具函數(shù),如求絕對(duì)值、生成隨機(jī)數(shù)、內(nèi)存空間的分配和釋放等,包含在頭文件<stdlib>中。2.4常用函數(shù)助編程庫(kù)函數(shù)的使用include語(yǔ)句的格式:#include頭文件名功能:將指定頭文件嵌入源文件中,使得編譯程序可以到頭文件中找頭文件中包含的函數(shù)定義。2.4.2數(shù)學(xué)函數(shù)的使用常用庫(kù)函數(shù)(1)三角函數(shù)格式:sin(參數(shù)),cos(參數(shù)),tan(參數(shù))功能:返回參數(shù)所指定的角的三角函數(shù)值。說(shuō)明:參數(shù)是雙精度類型、用弧度表示的角。如果給定的是角度值,需要先將其轉(zhuǎn)換為弧度。例如,計(jì)算輸出70°角的正弦函數(shù)值。用格式輸出函數(shù)調(diào)用語(yǔ)句:printf("70°角的正弦函數(shù)值為:%lE",sin(70*3.14159265/180));也可以用下面的一組語(yǔ)句:intangle=70;doubleradian;radian=angle*3.1415926/180;printf("%d°角的正弦函數(shù)值為:%lE",angle,sin(radian));

運(yùn)行結(jié)果為:70°角的正弦函數(shù)值為:9.396926E-01(2)指數(shù)函數(shù)格式:exp(參數(shù))功能:返回以自然常數(shù)e為底,以參數(shù)值為冪的指數(shù)函數(shù)值。說(shuō)明:參數(shù)和返回值均為double類型。例:下面的代碼計(jì)算并輸出e3。doublex=3;doubleexpX;expX=exp(x);printf("e^%lf=%lf",x,expX);

運(yùn)行結(jié)果為:e^3.000000=20.085537

(5)浮點(diǎn)數(shù)的絕對(duì)值函數(shù)格式:fabs(參數(shù))功能:返回參數(shù)的絕對(duì)值。說(shuō)明:參數(shù)和返回值均為浮點(diǎn)型,不可為整數(shù)。例:下面的代碼計(jì)算并輸出-5.8的絕對(duì)值。floatx=-5.8;floatfabsX;fabsX=fabs(x);printf("Absolutevalueof%f=%f",x,fabsX);輸出結(jié)果為:Absolutevalueof-5.800000=5.800000(6)冪函數(shù)格式:pow(參數(shù)1,參數(shù)2)功能:返回參數(shù)1的參數(shù)2次冪。說(shuō)明:兩個(gè)參數(shù)以及返回值均為浮點(diǎn)型。例:下面的代碼計(jì)算并輸出xy。2.4.3標(biāo)準(zhǔn)函數(shù)的使用(1)整型數(shù)的絕對(duì)值函數(shù)格式:函數(shù)名(參數(shù))功能:返回參數(shù)的絕對(duì)值。說(shuō)明:1)函數(shù)名為abs時(shí),計(jì)算int類型整數(shù)的絕對(duì)值;函數(shù)名為labs時(shí),計(jì)算longint類型整數(shù)的絕對(duì)值。2)參數(shù)和返回值均為整型數(shù),不可為浮點(diǎn)數(shù)。3)兩類函數(shù)需要包含的頭文件不同:整型數(shù)絕對(duì)值函數(shù)在通用工具包中,而浮點(diǎn)型數(shù)絕對(duì)值函數(shù)在數(shù)學(xué)函數(shù)包中,。例:下面的代碼計(jì)算并輸出-180的絕對(duì)值。(2)偽隨機(jī)數(shù)函數(shù)格式:rand()功能:返回一個(gè)從0到最大隨機(jī)數(shù)的任意一個(gè)整數(shù)。例:下面的代碼產(chǎn)生并輸出0-100(不包括100)之間的整數(shù)。運(yùn)行結(jié)果:randomdatais:83(3)偽隨機(jī)數(shù)的種子函數(shù)格式:srand(seed)功能:參數(shù)seed是rand()的種子,用來(lái)初始化rand()的起始值。例:下面的代碼產(chǎn)生并輸出0-100(不包括100)之間的整數(shù),要求每次執(zhí)行產(chǎn)生不同的隨機(jī)數(shù)。運(yùn)行結(jié)果:randomdatais:742.5.1案例問(wèn)題描述

2.5順序結(jié)構(gòu)案例項(xiàng)目—鋼結(jié)構(gòu)構(gòu)件受力計(jì)算2.5.2案例分析(1)程序中的變量和常量定義分析(2)程序中的常用函數(shù)分析(3)程序中的公式計(jì)算順序分析(4)程序中的輸入輸出語(yǔ)句設(shè)計(jì)(5)程序中表達(dá)式語(yǔ)句分析2.5.3案例代碼編寫運(yùn)行結(jié)果:請(qǐng)輸入構(gòu)件彈性模量E和構(gòu)件軸力N(用逗號(hào)分隔):2,3請(qǐng)輸入構(gòu)件兩端的彎矩m1和m2(用逗號(hào)分隔):4請(qǐng)輸入構(gòu)件剪變模量G和長(zhǎng)度L(用逗號(hào)分隔):5,6鋼結(jié)構(gòu)構(gòu)件受力為:w=0.54C的基本數(shù)據(jù)類型:int,float,double,charC語(yǔ)言的語(yǔ)句結(jié)構(gòu)和類別:表達(dá)式語(yǔ)句、控制語(yǔ)句、函數(shù)調(diào)用語(yǔ)句、復(fù)合語(yǔ)句、空語(yǔ)句C語(yǔ)言中常見(jiàn)的算術(shù)運(yùn)算:+、-、*、/,%數(shù)據(jù)類型轉(zhuǎn)換的類別和方法:自動(dòng)轉(zhuǎn)換、強(qiáng)制轉(zhuǎn)換自增自減運(yùn)算、賦值運(yùn)算、逗號(hào)運(yùn)算:++,--,=,,格式化輸出函數(shù)、格式化輸入函數(shù):printf(),scanf()數(shù)學(xué)函數(shù)、標(biāo)準(zhǔn)函數(shù)等常用函數(shù)的使用:#include,調(diào)用第3章選擇結(jié)構(gòu)知識(shí)目標(biāo):掌握if、if-else、if-elseif-else、switch等分支結(jié)構(gòu),掌握關(guān)系表達(dá)式和邏輯表達(dá)式,以及條件表達(dá)式。能力目標(biāo):具備使用if和switch分支結(jié)構(gòu)來(lái)解決現(xiàn)實(shí)生活中常見(jiàn)的選擇問(wèn)題。素養(yǎng)目標(biāo):培養(yǎng)學(xué)生解決復(fù)雜問(wèn)題的工程思維能力,通過(guò)C語(yǔ)言編程實(shí)例培養(yǎng)學(xué)生追求卓越的精神和用所學(xué)知識(shí)服務(wù)社會(huì)的意識(shí)。本章目標(biāo)例1:假設(shè)學(xué)校這樣規(guī)定:學(xué)生百分制的平均分超過(guò)90分,可認(rèn)定為成績(jī)優(yōu)秀。用C語(yǔ)言編寫一個(gè)小程序,根據(jù)平均分評(píng)判某個(gè)學(xué)生成績(jī)是否優(yōu)秀。3.1一起來(lái)評(píng)優(yōu)#include<stdio.h>intmain(){intscore;printf(“請(qǐng)輸入平均分:”);scanf("%d",&score);if(score>90)printf("您的成績(jī)?yōu)閮?yōu)秀\n");return0;}

單分支if語(yǔ)句的一般格式為:if(表達(dá)式){語(yǔ)句組}單分支選擇結(jié)構(gòu)(1)單分支if語(yǔ)句的格式說(shuō)明:(1)表達(dá)式可以是任意表達(dá)式,用來(lái)判斷條件是否滿足,表達(dá)式的值為0,表示條件不滿足,表達(dá)式的值非0,表示條件滿足;(2)語(yǔ)句組可以是任意合法的C語(yǔ)言語(yǔ)句,如果是單條語(yǔ)句,可以省略大括號(hào)。(2)單分支if語(yǔ)句的執(zhí)行流程單分支選擇結(jié)構(gòu)關(guān)系運(yùn)算是對(duì)兩個(gè)操作數(shù)進(jìn)行比較的運(yùn)算,C語(yǔ)言提供了6種關(guān)系運(yùn)算符:<:表示“小于”,等價(jià)于數(shù)學(xué)中的<;<=:表示“小于等于”,等價(jià)于數(shù)學(xué)中的≤;>:表示大于,等價(jià)于數(shù)學(xué)中的>;>=:表示“大于等于”,等價(jià)于數(shù)學(xué)中的≥;==:表示“等于”,等價(jià)于數(shù)學(xué)中的=;!=:表示“不等于”,等價(jià)于數(shù)學(xué)中的≠。1)關(guān)系運(yùn)算符(3)關(guān)系運(yùn)算關(guān)系運(yùn)算符及其優(yōu)先次序<

(小于)關(guān)系運(yùn)算符1<= (小于等于)2> (大于)3>= (大于等于)4== (等于)5!= (不等于)6前4種關(guān)系運(yùn)算符的優(yōu)先級(jí)別相同,后2種也相同。前4種高于后2種。關(guān)系運(yùn)算符的優(yōu)先級(jí)低于算術(shù)運(yùn)算符。關(guān)系運(yùn)算符的優(yōu)先級(jí)高于賦值運(yùn)算符。算術(shù)運(yùn)算符賦值運(yùn)算符高優(yōu)先級(jí)低c>a+b等效于c>(a+b)(關(guān)系運(yùn)算符的優(yōu)先級(jí)低于算術(shù)運(yùn)算符)a>b==c等效于(a>b)==c(大于運(yùn)算符>的優(yōu)先級(jí)高于相等運(yùn)算符==)a==b<c等效于a==(b<c)(小于運(yùn)算符<的優(yōu)先級(jí)高于相等運(yùn)算符==)a=b>c等效于a=(b>c)(關(guān)系運(yùn)算符的優(yōu)先級(jí)高于賦值運(yùn)算符)由關(guān)系運(yùn)算符構(gòu)成的表達(dá)式稱為關(guān)系表達(dá)式。例如,下列的表達(dá)式都是合法的關(guān)系表達(dá)式:a+b<c*d‘a(chǎn)’+1<=bi++==j需要注意的是,關(guān)系表達(dá)式的值只能為“真”或“假”,其中“真”用“1”表示,而“假”用“0”表示。例如:2>1的值為“真”,即該表達(dá)式的值為1。b=2;c=1;求a=b<=c的值,由于b<=c的值為“假”,即為a=0。字符以它對(duì)應(yīng)ASCII碼值參與運(yùn)算。例如:’a’>’b’(ASCII碼97>98)表達(dá)式值為“假”。2)關(guān)系表達(dá)式例2:若學(xué)生平均分超過(guò)90分則輸出成績(jī)?yōu)閮?yōu)秀;否則,提醒學(xué)生要努力達(dá)到優(yōu)秀。3.2一起來(lái)評(píng)優(yōu)#include<stdio.h>intmain(){intscore;printf(“請(qǐng)輸入平均分:”);scanf("%d",&score);if(score>=90) printf("成績(jī)?yōu)閮?yōu)秀\n");else printf("成績(jī)沒(méi)有達(dá)到優(yōu)秀,仍需繼續(xù)努力!\n");return0;}

雙分支結(jié)構(gòu)if-else語(yǔ)句3.2一起來(lái)評(píng)優(yōu)(1)雙分支結(jié)構(gòu)if-else語(yǔ)句的格式if(條件表達(dá)式){

語(yǔ)句塊1}else{

語(yǔ)句塊2}

雙分支結(jié)構(gòu)if-else語(yǔ)句3.2一起來(lái)評(píng)優(yōu)(2)雙分支結(jié)構(gòu)if-else語(yǔ)句的執(zhí)行流程

【例3?3】百分制轉(zhuǎn)五分制,學(xué)生考試成績(jī)達(dá)到90分及以上輸出“你的成績(jī)?yōu)锳級(jí)!”,成績(jī)≥80分并且<90分輸出“你的成績(jī)?yōu)锽級(jí)!”,成績(jī)≥70分并且<80分輸出“你的成績(jī)?yōu)镃級(jí)!”,成績(jī)≥60分并且<70分輸出“你的成績(jī)?yōu)镈級(jí)!”,對(duì)于<60分的,輸出“你的成績(jī)?yōu)镋級(jí)!”。你能編寫這樣一個(gè)百分制轉(zhuǎn)五分制的程序嗎?3.3成績(jī)等級(jí)評(píng)一評(píng)

#include<stdio.h>intmain(){ intscore;printf("請(qǐng)輸入你的成績(jī):"); scanf("%d",&score); if(score>=90)

printf("你的成績(jī)?yōu)锳級(jí)!\n"); elseif(score>=80)

printf("你的成績(jī)?yōu)锽級(jí)!\n"); elseif(score>=70)

printf("你的成績(jī)?yōu)镃級(jí)!\n");

elseif(score>=60)

printf("你的成績(jī)?yōu)镈級(jí)!\n");else

printf("你的成績(jī)?yōu)镋級(jí)!\n");return0;}多分支結(jié)構(gòu)if-elseif-else語(yǔ)句(1)多分支結(jié)構(gòu)if-elseif-else語(yǔ)句的格式if(表達(dá)式1){語(yǔ)句塊1}elseif(表達(dá)式2){語(yǔ)句塊2}elseif(表達(dá)式3){語(yǔ)句塊3}……

elseif(表達(dá)式n-1){語(yǔ)句塊n-1}else{語(yǔ)句塊n}多分支結(jié)構(gòu)if-else語(yǔ)句(2)多分支結(jié)構(gòu)if-elseif-else語(yǔ)句的執(zhí)行流程

多分支結(jié)構(gòu)if-elseif-else語(yǔ)句(1)多分支結(jié)構(gòu)if-elseif-else語(yǔ)句的格式if(表達(dá)式1){語(yǔ)句塊1}elseif(表達(dá)式2){語(yǔ)句塊2}elseif(表達(dá)式3){語(yǔ)句塊3}……

elseif(表達(dá)式n-1){語(yǔ)句塊n-1}else{語(yǔ)句塊n}(1)嵌套的if語(yǔ)句格式if語(yǔ)句的嵌套

(2)嵌套的if語(yǔ)句分類if語(yǔ)句的嵌套內(nèi)層if語(yǔ)句*/

if(表達(dá)式)語(yǔ)句1[else語(yǔ)句2]“表達(dá)式”可以是關(guān)系表達(dá)式、邏輯表達(dá)式,甚至是數(shù)值表達(dá)式方括號(hào)內(nèi)的部分(即else子句)為可選的,既可以有,也可以沒(méi)有語(yǔ)句1和語(yǔ)句2可以是一個(gè)簡(jiǎn)單的語(yǔ)句,也可以是一個(gè)復(fù)合語(yǔ)句,還可以是另一個(gè)if語(yǔ)句if(表達(dá)式)語(yǔ)句1形式1 沒(méi)有else子句部分if(表達(dá)式)

語(yǔ)句1else

語(yǔ)句2形式2 有else子句部分

形式3 在else部分又嵌套了多層的if語(yǔ)句選擇結(jié)構(gòu)的嵌套if()

if()語(yǔ)句1else語(yǔ)句2elseif()語(yǔ)句3else語(yǔ)句4內(nèi)嵌if內(nèi)嵌if注意if與else的配對(duì)關(guān)系。else總是與它上面的最近的未配對(duì)的if配對(duì)。如果if與else的數(shù)目不一樣,為實(shí)現(xiàn)程序設(shè)計(jì)者的思想,可以加花括號(hào)來(lái)確定配對(duì)關(guān)系。if() if() 語(yǔ)句1else if() 語(yǔ)句2else 語(yǔ)句3編程序者把else寫在與第1個(gè)if(外層if)同一列上,意圖是使else與第1個(gè)if對(duì)應(yīng),但實(shí)際上else是與第2個(gè)if配對(duì),因?yàn)樗鼈兿嗑嘧罱?。if(){ if() 語(yǔ)句1 }else

語(yǔ)句2內(nèi)嵌if例3.4使用嵌套if語(yǔ)句求解一元二次方程ax2+bx+c=0的根。if語(yǔ)句的嵌套#include<stdio.h>#include<math.h>intmain(){/*delta判別式,RealPart實(shí)部,

ImagPart虛部*/floata,b,c,delta,x1,x2,m,n,

RealPart,ImagPart;printf("請(qǐng)輸入一元二次方程系數(shù):a,b,c\n");scanf("%f,%f,%f",&a,&b,&c);delta=b*b-4*a*c;m=-b/(2*a);if(delta>=0)/*外層if語(yǔ)句*/if(delta>0){/*兩個(gè)不等的實(shí)根,內(nèi)層if語(yǔ)句*/

n=sqrt(delta)/(2*a); x1=m+n;x2=m-n;printf("x1=%6.3fx2=%6.3f\n",x1,x2);}else/*兩個(gè)相等的實(shí)根*/printf("x1=x2=%6.3f\n",m);else{/*兩個(gè)不相等的虛根*/RealPart=m;ImagPart=sqrt(-delta)/(2*a);printf("x1=%6.3f+%6.3fi\n",RealPart,

ImagPart);printf("x2=%6.3f-%6.3fi\n",

RealPart,ImagPart);}return0;}例3?5判斷某一年是否為閏年。#include<stdio.h>intmain(){intyear;scanf("%d",&year);if((year%4==0&&year%100!=0)||year%400==0)printf("%d年是閏年\n",year);elseprintf("%d年不是閏年\n",year);return0;}3.4今年究竟多少天?邏輯運(yùn)算符及其優(yōu)先次序運(yùn)算符含義舉例說(shuō)明!邏輯非(NOT)!a如果a為假,則!a為真;如果a為真,則!a為假&&邏輯與(AND)a&&b如果a和b都為真,則結(jié)果為真,否則為假|(zhì)|邏輯或(OR)a||b如果a和b有一個(gè)以上為真,則結(jié)果為真,二者都為假時(shí),結(jié)果為假邏輯運(yùn)算符及其優(yōu)先次序“&&”和“‖”是雙目運(yùn)算符,要求有兩個(gè)運(yùn)算對(duì)象(操作數(shù));“!”是單目運(yùn)算符,只要有一個(gè)運(yùn)算對(duì)象優(yōu)先次序:!(非)→&&(與)→‖(或),即“!”為三者中最高的;邏輯運(yùn)算符中的“&&”和“‖”低于關(guān)系運(yùn)算符,“!”高于算術(shù)運(yùn)算符邏輯運(yùn)算結(jié)果不是0就是1,不可能是其他數(shù)值。而在邏輯表達(dá)式中作為參加邏輯運(yùn)算的運(yùn)算對(duì)象可以是0(“假”)或任何非0的數(shù)值(按“真”對(duì)待)邏輯運(yùn)算符及其優(yōu)先次序ab!a!ba&&ba||b真(非0)真(非0)假(0)假(0)真(1)真(1)真(非0)假(0)假(0)真(1)假(0)真(1)假(0)真(非0)真(1)假(0)假(0)真(1)假(0)假(0)真(1)真(1)假(0)假(0)【例3?6】分析邏輯運(yùn)算的結(jié)果#include<stdio.h>intmain(){ inta=0,b=10,c=-6; intresult_1=a&&b,result_2=c||0; printf("%d,%d\n",result_1,!c); printf("%d,%d\n",9&&0,result_2); printf("%d,%d\n",b||100,0&&0); return0;}【例3?7】分析邏輯運(yùn)算的結(jié)果#include<stdio.h>intmain(){ charc='a'; inti=3,j=4,k=5; floatx=2e+5,y=0.3; printf("%d,%d\n",!x*!y,!!!x); printf("%d,%d\n",x||i&&j-3,i<j&&x<y); printf("%d,%d\n",i==5&&c&&(j=8),x+y||i+j+k);

return0;}【例3?8】鍵盤輸入任意一個(gè)字符,判斷該字符的類型:數(shù)字字符、大寫英文字符、小寫英文字符、其它字符。使用if–elseif-else語(yǔ)句實(shí)現(xiàn)。#include<stdio.h>intmain(){charc;printf("Inputacharacter:");c=getchar();if(c>='0'&&c<='9') printf("Thisisadigit\n");elseif(c>='A'&&c<='Z')

printf("Thisisauppercaseletter\n");elseif(c>='a'&&c<='z') printf("Thisisalowercaseletter\n");else printf("Thisisanothercharacter\n");return0;}【例3?9】從鍵盤輸入四則運(yùn)算表達(dá)式,輸出對(duì)應(yīng)的結(jié)果。按如下樣式輸入(注意操作數(shù)與運(yùn)算符之間沒(méi)有空格),其中運(yùn)算符為:+、-、*、/。#include"stdio.h"intmain(){floatx,y,z;charc;printf("請(qǐng)輸入要計(jì)算的式子:");scanf("%f%c%f",&x,&c,&y);switch(c){case'+':z=x+y;printf("%f%c%f=%f",x,c,y,z);break;case'-':z=x-y;printf("%f%c%f=%f",x,c,y,z);break;case'*':z=x*y;printf("%f%c%f=%f",x,c,y,z);break;case'/':z=x/y;printf("%f%c%f=%f",x,c,y,z);break;

3.5輯編個(gè)簡(jiǎn)易計(jì)算器default:printf("運(yùn)算符錯(cuò)誤!\n");}return0;}(1)switch語(yǔ)句的格式switch(表達(dá)式){case常量表達(dá)式1:語(yǔ)句1case常量表達(dá)式2:語(yǔ)句2;......case常量表達(dá)式m:語(yǔ)句m;case常量表達(dá)式m+1:語(yǔ)句m+1;......case常量表達(dá)式n;語(yǔ)句n;

default:語(yǔ)句n+1;

}3.5switch多分支選擇結(jié)構(gòu)(2)switch語(yǔ)句的執(zhí)行過(guò)程1)首先計(jì)算switch后的“表達(dá)式”的值。2)然后,程序從第一個(gè)case開始,順序地將switch后“表達(dá)式”的值與各個(gè)case后面的“常量表達(dá)式”比較,若相等,程序則從該case進(jìn)入,執(zhí)行后面的所有語(yǔ)句,若m與“常量表達(dá)式m”相同,則流程轉(zhuǎn)入“case常量表達(dá)式m”支路,執(zhí)行冒號(hào)后面的所有語(yǔ)句,也就是從“語(yǔ)句m”一直執(zhí)行到“語(yǔ)句n+1”,而不管后面的case是否匹配成功。也就是說(shuō),如果switch后“表達(dá)式”的值等于m,程序從“語(yǔ)句m”一直執(zhí)行到“語(yǔ)句n+1”。3)如果直到最后一個(gè)case也沒(méi)有找到與switch后“表達(dá)式”相等的值,那么就執(zhí)行default后的“語(yǔ)句n+1”。switch語(yǔ)句的執(zhí)行過(guò)程用switch語(yǔ)句實(shí)現(xiàn)多分支選擇結(jié)構(gòu)

(1)括號(hào)內(nèi)的“表達(dá)式”,其值的類型應(yīng)為整數(shù)類型(包括字符型)。(2)花括號(hào)內(nèi)是一個(gè)復(fù)合語(yǔ)句,內(nèi)包含多個(gè)以關(guān)鍵字case開頭的語(yǔ)句行和最多一個(gè)以default開頭的行。case后面跟一個(gè)常量(或常量表達(dá)式),它們和default都是起標(biāo)號(hào)作用,用來(lái)標(biāo)志一個(gè)位置。執(zhí)行switch語(yǔ)句時(shí),先計(jì)算switch后面的“表達(dá)式”的值,然后將它與各case標(biāo)號(hào)比較,如果與某一個(gè)case標(biāo)號(hào)中的常量相同,流程就轉(zhuǎn)到此case標(biāo)號(hào)后面的語(yǔ)句。如果沒(méi)有與switch表達(dá)式相匹配的case常量,流程轉(zhuǎn)去執(zhí)行default標(biāo)號(hào)后面的語(yǔ)句。(3)可以沒(méi)有default標(biāo)號(hào),此時(shí)如果沒(méi)有與switch表達(dá)式相匹配的case常量,則不執(zhí)行任何語(yǔ)句。(4)各個(gè)case標(biāo)號(hào)出現(xiàn)次序不影響執(zhí)行結(jié)果。(5)每一個(gè)case常量必須互不相同;否則就會(huì)出現(xiàn)互相矛盾的現(xiàn)象。(6)case標(biāo)號(hào)只起標(biāo)記的作用。在執(zhí)行switch語(yǔ)句時(shí),根據(jù)switch表達(dá)式的值找到匹配的入口標(biāo)號(hào),在執(zhí)行完一個(gè)case標(biāo)號(hào)后面的語(yǔ)句后,就從此標(biāo)號(hào)開始執(zhí)行下去,不再進(jìn)行判斷。因此,一般情況下,在執(zhí)行一個(gè)case子句后,應(yīng)當(dāng)用break語(yǔ)句使流程跳出switch結(jié)構(gòu)。最后一個(gè)case子句(今為default子句)中可不加break語(yǔ)句。(7)在case子句中雖然包含了一個(gè)以上執(zhí)行語(yǔ)句,但可以不必用花括號(hào)括起來(lái),會(huì)自動(dòng)順序執(zhí)行本case標(biāo)號(hào)后面所有的語(yǔ)句。當(dāng)然加上花括號(hào)也可以。(8)多個(gè)case標(biāo)號(hào)可以共用一組執(zhí)行語(yǔ)句?!纠??10】當(dāng)輸入數(shù)字1,打印出“星期一”,輸入數(shù)字2,打印出“星期二”,以此類推,輸入數(shù)字7,打印出“星期日”。請(qǐng)你用switch多分支結(jié)構(gòu)幫輔導(dǎo)員編寫一個(gè)程序?qū)崿F(xiàn)這個(gè)功能。#include<stdio.h>intmain(){intiNum;printf("請(qǐng)輸入1-7的數(shù)字:");scanf("%d",&iNum);switch(iNum){ case1:printf("星期一\n");break; case2:printf("星期二\n");break; case3:printf("星期三\n");break;

return0;}case4:printf("星期四\n");break;case5:printf("星期五\n");break;case6:printf("星期六\n");break;case7:printf("星期日\(chéng)n");break;default:printf("輸入錯(cuò)誤!\n");break;}(1)switch語(yǔ)句的格式switch(表達(dá)式1) { case常量1:語(yǔ)句1 case常量2:switch(表達(dá)式2){case常量1:語(yǔ)句1case常量2:語(yǔ)句2……case常量m:語(yǔ)句mdefault:語(yǔ)句m+1} ……3.5switch結(jié)構(gòu)的嵌套case常量n:語(yǔ)句n default:語(yǔ)句n+1 }首先計(jì)算外層switch后面括號(hào)中表達(dá)式1的值,依次與外層各個(gè)case的常量1…n比較,假定表達(dá)式1的值與case常量2相同,就轉(zhuǎn)入執(zhí)行case常量2后面內(nèi)嵌的switch語(yǔ)句,內(nèi)層switch執(zhí)行結(jié)束后,再繼續(xù)執(zhí)行外層switch語(yǔ)句中剩下的語(yǔ)句。(2)switch嵌套結(jié)構(gòu)的執(zhí)行過(guò)程【例3?11】使用條件運(yùn)算符將百分制轉(zhuǎn)換為五分制。#include<stdio.h>intmain(){intscore;chargrade;printf("請(qǐng)輸入考試成績(jī)\n");scanf("%d",&score);grade=score>=90?'A':score>=80?'B':score>=70?'C':score>=60?'P':'F';printf("成績(jī)級(jí)別為:%c\n",grade);return0;}

3.6再來(lái)評(píng)一評(píng)等級(jí)3.6.2條件運(yùn)算符和條件表達(dá)式表達(dá)式1?表達(dá)式2:表達(dá)式3條件運(yùn)算符由兩個(gè)符號(hào)(?和:)組成,必須一起使用。要求有3個(gè)操作對(duì)象,稱為三目(元)運(yùn)算符,它是C語(yǔ)言中唯一的一個(gè)三目運(yùn)算符。條件運(yùn)算符的執(zhí)行順序:先求解表達(dá)式1,若為非0(真)則求解表達(dá)式2,此時(shí)表達(dá)式2的值就作為整個(gè)條件表達(dá)式的值。若表達(dá)式1的值為0(假),則求解表達(dá)式3,表達(dá)式3的值就是整個(gè)條件表達(dá)式的值。if(a>b) max=a;else max=b;max=(a>b)?a:b;表達(dá)式1條件表達(dá)式取表達(dá)式2的值條件表達(dá)式取表達(dá)式3的值真(非0)a>b?(max=a):(max=b);//表達(dá)式2和表達(dá)式3是賦值表達(dá)式或假(0)(2)條件表達(dá)式嵌套使用(2)條件表達(dá)式可以進(jìn)行嵌套,多級(jí)嵌套采用“自右向左”結(jié)合。例如例3-11第7行的條件表達(dá)式”grade=score>=90?'A':score>=80?'B':score>=70?'C':score>=60?'P':'F';”由于“=”運(yùn)算符的優(yōu)先級(jí)小于條件運(yùn)算符,

上式等價(jià)于:grade=(score>=90?'A':score>=80?'B':score>=70?'C':score>=60?'P':'F');按照條件運(yùn)算符自右向左結(jié)合,該式計(jì)算順序等價(jià)于:grade=(score>=90?'A':(score>=80?'B':(score>=70?'C':(score>=60?'P':'F'))));為提高銷售業(yè)務(wù)人員的積極性,公司常常制定相應(yīng)的激勵(lì)措施,將業(yè)務(wù)人員的收入與其銷售額掛鉤,一般把收入分為基本工資和銷售提成兩部分,而提成部分又根據(jù)銷售額設(shè)置不同的提成比例,以進(jìn)一步激勵(lì)業(yè)務(wù)人員多銷售產(chǎn)品。比如,某公司就依據(jù)了上述的思想,設(shè)計(jì)了該公司銷售提成方案:當(dāng)銷售額小于10萬(wàn)元,提成金額為銷售額的5%;當(dāng)銷售額大于等于10萬(wàn)元而小于20萬(wàn)元,提成金額為銷售額的8%;當(dāng)銷售額大于等于20萬(wàn)元而小于40萬(wàn)元,提成金額為銷售額的10%;當(dāng)銷售額大于等于40萬(wàn)元,提成金額為銷售額的12%。該公司的財(cái)務(wù)每個(gè)月需要根據(jù)銷售業(yè)務(wù)人員的銷售額計(jì)算他們的提成,由于業(yè)務(wù)人員較多,提成金額計(jì)算工作量很大,你能用本章所學(xué)的知識(shí)為該公司的財(cái)務(wù)部門編寫一個(gè)C語(yǔ)言程序計(jì)算提成金額嗎?分別用if結(jié)構(gòu)和switch結(jié)構(gòu)實(shí)現(xiàn)提成金額計(jì)算程序,輸入為業(yè)務(wù)人員的銷售額,輸出為該人員的提成金額。3.7案例項(xiàng)目——用if和switch結(jié)構(gòu)實(shí)現(xiàn)銷售提成計(jì)算(1)用if結(jié)構(gòu)實(shí)現(xiàn)#include<stdio.h>intmain(){float

fSale,

fCommission,

fRate;printf("請(qǐng)輸入業(yè)務(wù)員本月的銷售額(萬(wàn)元):");scanf("%f",

&fSale);if(fSale

<

10)fRate

=

0.05;else

if(fSale

<

20)fRate

=

0.08;else

if(fSale

<

40)fRate

=

0.1;elsefRate

=

0.12;fCommission

=

fSale

*

fRate;printf("該業(yè)務(wù)員本月的提成金額為:

%f萬(wàn)元\n",

fCommission);return0;}(2)用switch結(jié)構(gòu)實(shí)現(xiàn)提成比例與銷售額關(guān)系(2)用switch結(jié)構(gòu)實(shí)現(xiàn)#include<stdio.h>intmain(){float

fSale,

fCommission,

fRate;printf("請(qǐng)輸入業(yè)務(wù)員本月的銷

售額(萬(wàn)元):");scanf("%f",

&fSale);int

iC

=

(int)fSale

/

10;switch(iC){case

0:fRate

=

0.05;break;case

1:

fRate

=

0.08;break;

case

2:

case

3:

fRate

=

0.1;break;default:

fRate

=

0.12;

break;}fCommission

=

fSale

*

fRate;printf("該業(yè)務(wù)員本月的提成金額為:

%f萬(wàn)元\n",

fCommission);return

0;}單分支結(jié)構(gòu)、雙分支和多分支結(jié)構(gòu)關(guān)系運(yùn)算符和關(guān)系表達(dá)式switch結(jié)構(gòu)及其嵌套條件表達(dá)式第4章循環(huán)結(jié)構(gòu)掌握while、do-while和for三種循環(huán)結(jié)構(gòu)掌握break與continue在循環(huán)結(jié)構(gòu)中的用法掌握循環(huán)嵌套的用法具備使用三種循環(huán)結(jié)構(gòu)來(lái)解決常見(jiàn)的重復(fù)操作問(wèn)題的能力本章目標(biāo)例子1:向國(guó)旗敬個(gè)禮4.1理解循環(huán)結(jié)構(gòu)程序代碼:#include"stdio.h"intmain(){

printf("1.向國(guó)旗敬禮,禮畢\n");

printf("2.向國(guó)旗敬禮,禮畢\n");

printf("3.向國(guó)旗敬禮,禮畢\n");

printf("4.向國(guó)旗敬禮,禮畢\n");

printf("5.向國(guó)旗敬禮,禮畢\n");

return0;}

思考:這個(gè)程序?qū)懙暮貌缓??如果?0個(gè)同學(xué)參加升旗儀式,需要顯示每一個(gè)向國(guó)旗敬禮的同學(xué),如何編寫代碼?例子2:向國(guó)旗敬個(gè)禮4.1理解循環(huán)結(jié)構(gòu)程序代碼:#include"stdio.h"main(){ inti; i=1; while(i<=5){ printf("%d.向國(guó)旗敬禮,禮畢\n",i); i++; }}

思考:采用循環(huán)結(jié)構(gòu)設(shè)計(jì)程序,如何控制重復(fù)執(zhí)行的次數(shù)?4.1理解循環(huán)結(jié)構(gòu)什么是“循環(huán)”?簡(jiǎn)單而言:循環(huán)就是不斷反復(fù)地執(zhí)行同一段程序。

(1)循環(huán)變量:第一次循環(huán)條件判斷之前初始化,設(shè)定循環(huán)操作的起點(diǎn)。(2)循環(huán)條件:用來(lái)判斷是否進(jìn)入循環(huán)體執(zhí)行重復(fù)的操作,隨著循環(huán)的進(jìn)行,循環(huán)條件通常逐漸趨于不成立。(3)循環(huán)體:需要重復(fù)執(zhí)行的語(yǔ)句塊,通常包含循環(huán)變量改變的語(yǔ)句,使得循環(huán)逐步趨于結(jié)束。4.1理解循環(huán)結(jié)構(gòu)循環(huán)結(jié)構(gòu)的要素4.2while循環(huán)while語(yǔ)句語(yǔ)句的格式:while(表達(dá)式)

循環(huán)體語(yǔ)句說(shuō)明:(1)表達(dá)式可以是任意類型,一般為關(guān)系表達(dá)式或邏輯表達(dá)式,其值為循環(huán)條件。如果表達(dá)式的值為0表示條件不滿足,否則表示條件滿足。(2)循環(huán)體可以是任何單個(gè)語(yǔ)句,也可以是一組語(yǔ)句,當(dāng)是一組語(yǔ)句時(shí),需要用大括號(hào)將語(yǔ)句組擴(kuò)起來(lái)。4.2while循環(huán)while執(zhí)行過(guò)程執(zhí)行過(guò)程:說(shuō)明:(1)當(dāng)表達(dá)式的值為真(非0)時(shí),執(zhí)行其中的內(nèi)嵌語(yǔ)句(循環(huán)體),(2)回過(guò)頭來(lái)再判斷表達(dá)式的值,如此重復(fù);(3)當(dāng)表達(dá)式為假(0)時(shí)結(jié)束循環(huán)。4.2while循環(huán)例4.4:用while循環(huán)求“1+2+3+…100”的和。程序代碼:#include<stdio.h>main(){ inti=1,sum=0; while(i<=100){ sum=sum+i; i++; } printf("%d",sum);}運(yùn)行結(jié)果:5050分析:累加求和的問(wèn)題

sum=1+2+3+…+100sum=0sum=sum+1sum=sum+2sum=sum+3……sum=sum+i和的新值和的當(dāng)前值求和項(xiàng)當(dāng)前值4.2while循環(huán)注意:(1)循環(huán)體有可能一次也不執(zhí)行。(2)循環(huán)前,必須給循環(huán)控制變量賦初值。(3)若循環(huán)體包含一條以上的語(yǔ)句,應(yīng)以復(fù)合語(yǔ)句形式出現(xiàn)。(4)循環(huán)體中,必須有改變循環(huán)控制變量值的語(yǔ)句(使循環(huán)趨向結(jié)束的語(yǔ)句)。

(5)無(wú)限循環(huán):while(1)循環(huán)體;(6)循環(huán)體為空如:

while((c=getchar())!='A');從鍵盤輸入字符直到輸入A為止

等價(jià)于:c=getchar();while(c!='A')c=getchar();4.3do-while循環(huán)do-while語(yǔ)句語(yǔ)句的格式:說(shuō)明(與while相同):(1)表達(dá)式可以是任意類型,一般為關(guān)系表達(dá)式或邏輯表達(dá)式,其值為循環(huán)條件。如果表達(dá)式的值為0表示條件不滿足,否則表示條件滿足。(2)循環(huán)體可以是任何單個(gè)語(yǔ)句,也可以是一組語(yǔ)句,當(dāng)是一組語(yǔ)句時(shí),需要用大括號(hào)將語(yǔ)句組擴(kuò)起來(lái)。do

循環(huán)體語(yǔ)句while(表達(dá)式);4.3do-while循環(huán)do-while執(zhí)行過(guò)程執(zhí)行過(guò)程:說(shuō)明:(1)

執(zhí)行循環(huán)體,當(dāng)表達(dá)式的值為真(非0)時(shí);(2)再次執(zhí)行循環(huán)體,如此重復(fù);(3)當(dāng)表達(dá)式為假(0)時(shí)結(jié)束循環(huán)。4.3do-while循環(huán)例4.7:用do-while循環(huán)求“1+2+3+…100”的和。程序代碼:#include"stdio.h"main(){ inti=1,sum=0; do{ sum=sum+i; }while(i<=100); printf("%d",sum);}運(yùn)行結(jié)果:5050#include<stdio.h>main(){ inti=1,sum=0; while(i<=100){ sum=sum+i; i++; } printf("%d",sum);}while循環(huán):先做后判先判后做4.3do-while循環(huán)注意:(1)do~while循環(huán)的特點(diǎn):先執(zhí)行循環(huán)體,后判斷表達(dá)式,實(shí)現(xiàn)“直到”型循環(huán),所以循環(huán)體至少會(huì)執(zhí)行一次。(2)循環(huán)體中要有使循環(huán)趨于結(jié)束的語(yǔ)句;do~while循環(huán)最后的分號(hào)“;”不可少,否則將出現(xiàn)語(yǔ)法錯(cuò)誤4.4for循環(huán)for語(yǔ)句語(yǔ)句的格式:for(表達(dá)式1;表達(dá)式2;表達(dá)式3)

循環(huán)體語(yǔ)句;for(循環(huán)變量賦初值;循環(huán)條件;循環(huán)變量增值)循環(huán)體語(yǔ)句;表達(dá)式運(yùn)用4.4for循環(huán)for語(yǔ)句說(shuō)明:(1)循環(huán)體語(yǔ)句可以是任意語(yǔ)句;(2)三個(gè)表達(dá)式可以是任意類型;(3)表達(dá)式1用于給某些變量賦初值,多數(shù)情況下,在此處給循環(huán)控制變量賦初值;(4)表達(dá)式2用來(lái)說(shuō)明循環(huán)終止條件,多數(shù)情況下,是根據(jù)循環(huán)控制變量的值確定循環(huán)是否結(jié)束;(5)表達(dá)式3用來(lái)改變某些變量的值,多數(shù)情況下,使循環(huán)控制變量的值增加或減少,使循環(huán)控制變量的值向著使循環(huán)終止的方向改變。4.4for循環(huán)for執(zhí)行過(guò)程執(zhí)行過(guò)程:說(shuō)明:(1)計(jì)算表達(dá)式1的值,然后轉(zhuǎn)(2);(2)計(jì)算表達(dá)式2的值,若其值為非0,轉(zhuǎn)(3);否則轉(zhuǎn)(5);(3)執(zhí)行循環(huán)體,轉(zhuǎn)(4);(4)計(jì)算表達(dá)式3,轉(zhuǎn)(2);(5)退出循環(huán),執(zhí)行循環(huán)體下面的語(yǔ)句。4.4for循環(huán)例4.10:用for循環(huán)求“1+2+3+…100”的和。程序代碼:#include<stdio.h>main(){ inti,sum=0; for(i=1;i<=100;i++)/*循環(huán)要素*/ sum=sum+i; printf("%d",sum);}運(yùn)行結(jié)果:5050表達(dá)式1為變量賦初值表達(dá)式2說(shuō)明循環(huán)終止條件表達(dá)式3改變變量的值4.4for循環(huán)注意:for循環(huán)結(jié)構(gòu)的變化(1)

表達(dá)式1省略時(shí),應(yīng)在for前給循環(huán)變量賦初值。如:k=1;

for(;k<=3;k++)s=s+k;(2)

表達(dá)式2省略時(shí),不判斷循環(huán)條件,將成為“死循環(huán)”,需要在

循環(huán)體中引入break語(yǔ)句以退出循環(huán);(3)表達(dá)式3省略時(shí),循環(huán)體內(nèi)應(yīng)有使循環(huán)條件改變的語(yǔ)句。

如:for(k=1;k<=3;)

{s=s+k;

k++;}

4.4for循環(huán)注意:for循環(huán)結(jié)構(gòu)的變化(4)

同時(shí)省略表達(dá)式1和表達(dá)式3,只有表達(dá)式2,此時(shí)相當(dāng)于while

語(yǔ)句。如

k=1;while(k<=100){s=s+k;k++;}(5)表達(dá)式2一般是關(guān)系表達(dá)式或邏輯表達(dá)式,但也可以是數(shù)值表達(dá)

式或字符表達(dá)式,只要其值不等于0就執(zhí)行循環(huán)體。

如:for(k=1;k-4;k++)s=s+k;

僅當(dāng)k的值等于4時(shí)終止循環(huán)。k-4是數(shù)值表達(dá)式。k=1;for(

;k<=100;){s=s+k;k++;}4.5循環(huán)結(jié)構(gòu)間的比較和總結(jié)while(表達(dá)式)

循環(huán)體語(yǔ)句do

循環(huán)體語(yǔ)句while

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 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ì)用戶上傳內(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ì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論