![語(yǔ)言案例教程書稿套課件幻燈片完整版ppt教學(xué)教程最全電子講義(最新)_第1頁(yè)](http://file4.renrendoc.com/view/ce2b1e9ce86b6d8aca71071649443b15/ce2b1e9ce86b6d8aca71071649443b151.gif)
![語(yǔ)言案例教程書稿套課件幻燈片完整版ppt教學(xué)教程最全電子講義(最新)_第2頁(yè)](http://file4.renrendoc.com/view/ce2b1e9ce86b6d8aca71071649443b15/ce2b1e9ce86b6d8aca71071649443b152.gif)
![語(yǔ)言案例教程書稿套課件幻燈片完整版ppt教學(xué)教程最全電子講義(最新)_第3頁(yè)](http://file4.renrendoc.com/view/ce2b1e9ce86b6d8aca71071649443b15/ce2b1e9ce86b6d8aca71071649443b153.gif)
![語(yǔ)言案例教程書稿套課件幻燈片完整版ppt教學(xué)教程最全電子講義(最新)_第4頁(yè)](http://file4.renrendoc.com/view/ce2b1e9ce86b6d8aca71071649443b15/ce2b1e9ce86b6d8aca71071649443b154.gif)
![語(yǔ)言案例教程書稿套課件幻燈片完整版ppt教學(xué)教程最全電子講義(最新)_第5頁(yè)](http://file4.renrendoc.com/view/ce2b1e9ce86b6d8aca71071649443b15/ce2b1e9ce86b6d8aca71071649443b155.gif)
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、第1章 C語(yǔ)言概述1.1 程序設(shè)計(jì)語(yǔ)言及其發(fā)展1.2 C語(yǔ)言的標(biāo)準(zhǔn)1.3 C語(yǔ)言的程序結(jié)構(gòu)1.1 程序設(shè)計(jì)語(yǔ)言及其發(fā)展計(jì)算機(jī)程序設(shè)計(jì)語(yǔ)言的發(fā)展,經(jīng)歷了從機(jī)器語(yǔ)言、匯編語(yǔ)言到高級(jí)語(yǔ)言的歷程。1、機(jī)器語(yǔ)言 寫出一串串由“0”和“1”組成的指令序列交由計(jì)算機(jī)執(zhí)行,這種語(yǔ)言,就是機(jī)器語(yǔ)言。機(jī)器語(yǔ)言,是第一代計(jì)算機(jī)語(yǔ)言。2、匯編語(yǔ)言 用一些簡(jiǎn)潔的英文字母、符號(hào)串來(lái)替代一個(gè)特定的指令的二進(jìn)制串,比如,用“ADD”代表加法,“MOV”代表數(shù)據(jù)傳遞等等,這種程序設(shè)計(jì)語(yǔ)言就稱為匯編語(yǔ)言,即第二代計(jì)算機(jī)語(yǔ)言。3、高級(jí)語(yǔ)言 高級(jí)語(yǔ)言接近于數(shù)學(xué)語(yǔ)言或人的自然語(yǔ)言,同時(shí)又不依賴于計(jì)算機(jī)硬件,編出的程序能在所有機(jī)器上通用
2、。1.2 C語(yǔ)言的標(biāo)準(zhǔn)ANSI C / C89標(biāo)準(zhǔn)C99標(biāo)準(zhǔn)C11標(biāo)準(zhǔn) (C語(yǔ)言的最新標(biāo)準(zhǔn))1.3 C語(yǔ)言的程序結(jié)構(gòu)例:要求在屏幕上輸出Welcome to C world!#include /*預(yù)處理命令*/ void main( ) /*主函數(shù)*/printf(Welcome to C world!n); /*格式輸出函數(shù)*/1.3.1 簡(jiǎn)單的C程序案例程序說明 (1)在程序的第二行main是C語(yǔ)言程序中的“主函數(shù)”的名字。 main前面的void 表示此函數(shù)是“空類型”,即執(zhí)行此函數(shù)后不產(chǎn)生函數(shù)值。C語(yǔ)言中,每個(gè)程序都必須有一個(gè)main函數(shù),它是每一個(gè)C語(yǔ)言程序的執(zhí)行起始點(diǎn)(入口點(diǎn))也是
3、程序執(zhí)行的結(jié)束點(diǎn)。 (2)用括起來(lái)的是main的函數(shù)體。main函數(shù)中的所有操作(或:語(yǔ)句)都在這一對(duì)之間。也就是說main函數(shù)的所有操作都在main函數(shù)體中。#include /*預(yù)處理命令*/ void main( ) /*主函數(shù)*/ printf(Welcome to C world!n); /*格式輸出函數(shù)*/ 程序說明 (3)本例主函數(shù)中只有一條語(yǔ)句,printf是C語(yǔ)言庫(kù)函數(shù)中的格式輸出函數(shù),功能是把該語(yǔ)句中雙撇號(hào)內(nèi)的字符原樣輸出(顯示在屏幕上),“n”是換行符,即在輸出“Welcome to C world!.”后回車換行。語(yǔ)句最后必須有一個(gè)分號(hào)。 (4)在C語(yǔ)言中使用標(biāo)準(zhǔn)函數(shù)庫(kù)
4、中的輸入輸出函數(shù)時(shí),編譯系統(tǒng)要求程序提供有關(guān)信息(即對(duì)這些輸入輸出函數(shù)的聲明),程序第1行“#include ”的作用就是用來(lái)提供這些信息的,“stdio.h”是C編譯系統(tǒng)提供的一個(gè)標(biāo)準(zhǔn)輸入輸出的庫(kù)文件。include是文件包含命令。#include /*預(yù)處理命令*/ void main( ) /*主函數(shù)*/ printf(Welcome to C world!n); /*格式輸出函數(shù)*/ 程序說明(5)“/* */”表示注釋部分,注釋可以用漢字或英文字符表示,可以出現(xiàn)在語(yǔ)句的后面,也可以單獨(dú)成為一行。在程序編譯和運(yùn)行過程中,不起作用,只是便于別人讀懂程序。#include /*預(yù)處理命令*
5、/ void main( ) /*主函數(shù)*/ printf(Welcome to C world!n); /*格式輸出函數(shù)*/ 例 求兩數(shù)中的最小值#include void main( ) /* 主函數(shù) */ int a , b, c; /* 定義變量 */scanf(%d, %d, &a, &b); /* 輸入數(shù) */c=min(a, b); /* 調(diào)用函數(shù) */printf(min=%dn, c); /* 輸出 */ int min(int x, int y) /* 定義函數(shù) */ int z; /* 定義局部變量 */ if (xy) z=y; else z=x; return(z);
6、 /* 返回z值*/ 經(jīng)編譯后運(yùn)行如下: 14, 4 min=4再次運(yùn)行: 6,29 min=6程序說明 (1)本程序包括兩個(gè)函數(shù):主函數(shù)main()和子函數(shù)min()。min函數(shù)的作用是將x,y中較小的數(shù)送給變量z,return語(yǔ)句的作用是將z的值返回給主函數(shù)main。返回值是通過函數(shù)名min帶回給main中的調(diào)用處。 (2)主函數(shù)中的scanf()是系統(tǒng)給出的標(biāo)準(zhǔn)輸入函數(shù),通過它輸入a和b的值,&a, &b中的“&”是取地址符,在此功能是將輸入的值分別送入變量a和b的地址所標(biāo)志的存儲(chǔ)單元中,即輸入給變量a和b?!?d, %d”是輸入輸出的格式字符串,用來(lái)指定輸入輸出數(shù)據(jù)的類型和格式。 (3
7、)main函數(shù)中第4行是調(diào)用min函數(shù),在調(diào)用時(shí)將實(shí)際參數(shù)a,b的值送給min函數(shù)中的形式參數(shù)x和 y。在min函數(shù)后得到一個(gè)返回值(即min函數(shù)中的變量z的值),把這個(gè)值送給變量c,然后輸出變量c的值。 通過上述兩個(gè)例子我們可以看到:(1)C程序是由函數(shù)構(gòu)成的。一個(gè)程序至少含有一個(gè)main主函數(shù)。也可以包含一個(gè)主函數(shù)和若干個(gè)子函數(shù)。函數(shù)是C語(yǔ)言的基本單位。被調(diào)用的子函數(shù)可以是系統(tǒng)給出的庫(kù)函數(shù),也可以是用自己定義的函數(shù)。(2)一個(gè)函數(shù)由兩部分組成:函數(shù)的首部和函數(shù)體。(3)main函數(shù)通常位于程序之首,實(shí)際上它位于程序的開頭、 最后及函數(shù)與函數(shù)之間均是合法的, 但不管在什么位置,一個(gè)C程序總是
8、從main函數(shù)開始執(zhí)行的。(4)C程序書寫格式自由,一行內(nèi)可以寫幾個(gè)語(yǔ)句,一個(gè)語(yǔ)句可以分寫在多行上。(5)C語(yǔ)言本身沒有輸入輸出語(yǔ)句,輸入輸出都由函數(shù)實(shí)現(xiàn),因此在程序的開始必須有頭文件“include ”。 (6)可以用/* */對(duì)C程序中的任何部分作注釋,程序中加入必要的注釋可增加程序的可讀性。(7)C語(yǔ)言程序中每一條語(yǔ)句結(jié)束后都必須加一個(gè)分號(hào)。分號(hào)是C語(yǔ)言語(yǔ)句的組成部分。 1.3.2 C程序的基本結(jié)構(gòu)(1)C語(yǔ)言程序是由函數(shù)組成的。(2)源程序中可以有預(yù)處理命令,預(yù)處理命令通常放在源文件或源程序的最前面。(3)每一個(gè)語(yǔ)句都必須以分號(hào)結(jié)尾,但預(yù)處理命令、函數(shù)頭和右花括號(hào)“”之后不加分號(hào)。(4
9、)注釋不是程序的必須部分,在程序執(zhí)行時(shí)注釋不起任何作用。(5)在C語(yǔ)言中,雖然一行可寫多個(gè)語(yǔ)句,一個(gè)語(yǔ)句也可占多行,但建議一行只寫一個(gè)語(yǔ)句。(6)一般采用縮進(jìn)格式書寫程序,以提高程序的可讀性和清晰性。1.3.3 集成開發(fā)環(huán)境(IDE) 集成開發(fā)環(huán)境提供編程時(shí)所必需的工具,這些工具有編輯器、編譯器和調(diào)試器,它們集成在一個(gè)軟件包內(nèi)供程序員使用。在早前的DOS環(huán)境下主要的C語(yǔ)言集成開發(fā)環(huán)境有TC2.0、Turbo C3.0和Borland c。在Windows環(huán)境下主要使用Visual C 6.0,Visual C 6.0既可以對(duì)C進(jìn)行編譯,也可以對(duì)C進(jìn)行編譯。本書的示例程序均可在Visual C
10、6.0集成環(huán)境下進(jìn)行編輯、編譯和運(yùn)行。第2章 C程序設(shè)計(jì)的基本知識(shí)2.1 數(shù)據(jù)類型2.2 標(biāo)識(shí)符、常量和變量2.3 運(yùn)算符和表達(dá)式2.1 數(shù)據(jù)類型2.2 標(biāo)識(shí)符、常量和變量 標(biāo)識(shí)符是起標(biāo)識(shí)作用的一類符號(hào)。用來(lái)標(biāo)識(shí)變量名、符號(hào)常量名、函數(shù)名、數(shù)組名、類型名等實(shí)體(程序?qū)ο?的有效字符序列。 在C語(yǔ)言中,一個(gè)合理的標(biāo)識(shí)符只能由字母、數(shù)字和下劃線三種字符組成,且第一個(gè)字符必須為字母或下劃線。例如:sum,average,_total,Class,day,stu_name,p4050為合法的標(biāo)識(shí)符,M.D.John,$123,#33,3D64,ab為不合法的標(biāo)識(shí)符。2.2.1 標(biāo)識(shí)符使用標(biāo)識(shí)符時(shí)需要注
11、意:(1)不能使用C語(yǔ)言中的關(guān)鍵字做為標(biāo)識(shí)符。(2)標(biāo)識(shí)符定義時(shí)不要太長(zhǎng)。(3)大小寫敏感。(4)見名知義。(5)標(biāo)識(shí)符和關(guān)鍵字之間必須用空格分隔。2.2.2 常量和變量(1)整型常量 整型常量也稱為整型常數(shù)或整數(shù)。按進(jìn)制可分為十進(jìn)制整數(shù),八進(jìn)制整數(shù)和十六進(jìn)制整數(shù)。 十進(jìn)制整數(shù)十進(jìn)制數(shù):與數(shù)學(xué)上的整數(shù)表示相同。如123,-456,0等。 八進(jìn)制整數(shù)八進(jìn)制數(shù):以0開頭,后面跟07的數(shù)字。如0123,054等。十六進(jìn)制整數(shù)十六進(jìn)制數(shù):以0 x(或0X)開頭,后面跟09和af(或AF)的數(shù)字。其中a代表10,b代表11,其余類推。如0 x123,0 x12af,0 xAE2。1、常量 整型常量按其值
12、所在的范圍可分為短整型(short int)、基本型(int)和長(zhǎng)整型(long int)和無(wú)符號(hào)型(unsigned)。 在整數(shù)后加u或U代表無(wú)符號(hào)整型數(shù),如:56U,13u。加l或L代表長(zhǎng)整型數(shù),如23L,45l。(2)實(shí)型常量小數(shù)形式實(shí)數(shù)的小數(shù)形式是由數(shù)字,小數(shù)點(diǎn)組成(必須有小數(shù)點(diǎn))。如123.456, -21.37。整數(shù)12用實(shí)數(shù)表示必須寫成12.0或12.。 指數(shù)形式實(shí)數(shù)的指數(shù)形式也稱為科學(xué)計(jì)數(shù)法。一個(gè)實(shí)數(shù)的指數(shù)形式分成尾數(shù)部分和指數(shù)部分。尾數(shù)部分可以是整數(shù)形式或小數(shù)形式,指數(shù)部分是一個(gè)字母“e”后跟一個(gè)整數(shù)。如123e+01,-456.78e-01, 0e0等。在書寫時(shí)“e”與“E
13、”完全等價(jià)?!癳”前面必須有數(shù)字,“e”后面必須是整數(shù)。規(guī)范化的指數(shù)形式。在字母e或E之前的小數(shù)部分,小數(shù)點(diǎn)左邊應(yīng)當(dāng)有且只能有一位非0數(shù)字。用指數(shù)形式輸出時(shí),是按規(guī)范化的指數(shù)形式輸出的。例如:2.3478e2、3.0999E5、6.46832e12都屬于規(guī)范化的指數(shù)形式。(3)字符常量用單引號(hào)直接括起來(lái)可顯示的字符常量,如a、x、D、? 、$等都是字符常量。用單引號(hào)括起來(lái)的由反斜杠()引導(dǎo)的轉(zhuǎn)義字符,主要用于控制信息。(4)字符串常量 字符串常量是一對(duì)雙引號(hào)括起來(lái)的字符序列,簡(jiǎn)稱為字符串。字符的個(gè)數(shù)稱為其長(zhǎng)度。例如: how are you, C program都是字符串常量。2、變量 在程序
14、運(yùn)行過程中其值可以變化的量我們稱之為變量。每一個(gè)變量都對(duì)應(yīng)計(jì)算機(jī)內(nèi)存中相應(yīng)的存儲(chǔ)單元。在該單元中存放變量的值。在程序運(yùn)行過程中其值可以變化的量我們稱之為變量。每一個(gè)變量都對(duì)應(yīng)計(jì)算機(jī)內(nèi)存中相應(yīng)的存儲(chǔ)單元。在該單元中存放變量的值。(1)變量的定義常量可以直接使用,而變量則必須先定義后使用。(2)變量的初始化程序中常需要對(duì)一些變量預(yù)先設(shè)置初值。(3)基本變量類型數(shù)據(jù)長(zhǎng)度和取值范圍會(huì)隨機(jī)器的CPU類型和C編譯器的不同而不同。下表中列出了幾種基本數(shù)據(jù)類型在不同實(shí)現(xiàn)環(huán)境中的字節(jié)長(zhǎng)度和取值范圍?;緮?shù)據(jù)類型、長(zhǎng)度、值域?qū)φ毡?定義整型變量可以有int,long int,sort int三種方法。在定義三種不
15、同整型變量時(shí),都可以加上修飾符unsigned和signed,分別表示無(wú)符號(hào)數(shù)和有符號(hào)數(shù)。若不的指定則默認(rèn)為有符號(hào)數(shù),這樣看,signed是可以省略的。歸納起來(lái),在C語(yǔ)言中可以定義和使用以下6種整型變量。 signed int 有符號(hào)基本整型unsigned int 無(wú)符號(hào)基本整型signed short int 有符號(hào)短整型unsigned short int 無(wú)符號(hào)短整型signed long int 有符號(hào)長(zhǎng)整型unsigned long int 無(wú)符號(hào)長(zhǎng)整型 整型變量 有符號(hào)整數(shù)對(duì)于許多運(yùn)算都是很重要的。但是它所能表達(dá)的最大數(shù)的絕對(duì)值只是無(wú)符號(hào)數(shù)的一半。因此在實(shí)際應(yīng)用中,為了充分利用變
16、量的數(shù)值范圍,對(duì)于只存入正數(shù)的變量(如學(xué)號(hào)、庫(kù)存量、存款額等),在需要時(shí)可以將變量定義為“無(wú)符號(hào)”類型。這樣比一般整型變量中正數(shù)的范圍擴(kuò)大一倍。 計(jì)算機(jī)中,數(shù)據(jù)都是以二進(jìn)制形式存儲(chǔ)的,整型變量也不例外,它是以補(bǔ)碼方式存儲(chǔ)。有符號(hào)數(shù)據(jù)的第一位為符號(hào)位,0表示正數(shù),1表示負(fù)數(shù),而無(wú)符號(hào)數(shù)據(jù)的第一位為數(shù)據(jù)位。例如:定義一個(gè)整型變量i=10,在內(nèi)存中的存放方式如圖。 計(jì)算機(jī)不論對(duì)正數(shù)和負(fù)數(shù)都按“補(bǔ)碼”形式存放到存儲(chǔ)單元。對(duì)于正數(shù)來(lái)說,補(bǔ)碼就是該數(shù)的“原碼”(即該數(shù)的二進(jìn)制形式)。如10的原碼為0,000000000001010,它的補(bǔ)碼為0,000000000001010。負(fù)數(shù)的補(bǔ)碼不是它的原碼。而是
17、在“原碼”的基礎(chǔ)上取反加1。如:-10的原碼為1,000000000001010。取反后變?yōu)?,111111111110101。 最后得到的反碼基礎(chǔ)上加1即為補(bǔ)碼1,111111111110110。 實(shí)型變量分為單精度(float)、雙精度(double)。單精度數(shù)據(jù)一般提供7位有效位數(shù),雙精度提供1516位有效位數(shù)。在內(nèi)存中的存放形式與整數(shù)存儲(chǔ)方式不同,實(shí)型數(shù)據(jù)是按照指數(shù)形式存儲(chǔ)的。系統(tǒng)將實(shí)型數(shù)據(jù)分為小數(shù)部分和指數(shù)部分,分別存放。 實(shí)型變量 由于實(shí)型變量是用有限的存儲(chǔ)單元存儲(chǔ)的,因此提供的有效數(shù)字是有限的,在有效位以外的數(shù)字將被舍去,由此可能會(huì)產(chǎn)生一些誤差。實(shí)型數(shù)據(jù)存放示意圖#include
18、 void main() float pi=3.141592612; printf(pi=%fn,pi);運(yùn)行結(jié)果為:pi=3.141593 因?yàn)閜i是單精度浮點(diǎn)型變量,只能提供7位有效數(shù)字,因此后面幾位被忽略了。若要提高數(shù)據(jù)的精度,可以將變量定義為雙精度類型,得到1516位有效位數(shù),這樣就不會(huì)使精度損失了。例:實(shí)型數(shù)據(jù)的舍入誤差。 字符型變量是用來(lái)存放字符數(shù)據(jù),同時(shí)只能存放一個(gè)字符。所有編譯系統(tǒng)都規(guī)定以一個(gè)字節(jié)來(lái)存放一個(gè)字符,或者說,一個(gè)字符變量在內(nèi)存中占一個(gè)字節(jié)。存儲(chǔ)形式以字符的ASCII碼存儲(chǔ),例如:字符a,它的ASCII碼是97,它在內(nèi)存中的存儲(chǔ)形式為:01100001??梢钥闯鲎址麛?shù)
19、據(jù)以ASCII碼存儲(chǔ)的形式與整數(shù)的存儲(chǔ)形式類似,這使得字符型數(shù)據(jù)和整型數(shù)據(jù)之間可以通用(當(dāng)作整型量)。 字符型變量 可以將整型量賦值給字符變量,也可以將字符量賦值給整型變量。 可以對(duì)字符數(shù)據(jù)進(jìn)行算術(shù)運(yùn)算,相當(dāng)于對(duì)它們的ASCII碼進(jìn)行算術(shù)運(yùn)算。 一個(gè)字符數(shù)據(jù)既可以以字符形式輸出(ASCII碼對(duì)應(yīng)的字符),也可以以整數(shù)形式輸出(直接輸出ASCII碼)。 注意:盡管字符型數(shù)據(jù)和整型數(shù)據(jù)之間可以通用,但是字符型只占1個(gè)字節(jié),因此不能把一個(gè)大數(shù)存到字符變量中。具體表現(xiàn)為:#include void main() char c1,c2; c1=A; c2=B; c1=c1-32; c2=c2-32;pr
20、intf(%c=%d n,c1,c1);printf(%c=%d n,c2,c2);運(yùn)行結(jié)果為:A=33B=34例:小寫字母轉(zhuǎn)換成大寫字母。3、數(shù)據(jù)類型轉(zhuǎn)換 顯式類型轉(zhuǎn)換也就是采用強(qiáng)制手段進(jìn)行數(shù)據(jù)類型轉(zhuǎn)化。強(qiáng)制類型轉(zhuǎn)換是通過類型轉(zhuǎn)換運(yùn)算來(lái)實(shí)現(xiàn)的。其一般形式為: (類型說明符) (表達(dá)式) 其功能是把表達(dá)式的運(yùn)算結(jié)果強(qiáng)制轉(zhuǎn)換成類型說明符所表示的類型。(1)顯式類型轉(zhuǎn)化說明:在使用強(qiáng)制轉(zhuǎn)換時(shí)應(yīng)注意以下問題:類型說明符和表達(dá)式都必須加括號(hào)(單個(gè)變量可以不加括號(hào)),如把(int)(x+y)寫成(int)x+y則成了把x轉(zhuǎn)換成int型之后再與y相加了。無(wú)論是強(qiáng)制轉(zhuǎn)換或是隱式轉(zhuǎn)換,都只是為了本次運(yùn)算的需要
21、而對(duì)變量的數(shù)據(jù)長(zhǎng)度進(jìn)行的臨時(shí)性轉(zhuǎn)換,而不改變數(shù)據(jù)說明時(shí)對(duì)該變量定義的類型。includevoid main()float f=5.75;printf(int)f=%d,f=%.2fn,(int)f,f); 運(yùn)行結(jié)果為:(int)f=5,f=5.75本例表明,f雖強(qiáng)制轉(zhuǎn)為int型,但只在運(yùn)算中起作用,是臨時(shí)的,而f本身的類型并不改變。因此,(int)f的值為5(刪去了小數(shù))而f的值仍為5.75。例:強(qiáng)制轉(zhuǎn)換示例。 隱式轉(zhuǎn)換發(fā)生在不同數(shù)據(jù)類型的混合運(yùn)算時(shí),由編譯系統(tǒng)自動(dòng)完成。自動(dòng)轉(zhuǎn)換遵循以下規(guī)則: (1)若參與運(yùn)算量的類型不同,則先轉(zhuǎn)換成同一類型,然后進(jìn)行運(yùn)算。 (2)轉(zhuǎn)換按數(shù)據(jù)長(zhǎng)度增加的方向進(jìn)行
22、,以保證精度不降低。如int型和long型運(yùn)算時(shí),先把int量轉(zhuǎn)成long型后再進(jìn)行運(yùn)算。 (3)所有的浮點(diǎn)運(yùn)算都是以雙精度進(jìn)行的,即使僅含float單精度量運(yùn)算的表達(dá)式,也要先轉(zhuǎn)換成double型,再作運(yùn)算。 (4)char型和short型參與運(yùn)算時(shí),必須先轉(zhuǎn)換成int型。 (5)在賦值運(yùn)算中,賦值號(hào)兩邊量的數(shù)據(jù)類型不同時(shí),賦值號(hào)右邊量的類型將轉(zhuǎn)換為左邊量的類型。如果右邊量的數(shù)據(jù)類型長(zhǎng)度比左邊長(zhǎng)時(shí),將丟失一部分?jǐn)?shù)據(jù),這樣會(huì)降低精度,丟失的部分按四舍五入向前舍入。(2)隱式轉(zhuǎn)換includevoid main()float pi=3.14159;int s,r=5;s=r*r*pi;print
23、f(s=%dn,s);運(yùn)行結(jié)果為::s=78 本例程序中,pi為實(shí)型;s,r為整型。在執(zhí)行s=r*r*pi語(yǔ)句時(shí),r和pi都轉(zhuǎn)換成double型計(jì)算,結(jié)果也為double型。但由于s為整型,故賦值結(jié)果仍為整型,舍去了小數(shù)部分。 例:隱式轉(zhuǎn)換示例2.3 運(yùn)算符和表達(dá)式1.基本運(yùn)算符(1)加法運(yùn)算符“+”,加法運(yùn)算符為雙目運(yùn)算符,即應(yīng)有兩個(gè)量參與加法運(yùn)算。如a+b,4+8等。具有右結(jié)合性。(2)減法運(yùn)算符“-”,減法運(yùn)算符為雙目運(yùn)算符。但“-”也可作負(fù)值運(yùn)算符,此時(shí)為單目運(yùn)算,如-x,-5等具有左結(jié)合性。(3)乘法運(yùn)算符“*”,雙目運(yùn)算,具有左結(jié)合性。(4)除法運(yùn)算符“/”,雙目運(yùn)算具有左結(jié)合性。
24、參與運(yùn)算量均為整型時(shí), 結(jié)果也為整型,舍去小數(shù)。如果運(yùn)算量中有一個(gè)是實(shí)型,則結(jié)果為雙精度實(shí)型。(5)求余運(yùn)算符(模運(yùn)算符)“%”雙目運(yùn)算,具有左結(jié)合性。要求參與運(yùn)算的量均為整型。求余運(yùn)算的結(jié)果等于兩數(shù)相除后的余數(shù)。一般情況,余數(shù)的符號(hào)與被除數(shù)符號(hào)相同。2.3.1 算數(shù)運(yùn)算符和表達(dá)式includevoid main()printf(%d,%dn,20/7,-20/7);printf(%f,%fn,20.0/7,-20.0/7);運(yùn)行結(jié)果為:2,-22.857143,-2.857143 本例中,20/7,-20/7的結(jié)果均為整型,小數(shù)全部舍去。而20.0/7和-20.0/7由于有實(shí)數(shù)參與運(yùn)算,因此
25、結(jié)果也為實(shí)型。 例:除法運(yùn)算符示例。includevoid main()printf(%d,%d,%d,%dn,7%4,7%-4,-7%4,-7%-4);運(yùn)行結(jié)果為:3,3,-3,-3 本例說明參加求余運(yùn)算左側(cè)的數(shù)據(jù)為正則取余結(jié)果為正,左側(cè)的數(shù)據(jù)為負(fù)則取余結(jié)果為負(fù)。 例:求余運(yùn)算符示例。 *,/,%運(yùn)算的優(yōu)先級(jí)別相同,高于+,-運(yùn)算;+, -優(yōu)先級(jí)相同;同一優(yōu)先級(jí)按從左到右順序計(jì)算。要改變運(yùn)算順序只要加括號(hào)就可以了,括號(hào)全部為圓括號(hào),必須注意括號(hào)的配對(duì)。例如:3+8%-3-2先計(jì)算8%-3結(jié)果為2,再計(jì)算3+2-2,按從左到右順序計(jì)算結(jié)果為3。2.運(yùn)算符優(yōu)先級(jí) 它們的作用是使變量的值增加或減少
26、1,例如:i+ ,i- 在i參與運(yùn)算后,i的值再自增(減)1。+i, -i 在 i參與運(yùn)算前,i的值自增(減)1。 粗略的看,+i,i+的作用相當(dāng)于i=i+1。但+i和i+不同之處在于+i是先執(zhí)行i=i+1后,再使用i的值,而i+是先使用i的值后,再執(zhí)行i=i+1。3.自增,自減運(yùn)算符includevoid main()int i=8;printf(%dn,+i);printf(%dn,-i);printf(%dn,i+);printf(%dn,i-);printf(%dn,-i+);printf(%dn,-i-);printf(%dn,i); 例:自增、自減運(yùn)算符示例。運(yùn)行結(jié)果:988989
27、8 變量i變化過程為:i的初值為8,第2行i加1后輸出故為9;第3行減1后輸出故為8;第4行輸出i為8之后再加1(為9);第5行輸出i為9之后再減1(為8) ;第6行輸出-8之后再加1(為9);第7行輸出-9之后再減1(為8);第8行輸出i值8. 例:自增、自減運(yùn)算符示例。 算術(shù)表達(dá)式是由算術(shù)運(yùn)算符和括號(hào)連接起來(lái)的、符合C語(yǔ)法規(guī)則的式子。運(yùn)算對(duì)象包括常量、變量、函數(shù)等。單個(gè)的常量、變量、函數(shù)可以看做是表達(dá)式的特例。 例如:a+b (a*2)c (x+r)*8-(a+b)7 +i sin(x)+sin(y) 4算術(shù)表達(dá)式 1.賦值運(yùn)算符及表達(dá)式 簡(jiǎn)單賦值運(yùn)算符即“=”,又稱為賦值號(hào)。由賦值運(yùn)算符
28、組成的表達(dá)式稱為賦值表達(dá)式。一般形式: 變量賦值符表達(dá)式 賦值表達(dá)式的求解過程:將賦值運(yùn)算符右側(cè)的表達(dá)式的值賦給左側(cè)的變量,同時(shí)整個(gè)賦值表達(dá)式的值就是剛才所賦的值。2.3.2 賦值運(yùn)算符和表達(dá)式 2.復(fù)合賦值運(yùn)算符 在賦值符“=”之前加上某些運(yùn)算符,可以構(gòu)成復(fù)合賦值運(yùn)算符,復(fù)合賦值運(yùn)算符可以構(gòu)成賦值表達(dá)式。C語(yǔ)言中許多雙目運(yùn)算符可以與賦值運(yùn)算符一起構(gòu)成復(fù)合運(yùn)算符,即:+=,-=,*=,/=,%=,=,&=,|=,= 復(fù)合賦值表達(dá)式一般形式: =等價(jià)于:= 1.關(guān)系運(yùn)算符 C語(yǔ)言提供6種關(guān)系運(yùn)算符:2.3.3 關(guān)系運(yùn)算符和表達(dá)式 關(guān)系運(yùn)算符都是雙目運(yùn)算符,其結(jié)合性均為左結(jié)合。關(guān)系運(yùn)算符的優(yōu)先級(jí)低
29、于算術(shù)運(yùn)算符,高于賦值運(yùn)算符。 在六個(gè)關(guān)系運(yùn)算符中,=的優(yōu)先級(jí)相同,高于=和!=,=和!=的優(yōu)先級(jí)相同。 例如: ca+b 等價(jià)于 c(a+b) ;關(guān)系運(yùn)算符的優(yōu)先級(jí)低于算術(shù)運(yùn)算符 ab=c 等價(jià)于(ab)=c ;“”優(yōu)先級(jí)高于“=” a=bc 等價(jià)于 a=(bc) ;“c 等價(jià)于 a=(bc) ;關(guān)系運(yùn)算符的優(yōu)先級(jí)高于賦值運(yùn)算符。 2. 關(guān)系表達(dá)式 用關(guān)系運(yùn)算符將兩個(gè)表達(dá)式連接起來(lái)的式子,稱為關(guān)系表達(dá)式。 關(guān)系表達(dá)式的一般形式為: 例如下面者是合法的關(guān)系表達(dá)式: a+bc-d x3/2 a+10的值為“真”,即為1。(a=3)(b=5)由于35不成立,故其值為假,即為0。 1.邏輯運(yùn)算符 語(yǔ)
30、言中提供了三種邏輯運(yùn)算符,優(yōu)先級(jí)從高到低為: ! 非運(yùn)算 & 與運(yùn)算 | 或運(yùn)算 運(yùn)算符&和|均為雙目運(yùn)算符。具有左結(jié)合性。非運(yùn)算符!為單目運(yùn)算符,具有右結(jié)合性。2.3.4 邏輯運(yùn)算符和表達(dá)式 邏輯運(yùn)算的值也為“真”和“假”兩種,用1和0 來(lái)表示。其求值規(guī)則如下: (1)與運(yùn)算&參與運(yùn)算的兩個(gè)量都為真時(shí),結(jié)果才為真,否則為假。 (2)或運(yùn)算|參與運(yùn)算的兩個(gè)量只要有一個(gè)為真,結(jié)果就為真。兩個(gè)量都為假時(shí),結(jié)果為假。 (3)非運(yùn)算!參與運(yùn)算量為真時(shí),結(jié)果為假;參與運(yùn)算量為假時(shí),結(jié)果為真。邏輯運(yùn)算的真值表 2.邏輯表達(dá)式 用邏輯運(yùn)算符將關(guān)系表達(dá)式或邏輯量連接起來(lái)的式就是是邏輯表達(dá)式。 邏輯表達(dá)式的一般
31、形式為: 1. 條件運(yùn)算符和表達(dá)式 條件運(yùn)算符是C語(yǔ)言中唯一具有三個(gè)操作數(shù)的運(yùn)算符,它的表達(dá)式的一般形式是: ? : 其含義是:先求表達(dá)式1的值,如果為真(非零), 則求表達(dá)式2的值,并把它作為整個(gè)表達(dá)式的值;如表達(dá)式1的值為假(零), 則求表達(dá)式3的值, 并把它作為整個(gè)表達(dá)式的值。 2.3.5 其他運(yùn)算符和表達(dá)式 2. 逗號(hào)運(yùn)算符和表達(dá)式 語(yǔ)言中逗號(hào)“,”也是一種運(yùn)算符,稱為逗號(hào)運(yùn)算符。其功能是把兩個(gè)表達(dá)式連接起來(lái)組成一個(gè)表達(dá)式,稱為逗號(hào)表達(dá)式。 其一般形式為: 表達(dá)式1,表達(dá)式2,表達(dá)式n 其求值過程是分別求n個(gè)表達(dá)式的值,并以表達(dá)式n的值作為整個(gè)逗號(hào)表達(dá)式的值。 對(duì)于逗號(hào)表達(dá)式還要說明兩
32、點(diǎn): (1)程序中使用逗號(hào)表達(dá)式,通常是要分別求逗號(hào)表達(dá)式內(nèi)各表達(dá)式的值,并不一定要求整個(gè)逗號(hào)表達(dá)式的值。 (2)并不是在所有出現(xiàn)逗號(hào)的地方都組成逗號(hào)表達(dá)式,如在變量說明中,函數(shù)參數(shù)表中逗號(hào)只是用作各變量之間的間隔符。第3章 順序結(jié)構(gòu)3.1 C語(yǔ)言的語(yǔ)句3.2 數(shù)據(jù)輸入、輸出函數(shù)3.3 順序結(jié)構(gòu)3.1 C語(yǔ)言的語(yǔ)句在C語(yǔ)言中,根據(jù)語(yǔ)句的功能不同,可將語(yǔ)句劃分為以下五類:1.表達(dá)式語(yǔ)句表達(dá)式語(yǔ)句由表達(dá)式加上分號(hào)“;”組成。執(zhí)行表達(dá)式語(yǔ)句就是計(jì)算表達(dá)式的值。例如:x=y+z是賦值表達(dá)式,而x=y+z;是一個(gè)賦值語(yǔ)句??梢钥吹揭粋€(gè)語(yǔ)句最后必須有一個(gè)分號(hào),分號(hào)是語(yǔ)句不可缺少的一個(gè)部分。又例如:x+y;
33、是一個(gè)語(yǔ)句,作用是完成x+y的操作,是合法的,但并不是把x+y的和賦給另一個(gè)變量,因此它并沒有實(shí)際意義。2.函數(shù)調(diào)用語(yǔ)句函數(shù)調(diào)用語(yǔ)句由一個(gè)函數(shù)調(diào)用加上分號(hào)組成。例如:printf(C Program);調(diào)用庫(kù)函數(shù),輸出字符串。3.控制語(yǔ)句控制語(yǔ)句用于控制程序的流程,以實(shí)現(xiàn)程序的各種結(jié)構(gòu)方式。它們由特定的語(yǔ)句定義符組成。4.復(fù)合語(yǔ)句把多個(gè)語(yǔ)句用括號(hào)括起來(lái)組成的一個(gè)語(yǔ)句稱復(fù)合語(yǔ)句。在程中應(yīng)把復(fù)合語(yǔ)句看成是單條語(yǔ)句,而不是多條語(yǔ)句,例如 x=y+z;a=b+c;printf(%d%d,x,a);是一條復(fù)合語(yǔ)句。復(fù)合語(yǔ)句內(nèi)的各條語(yǔ)句都必須以分號(hào)“;”結(jié)尾。3.2 數(shù)據(jù)輸入、輸出函數(shù)1. printf函
34、數(shù)的一般形式為:printf(“格式控制字符串”,輸出表列)如:printf(%d,%cn,i,c);3.2.1 格式輸出函數(shù) printf()括號(hào)內(nèi)包含兩部分:(1)“格式控制”是用雙撇號(hào)括起來(lái)的字符串,用于指定輸出格式。它由格式聲明和普通字符兩種信息組成。格式聲明。格式聲明是由%和格式字符組成,它的作用是將輸出的數(shù)據(jù)轉(zhuǎn)換為的指定的格式輸出。如%d、%c等。普通字符。普通字符即需要原樣輸出的字符,在顯示中起提示作用。例如上面printf函數(shù)中雙撇號(hào)內(nèi)的逗號(hào)和換行符。(2)“輸出表列”是需要輸出的一些數(shù)據(jù),可以是常量、變量或表達(dá)式。下面是printf函數(shù)的例子:printf(a=%d b=%d
35、,a,b);格式聲明 輸出表列在此例中,雙撇號(hào)內(nèi)的字符,除有兩個(gè)“d”以外,還有非格式聲明的普通字符(如a=,b=),它們輸出時(shí)全部原樣輸出?;騛,b的值分別是3,6,則輸出結(jié)果為: a=3 b=6例3.1:十進(jìn)制、八進(jìn)制、十六進(jìn)制及無(wú)符號(hào)數(shù)據(jù)的輸出。#includevoid main()int a=-1;printf(%d,%o,%x,%u,a,a,a,a);分析:-1的原碼:1000,0000,0000,0001。在內(nèi)存中的補(bǔ)碼表示為: 1111,1111,1111,1111,輸出為:-1,177777,ffff,65535-1是十進(jìn)制,177777是八進(jìn)制,ffff是十六進(jìn)制,65535
36、為無(wú)符號(hào)整數(shù)。3.2.2 格式輸入函數(shù)scanf()1.scanf函數(shù)的一般形式為:scanf(格式控制字符串,地址表列);“格式控制字符串”的含義與printf類似,它指定輸入數(shù)據(jù)項(xiàng)的類型和格式。“地址列表”是由若干個(gè)地址組成的列表,可以是變量的地址(&變量名)或字符串的首地址。例3.5:輸入、輸出三個(gè)整數(shù)。#include void main()int a,b,c;scanf(%d%d%d,&a,&b,&c);printf(a=%d,b=%d,c=%d,a,b,c); 在本例中,&是地址運(yùn)算符,&a指變量a的地址。scanf的作用是將鍵盤輸入的數(shù)據(jù)保存到&a,&b,&c為地址的存儲(chǔ)單元中,
37、即變量a,b,c中。 在“%d%d%d”表示要按十進(jìn)制整數(shù)形式輸入3個(gè)數(shù)據(jù)。輸入數(shù)據(jù)時(shí),在兩個(gè)數(shù)據(jù)之間輸入一個(gè)或多個(gè)的空格、制表符(Tab)或回車鍵作為間隔。如: 7 8 9 或7 89 或 7(按Tab鍵)8 93.2.3 字符輸出函數(shù)putcharputchar 函數(shù)其一般形式為:putchar(字符型數(shù)據(jù))功能:在顯示器上輸出單個(gè)字符。 例如:putchar(A);輸出大寫字母A。putchar(x);輸出字符變量x的值putchar(n); 輸出一個(gè)換行符,使輸出的當(dāng)前位置移到下一行的開頭。 3.2.4 字符輸入函數(shù)getchargetchar函數(shù)的一般形式為: getchar();功
38、能是從鍵盤上輸入一個(gè)字符。如:c=getchar();從鍵盤輸入A,則將A賦值給c。注意:getchar函數(shù)只能接受單個(gè)字符,輸入數(shù)字也按字符處理。輸入多于一個(gè)字符時(shí),只接收第一個(gè)字符。3.2.4 字符輸入函數(shù)getchar例3.6:輸入輸出字符。#include void main()char a,b,c;a=getchar();b=getchar();c=getchar();putchar(a);putchar(b);putchar(c);putchar(n); 運(yùn)行結(jié)果:DOG (連續(xù)輸入DOG后,按回車鍵,字符才送到內(nèi)存中的存儲(chǔ)單元)DOG (輸出變量a,b,c的值)3.3 順序結(jié)構(gòu)#
39、有了上面的基礎(chǔ),就可以順利地編寫具有順序結(jié)構(gòu)的程序了。在順序結(jié)構(gòu)中,程序的執(zhí)行是按語(yǔ)句出現(xiàn)的先后順序進(jìn)行的,并且每條語(yǔ)句都會(huì)被執(zhí)行到。如圖3-1所示,其中A和B兩個(gè)框是順序執(zhí)行的。即先執(zhí)行A框所指的操作,再執(zhí)行B框所指的操作。例3.7 輸入三個(gè)小寫字母,輸出其ASCII碼和對(duì)應(yīng)的大寫字母。分析:前面已經(jīng)介紹如何把小寫字母轉(zhuǎn)換成大寫字母(大寫字母的ASCII碼比小寫字母的ASCII碼小32),利用輸入輸出函數(shù)即可以解決該題。程序代碼如下:#includevoid main()char a,b,c;scanf(%c%c%c,&a,&b,&c);printf(%d,%d,%dn%c,%c,%cn,a
40、,b,c,a-32,b-32,c-32);運(yùn)行情況如下:a c e 97,99,101A,C,E第4章 選擇結(jié)構(gòu)4.1 用if語(yǔ)句實(shí)現(xiàn)選擇結(jié)構(gòu)4.2 switch語(yǔ)句4.1.1 if語(yǔ)句的基本形式1簡(jiǎn)單的if語(yǔ)句例4.1:編寫程序,用來(lái)判斷某一年是否為閏年。分析:前面在講邏輯表達(dá)式時(shí),我們已經(jīng)給出判斷閏年的表達(dá)式,即:(year%4=0&year%100!=0)|year%400=0如果表達(dá)式的值為真,則是閏年,輸出“年為閏年”,否則不輸出。這種程序的執(zhí)行過程如圖4-1,對(duì)于這種根據(jù)條件確定是否執(zhí)行命令的問題,C語(yǔ)言提供了單分支結(jié)構(gòu)解決這一問題。形式如下:真表達(dá)式語(yǔ)句假面具圖41 if(表達(dá)式
41、) 語(yǔ)句執(zhí)行過程:當(dāng)表達(dá)式的值為真,則執(zhí)行其后的語(yǔ)句,否則不執(zhí)行該語(yǔ)句。說明:(1)if語(yǔ)句后的表達(dá)式一般為關(guān)系表達(dá)式或邏輯表達(dá)式,但不僅僅局限這兩種,也可以是其它類型的表達(dá)式。只要表達(dá)式的值不為零,則執(zhí)行下面的語(yǔ)句。(2)語(yǔ)句必須是單個(gè)語(yǔ)句,若想執(zhí)行多條語(yǔ)句時(shí),必須用括起來(lái),變成一條復(fù)合語(yǔ)句。程序如下:#includevoid main() int year;printf(輸入year:);scanf(%d,&year);if(year%4=0&year%100!=0)|year%400=0)printf(%d年是閏年n,year);例4.3:給定一個(gè)五位數(shù),判斷它是不是回文數(shù)。即12321
42、是回文數(shù),個(gè)位與萬(wàn)位相同,十位與千位相同。分析:驗(yàn)證一個(gè)數(shù)是否是回文數(shù),首先要從5位數(shù)中將每一位分解出來(lái)。根據(jù)除號(hào)運(yùn)算符的特點(diǎn)兩個(gè)整數(shù)相除,商為整數(shù)??梢杂?2321/10000得到萬(wàn)位數(shù)的“1”,結(jié)合取余運(yùn)算得到其他位。a=x/10000; /*分解出萬(wàn)位*/b=x%10000/1000; /*分解出千位*/c=x%1000/100; /*分解出百位*/d=x%100/10; /*分解出十位*/e=x%10; /*分解出個(gè)位*/程序如下:include void main() long a,b,c,d, x; scanf(%ld,&x); a=x/10000; b=x%10000/1000;
43、 c=x%100/10; d=x%10; if (d= =a&c= =b) /*個(gè)位等于萬(wàn)位并且十位等于千位*/ printf(%ld是回文數(shù)n,x); else printf(%ld不是回文數(shù)n,x);運(yùn)行結(jié)果:1232112321是回文數(shù)再次運(yùn)行:1231212312不是回文數(shù)4.1.2if語(yǔ)句的嵌套例4.4: 判別鍵盤輸入字符的是哪種字符(控制字符、數(shù)字字符、大寫字母、小寫字母還是數(shù)字字符)。分析:解此題的關(guān)鍵是寫出判斷字符的選擇結(jié)構(gòu)。該選擇結(jié)構(gòu)可以用嵌套的形式來(lái)實(shí)現(xiàn),見圖4-3。C語(yǔ)言提供的if語(yǔ)句中可以包括另一個(gè)if語(yǔ)句,這就是if語(yǔ)句的嵌套,可以用它實(shí)現(xiàn)嵌套的選擇結(jié)構(gòu)。其一般形式為
44、:if(表達(dá)式1) 語(yǔ)句1 else if(表達(dá)式2) 語(yǔ)句2 else if(表達(dá)式3) 語(yǔ)句3 else if(表達(dá)式4) 語(yǔ)句4 else 語(yǔ)句5 說明:if語(yǔ)句嵌套時(shí),必須注意if和else的配對(duì)關(guān)系,即else總是與它上面最近的未配對(duì)的if配對(duì)。程序如下:#includevoid main() char c;c=getchar();if(c=0&c=A&c=a&c=z)printf(這是一個(gè)小寫字母n);elseprintf(這是一個(gè)其它字符n);運(yùn)行情況如下:E這是一個(gè)大寫字母除上面所講的一種嵌套外,if語(yǔ)句嵌套還有很多形式, 在嵌套內(nèi)的if語(yǔ)句可能又是if-else型的,這將會(huì)出
45、現(xiàn)多個(gè)if和多個(gè)else重疊的情況,這時(shí)要特別注意if和else的配對(duì)問題。例如:if(表達(dá)式1)if(表達(dá)式2)語(yǔ)句1;else 語(yǔ)句2;程序設(shè)計(jì)者把else寫在與第一個(gè)if(外層if)同一列上,希望第一個(gè)else與第一個(gè)if對(duì)應(yīng),那么 else究竟是與哪一個(gè)if配對(duì)呢?是與if(表達(dá)式1) 配對(duì),還是應(yīng)理解為與if(表達(dá)式2) 配對(duì)?為了避免這種二義性,語(yǔ)言規(guī)定,else 總是與它前面最近的if配對(duì),因此對(duì)上述例子應(yīng)按后一種情況理解。即與if(表達(dá)式2) 配對(duì)。注意若編程要求上述語(yǔ)句else與if(表達(dá)式1) 配對(duì)時(shí),可用一對(duì)大括號(hào) 將if(表達(dá)式2) 語(yǔ)句1括起來(lái),則成為如下形式:if(
46、表達(dá)式1)if(表達(dá)式2)語(yǔ)句1 else 語(yǔ)句2此時(shí)else與if(表達(dá)式1) 配對(duì)。4.2 switch語(yǔ)句多分支可以使用嵌套的if語(yǔ)句處理,但如果分支較多,嵌套的if語(yǔ)句層數(shù)多,程序冗長(zhǎng),降低了程序的可讀性,也給程序的書寫帶來(lái)一定的麻煩,因此,經(jīng)常用多路分支選擇來(lái)處理。即switch語(yǔ)句。其一般形式為:switch(表達(dá)式) case 常量表達(dá)式1:語(yǔ)句1 case 常量表達(dá)式2:語(yǔ)句2 case 常量表達(dá)式n:語(yǔ)句n default : 語(yǔ)句n+1執(zhí)行過程:首先計(jì)算switch后面括號(hào)內(nèi)的表達(dá)式的值,并逐個(gè)與其后的常量表達(dá)式值相比較,當(dāng)表達(dá)式的值與某個(gè)常量表達(dá)式的值相等時(shí),即執(zhí)行其后的
47、語(yǔ)句,然后不再進(jìn)行判斷,繼續(xù)執(zhí)行后面所有case后的語(yǔ)句。 如表達(dá)式的值與所有case后的常量表達(dá)式均不相同時(shí),則執(zhí)行default后的語(yǔ)句。說明:(1)switch括號(hào)后面的表達(dá)式,允許為任何類型。(2)當(dāng)“表達(dá)式”的值與某個(gè)case后面的常量表達(dá)式的值相等時(shí),就執(zhí)行此case后面的語(yǔ)句。如果表達(dá)式的值與所有case中的常量表達(dá)式都不匹配,就執(zhí)行default后面的語(yǔ)句。(3)各個(gè)case的常量表達(dá)式的值必須互不相同,否則出現(xiàn)矛盾現(xiàn)象。(4)各個(gè)case,default出現(xiàn)的順序不影響執(zhí)行結(jié)果。(5)執(zhí)行完一個(gè)case后面的語(yǔ)句后,流程控制轉(zhuǎn)移到下一個(gè)case中的語(yǔ)句繼續(xù)執(zhí)行。此時(shí),“cas
48、e 常量表達(dá)式”只是起到語(yǔ)句標(biāo)號(hào)的作用,并不在此處進(jìn)行條件判斷。例.6:輸入某年某月,輸出該月的天數(shù),要求用switch結(jié)構(gòu)實(shí)現(xiàn)。分析:每年的1、3、5、7、8、10、12七個(gè)月的天數(shù)是一定的,為31天4、6、9、11四個(gè)月的天數(shù)也是固定的,為30天;2月的天數(shù)不固定,閏年為29天,平年為28天。設(shè)整型變量flag代表控制信息。flag1表示程序正確執(zhí)行,輸出給定月份數(shù);flag0表示輸入數(shù)據(jù)錯(cuò)誤,輸出提示信息。程序如下:#includevoid main()int days,month,year,flag;printf(nplease input year,month:n);scanf(%d
49、,%d,&year,&month);flag=1;switch(month) case 1: case 3:case 5:case 7:case 8:case 10case 11:days=30;break; case 2:if(year%400=0|(year%4=0&year%100!=0) /*判斷是不是閏年*/days=29; else days=28;break;default:flag=0;if(!flag) printf(error input datan);else printf(days=%dn,days);運(yùn)行結(jié)果:please input year,month:1997,
50、2days28第5章 循環(huán)結(jié)構(gòu)程序設(shè)計(jì)5.1 While循環(huán)結(jié)構(gòu)5.2 doWhile循環(huán)結(jié)構(gòu)5.3 for循環(huán)結(jié)構(gòu)5.4 循 環(huán) 嵌 套5.5 break和continue語(yǔ)句在循環(huán)體中的作用5.1 While循環(huán)結(jié)構(gòu)while語(yǔ)句的一般形式為:while(表達(dá)式) 語(yǔ)句其中表達(dá)式是循環(huán)條件,語(yǔ)句為循環(huán)體。while語(yǔ)句的功能:計(jì)算表達(dá)式的值,當(dāng)值為真(非0)時(shí), 執(zhí)行循環(huán)體語(yǔ)句。 例 用while語(yǔ)句求 ,即123100。#include void main() int i,sum=0; i=1; while(i=100) sum=sum+i; i+; printf(%dn,sum);5.
51、2 doWhile循環(huán)結(jié)構(gòu)do-while語(yǔ)句的一般形式為: do 語(yǔ)句while(表達(dá)式);其中語(yǔ)句是循環(huán)體,表達(dá)式是循環(huán)條件。do-while語(yǔ)句的功能是:先執(zhí)行循環(huán)體語(yǔ)句一次,再判別表達(dá)式的值,若為真(非0)則繼續(xù)循環(huán),否則終止循環(huán)。 例 用do-while語(yǔ)句求 ,即123100#includevoid main() int i,sum=0; i=1; do sum=sum+i; i+; while(i=100); printf(%dn,sum);5.3 for循環(huán)結(jié)構(gòu)其一般形式為: for(表達(dá)式1;表達(dá)式2;表達(dá)式3) 語(yǔ)句 for語(yǔ)句的執(zhí)行過程如下:(1)首先計(jì)算表達(dá)式1的值。(
52、2)再計(jì)算表達(dá)式2的值,若值為真(非0)則執(zhí)行循環(huán)體一次,然后執(zhí)行第(3)步。若為“假”,則結(jié)束循環(huán),轉(zhuǎn)到第(5)步。 (3)求解表達(dá)式3。(4)轉(zhuǎn)回上面第(2)步驟繼續(xù)執(zhí)行。(5)循環(huán)結(jié)束,執(zhí)行for下面的語(yǔ)句。例 用for語(yǔ)句求 ,即123100。#includevoid main() int i,sum=0;for(i=0;i=100;i+)sum+=i; printf(%dn,sum);5.4 循 環(huán) 嵌 套一個(gè)循環(huán)體內(nèi)又包含另一個(gè)完整的循環(huán)結(jié)構(gòu),稱為循環(huán)的嵌套。內(nèi)嵌的循環(huán)中還可以嵌套循環(huán),這就是多層循環(huán)。例5.7 編程序,輸出以下圖形。 * *#includevoid main( )
53、int i,j,k;for(i=1;i=3;i+)for(j=1;j=3-i+5;j+) printf( );for(k=1;k=2*i-1+5;k+)if(k=5) printf( );else printf(*);printf(n);5.5 break和continue語(yǔ)句在循環(huán)體中的作用break語(yǔ)句的一般形式為:break; 說明:(1)break語(yǔ)句只用于循環(huán)語(yǔ)句或switch語(yǔ)句中。在循環(huán)語(yǔ)句中,break常常和if語(yǔ)句一起使用,表示當(dāng)條件滿足時(shí),立即終止循環(huán)。注意break不是跳出if語(yǔ)句,而是循環(huán)結(jié)構(gòu)。(2)循環(huán)語(yǔ)句可以嵌套使用,break語(yǔ)句只能跳出(終止)其所在的循環(huán),而不
54、能一下子跳出多層循環(huán)。例 輸入一個(gè)整數(shù)m,判斷它是否為素?cái)?shù)(只能被1和它本身整除的數(shù))。#includevoid main()int m,i;scanf(%d,&m);for(i=2;im-1) printf(%d是素?cái)?shù)n,m); elseprintf(%d不是素?cái)?shù)n,m);5.5 break和continue語(yǔ)句在循環(huán)體中的作用continue語(yǔ)句一般形式為:continue;其作用為:結(jié)束本次循環(huán),即不再執(zhí)行循環(huán)體中continue 語(yǔ)句之后的語(yǔ)句,轉(zhuǎn)入下一次循環(huán)條件的判斷與執(zhí)行。例:把100200之間能被3和5同時(shí)整除的數(shù)輸出。#includevoid main()int n; for(
55、n=100;n=200;n+) if(!(n%3=0&n%5=0) continue; printf(%4d,n); 第6章 編譯預(yù)處理6.1宏定義6.2 文件包含6.1宏定義6.1.1 無(wú)參宏定義無(wú)參宏定義的一般格式為:#define 標(biāo)識(shí)符 語(yǔ)言符號(hào)字符串其中:“#”表示這是一條預(yù)處理命令;“define”為宏定義命令;“標(biāo)識(shí)符”為所定義的宏名,通常用大寫字母表示,以便于與變量區(qū)別;“語(yǔ)言符號(hào)字符串”可以是常數(shù)、表達(dá)式、格式串等。例6.2#include #define M (a*a+3*b)void main() int s; s=3*M+4*M+5*M; printf(s=%dn,s)
56、;對(duì)于宏定義還要說明以下幾點(diǎn):(1)宏名一般用大寫字母表示,以示與變量區(qū)別,但這并非是規(guī)定。 (2)宏定義不是語(yǔ)句,所以不能在行尾加分號(hào)。否則,宏展開時(shí),會(huì)將分號(hào)作為字符串的1個(gè)字符,用于替換宏名。6.1.2帶參數(shù)的宏定義帶參宏定義的一般形式為:#define 宏名(形參表) 字符串 帶參宏調(diào)用的一般形式為:宏名(實(shí)參表); 例6.3#include #define MAX(a,b) (ab)?a:bvoid main() int x,y,max; printf(input two numbers: ); scanf(%d%d,&x,&y); max=MAX(x,y); printf(max=
57、%dn,max);對(duì)于帶參的宏定義有以下問題需要說明:(1) 帶參宏定義中,宏名和形參表之間不能有空格出現(xiàn)。(2) 在帶參宏定義中,形式參數(shù)不分配內(nèi)存單元,因此不必作類型定義。(3)在宏定義中的形參是標(biāo)識(shí)符,而宏調(diào)用中的實(shí)參可以是表達(dá)式。6.2 文件包含文件包含處理命令的格式:include “包含文件名” 或 include 其功能是把指定的文件插入該命令行位置取代該命令行, 從而把指定的文件和當(dāng)前的源程序文件連成一個(gè)源文件。對(duì)文件包含命令還要說明以下幾點(diǎn):(1)包含命令中的文件名可以用雙引號(hào)括起來(lái),也可以用尖括號(hào)括起來(lái)。例如以下寫法都是允許的:#include stdio.h#includ
58、e 這兩種形式是有區(qū)別的:使用尖括號(hào)表示在包含文件目錄中去查找(包含目錄是由用戶在設(shè)置環(huán)境時(shí)設(shè)置的), 而不在源文件目錄去查找; 使用雙引號(hào)則表示首先在當(dāng)前的源文件目錄中查找,若未找到才到包含目錄中去查找。 用戶編程時(shí)可根據(jù)自己文件所在的目錄來(lái)選擇某一種命令形式。(2) 一個(gè)include命令只能指定一個(gè)被包含文件, 若有多個(gè)文件要包含,則需用多個(gè)include命令。(3)文件包含允許嵌套,即在一個(gè)被包含的文件中又可以包含另一個(gè)文件。第7章 函 數(shù) 7.1 函數(shù)的定義 7.2函數(shù)調(diào)用7.3 函數(shù)的返回值7.4 函數(shù)的說明7.1 函數(shù)的定義 1.無(wú)參函數(shù)的定義形式類型標(biāo)識(shí)符 函數(shù)名()聲明部分
59、語(yǔ)句其中類型標(biāo)識(shí)符和函數(shù)名稱為函數(shù)頭。類型標(biāo)識(shí)符指明了本函數(shù)的類型,函數(shù)的類型實(shí)際上是函數(shù)返回值的類型。 該類型標(biāo)識(shí)符與前面介紹的各種說明符相同。函數(shù)名是由用戶定義的標(biāo)識(shí)符,函數(shù)名后有一個(gè)空括號(hào),其中無(wú)參數(shù),但括號(hào)不可少。2.有參函數(shù)的定義形式函數(shù)類型 函數(shù)名( 數(shù)據(jù)類型 參數(shù),數(shù)據(jù)類型 參數(shù)2 ) 聲明部分 語(yǔ)句 return (表達(dá)式) 或return 表達(dá)式 有參函數(shù)比無(wú)參函數(shù)多了一個(gè)內(nèi)容,即參數(shù)表列。在參數(shù)表中給出的參數(shù)稱為形式參數(shù),它們可以是各種類型的變量,各參數(shù)之間用逗號(hào)間隔。例 定義一個(gè)函數(shù),用于求兩個(gè)數(shù)中的大數(shù)。#include int max(int a,int b) if(
60、ab) return a; else return b;void main() int max(int a,int b); int x,y,z; printf(input two numbers:n); scanf(%d%d,&x,&y); z=max(x,y); printf(maxmum=%d,z);例 用do-while語(yǔ)句求 ,即123100#includevoid main() int i,sum=0; i=1; do sum=sum+i; i+; while(i=100); printf(%dn,sum);對(duì)函數(shù)的幾點(diǎn)說明:(1)函數(shù)定義不允許嵌套。在語(yǔ)言中,所有函數(shù)(包括主函數(shù)m
溫馨提示
- 1. 本站所有資源如無(wú)特殊說明,都需要本地電腦安裝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ù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年度智能家電產(chǎn)品銷售代理合同
- 2025年度旅游目的地廣告合作項(xiàng)目合同
- 2025年度客服人員應(yīng)急響應(yīng)能力提升合同
- 2025年度醫(yī)療護(hù)理機(jī)構(gòu)護(hù)士職業(yè)發(fā)展支持合同
- 郴州2025年湖南郴州市嘉禾縣縣直事業(yè)單位選調(diào)9人筆試歷年參考題庫(kù)附帶答案詳解
- 珠海廣東珠海市斗門區(qū)人民法院特邀調(diào)解員招聘10人筆試歷年參考題庫(kù)附帶答案詳解
- 自貢四川自貢市第一人民醫(yī)院招聘針灸推拿技師筆試歷年參考題庫(kù)附帶答案詳解
- 紹興浙江紹興市自然資源和規(guī)劃局下屬事業(yè)單位編外用工招聘筆試歷年參考題庫(kù)附帶答案詳解
- 秦皇島2025年河北秦皇島市第一醫(yī)院招聘人事代理人員21人筆試歷年參考題庫(kù)附帶答案詳解
- 甘肅2025年甘肅省社會(huì)工作綜合服務(wù)中心選調(diào)15人筆試歷年參考題庫(kù)附帶答案詳解
- 二零二五年度文化教育培訓(xùn)中心承包工程2篇
- 2025年廣州中醫(yī)藥大學(xué)順德醫(yī)院(佛山市順德區(qū)中醫(yī)院)招考聘用高頻重點(diǎn)提升(共500題)附帶答案詳解
- 2025年華僑港澳臺(tái)學(xué)生聯(lián)招考試英語(yǔ)試卷試題(含答案詳解)
- 2025-2030年中國(guó)美容院行業(yè)營(yíng)銷創(chuàng)新戰(zhàn)略制定與實(shí)施研究報(bào)告
- 2025年江蘇省宿遷市事業(yè)單位引進(jìn)名校優(yōu)生120人歷年高頻重點(diǎn)提升(共500題)附帶答案詳解
- 人教版四年級(jí)上冊(cè)寒假數(shù)學(xué)計(jì)算題天天練及答案(共15天)
- 2024人教版英語(yǔ)七年級(jí)下冊(cè)《Unit 3 Keep Fit How do we keep fit》大單元整體教學(xué)設(shè)計(jì)2022課標(biāo)
- 山東省海洋知識(shí)競(jìng)賽(初中組)考試題及答案
- 藥品流通監(jiān)管培訓(xùn)
- JD37-009-2024 山東省存量更新片區(qū)城市設(shè)計(jì)編制技術(shù)導(dǎo)則
- 《廣西高標(biāo)準(zhǔn)農(nóng)田耕地質(zhì)量評(píng)價(jià)工作 指導(dǎo)手冊(cè)》
評(píng)論
0/150
提交評(píng)論