C語言程序設(shè)計(jì)課程實(shí)踐指導(dǎo)31_第1頁
C語言程序設(shè)計(jì)課程實(shí)踐指導(dǎo)31_第2頁
C語言程序設(shè)計(jì)課程實(shí)踐指導(dǎo)31_第3頁
C語言程序設(shè)計(jì)課程實(shí)踐指導(dǎo)31_第4頁
C語言程序設(shè)計(jì)課程實(shí)踐指導(dǎo)31_第5頁
已閱讀5頁,還剩119頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、第一章 緒論上機(jī)實(shí)習(xí):WiN-TC系統(tǒng)的基本操作方法一、目的要求1、 掌握C程序的基本結(jié)構(gòu)。2、 熟悉WiN-TC系統(tǒng)的操作界面。3、 能熟練地啟動(dòng)WiN-TC和退出WiN-TC。4、 掌握在WiN-TC中建立、運(yùn)行、修改、保存和裝入程序的方法。5、 掌握插刪字符和插刪行等基本的編輯操作。二、上機(jī)內(nèi)容下面是三個(gè)從最簡單到稍復(fù)雜的C程序,仔細(xì)閱讀程序并領(lǐng)會(huì)各程序的運(yùn)行結(jié)果,以熟悉C程序的基本結(jié)構(gòu)和WiN-TC的基本操作流程。1、 main() printf(" Hello China!");(1) 調(diào)試該程序。(2) 在函數(shù)體中插入一行語句,使上面的程序變成:main() c

2、lrscr(); /* 清屏 */ printf("Hello China!");再次運(yùn)行程序并仔細(xì)觀察運(yùn)行結(jié)果,這次是先清屏,再從屏幕的左上角開始顯示“Hello China!”。說明:清屏函數(shù)clrscr(),先清屏再顯示出運(yùn)行結(jié)果2、 main() int a,b,sum; a=1; b=2; sum=a+b; clrscr(); printf("sum=%d",sum);(1) 運(yùn)行該程序,對(duì)比自己的判斷與屏幕上的結(jié)果是否一致。(2) 刪除函數(shù)體第一行中的變量定義語句“int a,b,sum;”,或?qū)⒃撜Z句注釋起來。再運(yùn)行程序,看看會(huì)有什么結(jié)果。

3、3、 main() int a,b; a=2; b=pf(a); printf("a=%d, b=%d",a,b); pf(num) int num; int t; t=num*num; return(t); (1) 運(yùn)行程序后分析該程序執(zhí)行的功能。(2) 將程序中的main()函數(shù)改寫如下:main() int a,b; clrscr(); scanf("%d", &a); b=pf(a); printf("a=%d, b=%d",a,b); 再運(yùn)行程序,當(dāng)從鍵盤輸入2時(shí),輸出: a=2, b=4從鍵盤輸入5時(shí),輸出: a=

4、5, b=25如果是第二種情況會(huì)有什么好處?使用scanf函數(shù)的好處是,可以在程序的運(yùn)行過程中靈活地輸入我們想求平方的一個(gè)數(shù),并根據(jù)該數(shù)輸出其平方值。第二章 基本數(shù)據(jù)類型和簡單程序設(shè)計(jì)第一節(jié) 學(xué)習(xí)指導(dǎo)一、 學(xué)習(xí)目標(biāo)本章重點(diǎn)介紹了C語言的三種基本數(shù)據(jù)類型,即整型、浮點(diǎn)型和字符型,以及這三種數(shù)據(jù)類型的簡單程序設(shè)計(jì)。每個(gè)程序都有自己特定的數(shù)據(jù)處理對(duì)象,例如,求123100之和的程序,它的數(shù)據(jù)對(duì)象是整數(shù);求一元二次方程的根的程序,它的數(shù)據(jù)對(duì)象是小數(shù)??梢哉f,任何程序設(shè)計(jì)都會(huì)涉及到對(duì)數(shù)據(jù)的處理,因此,如何在程序中表示數(shù)據(jù)是一個(gè)最基本的問題。學(xué)習(xí)本章的目的,就是要了解各種基本數(shù)據(jù)類型的特點(diǎn),知道如何在程序

5、中使用這些類型的數(shù)據(jù),在定義變量時(shí)如何根據(jù)實(shí)際需要隨機(jī)應(yīng)變。本章學(xué)習(xí)目標(biāo)如下:1、 了解三種基本數(shù)據(jù)類型的特點(diǎn)。2、 掌握三種基本數(shù)據(jù)類型常量的表示方法。3、 熟練掌握三種基本數(shù)據(jù)類型變量的定義方法。4、 了解混合運(yùn)算中的類型轉(zhuǎn)換。二、 幾個(gè)需要注意的問題1、 常量與變量。要記住常量和變量的定義很容易,前者是在程序運(yùn)行過程中其值不能改變的量,后者是在程序運(yùn)行過程中其值允許改變的量。但是,對(duì)第一次學(xué)習(xí)程序設(shè)計(jì)的初學(xué)者來說,往往弄不明白編程時(shí)什么時(shí)候使用常量,什么時(shí)候使用變量。舉一個(gè)簡單的例子,如果你僅僅是想求13與25之和,那么可以在程序中寫出下面的語句: printf("%d&quo

6、t;,13+25);這里,13和25就是常量,這個(gè)語句中沒有出現(xiàn)任何一個(gè)變量。但是,如果你是想求兩個(gè)數(shù)之和,而這兩個(gè)數(shù)又是根據(jù)不同的需要而改變的,那么就可以在程序中利用定義變量的方法解決,如下面的語句: printf("%d",a+b);或: sum=a+b; printf("%d",sum);這里,a、b、sum就是變量,在執(zhí)行a+b之前,可以通過輸入語句給它們賦值,也可以通過賦值語句,把常量或表達(dá)式的值分別賦給它們。總之,a和b的值是可變的。2、 變量名的命名規(guī)則。程序中的每個(gè)變量都有一個(gè)名字,變量名在定義該變量時(shí)就確定了。并非任何一個(gè)字符序列都可以

