版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
C語(yǔ)言課程教案詳解
章節(jié)題目:
第一章C語(yǔ)言概述
教學(xué)時(shí)間:
4學(xué)時(shí)
教學(xué)目的:
1、了解C語(yǔ)言的產(chǎn)生過(guò)程
2、掌握C程序結(jié)構(gòu)
3、掌握C程序開(kāi)發(fā)過(guò)程
4、掌握用TURBOC運(yùn)行一個(gè)C程序。
內(nèi)容、重點(diǎn)、難點(diǎn):
內(nèi)容:
1.1C語(yǔ)言的歷史和特色
1.2C程序結(jié)構(gòu)
1.3C程序的開(kāi)發(fā)過(guò)程
重點(diǎn):
1、掌握C程序的基本結(jié)構(gòu)構(gòu)成
2、學(xué)會(huì)用TurboC運(yùn)行一個(gè)C程序
難點(diǎn):
掌握C程序的開(kāi)發(fā)過(guò)程
第1章C語(yǔ)言概述
C語(yǔ)言是國(guó)際上廣泛流行的一門(mén)高級(jí)程序設(shè)計(jì)語(yǔ)言,具有語(yǔ)言簡(jiǎn)潔、使用方便靈活、移植性
好、能宜接對(duì)系統(tǒng)硬件和外圍接口進(jìn)行控制等特點(diǎn)。本章將簡(jiǎn)要地介紹它的產(chǎn)生過(guò)程和特點(diǎn)、
C程序結(jié)構(gòu)及C程序的上機(jī)步驟,以便對(duì)C語(yǔ)言有一個(gè)概括的認(rèn)識(shí)。
1.1C語(yǔ)言的歷史和特色
1.歷史
1)1960年出現(xiàn)了ALGOL60o
2)1963年和1967年,在ALGOL60的基礎(chǔ)上推出了CPL和BCPL語(yǔ)言更接近于硬件。
3)1970年美國(guó)貝爾實(shí)驗(yàn)室對(duì)BCPL語(yǔ)言做了進(jìn)一步簡(jiǎn)化,設(shè)計(jì)了B語(yǔ)言,并用B語(yǔ)言編寫(xiě)
了第一個(gè)UNIX操作系統(tǒng)。
4)在1972年至1973年間,貝爾實(shí)驗(yàn)室的D.M.Ritchie在B語(yǔ)言的基礎(chǔ)上設(shè)計(jì)出C語(yǔ)言。
2.特色
1)簡(jiǎn)潔緊湊,使用方便靈活
C語(yǔ)言一共只有32個(gè)關(guān)鍵字、9種控制語(yǔ)句,程序書(shū)寫(xiě)自由,壓縮了一切不必要的成分,
語(yǔ)言簡(jiǎn)練。
2)運(yùn)算符豐富
C語(yǔ)言有34種運(yùn)算符和15個(gè)等級(jí)的運(yùn)算優(yōu)先順序,使表達(dá)式類(lèi)型多樣化,可以實(shí)現(xiàn)在其它
語(yǔ)言中難以實(shí)現(xiàn)的運(yùn)算。
3)數(shù)據(jù)類(lèi)型豐富
C語(yǔ)言的數(shù)據(jù)類(lèi)型有整型、實(shí)型、字符型、數(shù)組類(lèi)型、指針類(lèi)型、結(jié)構(gòu)體類(lèi)型、聯(lián)合體類(lèi)型
及枚舉類(lèi)型等,能用來(lái)實(shí)現(xiàn)各種復(fù)雜的數(shù)據(jù)結(jié)構(gòu)的運(yùn)算。
4)模塊化結(jié)構(gòu)
C語(yǔ)言用函數(shù)作為程序的模塊單位,便于實(shí)現(xiàn)程序的模塊化,而且便于模塊間相互調(diào)用及傳
遞數(shù)據(jù)。
5)語(yǔ)法限制少和程序設(shè)計(jì)自由度大
C語(yǔ)言允許程序編寫(xiě)者有較大的自由度,放寬了以往高級(jí)語(yǔ)言嚴(yán)格的語(yǔ)法檢查,較好地處理
了“限制”與“靈活”這一對(duì)矛盾。
6)比較接近硬件
C語(yǔ)言允許直接訪問(wèn)物理地址,能進(jìn)行位操作,能實(shí)現(xiàn)匯編語(yǔ)言的大部分功能,可以直接對(duì)
硬件進(jìn)行操作。
7)生成目標(biāo)代碼質(zhì)量高、程序執(zhí)行效率高
一般只比匯編程序生成的目標(biāo)代碼效率低10%—20%。
8)可移植性好
基本上不做修改就能用于各種型號(hào)的計(jì)算機(jī)和各種操作系統(tǒng)。
1.2C程序結(jié)構(gòu)
下面列出幾個(gè)簡(jiǎn)單的c程序來(lái)說(shuō)明c程序的結(jié)構(gòu)特征。
例1」輸出一行信息。
main()
{
printf("ThisisfirstCprogramme!\n");
}
該程序的作用是輸出?一行信息:ThisisfirstCprogramme!
main表示“主函數(shù)”;
函數(shù)體用大括號(hào){}括起來(lái)。本例題中主函數(shù)僅包含一個(gè)語(yǔ)句,該語(yǔ)句由printf()輸出函數(shù)構(gòu)
成。括號(hào)內(nèi)雙引號(hào)中的字符串按原樣輸出;
'\n'是換行符,即在輸出"ThisisfirstCprogramme!"后回車(chē)換行;
語(yǔ)句后面有一個(gè)分號(hào),表示該語(yǔ)句結(jié)束,這個(gè)分號(hào)必不可少。
例1.2計(jì)算兩個(gè)數(shù)之和。
main()/*求兩個(gè)數(shù)之和*/
(
inta,b,sum;/*定義3個(gè)整型變量*/
a=123;/*以下3行為C語(yǔ)句*/
b=321;
sum=a+b:
printf("sumis%d\n",sum);
}
該程序的作用是求兩個(gè)整數(shù)a和b之和sum,并在屏幕上輸出sum。程序中,/*……*/表
示注釋部分,對(duì)編譯和運(yùn)行不起作用。第3行是變量說(shuō)明,使用的a、b和sum為整型(int)
變量。第4行是兩個(gè)賦值語(yǔ)句,使a的值為123,b為321。第5行使sum的值為a+b,第6
行的%d是輸入輸出的“格式說(shuō)明”,表示“十進(jìn)制整數(shù)類(lèi)型",printf函數(shù)中括號(hào)內(nèi)最右端
的sum是要輸出的變量,當(dāng)然它的值為444。
例1.3比較兩個(gè)數(shù)的大小。
main()/*主函數(shù),功能輸入兩個(gè)整數(shù),判斷后輸出較大的數(shù)*/
{
inta,b,c;/*定義3個(gè)整型變量*/
scanf("%d,%d",&a,&b);/*輸入變量a和b的值*/
c=max(a,b);
printf("max=%d\n",c);/*輸出c的值*/
}
intmax(intx,inty)
/*定義max()函數(shù),函數(shù)值為整型,x,y為形式參數(shù)、整形變量*/
{
intz;
/*定義main()函數(shù)內(nèi)部用到的變量z為整數(shù)*/
if(x>y)
z=x;/*將x,y中較大的值賦給z*/
else
z=y;
return(z);
/*將z值返回。通過(guò)max。函數(shù)帶回調(diào)用處*/
}
該程序的作用是從鍵盤(pán)輸入兩個(gè)整數(shù),然后在屏幕上輸出它們中較大值的數(shù)。
程序的第5行是調(diào)用max()函數(shù),在調(diào)用過(guò)程中將實(shí)際參數(shù)a和b的值,分別傳遞給max()
函數(shù)中的形式參數(shù)x和y,然后得到一個(gè)返回值(z的值),并把這個(gè)值賦給變量c。
運(yùn)行情況如下:
2,8Z
max=8
從以上幾個(gè)例題,可以看到C程序的結(jié)構(gòu)特征。
1.C程序是由函數(shù)構(gòu)成的。
一個(gè)C程序至少有一個(gè)main()函數(shù),也可以包含一個(gè)main()函數(shù)和若干個(gè)其它函數(shù)。
2.一個(gè)函數(shù)有兩部分構(gòu)成。
函數(shù)說(shuō)明部分,即函數(shù)的第一行,包括函數(shù)類(lèi)型、函數(shù)名、形參類(lèi)型、形參名。
函數(shù)體,由一對(duì)大括號(hào){}括起來(lái)的語(yǔ)句集合。函數(shù)體一般包括有聲明部分和執(zhí)行部分。聲明
部分用于定義所用到的變量。執(zhí)行部分由若干語(yǔ)句組成。
3.?個(gè)C程序總是從main。函數(shù)開(kāi)始執(zhí)行,而不管main()在源程序中的位置,執(zhí)行完主函
數(shù)中的所有語(yǔ)句后,程序就結(jié)束。
4.每個(gè)語(yǔ)句和變量定義的最后必須要有一個(gè)分號(hào),分號(hào)是C語(yǔ)句的必要組成部分。
5.C語(yǔ)言本身沒(méi)有提供輸入和輸出語(yǔ)句,輸入輸出操作是通過(guò)庫(kù)函數(shù)scanf。、printf。等函
數(shù)來(lái)實(shí)現(xiàn)的。
6.C語(yǔ)言用/*……*/對(duì)程序進(jìn)行注釋?zhuān)?和*之間不允許留有空格,/*和*/應(yīng)當(dāng)一一對(duì)應(yīng)匹配,
注釋部分允許出現(xiàn)在程序中的任何位置上。程序中加一些注釋?zhuān)梢栽黾映绦虻目勺x性。
1.3C程序的開(kāi)發(fā)過(guò)程
用c語(yǔ)句編寫(xiě)的程序稱(chēng)為“源程序”。
1.C程序開(kāi)發(fā)的4個(gè)基本步驟
一般C程序開(kāi)發(fā)要經(jīng)歷4個(gè)基本步驟:
編輯——編譯——連接——運(yùn)行
(1)編輯
使用字處理軟件或編輯工具將源程序以文本文件形式保存到磁盤(pán),源程序文件名由用戶(hù)自己
選定,但擴(kuò)展名必須為".c"。
(2)編譯
編譯的功能就是調(diào)用“編譯程序”,將已編輯好的源程序翻譯成二進(jìn)制的目標(biāo)代碼。如果源
程序沒(méi)有語(yǔ)法錯(cuò)誤將產(chǎn)生一個(gè)與源程序同名,以".obj"為擴(kuò)展名的目標(biāo)程序。
(3)連接
編譯后產(chǎn)生的目標(biāo)程序往往形成多個(gè)模塊,還要和庫(kù)函數(shù)進(jìn)行連接才能運(yùn)行,連接過(guò)程是使
用系統(tǒng)提供的“連接程序”運(yùn)行的。連接后,產(chǎn)生以".exe”為擴(kuò)展名的可執(zhí)行程序。
(4)運(yùn)行
可執(zhí)行程序生成后,就可以在操作系統(tǒng)的支持下運(yùn)行,若執(zhí)行結(jié)果達(dá)到預(yù)期的1=1的,則開(kāi)發(fā)
工作到此完成,否則,要進(jìn)一步地經(jīng)過(guò)以上過(guò)程以取得最終的正確結(jié)果。
2.使用TurboC開(kāi)發(fā)程序的方法
現(xiàn)在,多數(shù)的C程序開(kāi)發(fā)使用一個(gè)集成TurboC開(kāi)發(fā)工具來(lái)完成。下面簡(jiǎn)單介紹使用Turbo
C開(kāi)發(fā)程序的方法。
(1)TurboC的目錄及文件
TurboC應(yīng)裝入磁盤(pán)的某一目錄下,例如,放在c盤(pán)的根目錄下一級(jí)TC子目錄下,TurboC
安裝完成后,磁盤(pán)上將增加以下目錄及文件:
TC子目錄(c:\tc):其中包括tc.exe、tcc.exe、make.exe等執(zhí)行文件。
INCLUDE子目錄(c:\tc\include):其中包括stdio.h、string.h,math.h等頭文件。
Lib子目錄(c:\tc\lib):其中包括graphlics.lib、math.lib、math1.lib等庫(kù)函數(shù)文件。
BGI子目錄(c:\tc|bgi):其中包括tc運(yùn)行時(shí)所需的信息。
通過(guò)執(zhí)行tc.exe命令就可以進(jìn)入TurboC環(huán)境,如果用戶(hù)的當(dāng)前目錄是TurboC所在的子目
錄tc,則只需從鍵盤(pán)輸入“tc”命令即可。
C:\tc>tc/
(2)TurboC集成環(huán)境作簡(jiǎn)單介紹,它包括以下兒個(gè)方面的內(nèi)容:
主菜單窗口
編輯窗口
信息窗口
功能鍵提示行
3.用ThrboC運(yùn)行第一個(gè)C程序
下面介紹使用TurboC編輯和運(yùn)行一個(gè)簡(jiǎn)單的C程序的操作步驟:
(1)編輯或修改源程序。
在編輯窗口鍵入一下源程序:
main()
(
printf(”ThisismyfirstCprogram");
}
然后執(zhí)行“File/save”命令;或按“F2”鍵存盤(pán)。
(2)編譯與連接源程序。
執(zhí)行"compile/makeexefile”命令或直接按下F9鍵,即可一次完成編譯與連接。
(3)運(yùn)行程序。
按“F10”鍵返回主菜單,用光標(biāo)移動(dòng)鍵將亮條移到“Run”菜單選項(xiàng)回車(chē)或按下“Ctrl+F9”
鍵,即可運(yùn)行剛生成的可執(zhí)行文件。此時(shí)TurboC工作窗口消失,屏幕上顯示程序運(yùn)行結(jié)
果:
ThisismyfirstCprogram
若發(fā)現(xiàn)運(yùn)行結(jié)果不對(duì),可再按“F10”鍵回工作窗口,重復(fù)上述步驟。
(4)運(yùn)行程序后查看程序的運(yùn)行結(jié)果。
(5)退出TurboC,按“Alt+X”鍵,系統(tǒng)即退出Turbo環(huán)境。
本章小結(jié)
本章對(duì)C語(yǔ)言進(jìn)行了總體介紹,對(duì)學(xué)生的要求是掌握基本概念,學(xué)習(xí)的過(guò)程要緊密結(jié)合本
章的知識(shí)要點(diǎn):
1.程序的構(gòu)成,main。函數(shù)和其他函數(shù)。
2.頭文件、數(shù)據(jù)說(shuō)明、函數(shù)的開(kāi)始和結(jié)束標(biāo)志。
3.源程序的書(shū)寫(xiě)格式。
4.C語(yǔ)言的風(fēng)格。
作業(yè):
章節(jié)題目:
第二章順序結(jié)構(gòu)程序設(shè)計(jì)
教學(xué)時(shí)間:
6學(xué)時(shí)
教學(xué)目的:
1、掌握常量與變量的書(shū)寫(xiě)和定義
2、掌握三種基本數(shù)據(jù)類(lèi)型
3、掌握運(yùn)算符和表達(dá)式的使用
4、掌握順序結(jié)構(gòu)程序設(shè)計(jì)的方法
內(nèi)容、重點(diǎn)、難點(diǎn):
內(nèi)容:
2.1常量和變量
2.2整型數(shù)據(jù)
2.3實(shí)型數(shù)據(jù)
2.4字符型數(shù)據(jù)
2.5變量的初始化
2.6運(yùn)算符和表達(dá)式
重點(diǎn):
1、三種基本數(shù)據(jù)類(lèi)型的定義和使用
2、各種運(yùn)算符的使用
難點(diǎn):
1、運(yùn)算符的使用
2、使用順序結(jié)構(gòu)編程
第2章順序結(jié)構(gòu)程序設(shè)計(jì)
順序結(jié)構(gòu)是一組按書(shū)寫(xiě)順序執(zhí)行的語(yǔ)句。本章將主要介紹程序中用到的一些基本要素(常量、
變量、運(yùn)算符、表達(dá)式和輸入輸出語(yǔ)句等),以及基本的數(shù)據(jù)類(lèi)型(整型、實(shí)型和字符型)。
2.1常量和變量
2.1.1常量
1)常量:在程序運(yùn)行的過(guò)程中,其值不能被改變的量。
如2、4、-1.6等。
2)分類(lèi):普通常量和符號(hào)常量
3)符號(hào)常量:用一個(gè)標(biāo)識(shí)符代表一個(gè)常量,這樣的標(biāo)識(shí)符稱(chēng)為符號(hào)常量。如用PI代表
3.1415926
4)注意:符號(hào)常量的值在其作用域內(nèi)不能改變,也不能再被賦值。如在程序中,對(duì)PI重新
賦值:PI=2;這樣是不允許的。
2.1.2變量
I)變量
c語(yǔ)言規(guī)定在程序運(yùn)行的過(guò)程中,其值可以改變的量,稱(chēng)為變量。
2)標(biāo)識(shí)符:用來(lái)標(biāo)識(shí)變量名、符號(hào)常量名、函數(shù)名、數(shù)組名、類(lèi)型名和文件名的有效字符序
列。
3)C語(yǔ)言規(guī)定:標(biāo)識(shí)符只能由字母、數(shù)字和下劃線三種字符組成,且第一個(gè)字符必須為字母
或下劃線。一般變量名的長(zhǎng)度不能超過(guò)8個(gè)字符。
如下面是合法的標(biāo)識(shí)符,也是合法的變量名:
sum,average,day,month,student,_above,k_l_2_3,basic
下面是不合法的標(biāo)識(shí)符和變量名:
M.D.John,S123,#33,3D64,a>,-ab
在C語(yǔ)言中,要求對(duì)所有用到的變量作強(qiáng)制定義,也就是"先定義,后使用”。
2.2整型數(shù)據(jù)
2.2.1整型常量
c語(yǔ)言整型常數(shù)可用以下三種形式表示:
1.十進(jìn)制整數(shù):數(shù)碼直接開(kāi)頭的十進(jìn)制數(shù)。
2.八進(jìn)制整數(shù):以0開(kāi)頭的常量是八進(jìn)制數(shù)。
3.十六進(jìn)制整數(shù):以O(shè)x開(kāi)頭的數(shù)是16進(jìn)制數(shù)。
2.2.2整型變量
1.整型變量的分類(lèi)
整型變量可分為:基本型、短整型、長(zhǎng)整型和無(wú)符號(hào)型四種,其定義的關(guān)鍵字如下:
(1)基本型,以int表示。范圍為-32768?32767,即-215?(215-1),
(2)短整型,以shortint或short表示。范圍與基本型相同。
(3)長(zhǎng)整型,以longint或long表示。若一個(gè)整型常量后面加上一個(gè)字母1或L,則認(rèn)為是
longint型常量。范圍為-2147483648?214783647即-231?(231-1)
(4)無(wú)符號(hào)型,在實(shí)際應(yīng)用中變量的值常常是正的,如年齡、工資、成績(jī)等,因此可以將
變量定義為"無(wú)符號(hào)"類(lèi)型。
無(wú)符號(hào)型又分為:
①無(wú)符號(hào)整型,以u(píng)nsignedint或unsigned表示。范圍:0—65535即0?(216-1)。
②無(wú)符號(hào)短整型,以u(píng)nsignedshort表示。范圍:0?65535即0?(216-1)。
③無(wú)符號(hào)長(zhǎng)整型,以u(píng)nsignedlong表示。范圍:0?4294967295即0?(232-1)?
2.整型變量的定義
變量的定義格式為:數(shù)據(jù)類(lèi)型變量表列;
其中若定義多個(gè)同類(lèi)型的變量,則用逗號(hào)分開(kāi)。
例:inta,b;(指定變量a,b為整型)
unsignedshortc,d;(指定變量c,d為無(wú)符號(hào)短整型)
longe.f;(指定變量e,f為長(zhǎng)整型)
3.整型數(shù)據(jù)的輸入
整型變量鍵盤(pán)輸入,是通過(guò)scanf函數(shù)實(shí)現(xiàn)的,scanf函數(shù)是數(shù)據(jù)輸入函數(shù),格式為:
scanf(格式控制,地址表列);
例如:scanf("%d%(l",&a,&b):
(1)格式控制是用雙引號(hào)括起來(lái)的字符串,由"%"和格式字符組成,作用是將輸入數(shù)據(jù)
轉(zhuǎn)換為指定的格式輸入。
(2)格式字符,對(duì)于不同的數(shù)據(jù)用不同的格式字符。d格式符是用來(lái)輸入十進(jìn)制整數(shù)的。
因?yàn)楸竟?jié)問(wèn)題中變量a,b是整型變量,所以輸入時(shí),用了d格式符。
(3)&a,&b中的"&"是"地址運(yùn)算符〃,&a是指a在內(nèi)存中的地址。上面scanf函數(shù)的
作用是:將a、b的值放到a,b在內(nèi)存的地址單元中去。所以,在該問(wèn)題中,若輸入:35
/
則輸出結(jié)果為a+b=8
4.整型數(shù)據(jù)的輸出
整型數(shù)據(jù)的輸出用printf函數(shù)來(lái)實(shí)現(xiàn)。如printf("a+b=%d",c);
printf函數(shù)的格式為:
printf(格式控制,輸出表列);
(1)格式控制和輸入函數(shù)scanf的格式控制基本?致。
(2)輸出表列是需要輸出的數(shù)據(jù)或表達(dá)式。
(3)在輸出整型數(shù)據(jù)時(shí),格式字符如下:
①%d,按整型數(shù)據(jù)的實(shí)際長(zhǎng)度輸出。
②%md,m為輸出字段的寬度,如果輸出數(shù)據(jù)的位數(shù)小于m則左端補(bǔ)以空格,若大于m,
則按實(shí)際位數(shù)輸出。例如
printf(H%4d,%4d",a,b);
若a=123,d=12345,則輸出結(jié)果為
V123,12345(注:V表示空格字符,下同)
③%ld,輸出長(zhǎng)整型數(shù)據(jù)。如
longa=135790;
printf(,f%81d",a);
輸出結(jié)果為:VV135790
一個(gè)int型數(shù)據(jù)可以用%d或%用格式輸出。
@%u,輸Hlunsigned型數(shù)據(jù),即無(wú)符號(hào)類(lèi)型,如unsignedu:那么u在輸出的時(shí)候,應(yīng)該
用u格式控制符,那么輸出時(shí)應(yīng)使用語(yǔ)句:
printf(u%u",u);
例2.1從鍵盤(pán)輸入任意一個(gè)整數(shù),輸出這個(gè)數(shù)的平方的值。
main()
{inta;
longs;
scanf(n%d"、&a);
s=a*a;
printf—'s=%ld\n",s);}
2.3實(shí)型數(shù)據(jù)
2.3.1實(shí)型常量
實(shí)數(shù)在c語(yǔ)言中,又稱(chēng)浮點(diǎn)數(shù)。實(shí)數(shù)有兩種表示形式:
1.十進(jìn)制數(shù)形式。由數(shù)字和小數(shù)點(diǎn)組成(注意必須有小數(shù)點(diǎn))。
2.指數(shù)形式。但注意字母e(或E)之前必須有數(shù)字,且e后面指數(shù)必須為整數(shù),如e3、
2.1e3.5、.e3、e都不是合法的指數(shù)形式。
2.3.2實(shí)型變量
在本節(jié)問(wèn)題中,已知兩個(gè)數(shù)是實(shí)數(shù),那么兩數(shù)之和與積也必定為實(shí)數(shù),所以需要設(shè)四個(gè)
實(shí)型變量,分別為a,b,sum,mul。定義語(yǔ)句為:
floata,b,sum,mul;
C實(shí)型變量分為:
1.單精度型(float型)
一個(gè)float型數(shù)據(jù)在內(nèi)存中占4個(gè)字節(jié)(32位),在TURBOC中,
單精度實(shí)數(shù)的范圍約為一1038?1038之間并提供7位有效位;小于10-38
的數(shù)被處理成零值。
2.雙精度型(double型)
一個(gè)double型數(shù)據(jù)在內(nèi)存中占8個(gè)字節(jié),雙精度實(shí)數(shù)的數(shù)值范圍約為
—10308?10308。并提供15?16位有效位,具體精確多少位與機(jī)器有關(guān);小于10-308的數(shù)
被處理成零值。
2.3.3實(shí)型數(shù)據(jù)的輸入和輸出
1.實(shí)型數(shù)據(jù)的輸入
實(shí)型數(shù)據(jù)的輸入也用scanf函數(shù)實(shí)現(xiàn)的,格式符使用的是f字符,以小數(shù)的形式輸入數(shù)據(jù),
也可以使用e字符,以指數(shù)的形式輸入數(shù)據(jù)。
如本節(jié)問(wèn)題中的scanf("%f%f",&a,&b);
2.實(shí)型數(shù)據(jù)的輸出
實(shí)型數(shù)據(jù)的輸出用printf函數(shù)實(shí)現(xiàn),格式符使用f字符,以小數(shù)的形式輸出數(shù)據(jù)。輸出時(shí)應(yīng)
注意:
(1)%f:不指定字段寬度,整數(shù)部分會(huì)全部輸出,并輸出6位小數(shù)。
(2)%m.n:指定輸出數(shù)據(jù)共占m列,其中有n位小數(shù)。如果數(shù)值長(zhǎng)
度小于m,則左端補(bǔ)空格。
(3)%-m.n:指定輸出數(shù)據(jù)共占m歹U,其中有n位小數(shù)。如果數(shù)值長(zhǎng)度小于m,則右端
補(bǔ)空格。
(4)若是雙精度型變量輸出時(shí)應(yīng)用%If格式控制,如doublef;
輸出時(shí)應(yīng)使用語(yǔ)句:printf(z,%ir,f);
2.4字符型數(shù)據(jù)
2.4.1字符常量
1.字符常量
C語(yǔ)言的字符常量是用一對(duì)單引號(hào)括起來(lái)的單個(gè)字符。如:‘a(chǎn)'、’b'、’x'、’D'、
等都是字符常量。
2.轉(zhuǎn)義字符
除了這樣的字符常量外,C語(yǔ)言還允許用一種特殊形式的字符常量,就是以一個(gè)‘\'開(kāi)頭的
字符序列例如,前面已經(jīng)用到,在printf函數(shù)中的'\n',它表示一個(gè)"換行"符。
例2.2字符常量的輸出。
main()
printf("abc\n\tde");
運(yùn)行結(jié)果:abc
de
2.4.2字符變量
在本節(jié)問(wèn)題中,設(shè)了兩個(gè)字符型變量cl和c2。定義形式如下:
charcl,c2;
它表示cl和c2為字符型變量,各可以放一個(gè)字符??梢杂孟旅嬲Z(yǔ)句對(duì)cl,c2賦值:
cl='a';;c2—'b';
因此在內(nèi)存中一個(gè)字符變量只占一個(gè)字節(jié)。
2.4.3字符數(shù)據(jù)的存儲(chǔ)形式
字符在內(nèi)存中存儲(chǔ)的不是字符本身,而是它的ASCII碼,例如字符'a'的ASCII碼為97,
‘b'的ASCII碼為98。那么字符的存儲(chǔ)形式與整數(shù)的存儲(chǔ)形式是類(lèi)似的。C語(yǔ)言使字符型數(shù)
據(jù)和整型數(shù)據(jù)是通用的。
例2.3main()
{
charal,a2;
al=97:a2=98:
printf("%c%c\nM,al,a2);
printf("%d%d\n",al,a2);
}
程序運(yùn)行時(shí)輸出如下:
ab
9798
字符型數(shù)據(jù)和整型數(shù)據(jù)是通用的,但應(yīng)該注意字符數(shù)據(jù)只占一個(gè)字節(jié),它只能存放0?255
范圍內(nèi)的整數(shù)。
例2.4大小寫(xiě)字母的轉(zhuǎn)換。
main()
{
charal,a2;
al='a';a2='b";
al=al—32;a2=a2—32;
printf("%c%c\nw,al,a2);
}
運(yùn)行結(jié)果為:
AB
程序的作用是將兩個(gè)小寫(xiě)字母a和b轉(zhuǎn)換成大寫(xiě)字母A和B。'a'的ASCH碼為97,而'A
'為65,'b'為98,'B'為66。從ASCH碼表中可以看到每一個(gè)小寫(xiě)字母比它相應(yīng)的大寫(xiě)字
母的ASCH碼大32。
2.4.4字符型數(shù)據(jù)的輸入和輸出
1.getchar函數(shù)和putchar函數(shù)
例2.5#include"stdio.hn
main()
(
charc;
c=getchar();
putchar(c);
)
在運(yùn)行時(shí),如果從鍵盤(pán)輸入字符'a'
a/(輸入'a'后,按回車(chē)鍵)
a(輸出變量c的值'a')
注意:getchar()只能接收一個(gè)字符。putchar()也只能向終端輸出一個(gè)字符。在使用getchar
函數(shù)和putchar函數(shù)時(shí),程序的首部需使用預(yù)編譯命令"#include"stdio.h"。
2.scanf函數(shù)和printf函數(shù)
例2.6main()
{
charcl,c2;
scanf("%c%cz,,&cl,&c2);
printf(z,%c%cw,cl,c2);
}
若輸入為ab/
則輸出為ab
在使用scanf函數(shù)和printf函數(shù)輸入輸出字符型數(shù)據(jù)時(shí),使用〃%c〃格式控制,用來(lái)輸
入輸出單個(gè)字符。
注意,在用〃%c〃格式輸入字符時(shí),空格將以有效字符輸入:
scanf("%c%c%cz,,&cl,&c2,&c3);
若輸入aVbVcZ
則將字符'a'送給cl,字符空格'V'送給c2,因?yàn)榭崭褚彩且粋€(gè)有效字符,字符'b'送給c3o%c
只需要讀入一個(gè)字符,用了空格做間隔,所以會(huì)出現(xiàn)這樣的問(wèn)題。
2.5字符串常量
字符串常量是用雙引號(hào)括住的字符序列。如:"Howdoyoudo","CHINA"a"等都
是字符串常量.
可以輸出一個(gè)字符串,如printf("Howdoyoudo.");
注意:不要將字符常量與字符串常量混淆?!痑'是字符常量,"a"是字符串常量,二者不同。
C規(guī)定:在每個(gè)字符串的結(jié)尾加一個(gè)“字符串結(jié)束標(biāo)志”以便系統(tǒng)據(jù)此判斷字符串是否結(jié)束。
以'\0'作為字符串結(jié)束標(biāo)志。'\0'是ASCII碼為0的字符,從ASCII碼表中可以看到ASCII
碼為0的字符是“空操作字符”不引起任何操作。
2.5變量的初始化
變量的初始化,就是在定義變量的同時(shí)給變量賦予初值??梢圆捎谜f(shuō)明變量的類(lèi)型,然后再
賦值的方法,也可以對(duì)變量類(lèi)型說(shuō)明的同時(shí),給變量賦初值。
1.先定義后賦值
inta,b,c;
a=2;
b=5;
c=10;
2.定義和賦值同時(shí)進(jìn)行
inta=5;
shortb=10;
charc='a';
floatd=7.8;
3.對(duì)幾個(gè)變量同時(shí)賦一個(gè)初值
intal=10,a2=10,a3=10;
不可以寫(xiě)成:intal=a2=a3=10;
但是也可以寫(xiě)成:intal,a2,a3;
al=a2=a3=10;
初始化不是在編譯階段完成的,而是在程序運(yùn)行時(shí)執(zhí)行本函數(shù)時(shí)賦以初值的。相當(dāng)于一個(gè)賦
值語(yǔ)句。例如:
inta=10;相當(dāng)于:inta;
a=10;
又如:
inta,b,c=20;相當(dāng)于:inta,b,c;
c=20;
2.6運(yùn)算符和表達(dá)式
2.6.1算術(shù)運(yùn)算符和表達(dá)式
例2.7已知正方形的長(zhǎng)和寬,求正方形的周長(zhǎng)。
[分析]正方形的周長(zhǎng)公式為:1=2*(a+b),已知正方形的長(zhǎng)和寬可以計(jì)算周長(zhǎng)。
main()
{
inta,b,l;
a=3;
b=4:
l=2*(a+b);
printf("l=%d\n",1):
}
1.基本的算術(shù)運(yùn)算符
+(加法運(yùn)算符,或正值運(yùn)算符)
-(減法運(yùn)算符,或負(fù)值運(yùn)算符)
*(乘法運(yùn)算符)
/(除法運(yùn)算符)
%(模運(yùn)算符,或求余運(yùn)算符)
注意:(1)兩個(gè)整數(shù)相除結(jié)果為整數(shù)。但是如果相除的兩個(gè)數(shù)中,至少有一個(gè)為實(shí)數(shù),則結(jié)
果為帶小數(shù)的商。
(2)%模運(yùn)算符,要求操作數(shù)均為整型數(shù)據(jù),如7%4的值為3。
2.算術(shù)表達(dá)式
用算術(shù)運(yùn)算符和括號(hào)將操作數(shù)連接起來(lái)的,符合C語(yǔ)法規(guī)則的式子,稱(chēng)C算術(shù)表達(dá)式。
在表達(dá)式求值時(shí),按運(yùn)算符的優(yōu)先級(jí)別高低次序執(zhí)行。
例如:10+'a'+1.5-8765.12*'b'
在進(jìn)行運(yùn)算時(shí),不同類(lèi)型的數(shù)據(jù)要先轉(zhuǎn)換成同一類(lèi)型,然后進(jìn)行運(yùn)算。
3.強(qiáng)制類(lèi)型轉(zhuǎn)換
可以用強(qiáng)制類(lèi)型轉(zhuǎn)換運(yùn)算符將一個(gè)表達(dá)式轉(zhuǎn)換成所需類(lèi)型。例如
(double)a(將a轉(zhuǎn)換成double類(lèi)型)
(int)(x+y)(將x+y的值轉(zhuǎn)換成整型)
(float)(5%3)(將5%3的值轉(zhuǎn)換成float型)
一般形式為:
(類(lèi)型名)(表達(dá)式)
注意:(1)類(lèi)型名應(yīng)用括號(hào)括起來(lái)。如(int)(x+y)
(2)已知floatx;對(duì)于(int)x,x仍然是float類(lèi)型,而整個(gè)表達(dá)式(int)x為整型。
2.6.2賦值運(yùn)算符和賦值表達(dá)式
1.賦值符號(hào)
賦值符號(hào)"="就是賦值運(yùn)算符,將一個(gè)數(shù)據(jù)賦給一個(gè)變量。如"a=3"。
2.類(lèi)型轉(zhuǎn)換
如果賦值運(yùn)算符兩側(cè)的類(lèi)型不一致,要進(jìn)行類(lèi)型轉(zhuǎn)換。
(1)將實(shí)型數(shù)據(jù)賦給整型變量時(shí),舍棄實(shí)數(shù)的小數(shù)部分。如i為整型變量,執(zhí)行"i=3.56〃
的結(jié)果是使i的值為3。
(2)將整型數(shù)據(jù)賦給實(shí)型變量時(shí),數(shù)值不變,但以浮點(diǎn)數(shù)形式存儲(chǔ)到變量中。
3.復(fù)合的賦值運(yùn)算符
常用的賦值運(yùn)算符有以下幾種:
+=,—=,*=,/=,%=
例如:
a+=3等價(jià)于a=a+3
x*=y+8等價(jià)于x=x*(y+8)
x%=3等價(jià)于x=x%3
4,賦值表達(dá)式
由賦值運(yùn)算符將?個(gè)變量和個(gè)表達(dá)式連接起來(lái)的式子稱(chēng)為"賦值表達(dá)式”。
例如:
a=b=c=5(賦值表達(dá)式值為5,a、b、c值均為5)
a=5+(c=6)(表達(dá)式值為11,a值為11,c的值為6)
a=(b=4)+(c=6)(表達(dá)式值為10,a值為10,b等于4,c等于6)
三、逗號(hào)運(yùn)算符和逗號(hào)表達(dá)式
逗號(hào)運(yùn)算符將兩個(gè)表達(dá)式連接起來(lái)。如
3+5,6+8
稱(chēng)為逗號(hào)表達(dá)式。逗號(hào)表達(dá)式的格式為
表達(dá)式1,表達(dá)式2
逗號(hào)表達(dá)式的求解過(guò)程是:先求解表達(dá)式1,再求解表達(dá)式2,整個(gè)逗號(hào)表達(dá)式的值是表達(dá)
式2的值。例如
逗號(hào)表達(dá)式
a=3*5,a*4
先求解a=3*5,得a的值為15,然后求解a*4,得60。整個(gè)逗號(hào)表達(dá)式的值為60。
課堂練習(xí)綜合實(shí)例例1輸入三角形的三條邊長(zhǎng),求三角形面積。
(為了簡(jiǎn)單起見(jiàn),設(shè)輸入的三邊長(zhǎng)a,b,c能構(gòu)成三角形)
#include"math.h"
main()
(
floata,b,c,s,area;
scanf("%f,%f,%fn,&a,&b,&c);
s=1.0/2*(a+b+c);
area=sqrt(s*(s-a)*(s-b)*(s-c));
printf("a=%7.2f,b=%7.2f,c=%7.2f,s=%7.2f\n",a,b,c,s);
printf(//area=%7.2f\n,/,area);
)
運(yùn)行情況如下:
3,4,6
a=3.00,b=4.00,c=6.00,s=6.50
area=5.33
例2從鍵盤(pán)輸入?個(gè)大寫(xiě)字母,要求改用小寫(xiě)字母輸出。
#include“stdio.h,f
main()
{
charcl,c2;
cl=getchar();
printf(,r%c,%d\n,/,cl,cl);
c2=cl+32;
printf(r,%c,%d\nz,,c2,c2);
}
運(yùn)行情況如下:
A/
A,65
a,97
本章小結(jié)
本章在講解順序結(jié)構(gòu)程序設(shè)計(jì)方法的同時(shí),介紹了三種數(shù)據(jù)類(lèi)型。
1.整型數(shù)據(jù)。主要了解整型數(shù)據(jù)的定義方法,根據(jù)使用整數(shù)的范圍選用定義整數(shù)變量的類(lèi)
型。掌握整型數(shù)據(jù)的輸入輸出方法,主要使用d格式控制符。
2.實(shí)型數(shù)據(jù)。主要掌握實(shí)型變量的不同定義方法,單精度數(shù)和雙精度數(shù)的表示范圍,實(shí)型
數(shù)據(jù)的輸入輸出方法,主要使用f格式控制符。
3.字符型數(shù)據(jù)。是由一對(duì)單引號(hào)括起來(lái)的單個(gè)字符,要注意,字符與字符串的區(qū)別。
還講解了各種運(yùn)算符和表達(dá)式,主要掌握算術(shù)運(yùn)算符,在混合運(yùn)算中,要按照運(yùn)算符的
優(yōu)先級(jí),結(jié)合方向運(yùn)算。
作業(yè):
實(shí)驗(yàn)一順序結(jié)構(gòu)程序設(shè)計(jì)
-、實(shí)驗(yàn)?zāi)康?/p>
1.掌握C語(yǔ)言數(shù)據(jù)類(lèi)型,熟悉如何定義一個(gè)整型、字符型、實(shí)型變量,以及對(duì)它們賦值的
方法,了解以上類(lèi)型數(shù)據(jù)輸出時(shí)所用的格式轉(zhuǎn)換符。2
2.學(xué)會(huì)使用有關(guān)算術(shù)運(yùn)算符,以及包含這些運(yùn)算符的表達(dá)式。
3.掌握數(shù)據(jù)的輸入輸出方法,能正確使用各種格式轉(zhuǎn)換符。
二、實(shí)驗(yàn)學(xué)時(shí)數(shù)
4學(xué)時(shí)
三、實(shí)驗(yàn)內(nèi)容和步驟
1..啟動(dòng)TC2.0編譯系統(tǒng),進(jìn)入編輯界面,建立一個(gè)新文件。文件名自定。(要求每個(gè)學(xué)生建
立一個(gè)自己的文件夾,每個(gè)同學(xué)的練習(xí)和作業(yè)的源程序命名形成系列,便于檢查、查找和考
核)。
利用一個(gè)小程序驗(yàn)證常量、變量的使用方法與特點(diǎn),驗(yàn)證數(shù)據(jù)類(lèi)型和表達(dá)式值的計(jì)算規(guī)則及
其輸出格式。
參考程序:
main()
{charcl,c2;
cl=97;c2=98;
printf(%c,%c\n",cl,c2);
}
(1)在此基礎(chǔ)上加入以下printf語(yǔ)句,并運(yùn)行。
printf(7%d,%d\n”,cl,c2);
(2)將第二行改為以下語(yǔ)句,并運(yùn)行。
intcl,c2;
(3)將第三行改為以下語(yǔ)句,并運(yùn)行。
cl=300;c2=400;
分別寫(xiě)出三次運(yùn)行結(jié)果。
2.編程并調(diào)試運(yùn)行
(1)編程序,用getchar函數(shù)讀入兩個(gè)字符給cl、c2,然后分別用putchar函數(shù)和printf
函數(shù)輸出這兩個(gè)字符。上機(jī)運(yùn)行此程序,比較putchar和printf函數(shù)輸出字符的特點(diǎn)。
(2)試編寫(xiě)程序,從鍵盤(pán)輸入一個(gè)大寫(xiě)字母,要求改用小寫(xiě)字母輸出。
3.寫(xiě)出下面程序的運(yùn)行結(jié)果:
1)main()
(
intx=l,y=l,z=l;
y=y+x;
x=x+y;
printf("%d\n",x);
printf("%d\n",y);
}
2)main()
{chara;
intb;
a='A';b=97;
printf(a:dec=%doct=%ohex=%xASCII=%c\n,a,a,a,a);
printf("b:dec=%doct=%ohex=%xASCII=%c\n,b,b,b,b);
a='M';b=?8;
printf("a:dec=%doct=%ohex=%xASCII=%c\nn,a,a,a,a);
printf(,fb:dec=%doct=%ohex=%xASCII=%c\n,f,b,b,b,b);
}
4.運(yùn)行下面的程序,分析功能并糾正錯(cuò)誤。
main()
{
inta,b,c,d;
scanf(H%d%d%d%d/z;a,b,c,d);
printf(r,a=%db=%dc=%de=a+b+c+d=%d\n",a,b,c,d,a+b+c+d);
)
章節(jié)題目:
第三章選擇結(jié)構(gòu)程序設(shè)計(jì)
教學(xué)時(shí)間:
8學(xué)時(shí)
教學(xué)目的:
1、掌握關(guān)系運(yùn)算表達(dá)式
2、掌握邏輯運(yùn)算表達(dá)式
3、熟練掌握if語(yǔ)句的使用
4、掌握switch語(yǔ)句
內(nèi)容、重點(diǎn)、難點(diǎn):
內(nèi)容:
3.1關(guān)系運(yùn)算符和關(guān)系表達(dá)式
3.2邏輯運(yùn)算符和邏輯表達(dá)式
3.3if語(yǔ)句
3.4switch語(yǔ)句
重點(diǎn):
1、關(guān)系運(yùn)算符和關(guān)系表達(dá)式
2、邏輯運(yùn)算符和邏輯表達(dá)式
3、if語(yǔ)句的使用
難點(diǎn):
1、掌握switch語(yǔ)句的使用
2、if語(yǔ)句的嵌套使用
注:教案尾頁(yè)有小結(jié)和作業(yè)
第三章選擇結(jié)構(gòu)程序設(shè)計(jì)
選擇結(jié)構(gòu),或稱(chēng)分支結(jié)構(gòu),是指對(duì)所給定的條件進(jìn)行判斷,然后決定選擇執(zhí)行不同的操作。
本章主要介紹如何用C語(yǔ)言實(shí)現(xiàn)選擇結(jié)構(gòu)。C語(yǔ)言的選擇語(yǔ)句有兩類(lèi),-類(lèi)是if語(yǔ)句,另
一類(lèi)是switch語(yǔ)句,本章將分別進(jìn)行介紹。在介紹選擇結(jié)構(gòu)程序設(shè)計(jì)的同時(shí),還要介紹關(guān)
系運(yùn)算符和關(guān)系表達(dá)式,邏輯運(yùn)算符和邏輯表達(dá)式等內(nèi)容。
3.1關(guān)系運(yùn)算符和關(guān)系表達(dá)式
3.1.1關(guān)系運(yùn)算符及其優(yōu)先次序
1.關(guān)系運(yùn)算符
C語(yǔ)言提供6種關(guān)系運(yùn)算符:
①<(小于)
②v=(小于或等于)
③〉(大于)
@>=(大于或等于)
⑤二二(等于)
@!=(不等于)
2.關(guān)于優(yōu)先次序:
(1)前4種關(guān)系運(yùn)算符('<;<=;>;>=')的優(yōu)先級(jí)別相同,后兩種也相同。前4
種高于后2種。例如,優(yōu)先于'=='。而與優(yōu)先級(jí)相同。
(2)關(guān)系運(yùn)算符與算術(shù)運(yùn)算符、賦值運(yùn)算符的優(yōu)先級(jí)關(guān)系如下:
算術(shù)運(yùn)算符(高)f關(guān)系運(yùn)算符(中)-賦值運(yùn)算符(低)
例如:
a>b+c等效于a>(b+c)
a==b<c等效于a==(b<c)
a=b>=c等效于a=(b>=c)
(3)關(guān)系運(yùn)算符的結(jié)合方向是“自左向右
注意:“等于”關(guān)系的運(yùn)算符“==”和“不等于”關(guān)系的運(yùn)算符“!=”與數(shù)學(xué)中的表示方
法不同。例如,欲判斷x是否等于0,若寫(xiě)成:x=0則表示把0賦值給變量x,正確的寫(xiě)法
為:x==Oo
3.1.2關(guān)系表達(dá)式
1.關(guān)系表達(dá)式
用關(guān)系運(yùn)算符將兩個(gè)表達(dá)式(算術(shù)表達(dá)式、關(guān)系表達(dá)式、邏輯表達(dá)式、賦值表達(dá)式、字符表
達(dá)式等)連接起來(lái)的式子,稱(chēng)關(guān)系表達(dá)式。
例:x>y,a+b<18,'a'<'b'都為合法的關(guān)系表達(dá)式。
2.關(guān)系表達(dá)式的值
關(guān)系表達(dá)式的值是一個(gè)邏輯值,即“真”或“假。
在C語(yǔ)言中:常用1表示“真”,用0表示“假”。
例如,a=5,b=2,則:
關(guān)系表達(dá)式a>b的值為“真”,表達(dá)式的值為1。
關(guān)系表達(dá)式a==b的值為“假”,表達(dá)式的值為0。
可以將關(guān)系表達(dá)式的運(yùn)算結(jié)果(0或1)賦給一個(gè)整型變量或字符型變量,如a=4,b=l,下面
的賦值語(yǔ)句是將1賦給變量c:
c=a>bc的值為1
例3.1試求X=5>3>1的值。
[分析]X=5>3>1相當(dāng)于X=(5>3)>1=1>1=0
[說(shuō)明]根據(jù)關(guān)系運(yùn)算符的優(yōu)先級(jí)別高于賦值運(yùn)算符。
3.2邏輯運(yùn)算符和邏輯表達(dá)式
3.2.1邏輯運(yùn)算符及其優(yōu)先次序
1.邏輯運(yùn)算符
C語(yǔ)言提供了3種邏輯運(yùn)算符:
①!邏輯非
②&&邏輯與
③II邏輯或
其中“&&”和“|”為“雙目(元)運(yùn)算符”,要求有兩個(gè)操作數(shù)(即運(yùn)算量),如
(a<b)&&(x<=y),(a<b)|(x〈=y)。"!"是''一目(元)運(yùn)算符”,只需一個(gè)操作數(shù),如!a或!(a<b)。
2.關(guān)于邏輯運(yùn)算符的優(yōu)先次序:
(1)邏輯運(yùn)算符的優(yōu)先次序如下:
!(非)一&&(與)-I(或),即“!”為三者中最高的。
(2)邏輯運(yùn)算符中的“&&”和“|"低于關(guān)系運(yùn)算符,“!”高于算術(shù)運(yùn)算符。
例如:
(a>=b)&&(x>y)可寫(xiě)成:a>=b&&x>y
(a==b)|(x==y)可寫(xiě)成:a==b||x==y
(3)邏輯運(yùn)算的結(jié)合方向是“自左向右”。
3.2.2邏輯表達(dá)式
1.邏輯表達(dá)式
用邏輯運(yùn)算符將關(guān)系表達(dá)式或邏輯量連接起來(lái)的式子就是邏輯表達(dá)式。
例如:a&&b*c,(a+b)|(c<0)均為邏輯表達(dá)式。
2.邏輯表達(dá)式的值
C語(yǔ)言編譯系統(tǒng)在給出邏輯運(yùn)算時(shí),以數(shù)值1代表“真”,以0代表“假”,但在判斷一個(gè)量
是否為“真”時(shí),以非0代表“真”,即將一個(gè)非0的數(shù)值認(rèn)為是“真”,以0代表“假"。
注意:
(1)參與邏輯運(yùn)算的量不但可以是0和1,或者是。和非0的整數(shù),也可以是任何類(lèi)型的
數(shù)據(jù),如字符型、實(shí)型或指針型。
(2)如果在一個(gè)表達(dá)式中不同位置上出現(xiàn)數(shù)值,應(yīng)區(qū)分哪些是作為數(shù)值運(yùn)算或關(guān)系運(yùn)算的
對(duì)象,哪些作為邏輯運(yùn)算的對(duì)象。
(3)在邏輯表達(dá)式的求解中,并不是所有邏輯運(yùn)算符都需要執(zhí)行,有時(shí)只需執(zhí)行一部分運(yùn)
算符就可以得到邏輯表達(dá)式的最后結(jié)果。例如:
①x&&y&&z
只有x為真時(shí),才需要判斷y的值。只要x為假,就立即得出整個(gè)表達(dá)式為假。
②x|y|z
只要x為真(非0),就不必判斷y和x;當(dāng)x為假,才判斷y;x和y都為假才判斷z。
3.3if語(yǔ)句
if語(yǔ)句是選擇結(jié)構(gòu)的一種形式,又稱(chēng)為條件分支語(yǔ)句。它是通過(guò)對(duì)給定條件的判斷,來(lái)決定
所要執(zhí)行的操作。C語(yǔ)言中提供了3種形式的if語(yǔ)句:if語(yǔ)句、i£else語(yǔ)句和if-else-if語(yǔ)句。
3.3.1問(wèn)題的提出
[問(wèn)題]比較兩個(gè)數(shù)的大小,將兩個(gè)數(shù)中較大者賦給m。
[分析]要比較兩個(gè)數(shù)的大小就要用到關(guān)系表達(dá)式,定義兩個(gè)變量a,b,如果a>b則將a的
值賦給m,若a<b則將b的值賦給m,這里我們將用到if語(yǔ)句來(lái)實(shí)現(xiàn)該項(xiàng)功能。
main()
(
inta,b,s;
a=5;b=10;
if(a>b)m=a;
elsem=b:
printf(nm=%d\nM,m);
)
程序運(yùn)行結(jié)果:
m=10
[說(shuō)明]在該問(wèn)題中我們借用了if語(yǔ)句,通過(guò)條件來(lái)判斷應(yīng)該執(zhí)行哪條語(yǔ)句,充分體現(xiàn)出選
擇結(jié)構(gòu)程序設(shè)計(jì)的思想。
3.3.2if語(yǔ)句的三種形式
1.if語(yǔ)句
if語(yǔ)句是條件分支語(yǔ)句最基本的形式。
格式:if(表達(dá)式)語(yǔ)句
功能:首先計(jì)算表達(dá)式的值,若表達(dá)式的值為'‘真"(非0),則執(zhí)行語(yǔ)句,若表達(dá)式的值為
“假”(0),不執(zhí)行語(yǔ)句。其流程圖3.1(a)所示。
例如:
if(x>y)printf("%d",x);
2.iRelse語(yǔ)句
if-else語(yǔ)句是條件分支語(yǔ)句的標(biāo)準(zhǔn)使用形式。
格式:if(表達(dá)式)語(yǔ)句1
else語(yǔ)句2
功能:首先計(jì)算表達(dá)式的值,若表達(dá)式的值為“真”(非0),則執(zhí)行語(yǔ)句1,若表達(dá)式的值
為"假”(0),則執(zhí)行語(yǔ)句2。其流程圖3.1(b)所示。
例如:
if(x>y)printf("%d",x);
elseprintf("%d",y);
假⑼
真(非0)
(a)
表達(dá)式
語(yǔ)句
真俳0)假(0)
(b)
表達(dá)式
語(yǔ)句1
語(yǔ)句2
3.if-else-if語(yǔ)句
前面兩種if語(yǔ)句一般都用于兩個(gè)分支的選擇結(jié)構(gòu)。對(duì)于多個(gè)分支選擇時(shí),可采用if-else-if
語(yǔ)句。
格式:
if(表達(dá)式1)語(yǔ)句1
elseif(表達(dá)式2)語(yǔ)句2
elseif(表達(dá)式3)語(yǔ)句3
I
I
elseif(表達(dá)式n-1)語(yǔ)句n-1
else語(yǔ)句n
功能:首先計(jì)算表達(dá)式1的值,若為“真”(非0),執(zhí)行語(yǔ)句1,否則進(jìn)行下一步判斷;若
表達(dá)式2為真,執(zhí)行語(yǔ)句2,否則進(jìn)行下一步判斷……最后所有表達(dá)式都為假時(shí),執(zhí)行語(yǔ)句
n。
例如:
if(score>89)grade=,A';
elseif(score>79)grade=,B';
elseif(score>69)grade=,C';
elseif(score>59)grade=,D';
elsegrade='E';
關(guān)于if語(yǔ)句的說(shuō)明:
(1)if后面圓括號(hào)中的表達(dá)式一般是關(guān)系表達(dá)式或邏輯表達(dá)式,用于描述選擇結(jié)構(gòu)的條件,
但也可以是任意的數(shù)值類(lèi)型表達(dá)式(包括整型、實(shí)型、字符型、指針型數(shù)據(jù)表達(dá)式)。
例如:if(2)printf("OK!n);
是合法的,因?yàn)楸磉_(dá)式的值為2,非0,按“真”處理,執(zhí)行結(jié)果輸出“OK!”
(2)第二種、第三種格式的if語(yǔ)句中,在每個(gè)eke前面有--個(gè)分號(hào),整個(gè)語(yǔ)句結(jié)束處也有
一個(gè)分號(hào)。這是由于分號(hào)是C語(yǔ)句中不可缺少的部分,這個(gè)分號(hào)是if語(yǔ)句中的內(nèi)嵌語(yǔ)句所
需要的。
(3)在if和else后面可以只含有一個(gè)內(nèi)嵌的操作語(yǔ)句,也可以含有多個(gè)操作語(yǔ)句,此時(shí)應(yīng)
用大括號(hào)“{}”將幾個(gè)語(yǔ)句括起來(lái),構(gòu)成?個(gè)復(fù)合語(yǔ)句,注意:復(fù)合語(yǔ)句的“廣和“}”
之后不能加分號(hào)。
例3.2輸入兩個(gè)實(shí)數(shù),按代數(shù)值由小到大輸出這兩個(gè)數(shù)。
main()
{
floata,b,c;
scanf("%f,%f,,&a,&b);
if(a>b)
(
t=a;a=b;b=t;
)
printf("%5.2f,%5.2f',a,b);
}
程序運(yùn)行結(jié)果:
2.2,-5.7/
-5.70,2.20
4.if語(yǔ)句的嵌套
在if語(yǔ)句中有包含一個(gè)或多個(gè)if語(yǔ)句稱(chēng)為if語(yǔ)句的嵌套。要處理多重分支選擇結(jié)構(gòu)問(wèn)
題,除了用i&else-if語(yǔ)句外,還可以利用if語(yǔ)句的嵌套來(lái)實(shí)現(xiàn)。
說(shuō)明:
(1)if和else的配對(duì)規(guī)則為:else總是與它上面的最近的未配對(duì)的if配對(duì)、
(2)if與else的個(gè)數(shù)最好相同,從內(nèi)層到外層一一對(duì)應(yīng),以避免出錯(cuò)。
(3)在嵌套內(nèi)的if語(yǔ)句既可以是if語(yǔ)句形式,也可以是ifelse語(yǔ)句形式,但最好使內(nèi)嵌if
語(yǔ)句也包含else部分。如果if與else的個(gè)數(shù)不同,可以用花括號(hào)來(lái)確定配對(duì)關(guān)系。例如:
if()
{if()語(yǔ)句1}
else
語(yǔ)句2
這時(shí)“{}”限定了內(nèi)嵌if語(yǔ)句的使用范圍,因此else與第?個(gè)if配對(duì)。
例3.3有一函數(shù):
-1(x<0)
y=0(x=0)
1(x>0)
編一程序,輸入一個(gè)x值,輸出y值。
main()
{
intx,y;
scanf("%d",&x);
if(x<0)y=-l;
elseif(x==0)y=0;
elsey=l;
printf(nx=%d,y=%d\nM,x,y);
}
3.3.3條件運(yùn)算符
條件運(yùn)算符由兩個(gè)符號(hào)“?”和“:”組成,要求有3個(gè)操作對(duì)象,稱(chēng)三目(元)運(yùn)算符,
它是C語(yǔ)言中唯一的三目運(yùn)算符。條件表達(dá)式的格式為:
表達(dá)式1?表達(dá)式2:表達(dá)式3
min=(a<b)?a:b:
說(shuō)明:
(1)通常情況下,表達(dá)式1是關(guān)系表達(dá)式或邏輯表達(dá)式,用于描述條件表達(dá)式中的條件,
表達(dá)式2和表達(dá)式3可以是常量、變量或表達(dá)式。
例如:(x==y)?'T':'F'
(a>b)?printf("%d",a):printf("%d",b)
等均為合法的條件表達(dá)式。
(2)條件表達(dá)式的執(zhí)行順序:先求解表達(dá)式1,若為非0(真)則求解表達(dá)式2,此時(shí)表達(dá)
式2的值就作為整個(gè)條件表達(dá)式的值。若表達(dá)式1的值為0(假),則求解表達(dá)式3,表達(dá)式
3的值就是整個(gè)條件表達(dá)式的值。
min=(a<b)?a:b;
執(zhí)行結(jié)果就是將a和b二者中較小的賦給min。
(3)條件表達(dá)式的優(yōu)先級(jí)別僅高于賦值運(yùn)算符,而低于前面介紹過(guò)的所有運(yùn)算符。因此,
min=(a<b)?a:b;
可直接寫(xiě)成:
min=a<b?a:b;
如果有
a>b?a:b+l
等效于a>b?a:(b+l),而不等效于(a>b?a:b)+l
(4)條件運(yùn)算符的結(jié)合方向?yàn)椤白杂抑磷蠖纾?/p>
x>0?l:x<0?-l:0等效于x>0?l:(x<0?-l:0)
(5)表達(dá)式1、表達(dá)式2和表達(dá)式3的類(lèi)型可以不同,此時(shí)條件表達(dá)式的值的類(lèi)型為它們中
較高的類(lèi)型。
例3.4輸入一個(gè)字符,判別它是否大寫(xiě)字母,如果是,將它轉(zhuǎn)換成小寫(xiě)字母;如果不是,
不轉(zhuǎn)換。然后輸出最后得到的字符。
main()
(
charch;
printf("Pleaseenteracharcter:\n");
scanf("%c",&ch);
ch=(ch>='A'&&ch<='Z")?(ch+32):ch:
printf("%c",ch);
}
程序運(yùn)行結(jié)果:
Pleaseenteracharcter:
A/
a
[說(shuō)明]條件表達(dá)式中的(ch+32)淇中32是小寫(xiě)字母和大寫(xiě)字母ASCH碼的差值。
3.4switch語(yǔ)句
3.4.1問(wèn)題的提出
要求按照考試成績(jī)的等級(jí)(grade)輸出百分制分?jǐn)?shù)段:鍵入'A',輸出85?100;鍵入'B',
輸出70?84;鍵入'C',輸出60?69;鍵入'D',輸出<60;鍵入其他任意字符,輸出error。
main()
(
chargrade;
scanf("%c",&grade);
switch(grade)
(
case'A':printf(”85?100\n");
case'B':printf(n70-84\nH);
case'C':printf(”60?69\n");
case'D':printf(n<60\nM);
default:printf("error\nn);
}
}
3.4.2switch語(yǔ)句
格式為:
switch(表達(dá)式)
{case常量表達(dá)式1:語(yǔ)句1
case常量表達(dá)式2:語(yǔ)句2
1
?
?
case常量表達(dá)式n:語(yǔ)句n
default:語(yǔ)句n+1
}
其中default和語(yǔ)句n+1可以同時(shí)省略。
說(shuō)明:
(1)switch的表達(dá)式通常是一個(gè)整型或字符型變量,也允許是枚舉型變量,其結(jié)果為相應(yīng)
的整數(shù)、字符或枚舉常量。case后的常量表達(dá)式必須是與表達(dá)式對(duì)應(yīng)一致的整數(shù)、字符或枚
舉常量。
(2)switch語(yǔ)句中所有case后面的常量表達(dá)式的值都必須互不相同。
(3)switch語(yǔ)句中的case和default的出現(xiàn)次序是任意的。
(4)由于switch語(yǔ)句中的“case常量表達(dá)式”只是起語(yǔ)句標(biāo)號(hào)的作用,而不起條件判斷作
用,即“只是開(kāi)始執(zhí)行處的入口標(biāo)號(hào)二可以用一個(gè)break語(yǔ)句來(lái)終止switch。將上面的switch
結(jié)構(gòu)改寫(xiě)如下:
switch(grade)
{
case'A':printf("85?100\n");break;
case'B':printf("70~84\n");break;
case'C':printf("60?69\n");break;
case'D':printf(H<60\nM);break;
default:printf("error\nn);
)
最后一個(gè)分支(default)可以不加break語(yǔ)句。如果grade的值為‘B',則只輸出"70?84"。
(5)每個(gè)case的后面既可以是一個(gè)語(yǔ)句,也可以是多個(gè)語(yǔ)句,當(dāng)是多個(gè)語(yǔ)句的時(shí)候,也不
需要用花括號(hào)括起來(lái)。
(6)多個(gè)case的后面可以共用一組執(zhí)行語(yǔ)句,如
switch(n)
(
case1:
case2:
x=10;
break;
1
?
}
它表示當(dāng)n=l或n=2時(shí),都執(zhí)行下面兩個(gè)語(yǔ)句:
x=10;
break;
課堂練習(xí)綜合實(shí)例
通過(guò)一些例子,進(jìn)一步說(shuō)明選擇結(jié)構(gòu)的程序設(shè)計(jì)方法。
例1求一個(gè)整數(shù)的平方根,若為負(fù)數(shù),則求出它的負(fù)數(shù)平方根。
#include"stdio.h"
#include"math.h"
main()
{
intn;
floatroot;
printf("Enteranumber:\tn);
scanf(n%d",&n);
if(n>=0)
{
root=sqrt(n);printf("sqrt(%d)=%f\n,root);
}
else
root=sqrt(abs(n));
printf(,,sqrt(%d)=%fi,,,n,root);
例2從鍵盤(pán)上輸入3個(gè)實(shí)數(shù),求出其中的最小值并輸出其值。
main()
{
floata,b,c,temp;
printf("Pleaseentera,b,c:\n");
scanf(M%f,%f,%f;&a,&b,&c);
if(a>=b)
(
temp=a;a=b;b=temp;
}
if(a>=c)
{
temp=a;a=c;c=temp;
}
printf("Min=%f\nn,a);
}
程序運(yùn)行情況:
1.2,-34.5,678/
Min=-34.500001
也可以用如下方法解決此題:
main()
{
floata,b,c,temp;
printf(nPleaseentera,b,c:\n");
scanf(H%f,%f,%f;&a,&b,&c);
a=(a<b)?a:b;
a=(a<c)?a:c;
printf(uMin=%f\nn,a);
}
例3輸入一個(gè)年份,判斷它是否是閨年。
main()
{
intyear,leap;
printf("Pleaseenteryear:\nM);
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024屆云南省施甸縣第三中學(xué)下學(xué)期高三年級(jí)期末考試(聯(lián)考卷)數(shù)學(xué)試題
- 2024屆四川蓉城名校高三下-(第三階段)期中數(shù)學(xué)試題試卷
- 2024年宿遷道路客運(yùn)從業(yè)資格證考試
- 2024年南寧駕??瓦\(yùn)從業(yè)資格證模擬考試
- 2024年包頭辦理客運(yùn)從業(yè)資格證考試題和答案
- 2024年鄭州客運(yùn)上崗證考試題多少道題
- 黑龍江省佳木斯市建三江管理局第一中學(xué)2025屆高三生物第一學(xué)期期末教學(xué)質(zhì)量檢測(cè)試題含解析
- 2025屆吉林省四平市英語(yǔ)高三第一學(xué)期期末考試模擬試題含解析
- 河北省新2025屆生物高一上期末統(tǒng)考試題含解析
- 2025屆湖南省邵東縣第四中學(xué)數(shù)學(xué)高三上期末聯(lián)考模擬試題含解析
- 2023-2024學(xué)年北京市海淀區(qū)六年級(jí)數(shù)學(xué)第一學(xué)期期末達(dá)標(biāo)檢測(cè)試題含答案
- 鈥激光碎石術(shù)后護(hù)理查房
- 腎性貧血絡(luò)病的中醫(yī)辨治
- 英語(yǔ)專(zhuān)業(yè)教學(xué)法方向論文寫(xiě)作指導(dǎo)
- 業(yè)擴(kuò)報(bào)裝技術(shù)工作總結(jié)
- 大學(xué)生創(chuàng)業(yè)理論與實(shí)踐課程PPT完整全套教學(xué)課件
- 吊裝方法與吊裝方案全
- 口腔頜面部損傷-口腔頜面部軟組織損傷(口腔頜面外科課件)
- 管理經(jīng)濟(jì)學(xué)考試試題及答案
- 新大氣污染防治法培訓(xùn)專(zhuān)題培訓(xùn)課件
- 2023年4月自考04747Java語(yǔ)言程序設(shè)計(jì)一試題及答案含評(píng)分標(biāo)準(zhǔn)
評(píng)論
0/150
提交評(píng)論