7、作為一個(gè)變量名,只有符合一定規(guī)則的名字才是有效的。(1) 變量名只能由字母(AZ,az)、數(shù)字(09)和下劃線(_)三種符號(hào)組成,第一個(gè)字符必須是字母或下劃線。下面是合法的變量名:Y,student2,student_name,_page10下面是不合法的變量名:2student,sum$3,dr.a,#num(2) 大寫字母與小寫字母代表含義不同的字符,即兩者不等價(jià)。如,sum、Sum和SUM代表三個(gè)完全不同的變量。(3) Turbo C規(guī)定,變量名的前32個(gè)字符在程序中是有效的。盡管語法允許給變量取一個(gè)如此長的名字,但根據(jù)一般的編程經(jīng)驗(yàn),變量名的長度通常在8個(gè)字符以內(nèi)就行了,沒有必要取太長

8、的名字自找麻煩。(4) 不允許使用關(guān)鍵字作變量名。關(guān)鍵字是C語言的編譯程序定義的有固定用法的名字,如,關(guān)鍵字int的作用是定義一個(gè)整型變量,因此,用戶就不能再用int來作為某個(gè)變量的名字。除了變量名必須遵守上述命名規(guī)則,在后面章節(jié)中介紹的數(shù)組名、函數(shù)名和數(shù)據(jù)類型名等也必須遵守這些命名規(guī)則。另外,為了提高程序的可讀性,給變量命名時(shí)最好能做到“見名知意”。3、 變量的定義。C語言規(guī)定,程序中的變量必須是“先定義,后使用”。初學(xué)者往往容易忽略在使用變量之前先定義變量,這一點(diǎn)一定要注意。(1) 一個(gè)變量就是一個(gè)存儲(chǔ)區(qū)域,它能存儲(chǔ)相同類型的不同數(shù)據(jù),使用變量名就是使用變量存儲(chǔ)區(qū)域中存儲(chǔ)的數(shù)據(jù)。(2) 把

9、某個(gè)變量定義為哪一種基本類型,關(guān)鍵是看打算用該變量存儲(chǔ)什么數(shù)據(jù)。例如,想用一個(gè)變量存放單個(gè)字符,則可把該變量定義為char型;若想存放1100之間的整數(shù),則可把該變量定義為int型;若想存放小數(shù),則可把該變量定義為float型。定義變量時(shí)還應(yīng)考慮數(shù)據(jù)的大小范圍。試分析下面的程序:main() int a,b,c; a=20000; b=30000; c=a+b; printf("c=%d",c);不要以為這個(gè)程序的運(yùn)行結(jié)果會(huì)是c=50000,事實(shí)上,它的運(yùn)行結(jié)果是c=-15536。因?yàn)樽兞縞的類型是int型,它所能存放的最大整數(shù)是32767,而a與b之和50000超出了這個(gè)

10、范圍,運(yùn)行結(jié)果自然就出錯(cuò)了。要想得出正確的運(yùn)行結(jié)果,上面的程序應(yīng)改為:main() int a,b; unsigned c; a=20000; b=30000; c=a+b; printf("c=%u",c); /* %u表示以u(píng)nsigned型整數(shù)的形式輸出變量的值 */(3) 定義一個(gè)變量時(shí)應(yīng)盡可能地考慮節(jié)省存儲(chǔ)空間。例如,某個(gè)程序中的變量a用來存放100以內(nèi)的自然數(shù),那么,變量a可以定義為int類型,也可以定義為long類型。選哪一種呢?當(dāng)然是int型!因?yàn)?,一個(gè)int型變量只占2個(gè)字節(jié),而long型變量卻要占4個(gè)字節(jié)。三、易出現(xiàn)的語法錯(cuò)誤及出錯(cuò)信息上機(jī)操作時(shí),有語法

11、錯(cuò)誤的程序不能順利通過編譯過程,這時(shí),出錯(cuò)信息會(huì)出現(xiàn)在Massage窗口中,每條出錯(cuò)信息前有一個(gè)用來報(bào)告錯(cuò)誤所在行的行號(hào),可以按這個(gè)行號(hào)查找程序中出錯(cuò)的地方,修改之后再重新對(duì)程序進(jìn)行編譯。下面列出了在定義變量時(shí)易出現(xiàn)的語法錯(cuò)誤及相應(yīng)出錯(cuò)信息。1、 變量沒有定義。出錯(cuò)信息: Undefined symbol XXXX 分析:C語言規(guī)定,變量使用之前必須先定義。這條出錯(cuò)信息產(chǎn)生的原因是使用了一個(gè)沒有定義過的變量。程序示例:main() a=2; b=3; printf("%d",a+b);這個(gè)程序在編譯時(shí),Massage窗口中將顯示出第3行的變量a和第4行的變量b沒有定義的出錯(cuò)

12、信息。又如:main() int a;b; a=2; b=3; printf("%d",a+b);這個(gè)程序好象沒有什么錯(cuò)誤,但編譯時(shí)Massage窗口中將顯示出: Undefined symbol b in function main為什么呢?仔細(xì)觀察,你會(huì)發(fā)現(xiàn)程序的第三行定義變量a和b時(shí),a與b之間是分號(hào)而不是逗號(hào)。分號(hào)代表一個(gè)語句的結(jié)束,因此,分號(hào)后面的b就沒有定義了。這好象是一個(gè)很好笑的錯(cuò)誤,但是,對(duì)粗心的初學(xué)者來說,上機(jī)時(shí)往往會(huì)因忽略細(xì)節(jié)而導(dǎo)致程序的失敗。2、 定義變量時(shí)的語法錯(cuò)誤。出錯(cuò)信息: Declaration syntax error分析:通常這條信息的出錯(cuò)

13、之處在變量定義或函數(shù)定義中,而定義中具體的語法錯(cuò)誤又可能是多種多樣的,所以,這是一條較難查找的錯(cuò)誤。下面的程序示例給出了兩種導(dǎo)致這條信息的變量定義錯(cuò)誤。程序示例:main() int a b; a=2; b=3; printf("%d",a+b);這個(gè)程序的錯(cuò)誤之處是,第3行定義變量時(shí),變量a和b之間用的是空格間隔,而不是用逗號(hào)間隔。又如:main() float 2s; 2s=26.8; printf("%f",2s);這個(gè)程序中使用了一個(gè)名字不合法的變量,即2s。注意,變量名必須以字母或下劃線開頭。第二節(jié)上機(jī)實(shí)習(xí):基本數(shù)據(jù)類型的簡單程序設(shè)計(jì)一、目的要

14、求1、 進(jìn)一步熟悉Turbo C集成環(huán)境下程序的建立、修改和運(yùn)行。2、 熟悉定義各種基本數(shù)據(jù)類型變量的方法。3、 初步了解printf函數(shù)的使用方法。4、 熟悉有關(guān)變量定義的語法錯(cuò)誤,并能夠根據(jù)出錯(cuò)信息修改、調(diào)試程序。二、上機(jī)內(nèi)容1、 語法錯(cuò)誤的檢查與修改。下面的程序均含有語法錯(cuò)誤,在Turbo C集成環(huán)境中建立源程序并使用Run命令后,仔細(xì)觀察Massage窗口中的出錯(cuò)信息,并分析出錯(cuò)原因,找出程序中的錯(cuò)誤所在之處。改正錯(cuò)誤之后再重新運(yùn)行程序。注意,出錯(cuò)信息顯示在Massage窗口中時(shí),可以按F6鍵在Massage窗口與Edit窗口之間切換。(1) main() int x1,x2; x1=

15、5; x2=10; y=x1*x2; printf("y=%d",y);(2) main() FLOAT a; a=2.6; printf("%f",a*3);(3) main() int num#1; num#1=50; printf("%d",num#1/2);(4) main() char ch; ch=A; printf("%c",ch);2、 分析程序的運(yùn)行結(jié)果。上機(jī)之前先寫出下面程序的運(yùn)行結(jié)果,上機(jī)時(shí)再比較實(shí)際運(yùn)行結(jié)果與自己分析的結(jié)果是否一致。(1) main() int num1,num2,num3;

16、 clrscr(); num1=4; num2=2; num3=num1/num2; printf("num3=%dn",num3); num1=12; num2=3; num3=(num1+num2)*2; printf("num3=%d",num3);(2) main() int r; float s; clrscr(); r=2; s=3.14159*r*r; printf("r=%dn",r); printf("s=%f",s);(3) main() char c1,c2; clrscr(); c1=

17、9;a' c2='b' printf("字母a的ASCII碼為: %d n字母b的ASCII碼為: %d",c1,c2);(4) main() char ch; clrscr(); ch='02' printf("%cn",ch); ch='03' printf("%c",ch);提示:這個(gè)程序中,'02'和'03'分別表示ASCII碼為2和3的字符,前者是一個(gè)笑面符號(hào),后者是一個(gè)心形符號(hào)。通過這種形式,可以輸出不能用鍵盤符號(hào)表示的字符。上機(jī)操作時(shí)

18、,你不妨將'02'和'03'分別改為'04'和'05',看看會(huì)有什么運(yùn)行結(jié)果。3、 編寫一個(gè)簡單的程序。已知三個(gè)整數(shù)分別為100、82、93,編一程序求這三個(gè)數(shù)的平均值。要求使用變量。第三章 表達(dá)式與運(yùn)算符第一節(jié)學(xué)習(xí)指導(dǎo)三、 學(xué)習(xí)目標(biāo)本章重點(diǎn)介紹了幾類常用的運(yùn)算符,以及由這些運(yùn)算符構(gòu)成的表達(dá)式。在實(shí)際編程中,算術(shù)運(yùn)算符和賦值運(yùn)算符幾乎是每個(gè)C程序都要用到的,這也是本章應(yīng)重點(diǎn)掌握的內(nèi)容。對(duì)于關(guān)系表達(dá)式和邏輯表達(dá)式,可能你覺得一時(shí)還用不上它們,但在后面的選擇結(jié)構(gòu)和循環(huán)結(jié)構(gòu)的程序設(shè)計(jì)中,條件判斷均是以關(guān)系表達(dá)式或邏輯表達(dá)式的形式表示,因

19、此,理解并掌握關(guān)系運(yùn)算符和邏輯運(yùn)算符及其相關(guān)表達(dá)式,是學(xué)好選擇結(jié)構(gòu)和循環(huán)結(jié)構(gòu)的基礎(chǔ)。本章學(xué)習(xí)目標(biāo)如下:1、 熟悉各種基本的算術(shù)運(yùn)算符,能夠把一個(gè)普通的數(shù)學(xué)公式改寫成符合C程序語法規(guī)則的算術(shù)表達(dá)式。2、 理解各種關(guān)系運(yùn)算符和邏輯運(yùn)算符的意義,能準(zhǔn)確判斷關(guān)系表達(dá)式和邏輯表達(dá)式的值。3、 熟練掌握賦值運(yùn)算符和各種復(fù)合賦值運(yùn)算符的用法。4、 熟悉各類常用運(yùn)算符的優(yōu)先級(jí)。四、 需要注意的幾個(gè)問題1、 關(guān)于除法運(yùn)算符。除法運(yùn)算符“/”與一般的算術(shù)運(yùn)算規(guī)則不同,當(dāng)整型數(shù)據(jù)除以整型數(shù)據(jù)時(shí),其商也是整數(shù)。除法運(yùn)算符“/”的這一特點(diǎn)有時(shí)會(huì)影響運(yùn)算結(jié)果的精確性,看下面求兩個(gè)數(shù)的平均值的程序:main() int n

20、um1,num2,sum,n; float average; num1=13; num2=28; n=2; sum=num1+num2; average=sum/n; printf("%.2f",average); /* %.2f 表示輸出的浮點(diǎn)數(shù)只保留兩位小數(shù) */這個(gè)程序的運(yùn)行結(jié)果是20.00,而不是20.50,因?yàn)樽兞縮um和n都是是整型變量,相除的結(jié)果就是一個(gè)舍去了小數(shù)部分的整型數(shù)。如果想得到精確的運(yùn)算結(jié)果,則可將程序中的語句: average=sum/n;改為: average=(float)sum/n;2、 關(guān)系表達(dá)式和邏輯表達(dá)式。關(guān)系表達(dá)式和邏輯表達(dá)式的值只有

21、兩種:1和0,即表達(dá)式為真時(shí),其值為1,表達(dá)式為假時(shí),其值為0。而在判斷真與假時(shí),則是0為假,非0為真。需要注意的是,數(shù)學(xué)上很常見的一種比較大小關(guān)系的寫法,在C語言中卻變成了另外的含義。如,要表示x的值在3和10之間,數(shù)學(xué)上可以寫為: 3<x<10而在C語言中,上面的式子等效于: (3<x)<10當(dāng)x的值不在3和10之間時(shí),這個(gè)關(guān)系表達(dá)式依然為真。這里,我們假設(shè)x的值為100,關(guān)系表達(dá)式3<x為真,其值為1,而關(guān)系表達(dá)式1<10顯然為真。因此,在C語言中要表示x的值在3和10之間,就應(yīng)該寫成下面的邏輯表達(dá)式: 3<x && x<1

22、03、 賦值運(yùn)算符與賦值表達(dá)式。(1) 賦值運(yùn)算符“=”不同于數(shù)學(xué)中的等號(hào)。在數(shù)學(xué)上,算式i=i+2顯然不成立。但在C語言中,表達(dá)式i=i+2的作用是把變量i的值加上2,并把得到的和賦值到變量i中。(2) 特別要注意的是,賦值運(yùn)算符的左邊只能是一個(gè)變量名,而不能是一個(gè)常量或其它的表達(dá)式。下面都是錯(cuò)誤的賦值表達(dá)式: 13=a a+b=5 num*2=100如果程序中出現(xiàn)了錯(cuò)誤的賦值表達(dá)式,則編譯時(shí)Massage窗口中會(huì)顯示下面的出錯(cuò)信息: Lvalue required(3) 給變量賦值時(shí)是“新來舊去”,即,把一個(gè)新的值賦給變量后,該變量中原來的值就被覆蓋掉了。4、 運(yùn)算符的優(yōu)先級(jí)。C語言對(duì)每一

23、種運(yùn)算符都規(guī)定了優(yōu)先級(jí),有時(shí)候,在同一表達(dá)式中需要同時(shí)使用多種運(yùn)算符,這時(shí)就要考慮各個(gè)運(yùn)算符的優(yōu)先級(jí)問題。第二節(jié)上機(jī)實(shí)習(xí)一:算術(shù)運(yùn)算符及算術(shù)表達(dá)式一、目的要求1、 熟悉各種算術(shù)運(yùn)算符的使用規(guī)則。2、 能夠編寫程序,求簡單的數(shù)學(xué)算式的值。二、上機(jī)內(nèi)容1、 運(yùn)行下列程序,注意觀察運(yùn)行結(jié)果。(1) main() int a=11,b=3; clrscr(); printf("a/b=%dn",a/b); printf("(float)a/b=%fn",(float)a/b); printf("a%b=%d",a%b); /* “%”的作用是

24、打印出字符“%” */(2) main() float x=3.8; clrscr(); printf("x=%.2fn",x); printf("(int)x=%d",(int)x);(3) main() int a=7,b=4; float x=2.5,y; clrscr(); y=x+a%3*(int)(x+b)%2/4; printf("y=%f",y);2、 編寫程序。已知: 其中,a=-10,b=30。編一程序求y的值。3、 完善程序。已知一元二次方程: ax2+bx+c=0其中,a=1,b=4,c=2。下面的程序是求方程

25、的兩個(gè)實(shí)數(shù)根,請(qǐng)?jiān)跈M線處填寫正確的語句或表達(dá)式,使程序完整。程序的后面給出了該程序正確的運(yùn)行結(jié)果,上機(jī)調(diào)試完善后的程序,看看你的程序運(yùn)行結(jié)果是否與書中的結(jié)果一致。# include <math.h>main() int ; /* 定義變量a、b、c,并給變量賦初值 */ float d,x1,x2; clrscr(); d=sqrt( ); /* 求b2-4ac的平方根 */ ; /* 求x1的值 */ ; /* 求x2的值 */ printf("x1=%.2fn",x1); printf("x2=%.2f",x2);運(yùn)行結(jié)果為: x1=-0

26、.59 x2=-3.41提示:求根公式為:C語言中計(jì)算平方根的函數(shù)是sqrt()函數(shù),例如,sqrt(a+b)即是求a+b的平方根。第三節(jié)上機(jī)實(shí)習(xí)二:關(guān)系表達(dá)式和邏輯表達(dá)式一、目的要求1、 掌握各種關(guān)系運(yùn)算符和邏輯運(yùn)算符的功能。2、 能正確理解“真”、“假”的概念,及其在C語言中的表示形式。3、 能夠把一個(gè)命題寫成符合C語言語法規(guī)則的關(guān)系表達(dá)式或邏輯表達(dá)式。二、上機(jī)內(nèi)容1、 運(yùn)行下列程序,分析并觀察運(yùn)行結(jié)果。(1) main() int a,b,c; a=1; b=2; c=3; clrscr(); printf("a=%d,b=%d,c=%dn",a,b,c); prin

27、tf("a<b 的值為:%dn",a<b); printf("a<=b 的值為:%dn",a<=b); printf("a=c 的值為:%dn",a=c); printf("a!=c 的值為:%dn",a!=c); printf("c>b 的值為:%dn",c>b);(2) main() int x=3,y=4,z=5; int b; clrscr(); printf("x=%d,y=%d,z=%dn",x,y,z); b=x<y&a

28、mp;&x<z; printf("x<y&&x<z 的值為:%dn",b); b=x<y&&x>z; printf("x<y&&x>z 的值為:%dn",b); b=x<y|x>z; printf("x<y|x>z 的值為:%dn",b); b=!x; printf("!x 的值為:%dn",b); b=!(x>y); printf("!(x>y) 的值為:%dn"

29、;,b); b=(x>y|x>z)&&y<z; printf("(x>y|x>z)&&y<z 的值為:%dn",b);(3) main() int x=20,y; clrscr(); y=2<x<10; printf("x=%dn",x); printf("2<x<10 的值為:%dn",y); y=2<x&&x<10; printf("2<x&&x<10 的值為:%d"

30、;,y);2、 完善程序。已知,閏年符合下面兩個(gè)條件之一:(1) 能被4整除,但不能被100整除;(2) 能被400整除。下面的程序驗(yàn)證2000年為閏年,請(qǐng)?jiān)跈M線處填寫正確的運(yùn)算符或表達(dá)式,使程序完整。程序的后面給出了該程序正確的運(yùn)行結(jié)果,上機(jī)調(diào)試完善后的程序,看看你的程序運(yùn)行結(jié)果是否與書中的結(jié)果一致。提示:可以通過求余運(yùn)算判斷能否整除。若a%b的值為0,則表明a能被b整除。main() int year=2000,b; b=(year%4=0 year%100 0) ( ); clrscr(); printf("%d",b);運(yùn)行結(jié)果:1第四節(jié)上機(jī)實(shí)習(xí)三:賦值運(yùn)算一、目的

31、要求1、 理解賦值運(yùn)算符的意義,了解賦值運(yùn)算符與數(shù)學(xué)中的等號(hào)的區(qū)別。2、 熟悉常用的復(fù)合賦值運(yùn)算符以及自增和自減運(yùn)算符。二、上機(jī)內(nèi)容1、 下面的程序均有語法錯(cuò)誤,上機(jī)調(diào)試程序,注意觀察Message窗口中的出錯(cuò)信息,并根據(jù)出錯(cuò)信息改正程序中的錯(cuò)誤之處。(1) main() int a; 0=a; printf("a=%d",a)(2) main() int a; b=1,c=2; b+c=a; printf("a=%d",a);2、 運(yùn)行下列程序,分析并觀察運(yùn)行結(jié)果。(1) main() int x,y; clrscr(); x=y=25; printf

32、("x=%d,y=%d",x,y);(2) main() int x=3,y=2; clrscr(); x*=y+8; printf("1: x=%dn",x); x-=y; printf("2: x=%dn",x);(3) main() int a=10,b; clrscr(); b=a+; printf("a=%d,b=%dn",a,b); b=+a; printf("a=%d,b=%dn",a,b);3、 完善程序。下面程序的功能是交換變量a和b的值,請(qǐng)?jiān)跈M線處填寫正確的表達(dá)式或語句,使程

33、序完整。程序的后面給出了該程序正確的運(yùn)行結(jié)果,上機(jī)調(diào)試完善后的程序,看看你的程序運(yùn)行結(jié)果是否與書中的結(jié)果一致。提示:交換兩個(gè)變量的值,需要一個(gè)中間變量來暫時(shí)存放其中一個(gè)變量的值。下面的程序段是錯(cuò)誤的: a=b; b=a;若變量a的初值為1,b的初值為2,那么執(zhí)行了第一個(gè)語句之后,變量a的值就變成了2,而不再是原來的值1。因此整個(gè)程序段執(zhí)行之后,a和b的值均為2。main() int a=1,b=2,c; clrscr(); /* 輸出交換前變量a和b的值 */ c= ; a= ; b= ; /* 輸出交換后變量a和b的值 */運(yùn)行結(jié)果:a=1,b=2a=2,b=1第四章 數(shù)據(jù)的輸入與輸出第一節(jié)

34、學(xué)習(xí)指導(dǎo)五、 學(xué)習(xí)目標(biāo)C語言的輸入與輸出是通過函數(shù)來實(shí)現(xiàn)的,本章重點(diǎn)介紹了六個(gè)輸入輸出函數(shù),分別是:字符輸入輸出函數(shù):getchar()函數(shù)和putchar()函數(shù)字符串輸入輸出函數(shù):gets()函數(shù)和puts()函數(shù)格式輸入輸出函數(shù):scanf()函數(shù)和printf()函數(shù)本章學(xué)習(xí)目標(biāo)如下:1、 熟練掌握各個(gè)輸入輸出函數(shù)的調(diào)用格式。2、 熟悉scanf()函數(shù)和printf()函數(shù)的控制參數(shù)。六、 輸入輸出在編程中的應(yīng)用一個(gè)較簡單的程序通常具有如下結(jié)構(gòu):數(shù)據(jù)輸入數(shù)據(jù)處理數(shù)據(jù)輸出其中,程序的核心部分是“數(shù)據(jù)處理”,而“數(shù)據(jù)輸入”和“數(shù)據(jù)輸出”同樣是程序設(shè)計(jì)的重點(diǎn),因?yàn)檩斎胼敵鲋苯佑绊懙匠绦虻慕?/p>

35、面??梢哉f,操作界面是衡量一個(gè)軟件成敗的重要因素之一,這一點(diǎn)從DOS操作系統(tǒng)和Windows操作系統(tǒng)的界面就可得到驗(yàn)證。C語言中,通過靈活運(yùn)用輸入輸出函數(shù),就能實(shí)現(xiàn)友好的人機(jī)界面。七、 為什么要使用預(yù)編譯命令#include在本書第三章的上機(jī)實(shí)習(xí)一中,一個(gè)求一元二次方程實(shí)數(shù)根的程序里使用了下面的預(yù)編譯命令: # include <math.h>而配套教材在第四章例題程序中,又多次使用了預(yù)編譯命令: # include <stdio.h># include命令的作用是把頭文件(如math.h和stdio.h)包含到本程序中,為什么要這樣做呢?這是因?yàn)閹旌瘮?shù)的原型說明(如函

36、數(shù)的類型及其參數(shù)類型、函數(shù)中用到的符號(hào)常量等等)被放在一個(gè)或多個(gè)頭文件(擴(kuò)展名為.H)中,如果你的程序要調(diào)用某個(gè)庫函數(shù),那么在程序的開頭應(yīng)該用文件包含預(yù)編譯命令#include將相應(yīng)的頭文件包含進(jìn)本程序中,否則,你的程序?qū)⒉荒茼樌赝ㄟ^編譯。例如,程序中使用了getchar()函數(shù),但程序的開頭沒有# include <stdio.h>命令,編譯時(shí)Message窗口中就會(huì)顯示出如下出錯(cuò)信息:Undefined symbol '_putchar'八、 使用scanf()函數(shù)時(shí)容易出現(xiàn)的幾個(gè)錯(cuò)誤格式輸入函數(shù)scanf()和格式輸出函數(shù)printf()的用法非常靈活多變,

37、特別是scanf()函數(shù),初學(xué)者在使用時(shí)很容易出錯(cuò)。1、 變量名之前忘寫取地址運(yùn)算符&。調(diào)用scanf()函數(shù)時(shí),變量名之前必須要有取地址運(yùn)算符&,否則,將導(dǎo)致輸入數(shù)據(jù)出錯(cuò),而這樣的錯(cuò)誤又不會(huì)被編譯程序和連接程序發(fā)現(xiàn)??聪旅娴某绦颍簃ain() int a; scanf("%d",a); /* 變量a之前沒有寫取地址運(yùn)算符& */ printf("a=%d",a);事實(shí)上,這個(gè)程序能夠順利通過編譯和連接,但程序的運(yùn)行結(jié)果卻是:100 (輸入100后按回車鍵)a=201 (輸出201)要想得到正確的運(yùn)行結(jié)果,就要將程序中的 scan

38、f("%d",a);改成 scanf("%d",&a);2、 輸入實(shí)型數(shù)據(jù)時(shí)指定小數(shù)位數(shù)。使用printf()函數(shù)輸出實(shí)型數(shù)據(jù)時(shí),可以指定數(shù)據(jù)的寬度和小數(shù)位數(shù),但使用scanf()函數(shù)輸入實(shí)型數(shù)據(jù)時(shí),允許指定數(shù)據(jù)的寬度,卻不允許指定小數(shù)位數(shù)。看下面的程序:main() float a; scanf("%.2f",&a); printf("a=%d",a);這個(gè)程序同樣能夠順利通過編譯和連接,但運(yùn)算結(jié)果卻是錯(cuò)誤的。程序運(yùn)行時(shí),并不等待輸入變量a的值,而是直接顯示出下面的結(jié)果:3、 想用scanf()函

39、數(shù)顯示輸入數(shù)據(jù)的提示信息。在輸入數(shù)據(jù)之前,讓屏幕上顯示出輸入提示信息是一種很友好的做法。但是,C語言中不能通過輸入函數(shù)來顯示出提示信息。看下面的程序:main() int a,b; scanf("a=%d,b=%d",&a,&b); printf("a=%d,b=%d",a,b); 這個(gè)程序運(yùn)行時(shí)不會(huì)顯示出“a=”和“b=”,然后再等待輸入變量a和b的值。特別要注意的是,scanf()函數(shù)的控制參數(shù)中,格式轉(zhuǎn)換控制符之外的所有字符,在程序運(yùn)行時(shí)都必須原樣輸入(而不是原樣輸出)。例如,上面的程序如果想把1和2分別輸入到變量a和b中,運(yùn)行時(shí)就

40、應(yīng)輸入如下的內(nèi)容:a=1,b=2 (輸入內(nèi)容)a=1,b=2 (輸出結(jié)果)錯(cuò)誤的輸入則會(huì)導(dǎo)致變量a和b的值不正確。如:1,2 a=5825,b=23016那么,怎樣才能在程序運(yùn)行時(shí)顯示出提示信息呢?盡管上面程序中的輸入函數(shù)scanf("a=%d,b=%d",&a,&b)毫無錯(cuò)誤,并且運(yùn)行時(shí)只要輸入格式正確就不會(huì)影響運(yùn)行結(jié)果,但是,scanf()函數(shù)的控制參數(shù)中類似“a=”和“b=”的寫法是沒有意義的,這樣做只會(huì)增加輸入的負(fù)擔(dān)和出錯(cuò)的機(jī)會(huì)。要想在輸入數(shù)據(jù)之前顯示出提示信息,正確的做法應(yīng)該是通過輸出函數(shù)來實(shí)現(xiàn)。下面的三個(gè)程序都是求兩個(gè)數(shù)之和,請(qǐng)比較一下它們的運(yùn)行

41、結(jié)果。(1) main() int a,b,sum; scanf("%d,%d",&a,&b); sum=a+b; printf("%d",sum);運(yùn)行結(jié)果:12,35 47(2) main() int a,b,sum; printf("a="); scanf("%d",&a); printf("b="); scanf("%d",&b); sum=a+b; printf("sum=%d",sum);運(yùn)行結(jié)果:a=12 b=

42、35 sum=47(3) main() int a,b,sum; printf("輸入第一個(gè)整數(shù):"); scanf("%d",&a); printf("輸入第二個(gè)整數(shù):"); scanf("%d",&b); sum=a+b; printf("%d+%d=%d",a,b,sum);運(yùn)行結(jié)果:輸入第一個(gè)整數(shù):12 輸入第二個(gè)整數(shù):35 12+35=47五、另一個(gè)常用的字符輸入函數(shù)配套教材中介紹的getchar()函數(shù)和scanf()函數(shù)都可以用來輸入字符。如,要輸入一個(gè)字符到字符型

43、變量ch中,可以寫成: ch=getchar();或 scanf("%c",&ch);另外,getch()函數(shù)也是一個(gè)非常有用的字符輸入函數(shù),它的調(diào)用格式是: getch()該函數(shù)的返回值與getchar()函數(shù)相同,即返回輸入字符的ASCII碼。與getchar()函數(shù)不同的是,getch()函數(shù)執(zhí)行時(shí)不等待按回車鍵,并且,屏幕上不顯示輸入的字符。如果想實(shí)現(xiàn)程序在運(yùn)行過程中暫停、按任意鍵之后又繼續(xù)的功能,那么使用getch()函數(shù)就是最好最方便的選擇。試分析下面的程序:main() int a,b,c; clrscr(); puts("輸入兩個(gè)整數(shù):&q

44、uot;); scanf("%d,%d",&a,&b); c=a+b; clrscr(); printf("%d+%d=%dnnn",a,b,c); puts("按任意鍵繼續(xù)."); getch(); c=a*b; clrscr(); printf("%d*%d=%dn",a,b,c);運(yùn)行結(jié)果:輸入兩個(gè)整數(shù):2,3 2+3=5按任意鍵繼續(xù).(按空格鍵)2*3=6第二節(jié)上機(jī)實(shí)習(xí)一:字符的輸入和輸出函數(shù)一、目的要求1、 熟練掌握getchar()函數(shù)的調(diào)用方法,熟悉getchar()函數(shù)的返回值。2、

45、 熟練掌握putchar()函數(shù)的調(diào)用方法。3、 了解getch()函數(shù)。二、上機(jī)內(nèi)容1、 運(yùn)行下列程序,注意觀察運(yùn)行結(jié)果。(1) #include <stdio.h>main() char ch; clrscr(); ch=getchar(); putchar(ch); printf("-ASCII碼:%d",ch);(2) #include <stdio.h>main() char c1,c2; clrscr(); c1=getchar(); c2=getchar(); printf("c1='%c'n",c1

46、); /* ' 的作用是輸出符號(hào) ' */ (c2='n')?printf("c2=回車符"):printf("c2='%c'",c2);說明:運(yùn)行這個(gè)程序時(shí),分別輸入下面三組數(shù)據(jù),注意觀察各自的運(yùn)行結(jié)果,并思考為什么會(huì)產(chǎn)生這樣的運(yùn)行結(jié)果。第一組數(shù)據(jù):a 第二組數(shù)據(jù):ab 第三組數(shù)據(jù):abc (3) #include <stdio.h>main() char ch,c1,c2; clrscr(); printf("請(qǐng)輸入一個(gè)字母:"); ch=getchar(); c1=ch

47、-1; c2=ch+1; printf("n%c的前一個(gè)字母是%c,后一個(gè)字母是%c",ch,c1,c2);說明:可將程序中的語句 ch=getchar();改為: ch=getch();看看運(yùn)行結(jié)果有什么變化。2、 完善程序。下面程序的功能是,輸入一個(gè)小寫字母,輸出其對(duì)應(yīng)的大寫字母;若輸入的不是小寫字母,則提示輸入出錯(cuò)。請(qǐng)?jiān)诔绦蛑械臋M線處填寫正確的語句或表達(dá)式,使程序完整。上機(jī)調(diào)試程序,使運(yùn)行結(jié)果與書中的結(jié)果一致。提示:(1) 大寫字母與小寫字母的ASCII碼具有如下關(guān)系: 大寫字母的ASCII碼小寫字母的ASCII碼32(2) 可以使用條件表達(dá)式來判斷輸入的字母是否是小

48、寫字母。如果ch為小寫字母,則邏輯表達(dá)式ch>='a'&&ch<='z'為真。#include <stdio.h>main() char ch1,ch2; clrscr(); puts("請(qǐng)輸入一個(gè)小寫字母:"); ch1=getchar(); ch2=ch1-32; (ch1>=a&&ch1<=z) ? putchar(d%,ch2):printf("輸入出錯(cuò)!");運(yùn)行結(jié)果1:請(qǐng)輸入一個(gè)小寫字母:b B運(yùn)行結(jié)果2:請(qǐng)輸入一個(gè)小寫字母:# 輸入出錯(cuò)!運(yùn)行

49、結(jié)果3:請(qǐng)輸入一個(gè)小寫字母:t T第三節(jié)上機(jī)實(shí)習(xí)二:格式輸入輸出函數(shù)一、目的要求1、 熟練掌握scanf()函數(shù)和printf()函數(shù)的調(diào)用格式,及其允許使用的格式轉(zhuǎn)換控制符。2、 熟悉scanf()函數(shù)對(duì)各種類型數(shù)據(jù)的鍵盤輸入格式的要求。3、 能靈活運(yùn)用printf()函數(shù)控制屏幕輸出格式。二、上機(jī)內(nèi)容1、 運(yùn)行下列程序,注意觀察運(yùn)行結(jié)果。(1) main() int a,b; float c; clrscr(); scanf("%d%d%f",&a,&b,&c); printf("a=%dn",a); printf("

50、;b=%dn",b); printf("c=%fn",c);說明:運(yùn)行這個(gè)程序時(shí),分別按下面4種格式輸入數(shù)據(jù),注意觀察各自的運(yùn)行結(jié)果。第一種輸入格式: 10 25 4.72 第二種輸入格式: 10 25 4.72 第三種輸入格式: 10 25 4.72 第四種輸入格式: 10,25,4.72 (這種輸入格式是錯(cuò)誤的,想一想錯(cuò)在什么地方?)(2) main() int a,b; char c; clrscr(); scanf("%d,%d;%c",&a,&b,&c); printf("a=%dn",a)

51、; printf("b=%dn",b); printf("c=%cn",c); getch();說明:運(yùn)行這個(gè)程序時(shí),如果想使變量a的值為113,b的值為3720,c為'x'字符,那么該如何從鍵盤輸入數(shù)據(jù)?(3) main() float p=3.14159; clrscr(); printf("p=%.2fn",p); printf("p=%.4fn",p); printf("p=%10.2fn",p); printf("p=%10.4fn",p); pri

52、ntf("p=%-10.2fn",p); printf("p=%-10.4fn",p);說明:分析并觀察完該程序的運(yùn)行結(jié)果之后,在語句 clrscr();的后面加入語句 printf("nnn");再次運(yùn)行程序,注意觀察運(yùn)行結(jié)果有什么變化。(4) main() char ch1,ch2; ch1='02' ch2='03' clrscr(); printf("t%3cn",ch1); printf("t%2c%c%cn",ch1,ch2,ch1); printf(

53、"t%c%c%c%c%cn",ch1,ch2,ch2,ch2,ch1);說明:可以把最后三行語句中的“t”去掉,看看程序的運(yùn)行結(jié)果有什么變化,以此領(lǐng)會(huì)轉(zhuǎn)義字符t的作用。2、 完善程序。下面程序的功能是,根據(jù)商品的原價(jià)和折扣率,計(jì)算商品的實(shí)際售價(jià)。請(qǐng)?jiān)诔绦蛑械臋M線處填寫正確的語句或表達(dá)式,使程序完整。上機(jī)調(diào)試程序,使程序的運(yùn)行結(jié)果與書中的結(jié)果一致。main() float cost,percent,c; clrscr(); printf("請(qǐng)輸入商品的原價(jià)(單位:元):"); scanf(" ",&cost); printf(

54、); scanf(" ",&percent); c=cost*percent; printf( ,c);運(yùn)行結(jié)果:請(qǐng)輸入商品的原價(jià)(單位:元):120 請(qǐng)輸入折扣率:0.85 實(shí)際售價(jià)為:102.00元3、 編寫程序。已知: 1公里2里1000米編一程序,輸入公里數(shù),將其換算成里和米。要求程序的輸入輸出形式如下: 請(qǐng)輸入公里數(shù):2.5 (以數(shù)據(jù)2.5為例) 2.50公里 = 5.00里 = 2500.00米第五章 控制語句第一節(jié)學(xué)習(xí)指導(dǎo)九、 學(xué)習(xí)目標(biāo)本章重點(diǎn)介紹了C語言中用于實(shí)現(xiàn)選擇結(jié)構(gòu)和循環(huán)結(jié)構(gòu)的控制語句,它們分別是:實(shí)現(xiàn)選擇結(jié)構(gòu)的if語句和switch語句、實(shí)現(xiàn)

55、循環(huán)結(jié)構(gòu)的for語句、while語句和do-while語句,以及break語句和continue語句。這些控制語句均是學(xué)習(xí)復(fù)雜程序設(shè)計(jì)的基礎(chǔ),也是C語言學(xué)習(xí)的重點(diǎn)內(nèi)容之一。本章學(xué)習(xí)目標(biāo)如下:1、 理解構(gòu)成復(fù)雜程序的三種基本結(jié)構(gòu)。2、 熟悉各種控制語句的作用,熟練掌握它們的語法規(guī)則及其執(zhí)行過程。3、 能在實(shí)際編程中靈活運(yùn)用各種控制語句。十、 三種基本結(jié)構(gòu)與結(jié)構(gòu)化程序設(shè)計(jì)結(jié)構(gòu)化程序設(shè)計(jì)方法產(chǎn)生于60年代末,并持續(xù)流行了20多年。直至90年代,在面向過程的程序設(shè)計(jì)領(lǐng)域,結(jié)構(gòu)化程序設(shè)計(jì)仍是最佳的程序設(shè)計(jì)方法。結(jié)構(gòu)化程序設(shè)計(jì)方法規(guī)定了幾種具有良好特性的“基本結(jié)構(gòu)”,用它們作為構(gòu)成程序的基本單元?!盎窘Y(jié)

56、構(gòu)”具有以下特點(diǎn):1、 只有一個(gè)入口和出口;2、 沒有永遠(yuǎn)執(zhí)行不到的語句;3、 沒有死循環(huán)。順序結(jié)構(gòu)、選擇結(jié)構(gòu)和循環(huán)結(jié)構(gòu)是符合上述特點(diǎn)的基本結(jié)構(gòu),這三種基本結(jié)構(gòu)可以構(gòu)成任何復(fù)雜的程序。十一、 需要注意的幾個(gè)問題1、 關(guān)于程序的書寫格式。C語言的書寫格式非常自由,例如,一行內(nèi)可以寫多個(gè)語句,一個(gè)語句很長時(shí)也可以分寫在多行上。但是,為了提高程序的可讀性,我們?cè)跁鴮懺闯绦驎r(shí)應(yīng)該盡可能地做到清晰、美觀,這不僅能使程序容易讀懂,更重要的是,當(dāng)程序出現(xiàn)錯(cuò)誤時(shí)便于查錯(cuò)和改錯(cuò)。程序的可讀性也是結(jié)構(gòu)化程序設(shè)計(jì)方法強(qiáng)調(diào)的一個(gè)要點(diǎn)。要使程序清晰易讀,一個(gè)較好的做法是采用縮格書寫形式。下面兩個(gè)程序的功能完全相同,其語

57、句也完全一樣,只是程序的書寫格式不同。試比較它們的書寫格式,從中領(lǐng)會(huì)縮格書寫的好處。(1) main()int a,b,t;clrscr();scanf("%d,%d",&a,&b);while(a!=0 && b!=0)if (a<b)t=a;a=b;b=t;printf("max=%d,min=%dn",a,b);scanf("%d,%d",&a,&b);說明:這個(gè)程序沒有采用縮格的書寫形式,整個(gè)程序看上去較亂,讀起來也比較困難,如果需要改正程序中的錯(cuò)誤(如花括號(hào)是否匹配、錯(cuò)誤是在循環(huán)之內(nèi)還是循環(huán)之外,等等),就更加不容易了。(2) main() int a,b,t; clrscr(); scanf("%d,%d",&a,&b); while(a!=0 && b!=0) if (a<b) t=a; a=b; b=t; printf("max=%d,

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(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)論