模塊1-程序設(shè)計(jì)基礎(chǔ)_第1頁
模塊1-程序設(shè)計(jì)基礎(chǔ)_第2頁
模塊1-程序設(shè)計(jì)基礎(chǔ)_第3頁
模塊1-程序設(shè)計(jì)基礎(chǔ)_第4頁
模塊1-程序設(shè)計(jì)基礎(chǔ)_第5頁
已閱讀5頁,還剩178頁未讀, 繼續(xù)免費(fèi)閱讀

付費(fèi)下載

下載本文檔

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

文檔簡(jiǎn)介

C語言程序設(shè)計(jì)任務(wù)式教程(微課版)

VisualC++1計(jì)算機(jī)工程學(xué)院模塊1程序設(shè)計(jì)基礎(chǔ)

任務(wù)1程序結(jié)構(gòu)與特征任務(wù)2基本數(shù)據(jù)類型

2計(jì)算機(jī)工程學(xué)院模塊1程序設(shè)計(jì)基礎(chǔ)

任務(wù)1程序結(jié)構(gòu)與特征學(xué)習(xí)目標(biāo)了解C語言的發(fā)展背景;掌握C語言程序的基本結(jié)構(gòu);領(lǐng)會(huì)C語言程序設(shè)計(jì)的風(fēng)格;掌握在VC++環(huán)境中調(diào)試程序的方法。3計(jì)算機(jī)工程學(xué)院案例一菜單顯示1.問題描述

模擬學(xué)校管理信息系統(tǒng)軟件的菜單,利用printf函數(shù)按一定格式輸出文字,可以在屏幕上顯示如下一個(gè)簡(jiǎn)單的程序界面。1.1.1案例講解4計(jì)算機(jī)工程學(xué)院圖1-1程序界面5計(jì)算機(jī)工程學(xué)院(1)啟動(dòng)VC++

選擇【開始】|【程序】|【MicrosoftVisualStudio6.0】|【MicrosoftVisualC++6.0】菜單,啟動(dòng)MicrosoftVisualC++6.0編譯系統(tǒng).(2)新建工程

選擇【文件】|【新建】菜單,在出現(xiàn)的“新建”對(duì)話框的“工程”選項(xiàng)中選擇“Win32ConsoleApplication”,在右側(cè)“位置”欄中選擇d盤Chapter1

文件夾,“工程名稱”欄中輸入“EX1_1”,這時(shí)界面變?yōu)槿鐖D1-2所示。6計(jì)算機(jī)工程學(xué)院圖1-2“新建”對(duì)話框的“工程”選項(xiàng)卡7計(jì)算機(jī)工程學(xué)院

單擊“確定”按鈕后,在出現(xiàn)的應(yīng)用框架選擇向?qū)?duì)話框和新建工程信息對(duì)話框中分別單擊“完成”和“確定”按鈕,完成新工程的建立,如圖1-3所示。8計(jì)算機(jī)工程學(xué)院圖1-3建立新工程后的窗口9計(jì)算機(jī)工程學(xué)院(3)編寫源程序

重新選擇【文件】|【新建】菜單,在出現(xiàn)的“新建”對(duì)話框的“文件”選項(xiàng)卡中選擇“C++SourceFile”項(xiàng),在右側(cè)“文件”欄中輸入“EX1_1.C”,如圖1-4所示。C語言程序的文件擴(kuò)展名是“.C”或“.CPP”。單擊“確定”按鈕后,在出現(xiàn)的窗口(稱為編輯窗口)右側(cè)輸入如下代碼,如圖1-5所示。10計(jì)算機(jī)工程學(xué)院圖1-4“新建”對(duì)話框的“文件”選項(xiàng)卡11計(jì)算機(jī)工程學(xué)院圖1-5編寫源程序12計(jì)算機(jī)工程學(xué)院/*EX1_1.C*/#include<stdio.h>voidmain(){printf("**************************\n");printf("***校園管理信息系統(tǒng)**\n");printf("**************************\n");printf("*1.學(xué)生管理*\n");printf("*2.教師管理*\n");printf("*3.課程管理*\n");printf("*4.成績(jī)管理*\n");

printf("*5.退出系統(tǒng)*\n");13計(jì)算機(jī)工程學(xué)院printf("***************************\n");printf("請(qǐng)按1-5按鈕選擇菜單項(xiàng):");}(4)保存程序

選擇【文件】【保存】菜單或單擊保存按鈕進(jìn)行保存。為了防止意外丟失程序代碼,應(yīng)養(yǎng)成及時(shí)存盤的好習(xí)慣。14計(jì)算機(jī)工程學(xué)院(5)編譯

選擇【組建】|【編譯EX1_1.C】菜單或單擊編譯按鈕進(jìn)行編譯。系統(tǒng)在編譯前會(huì)自動(dòng)將程序保存,然后進(jìn)行編譯。如果系統(tǒng)在編譯的過程中發(fā)現(xiàn)錯(cuò)誤,將在下方窗口中列出所有錯(cuò)誤和警告。雙擊顯示錯(cuò)誤或警告的第一行,則光標(biāo)自動(dòng)跳到代碼的錯(cuò)誤行。修改程序中的該錯(cuò)誤后,重新進(jìn)行編譯,若還有錯(cuò)誤或警告,繼續(xù)修改和編譯,直到?jīng)]有錯(cuò)誤為止。本實(shí)例沒有發(fā)現(xiàn)任何錯(cuò)誤和警告,所以錯(cuò)誤和警告數(shù)都為0,如圖1-6所示。15計(jì)算機(jī)工程學(xué)院圖1-6編譯后的情況16計(jì)算機(jī)工程學(xué)院(6)連接

選擇【組建】|【組建EX1_1.exe】菜單或單擊連接按鈕,與編譯時(shí)一樣,如果系統(tǒng)在連接的過程中發(fā)現(xiàn)錯(cuò)誤,將在下面窗口中列出所有錯(cuò)誤和警告。修改錯(cuò)誤后重新編譯和連接,直到編譯和連接都沒有錯(cuò)誤為止。(7)運(yùn)行

選擇【組建】|【執(zhí)行EX1_1.exe】菜單或單擊運(yùn)行按鈕,在出現(xiàn)的黑屏中顯示運(yùn)行結(jié)果,如圖1-7所示。單擊任意鍵回到編輯窗口。17計(jì)算機(jī)工程學(xué)院圖1-7案例1運(yùn)行結(jié)果18計(jì)算機(jī)工程學(xué)院2.歸納分析

(1)任何一個(gè)C程序是由若干個(gè)函數(shù)構(gòu)成的,C語言中用函數(shù)來實(shí)現(xiàn)特定的功能。一個(gè)C源程序至少包含一個(gè)main主函數(shù),也可以包含一個(gè)main主函數(shù)和若干個(gè)其它函數(shù)。

主函數(shù)的一般框架為:

void

main()

{

定義變量部分

功能語句部分

}

19計(jì)算機(jī)工程學(xué)院

(2)在屏幕上顯示內(nèi)容使用printf函數(shù),printf函數(shù)顯示字符串的格式為:

printf(“一串字符”);

在函數(shù)后面加分號(hào)構(gòu)成輸出語句,語句是程序執(zhí)行的基本單位。程序中“\n”是換行符。

(3)C語言系統(tǒng)提供豐富的標(biāo)準(zhǔn)庫(kù)函數(shù),而且為了方便使用,對(duì)這些函數(shù)進(jìn)行分類并存放在對(duì)應(yīng)的頭文件中。20計(jì)算機(jī)工程學(xué)院程序EX1_1.C的第1行#include<stdio.h>是一條預(yù)處理命令,作用是將頭文件stdio.h包含入本程序,如果程序中需要輸入輸出數(shù)據(jù),就必須包含頭文件stdio.h,而數(shù)學(xué)函數(shù)則存放在“math.h”文件中。在附錄中列出了系統(tǒng)常用的庫(kù)函數(shù)。

(4)C語言程序必須經(jīng)過編輯、編譯、連接的過程后才能運(yùn)行。C語言的上機(jī)環(huán)境很多,如TurboC2.0,VisualC++6.0,BorlandC++等。本書選用VisualC++6.0,主要是方便同學(xué)使用鼠標(biāo)編輯,也便于過渡到C++的學(xué)習(xí)。21計(jì)算機(jī)工程學(xué)院案例二銷售額的計(jì)算1.問題描述

某玩具店為了促銷某商品,周日舉辦了一場(chǎng)多買多優(yōu)惠的活動(dòng),即買1件58.5元,2件108.5元,3件150元。編寫程序,輸入周日買1件的人數(shù),買2件的人數(shù),買3件的人數(shù),并計(jì)算當(dāng)天的總銷售額和平均單價(jià)。22計(jì)算機(jī)工程學(xué)院2.編程分析

void

main()

{

定義整型變量n1,n2,n3和n定義雙精度實(shí)型變量sum,ave分別輸入買1件,2件,3件的人數(shù)存入n1,n2,n3中計(jì)算總的賣出件數(shù)存入n中

23計(jì)算機(jī)工程學(xué)院計(jì)算總銷售額放在sum中計(jì)算平均單價(jià)放在ave中顯示總銷售額和平均單價(jià)

}3.編寫源程序

/*EX1_2.C*/#include<stdio.h>voidmain(){24計(jì)算機(jī)工程學(xué)院

intn1,n2,n3,n;doublesum,ave;printf("請(qǐng)輸入三種人數(shù)n1,n2,n3:");scanf("%d,%d,%d",&n1,&n2,&n3);n=1*n1+2*n2+3*n3;sum=58.5*n1+108.5*n2+150*n3;ave=sum/n;printf(“總銷售額:%lf,平均單價(jià):%lf\n",sum,ave);}

25計(jì)算機(jī)工程學(xué)院特別提示:源程序編寫好后要存盤。例如以”ex1_2.c”存盤。4.編譯、連接后運(yùn)行程序

等待輸入時(shí)輸入“3,4,5<回車>”,則運(yùn)行結(jié)果如圖1-8所示圖1-8案例2運(yùn)行結(jié)果26計(jì)算機(jī)工程學(xué)院5.歸納分析

(1)程序中的printf函數(shù)輸出一條信息“請(qǐng)輸入三種人數(shù)n1,n2,n3:”,用于提示用戶輸入三種數(shù)據(jù),并說明輸入的格式(用逗號(hào)分隔三個(gè)數(shù)),和scanf函數(shù)配合使用以實(shí)現(xiàn)用戶和計(jì)算機(jī)之間的信息交互。

(2)從鍵盤輸入數(shù)據(jù)使用scanf函數(shù),該函數(shù)的一般形式為:

scanf

(<格式控制字符串>,<地址列表>)

27計(jì)算機(jī)工程學(xué)院

<格式控制字符串>是用雙引號(hào)括起來的字符串,也稱“轉(zhuǎn)換控制字符串”,它包括兩種信息:一部分是普通字符,這些字符將按原樣輸出;另一部分是格式說明,以“%”開始,后跟一個(gè)或幾個(gè)規(guī)定字符,用來確定輸出內(nèi)容格式,例如%d、%f等,它的作用是將輸出的數(shù)據(jù)轉(zhuǎn)換為指定的格式輸出。

<地址列表>是由若干個(gè)地址組成的表列,可以是變量的地址,或字符串的首地址。

28計(jì)算機(jī)工程學(xué)院

程序中字符串“&n1,&n2,&n3”中的“&”是“地址運(yùn)算符”,&a指a在內(nèi)存中的地址。上面scanf函數(shù)的作用是:按照n1、n2、n3在內(nèi)存的地址將n1、n2、n3的值存進(jìn)去。變量n1、n2、n3的地址是在編譯連接階段分配的?!?d,%d,%d”表示按基本整型輸入數(shù)據(jù)。29計(jì)算機(jī)工程學(xué)院例求兩個(gè)整數(shù)之和#include<stdio.h>voidmain(){inta,b,sum;printf(“entertwonumbers:”);scanf(“%d%d,”&a,&b);sum=a+b;printf(“thesumis%d\n”,sum);}程序運(yùn)行結(jié)果如下:entertwonumbers:23thesumis5計(jì)算機(jī)工程學(xué)院voidmain()一個(gè)程序的開始{函數(shù)開始的標(biāo)志inta,b,sum;變量說明,申請(qǐng)存儲(chǔ)空間scanf(“%d%d,”&a,&b);提示信息sum=a+b;作加法,并保留和printf("Thesumis%d",sum);輸出和}函數(shù)結(jié)束的標(biāo)志#include<stdio.h>頭文件printf(“entertwonumbers:”);給變量賦值計(jì)算機(jī)工程學(xué)院1.C程序的基本結(jié)構(gòu)

通過以上幾個(gè)案例,可以看到:

(1)C程序由函數(shù)構(gòu)成

C程序是由函數(shù)構(gòu)成的,C語言中用函數(shù)來實(shí)現(xiàn)特定的功能。一個(gè)C源程序至少包含一個(gè)main函數(shù),也可以包含一個(gè)main函數(shù)和若干個(gè)其他函數(shù)。因此,函數(shù)是C程序的基本單位,C語言的函數(shù)相當(dāng)于其他語言中的子程序,可以說C語言是函數(shù)式工作都是由各個(gè)函數(shù)分別完成的,編寫C程序

1.1.2基礎(chǔ)理論

32計(jì)算機(jī)工程學(xué)院就是編寫一個(gè)個(gè)函數(shù)。C語言的這種特點(diǎn)使得容易實(shí)現(xiàn)程序的模塊化。

(2)函數(shù)由兩部分組成

C語言中的函數(shù)由兩部分組成:

函數(shù)的首部

即函數(shù)的第一行。包括函數(shù)屬性、函數(shù)類型、函數(shù)名、函數(shù)參數(shù)(形參)名、參數(shù)類型。

【EX1_1.C】中的main函數(shù)的首部為

void

main()33計(jì)算機(jī)工程學(xué)院

在此例中,只定義了函數(shù)名,沒有給出函數(shù)的類型、參數(shù)等內(nèi)容,這是允許的,但一個(gè)函數(shù)名后面必須跟一對(duì)圓括弧。函數(shù)體即函數(shù)首部下面的大括弧{……}內(nèi)的部分。如果—個(gè)函數(shù)內(nèi)有多個(gè)大括弧,則最外層的一對(duì){}為函數(shù)體的范圍。函數(shù)體一般包括:34計(jì)算機(jī)工程學(xué)院

聲明部分:在這部分中定義所用到的變量,如【EX1_2.C】中的“intn1,n2,n3,n;”。在后面課程中還將會(huì)看到,在聲明部分中要對(duì)所調(diào)用的函數(shù)進(jìn)行聲明。

執(zhí)行部分:由若干個(gè)語句組成。當(dāng)然,在某些情況下也可以沒有聲明部分,甚至可以既無聲明部分,也無執(zhí)行部分。

(3)C程序從main函數(shù)開始執(zhí)行一個(gè)C程序總是從main函數(shù)開始執(zhí)行的,而不論main函數(shù)在整個(gè)程序中的位置如何(main函數(shù)可以放在程序最前頭,也可以放在程序最后,或在35計(jì)算機(jī)工程學(xué)院一些函數(shù)之前,在另一些函數(shù)之后)。(4)程序書寫格式自由

C程序書寫格式自由,一行內(nèi)可以寫幾個(gè)語句,一個(gè)語句可以分寫在多行上C程序沒有行號(hào),也不像FORTRAN或COBOL那樣嚴(yán)格規(guī)定書寫格式(語句必須從某—列開始書寫)。(5)分號(hào)是語句的結(jié)束符C語言中,每個(gè)語句和數(shù)據(jù)定義的最后必須有一個(gè)分號(hào),分號(hào)是C語句的必要組成部分。例如:c=a+b;

36計(jì)算機(jī)工程學(xué)院

(6)程序中可以使用注釋可以用/*……*/對(duì)C程序中的任何部分作注釋。一個(gè)好的、有使用價(jià)值的源程序都應(yīng)當(dāng)加上必要的注釋,以增加程序的可讀性。2.printf函數(shù)(1)printf函數(shù)的一般格式

printf(<格式控制字符串>,<參數(shù)列表>)

如:printf(“i=%d,c=%c\n”,i,c)括弧內(nèi)包括兩部分:37計(jì)算機(jī)工程學(xué)院<格式控制字符串>是用雙引號(hào)括起來的字符串,也稱“轉(zhuǎn)換控制字符串”,它包括兩種信息:一部分是普通字符,這些字符將按原樣輸出,例如“i=,c=”;另一部分是格式說明,以“%”開始,例如%d、%f等,它的作用是將輸出的數(shù)據(jù)轉(zhuǎn)換為指定的格式輸出。<參數(shù)列表>是需要輸出的一些數(shù)據(jù),可以是表達(dá)式,例如上面printf函數(shù)中的“i,c”部分,其個(gè)數(shù)必須與格式化字符串所說明的輸出參數(shù)個(gè)數(shù)一樣多,各參數(shù)之間用逗號(hào)分開,且順序一一對(duì)應(yīng),否則將會(huì)出現(xiàn)意想不到的錯(cuò)誤。38計(jì)算機(jī)工程學(xué)院

下面是另一個(gè)例子:

在上面雙引號(hào)中的字符除了“%d”和“%d”以外,還有非格式說明的普通字符,它們按原樣輸出。如果a、b的值分別為10、20,則輸出為:a=10,b=20其中有下劃線的字符是printf函數(shù)中的“格式控制字符串”中的普通字符按原樣輸出的結(jié)果。10和20是a和b的值(注意10和20無前導(dǎo)空格和尾隨空格)。

printf(“a=%d,b=%d”,a,b);

格式說明參數(shù)列表39計(jì)算機(jī)工程學(xué)院(2)格式說明格式說明的一般形式為:%[標(biāo)志][輸出最小寬度][.精度][長(zhǎng)度]類型格式字符其中方括號(hào)[]中的項(xiàng)為可選項(xiàng)。各項(xiàng)的意義如下:①類型格式字符表1-1類型格式字符類型格式字符用以表示輸出數(shù)據(jù)的類型,注意不同的類型數(shù)據(jù)要用相應(yīng)的類型字符輸出,其格式符和意義如表1-1所示:40計(jì)算機(jī)工程學(xué)院表1-1類型格式字符41計(jì)算機(jī)工程學(xué)院②標(biāo)志標(biāo)志字符為-、+、#、空格四種,其意義見表1-2所示:表1-2標(biāo)志字符42計(jì)算機(jī)工程學(xué)院③輸出最小寬度用十進(jìn)制整數(shù)來表示輸出的最少位數(shù)。若實(shí)際位數(shù)多于定義的寬度,則按實(shí)際位數(shù)輸出,若實(shí)際位數(shù)少于定義的寬度則補(bǔ)以空格或0。④精度精度格式符以“.”開頭,后跟十進(jìn)制整數(shù)。本項(xiàng)的意義是:如果輸出數(shù)值,則表示小數(shù)的位數(shù);如果輸出的是字符,則表示輸出字符的個(gè)數(shù);若實(shí)際位數(shù)大于所定義的精度位數(shù),則截去超過的部分。43計(jì)算機(jī)工程學(xué)院⑤長(zhǎng)度長(zhǎng)度格式符為h、l兩種,h表示按短整型量輸出,l表示按長(zhǎng)整型量輸出。3.scanf函數(shù)(1)格式說明表1-3scanf函數(shù)中類型格式字符

和print函數(shù)中的格式說明相似,以%開始,以一個(gè)類型格式字符結(jié)束,中間可以插入附加的字符。表1-3列出scanf用到的類型格式字符。44計(jì)算機(jī)工程學(xué)院表1-3scanf函數(shù)中類型格式字符45計(jì)算機(jī)工程學(xué)院表1-4列出scanf可以用的附加說明字符(修飾符)。表1.4scanf的附加格式說明符字符說明字母l

用于輸人長(zhǎng)整型數(shù)據(jù)(%ld、%lo、%lx)和double型數(shù)據(jù)(%lf或%le)

字母h

用于輸入短整型數(shù)據(jù)(%hd、%ho、%hx)

正整數(shù)m

域?qū)挘付ㄝ斎霐?shù)據(jù)所占寬度(列數(shù))

字符*

表示本輸入項(xiàng)在讀入后不賦給相應(yīng)的變量

46計(jì)算機(jī)工程學(xué)院(2)注意事項(xiàng):①可以用整數(shù)m指定輸入數(shù)據(jù)所占列數(shù),系統(tǒng)自動(dòng)按它截取所需數(shù)據(jù),如:

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

輸入:123456↙

系統(tǒng)自動(dòng)將123賦給a,456賦給b。此方法也可用于字符型:

scanf(“%3c”,&ch);

如果從鍵盤連續(xù)輸入3個(gè)字符abc,由于ch只能容納一個(gè)字符,系統(tǒng)就把第一個(gè)字符a賦給ch。

47計(jì)算機(jī)工程學(xué)院如果是scanf(“%d:%d:%d”,&hour,&mintue,&second);

輸入應(yīng)該用以下形式:

11:43:15↙

如果是

scanf(“a=%d,b=%d,c=%d”,&a,&b,&c);

輸入應(yīng)為以下形式:

a=10,b=100,c=-148計(jì)算機(jī)工程學(xué)院②如果在<格式控制>字符串中除了格式說明以外還有其他字符,則在輸人數(shù)據(jù)時(shí)應(yīng)輸入與這些字符相同的字符。例如

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

輸入時(shí)應(yīng)用如下形式:

1,2↙注意1后面是逗號(hào),它與scanf函數(shù)中的<格式控制>中的逗號(hào)對(duì)應(yīng)。如果輸入時(shí)不用逗號(hào)而用空格或其他字符是不對(duì)的,例如:

1:2↙系統(tǒng)只能讀入1存入變量a,然后等待輸入逗號(hào)49計(jì)算機(jī)工程學(xué)院如果是scanf(“%d:%d:%d”,&hour,&mintue,&second);輸入應(yīng)該用以下形式:

11:43:15↙如果是scanf(“a=%d,b=%d,c=%d”,&a,&b,&c);50計(jì)算機(jī)工程學(xué)院輸入應(yīng)為以下形式:a=10,b=100,c=-1③在用“%c”格式輸入字符時(shí),空格字符和“轉(zhuǎn)義字符”都作為有效字符輸入:

scanf(“%c%c%c”,&ch1,&ch2,&ch3);

如輸入

xyz↙字符x存入ch1,字符空格存入ch2,字符y存入ch3,因?yàn)?c只要求讀人一個(gè)字符,后面不需51計(jì)算機(jī)工程學(xué)院要用空格作為兩個(gè)字符的間隔,因此x和y之間的空格作為下一個(gè)字符送給ch2。④在輸人數(shù)據(jù)時(shí),遇以下情況時(shí)該數(shù)據(jù)認(rèn)為結(jié)束。遇空格,或按“回車”或“跳格”(Tab)鍵。按指定的寬度結(jié)束,如“%3d”,只取3列。遇非法輸入。輸入輸出是程序中最基本的操作,而C語言的格式化輸入輸出函數(shù)的規(guī)定又比較繁瑣,用得不對(duì)就得不到預(yù)期的結(jié)果,所以本章作了較為詳細(xì)的介紹。52計(jì)算機(jī)工程學(xué)院但讀者在學(xué)習(xí)時(shí)不必花許多精力在每一個(gè)細(xì)節(jié)上,只要重點(diǎn)掌握最常用的—些規(guī)則即可。其他部分可以通過編寫和調(diào)試程序來逐步掌握。4.getchar函數(shù)此函數(shù)的作用是從終端(或系統(tǒng)隱含指定的輸入設(shè)備)輸入—個(gè)字符。getchar函數(shù)沒有參數(shù),其一般形式為:getchar()

函數(shù)的值就是從輸入設(shè)備得到的字符,例如:53計(jì)算機(jī)工程學(xué)院a=getchar();

該語句作用是將從鍵盤輸入的字符存放在變量a中。5.putchar函數(shù)

putchar函數(shù)的作用是向終端輸出一個(gè)字符,例如

putchar(c);

其中c為一個(gè)字符變量或常量。54計(jì)算機(jī)工程學(xué)院6.getch函數(shù)此函數(shù)和getchar函數(shù)類似,格式為getch();也是從終端輸入一個(gè)字符,但兩者不同的是getch函數(shù)不會(huì)回顯輸入的字符,而且也不需要用回車鍵確認(rèn)輸入。55計(jì)算機(jī)工程學(xué)院

1.1.3技能訓(xùn)練

【實(shí)驗(yàn)1.1.1】運(yùn)行下面的程序,分析運(yùn)行結(jié)果。/*EX1_3.C*/#include<stdio.h>voidmain(

){ inti; longj; floatf;

i=123;56計(jì)算機(jī)工程學(xué)院

j=123456; printf("%d,%5d,%05d\n",i,i,i); printf("%ld,%8ld,%08ld\n",j,j,j); f=123.4;printf("%f\n",f); printf("%10f\n",f); printf("%10.2f\n",f); printf("%.2f\n",f); printf("%-10.2f\n",f);}57計(jì)算機(jī)工程學(xué)院【指導(dǎo)】

(1)啟動(dòng)VC++集成環(huán)境。(2)輸入上述程序,并以“EX1_3.C”為文件名保存在磁盤上,然后編譯、運(yùn)行該程序。(3)觀看程序運(yùn)行結(jié)果為:58計(jì)算機(jī)工程學(xué)院圖1-9實(shí)驗(yàn)1.1.1運(yùn)行結(jié)果59計(jì)算機(jī)工程學(xué)院

(4)對(duì)程序運(yùn)行結(jié)果分析如下:先看第一個(gè)輸出結(jié)果:變量i的初值為123,經(jīng)過格式輸出控制符。分別輸出了三種不同的格式。d格式符用來按十進(jìn)制格式輸出整數(shù),常見的幾種用法如表1-5所示:60計(jì)算機(jī)工程學(xué)院表1-5d格式符的用法格式符輸出符號(hào)%d按整型數(shù)據(jù)的實(shí)際長(zhǎng)度輸出%mdm位整數(shù)(數(shù)據(jù)位數(shù)不足m時(shí)補(bǔ)空格,大于m時(shí)按實(shí)際長(zhǎng)度輸出)%-d、%-md同上,左對(duì)齊%0mdm位整數(shù)(數(shù)據(jù)位數(shù)不足m時(shí)補(bǔ)0,大于m時(shí)按實(shí)際長(zhǎng)度輸出)%ld、%mld、%0mld長(zhǎng)整型數(shù)61計(jì)算機(jī)工程學(xué)院注意,表中的m(位數(shù)控制)、0(位數(shù)不足補(bǔ)0)和-(左對(duì)齊)對(duì)于其他格式符也適用。再看第二個(gè)輸出結(jié)果:變量j的起始值為123456,分別實(shí)現(xiàn)了按實(shí)際輸出,按8位輸出不足補(bǔ)空格,第三個(gè)數(shù)是按8位不足補(bǔ)0來輸出的。第三個(gè)輸出結(jié)果是一個(gè)單精度實(shí)型數(shù),f格式符用來按小數(shù)形式輸出實(shí)數(shù)(包括單、雙精度),具體用法如表1-6。62計(jì)算機(jī)工程學(xué)院表1-6f格式符的用法

float數(shù)據(jù)只有前7位數(shù)字是有效數(shù)字,千萬不要以為凡是打印出來的數(shù)字都是準(zhǔn)確的。

格式符輸出格式%f按實(shí)數(shù)格式輸出,整數(shù)部分按實(shí)際位數(shù)輸出,6位小數(shù)

%m.nf總位數(shù)m(含小數(shù)點(diǎn)),其中n位小數(shù)

%-m.nf同上,左對(duì)齊

63計(jì)算機(jī)工程學(xué)院雙精度數(shù)同樣可用%f格式輸出,它的有效位數(shù)一般為16位,給出小數(shù)6位。【實(shí)驗(yàn)1.1.2】編寫程序,輸入三個(gè)字母(“A”和“a”除外),輸出這些字母前面的字母。【指導(dǎo)】

(1)編程分析計(jì)算某個(gè)字母ch前面的字母ch1,是根據(jù)字符在ASCII碼表中的排列順序,故可以得到ch1=ch-1。64計(jì)算機(jī)工程學(xué)院(2)編寫程序/*EX1_4.C*/#include<stdio.h>voidmain(){charch;printf("第一個(gè)字母:");ch=getchar();/*接收輸入第一字母后的回車符*/ch=ch-1;

putchar(ch);65計(jì)算機(jī)工程學(xué)院

printf("\n第二個(gè)字母:"); getchar();/*接收輸入第二字母后的回車符*/ch=getchar();ch=ch-1;putchar(ch);printf("\n第三個(gè)字母:");getchar();/*接收輸入第三字母后的回車符*/ch=getchar();

ch=ch-1;putchar(ch);66計(jì)算機(jī)工程學(xué)院putchar('\n');}

(3)在VC++集成環(huán)境中輸入上述程序,文件存成EX1_4.C。寫出程序的運(yùn)行結(jié)果,并根據(jù)第1題的分析結(jié)果對(duì)該程序的每個(gè)輸出結(jié)果進(jìn)行分析。67計(jì)算機(jī)工程學(xué)院【實(shí)驗(yàn)1.1.3】示例程序EX1_5.C是一個(gè)交互程序,設(shè)圓半徑r=1.5,圓柱高h(yuǎn)=3,求圓周長(zhǎng)、圓面積、圓球表面積、圓球體積、圓柱體積。用scanf輸入數(shù)據(jù),輸出計(jì)算結(jié)果,輸出時(shí)要求有文字說明,取小數(shù)點(diǎn)后2位數(shù)字,請(qǐng)編寫程序?!局笇?dǎo)】

(1)編程分析輸入(鍵盤):提示并輸入下列數(shù)據(jù):68計(jì)算機(jī)工程學(xué)院輸出(屏幕):打印以下內(nèi)容:圓周長(zhǎng)為:l=0000.00圓面積為:s=0000.00圓球表面積為:sq=0000.00圓球體積為:sv=0000.00圓柱體積為:vz=0000.00處理要求:定義變量。計(jì)算各個(gè)數(shù)據(jù)69計(jì)算機(jī)工程學(xué)院圓周長(zhǎng)=2*圓周率*圓半徑圓面積=圓周率*圓半徑*圓半徑圓球表面積=4*圓周率*圓半徑*圓半徑圓球體積=3.0/4.0*圓周率*圓半徑*圓半徑*圓半徑圓柱體積=圓周率*圓半徑*圓半徑*圓柱高在屏幕上打印輸出。(2)偽代碼:voidmain(){70計(jì)算機(jī)工程學(xué)院定義各個(gè)輸入變量和輸出變量提示和輸入圓半徑,圓柱高計(jì)算各個(gè)數(shù)據(jù):圓周長(zhǎng)=2*圓周率*圓半徑圓面積=圓周率*圓半徑*圓半徑圓球表面積=4*圓周率*圓半徑*圓半徑圓球體積=3.0/4.0*圓周率*圓半徑*圓半徑*圓半徑圓柱體積=圓周率*圓半徑*圓半徑*圓柱高打印圓周長(zhǎng)、圓面積、圓球表面積、圓球體積、圓柱體積}71計(jì)算機(jī)工程學(xué)院(3)編寫程序

/*EX1_5.C*/#include<stdio.h>voidmain(){ /*聲明變量*/ constfloatpi=3.1415926;/*圓周率*/ floath;/*圓半徑*/ floatr;

/*圓柱高*/72計(jì)算機(jī)工程學(xué)院

floatl,s,sq,vq,vz;/*圓周長(zhǎng),圓面積,圓球表面積,圓球體積,圓柱體體積*/ /*輸入數(shù)據(jù)*/

printf("請(qǐng)輸入圓半徑,圓柱高:\n"); scanf("%f,%f",&r,&h);/*計(jì)算*/l=2*pi*r;s=r*r*pi;sq=4*pi*r*r;vq=3.0/4.0*pi*r*r*r;73計(jì)算機(jī)工程學(xué)院

vz=pi*r*r*h;/*顯示計(jì)算出的數(shù)據(jù)*/printf("圓周長(zhǎng)為:l=%6.2f\n",l); printf("圓面積為:s=%6.2f\n",s); printf("圓球表面積為:sq=%6.2f\n",sq); printf("圓球體積為:sv=%6.2f\n",vq);printf("圓柱體積為:vz=%6.2f\n",vz);}圖1-10給出了示例程序EX1_5.C的屏幕輸入和輸出。74計(jì)算機(jī)工程學(xué)院圖1-10實(shí)驗(yàn)1.1.3運(yùn)行結(jié)果75計(jì)算機(jī)工程學(xué)院(4)分析程序EX1_5.C

#include<stdio.h>是該將標(biāo)準(zhǔn)輸入/輸出頭文件包含到源代碼中。stdio.h頭文件含有scanf()和printf()函數(shù)的預(yù)編譯代碼。要從鍵盤輸入數(shù)據(jù),并將數(shù)據(jù)輸出到屏幕,就必須將這些函數(shù)包含到源代碼中。

76計(jì)算機(jī)工程學(xué)院voidmain(){ /*聲明變量*/ constfloatpi=3.1415926;/*圓周率*/ floath;/*圓半徑*/ floatr;

/*圓柱高*/floatl,s,sq,vq,vz;/*圓周長(zhǎng),圓面積,圓球表面積,圓球體積,圓柱體體積*/上述語句聲明程序常量和變量。/*輸入數(shù)據(jù)*/printf("請(qǐng)輸入圓半徑,圓柱高:\n");

77計(jì)算機(jī)工程學(xué)院這個(gè)打印語句在屏幕上顯示了雙引號(hào)中的消息,提示用戶輸入圓半徑,圓柱高。提示將顯示一個(gè)屏幕命令,或一條消息,通知用戶應(yīng)該做什么。

scanf("%f,%f",&r,&h);

該語句將輸入的浮點(diǎn)值賦給變量r和h。

/*計(jì)算各個(gè)周長(zhǎng)和體積*/

l=2*pi*r;s=r*r*pi;

sq=4*pi*r*r;vq=3.0/4.0*pi*r*r*r;78計(jì)算機(jī)工程學(xué)院vz=pi*r*r*h;/*顯示計(jì)算出的數(shù)據(jù)*/printf("圓周長(zhǎng)為:l=%6.2f\n",l);printf("圓面積為:s=%6.2f\n",s);printf("圓球表面積為:sq=%6.2f\n",sq);printf("圓球體積為:sv=%6.2f\n",vq);printf("圓柱體積為:vz=%6.2f\n",vz);79計(jì)算機(jī)工程學(xué)院第一個(gè)打印語句在屏幕上顯示圓周長(zhǎng),然后通過\n強(qiáng)制使用換行。第二個(gè)打印語句在屏幕上顯示輸出圓面積,以下相同。此處,轉(zhuǎn)換指示符%6.2f通知計(jì)算機(jī)將各輸出結(jié)果格式設(shè)置為定長(zhǎng)浮點(diǎn)型數(shù)值字段,并用結(jié)果替換指示符。}右大括號(hào)標(biāo)志著函數(shù)的結(jié)束。

80計(jì)算機(jī)工程學(xué)院

1.1.4拓展與練習(xí)

【練習(xí)1】用getchar函數(shù)輸入一個(gè)大寫字母,并將它轉(zhuǎn)換為對(duì)應(yīng)的小寫字母。要求編寫出程序,并給出運(yùn)行結(jié)果?!揪毩?xí)2】根據(jù)表1-7中數(shù)據(jù),實(shí)現(xiàn)帳單打印編寫程序,計(jì)算和打印月底余額。輸入(鍵盤):提示并輸入每位客戶的數(shù)據(jù)(括號(hào)中為中文注釋,無需輸入。):81計(jì)算機(jī)工程學(xué)院輸出(屏幕):為每位客戶打印如下賬單信息:顧客r:X---------X月底余額:¥9999.99要求參考【實(shí)驗(yàn)1.1.3】的形式,寫出偽代碼,然后實(shí)現(xiàn)編程。最后運(yùn)行。

82計(jì)算機(jī)工程學(xué)院表1-7客戶數(shù)據(jù)表LastNamePreviousBalancePaymentCharges(姓氏)(上次余額)(付款)(收費(fèi))Allen5000.000.00200.00Davis2150.00150.0000.00Fisher3400.00400.00100.00Navarez625.00125.074.00Stiters820.000.000.00Wyatt1070.00200.0045.0083計(jì)算機(jī)工程學(xué)院

1.1.5編程規(guī)范與常見錯(cuò)誤

下面列舉出初學(xué)者易犯的錯(cuò)誤,以提醒讀者注意。1.書寫標(biāo)識(shí)符時(shí),忽略了大小寫字母的區(qū)別。

void

main(){inta=5;printf("%d",A);

}

編譯程序把a(bǔ)和A認(rèn)為是兩個(gè)不同的變量名,而顯示出錯(cuò)信息。C語言認(rèn)為大寫字母和小寫字母是兩個(gè)不同的字符。習(xí)慣上,符號(hào)常量名用大寫,84計(jì)算機(jī)工程學(xué)院

變量名用小寫表示,以增加可讀性。2.忘記加分號(hào)。分號(hào)是C語句中不可缺少的一部分,語句末尾必須有分號(hào)。a=1b=2編譯時(shí),編譯程序在“a=1”后面沒發(fā)現(xiàn)分號(hào),就把下一行“b=2”也作為上一行語句的一部分,這就會(huì)出現(xiàn)語法錯(cuò)誤。改錯(cuò)時(shí),有時(shí)在被指出有錯(cuò)的一行中未發(fā)現(xiàn)錯(cuò)誤,就需要看一下上一行是否漏掉了分號(hào)。{z=x+y;t=z/100;printf(“%f”,t);}對(duì)于復(fù)合語句來說,最后一個(gè)語句中最后的分號(hào)不能忽略不寫。

85計(jì)算機(jī)工程學(xué)院3.多加分號(hào)。對(duì)于一個(gè)復(fù)合語句,如:{z=x+y;t=z/100;printf("%f",t);};復(fù)合語句的花括號(hào)后不應(yīng)再加分號(hào),否則將會(huì)畫蛇添足。又如:if(a%3==0);I++;本是如果3整除a,則I加1。但由于if(a%3==0)后多加了分號(hào),則if語句到此結(jié)束,程序?qū)?zhí)行I++語句,不論3是否整除a,I都將自動(dòng)加1。

86計(jì)算機(jī)工程學(xué)院4.輸入變量時(shí)忘記加地址運(yùn)算符“&”。

inta,b;scanf("%d%d",a,b);

這是不合法的。scanf函數(shù)的作用是:按照a、b在內(nèi)存的地址將a、b的值存進(jìn)去?!?a”指a在內(nèi)存中的地址。5.輸入數(shù)據(jù)的方式與要求不符。①scanf("%d%d",&a,&b);輸入時(shí),不能用逗號(hào)作兩個(gè)數(shù)據(jù)間的分隔符,如下面輸入不合法:3,4輸入數(shù)據(jù)時(shí),在兩個(gè)數(shù)據(jù)之間以一個(gè)或多個(gè)空格間隔,也可用回車鍵、跳格鍵。87計(jì)算機(jī)工程學(xué)院②scanf("%d,%d",&a,&b);C語言規(guī)定:如果在“格式控制”字符串中除了格式說明以外還有其它字符,則在輸入數(shù)據(jù)時(shí)應(yīng)輸入與這些字符相同的字符。下面輸入是合法的:3,4此時(shí)不用逗號(hào)而用空格或其它字符是不對(duì)的。343:4

又如:scanf("a=%d,b=%d",&a,&b);輸入應(yīng)如以下形式:a=3,b=4

6.輸入字符的格式與要求不一致。在用“%c”格式輸入字符時(shí),空格字符”和“轉(zhuǎn)義字符”都作為有效字符輸入。88計(jì)算機(jī)工程學(xué)院

scanf("%c%c%c",&c1,&c2,&c3);如輸入abc字符“a”送給c1,字符“”送給c2,字符“b”送給c3,因?yàn)?c只要求讀入一個(gè)字符,后面不需要用空格作為兩個(gè)字符的間隔。7.輸入輸出的數(shù)據(jù)類型與所用格式說明符不一致。

例如,a已定義為整型,b定義為實(shí)型a=3;b=4.5;printf("%f%d\n",a,b);編譯時(shí)不給出出錯(cuò)信息,但運(yùn)行結(jié)果將與原意不符。這種“隱形”錯(cuò)誤尤其需要注意。89計(jì)算機(jī)工程學(xué)院8.輸入數(shù)據(jù)時(shí),企圖規(guī)定精度。scanf("%7.2f",&a);這樣做是不合法的,輸入數(shù)據(jù)時(shí)不能規(guī)定精度。90計(jì)算機(jī)工程學(xué)院

任務(wù)2基本數(shù)據(jù)類型

學(xué)習(xí)目標(biāo)

了解基本類型及其常量的表示法、掌握變量的定義及初始化方法、掌握運(yùn)算符與表達(dá)式的概念、領(lǐng)會(huì)C語言的自動(dòng)類型轉(zhuǎn)換和強(qiáng)制類型轉(zhuǎn)換和賦值的概念。

91計(jì)算機(jī)工程學(xué)院1.2.1案例講解

案例1變量定義和表達(dá)式運(yùn)算1.問題描述某圖書的代號(hào)為‘A’,單價(jià)為28.50元,第一次印刷1600冊(cè),另一圖書代號(hào)為‘B’,單價(jià)為31.80元,第一次印刷2100冊(cè)。編寫程序計(jì)算出這兩本圖書第一次印刷可銷售總價(jià),以及兩本書的銷售差額。

92計(jì)算機(jī)工程學(xué)院2.編程分析

void

main(){定義字符型變量ch1,ch2定義雙精度實(shí)型變量t1,t2,t3定義整型變量n1,n2輸入圖書代號(hào)和印刷冊(cè)數(shù)計(jì)算代號(hào)A的圖書銷售總價(jià)放在t1中計(jì)算代號(hào)B的圖書銷售總價(jià)放在t2中計(jì)算兩種圖書銷售差價(jià)放在t3中93計(jì)算機(jī)工程學(xué)院

顯示各圖書總價(jià)和差價(jià)}3.編寫源程序

/*EX2_1.C*/#include<stdio.h>voidmain(){ charch1,ch2; doublet1,t2,t3;94計(jì)算機(jī)工程學(xué)院

intn1,n2;printf("請(qǐng)輸入圖書代號(hào)和印刷冊(cè)數(shù):");/*輸入提示*/scanf("%c,%d,%c,%d,",&ch1,&n1,&ch2,&n2);/*數(shù)據(jù)間用逗號(hào)分隔*/t1=28.50*n1;t2=31.80*n2;t3=t2-t1;printf("圖書代號(hào)is%c,圖書總價(jià)is%lf\n",ch1,t1);printf("圖書代號(hào)is%c,圖書總價(jià)is%lf\n",ch2,t2);printf("兩種圖書銷售差價(jià)%lf\n",t3);}95計(jì)算機(jī)工程學(xué)院特別提示:源程序編寫好后要存盤。例如以”EX2_1.C”存盤。4.編譯、連接后運(yùn)行程序,運(yùn)行結(jié)果如圖2-1所示:圖1-11案例1運(yùn)行結(jié)果96計(jì)算機(jī)工程學(xué)院5.歸納分析

(1)基本整型、長(zhǎng)整型、單精度實(shí)型、雙精度實(shí)型和字符型分別用類型名int,long,float,double和char來定義。他們?cè)诔绦蛑卸即碇潭ǖ暮x是關(guān)鍵字,不能另作他用,不能做為變量名使用。(2)程序中的ch1,t1,n1等均為變量。C語言中的變量必須有確定的類型,變量中只能存放該類型的值,并且只能完成該類型允許的運(yùn)算,例如整型變量,就是只能存放和處理整型數(shù)據(jù)的變量。97計(jì)算機(jī)工程學(xué)院

C語言規(guī)定變量名必須由字母、數(shù)字和下劃線組成,并且第一個(gè)字符不能是數(shù)字。下面這些是合法的變量名:a、i、sum2、Zhang_San,而下面是不合法的變量名:T.H.Jack、¥23、#02、X+Y。在C語言中,程序員自定義的變量名、函數(shù)名、文件名等通稱為標(biāo)識(shí)符,上面列出的變量命名規(guī)則也就是標(biāo)識(shí)符的命名規(guī)則。

還有一點(diǎn)需要注意,C語言是區(qū)分大小寫字母的,也就是說大寫字母和小寫字母被認(rèn)為是兩個(gè)不同的字母。98計(jì)算機(jī)工程學(xué)院

另外變量必須先定義再使用,在定義變量時(shí)必須確定變量名和類型,變量定義語句的格式為:<類型名><變量名>[,<變量名>];

(3)程序中變量n1和n2為整型,t1,t2,t3為雙精度實(shí)型,ch1和ch2為字符型,其原因是n1,n2是圖書冊(cè)數(shù),是整型數(shù)據(jù),而t1,t2,t3銷售的總價(jià),是實(shí)型數(shù)據(jù)。而ch1和ch2是圖書代號(hào),是字符型數(shù)據(jù)。定義變量時(shí)一定要注意其中將要存放的數(shù)據(jù)類型,已經(jīng)定義為整型的變量n1中就只能放整型數(shù)據(jù)。99計(jì)算機(jī)工程學(xué)院

(4)程序中出現(xiàn)的“=”叫做賦值運(yùn)算符。語句t1=28.50*n1;的作用是計(jì)算出28.50*n1的值后,將值賦給變量t1。

賦值語句的基本格式是<變量名>=<數(shù)據(jù)>,這里的數(shù)據(jù)可以是一個(gè)常量、變量或由變量和常量組合而成的計(jì)算式。(5)C語言的字符型常量是用單引號(hào)括起來的一個(gè)字符。如’A’、’x’、’D’、’?’、’$’等都是字符常量。注意,’a’和’A’是不同的字符常量。字符數(shù)據(jù)在內(nèi)存中以ASCII碼值存儲(chǔ)。100計(jì)算機(jī)工程學(xué)院案例2數(shù)據(jù)類型轉(zhuǎn)換1.問題描述設(shè)x為3.6,y為4.2,,編寫程序?qū)懗鰧值轉(zhuǎn)換為整數(shù)后賦給a,將x+y值轉(zhuǎn)換為整數(shù)后賦給b再將a除以b得的余數(shù)賦給c,最后把求x+y的和重新賦給x的程序。101計(jì)算機(jī)工程學(xué)院2.編程分析voidmain(){定義a,b,c為整型變量定義x,y為實(shí)型變量給x,y賦值將x值3.6轉(zhuǎn)為整型并賦給a將x+y的值轉(zhuǎn)為整型并賦給ba除以b的余數(shù)賦給c102計(jì)算機(jī)工程學(xué)院將x+y的值賦給實(shí)型變量x輸出結(jié)果}3.編寫源程序

/*EX2_2.C*/#include"stdio.h"voidmain(){inta,b,c;/*定義a,b,c為整型變量*/103計(jì)算機(jī)工程學(xué)院

floatx,y;/*定義x,y為實(shí)型變量*/ x=3.6; y=4.2;/*給x,y賦值*/ a=(int)x;/*將x值3.6轉(zhuǎn)為整型并賦給a*/ b=(int)(x+y);/*將x+y的值轉(zhuǎn)為整型并賦給b*/ c=a%b;/*a除以b的余數(shù)賦給c*/ x=x+y;/*將x+y的值賦給實(shí)型變量x*/printf("a=%d,b=%d,c=%d,x=%f\n",a,b,c,x);}104計(jì)算機(jī)工程學(xué)院特別提示:源程序編寫好后要存盤。例如以EX2_2.C存盤。4.編譯、連接后運(yùn)行程序運(yùn)行結(jié)果如圖所示:圖1-12案例2運(yùn)行結(jié)果105計(jì)算機(jī)工程學(xué)院5.歸納分析

(1)在C語言中,可以利用強(qiáng)制類型轉(zhuǎn)換符,將表達(dá)式的類型轉(zhuǎn)換為所需類型。強(qiáng)制類型轉(zhuǎn)換的一般形式為(類型名)表達(dá)式例如:(int)a表示將a轉(zhuǎn)換成int類型;(int)(3.2+5)表示將(3.2+5)轉(zhuǎn)換成int類型,即將8.2轉(zhuǎn)換成8;(float)(7%3)表示將(7%3)的值轉(zhuǎn)換成float型。106計(jì)算機(jī)工程學(xué)院

(2)強(qiáng)制類型轉(zhuǎn)換時(shí),表達(dá)式要用括號(hào)括起來,以防止出現(xiàn)錯(cuò)誤。例如,設(shè)x=3.2,y=2.5,則表達(dá)式(int)(x+y)表示將x+y的值5.7取整,即值為5;而對(duì)于表達(dá)式(int)x+y,則表示先對(duì)x取整后,再加實(shí)型變量y的值,表達(dá)式的值為實(shí)型,其值為5.5。

(3)強(qiáng)制類型轉(zhuǎn)換是將所需變量或表達(dá)式的值轉(zhuǎn)換為所需類型,但并不改變?cè)瓉碜兞亢捅磉_(dá)式的類型屬性,也就是說原來變量或表達(dá)式的類型未發(fā)生任何變化。107計(jì)算機(jī)工程學(xué)院

(4)強(qiáng)制類型轉(zhuǎn)換運(yùn)算符要用圓括號(hào)括起來,而變量定義時(shí)類型名直接書寫,在使用時(shí)易發(fā)生混淆,應(yīng)特別注意。108計(jì)算機(jī)工程學(xué)院

1.2.2基礎(chǔ)理論

1.?dāng)?shù)據(jù)類型數(shù)據(jù)類型確定了如何將數(shù)據(jù)存儲(chǔ)到內(nèi)存,還確定了數(shù)據(jù)的存儲(chǔ)格式。最基本(或最常用)的數(shù)據(jù)類型包括整型(int)、長(zhǎng)整型(long)、浮點(diǎn)型(float)、雙精度型(double)和字符型(char),

(1)整型:整數(shù),如5、16和8724。八進(jìn)制整數(shù):以數(shù)字0開頭的整數(shù)。如0127表示八進(jìn)制數(shù)127,其值為1*64+2*8+7*1,等于十進(jìn)制的87。十六進(jìn)制整數(shù):以0x或0X開頭的整數(shù)。如0x127表示十六進(jìn)制數(shù)127,其值為1*256+2*16+7*1,等于十進(jìn)制的295。-0x2a等于十進(jìn)制數(shù)-42。

109計(jì)算機(jī)工程學(xué)院在整型常量后跟有字母1或L時(shí),表示該整型常量是長(zhǎng)整型常量。如:

49876L,0X2F9BCL,3L。指定int整型數(shù)據(jù)類型將聲明一個(gè)整型變量。整型變量存儲(chǔ)的實(shí)際范圍值隨編譯器而異,通常情況下,數(shù)據(jù)范圍為-32768~32767。如果需要更大的整數(shù),則應(yīng)指定長(zhǎng)整型數(shù)據(jù)類型。長(zhǎng)整型數(shù)存儲(chǔ)的數(shù)據(jù)遠(yuǎn)遠(yuǎn)超過-32768至32767的范圍??赏ㄟ^指定long來聲明長(zhǎng)整數(shù)。110計(jì)算機(jī)工程學(xué)院

(2)實(shí)型:實(shí)型常量有兩種表示形式:十進(jìn)制形式和指數(shù)形式。十進(jìn)制形式:它由數(shù)字和小數(shù)點(diǎn)組成。例如12.34、0.002等。使用十進(jìn)制形式時(shí)需要注意小數(shù)點(diǎn)不能省略。指數(shù)形式:它由小數(shù)和指數(shù)兩部分組成,之間用字母E或e分隔。指數(shù)部分采用規(guī)范化的指數(shù)形式。如125.37表示為1.2537e2,將0.035表示成3.5e-2。注意e前面必須有數(shù)字,e后面的指數(shù)一定是整數(shù)。所以E2和1.2E0.5都不是合法的實(shí)型常量。111計(jì)算機(jī)工程學(xué)院實(shí)數(shù)(或浮點(diǎn)數(shù))含有小數(shù)點(diǎn)。浮點(diǎn)數(shù)值的例子有2.651、74.8和653.49??赏ㄟ^指定float數(shù)據(jù)類型來聲明浮點(diǎn)數(shù)變量。如果需要更大的浮點(diǎn)數(shù),則應(yīng)指定雙精度數(shù)據(jù)類型。雙精度變量可存儲(chǔ)非常小和非常大的數(shù)據(jù)值。可通過指定double來聲明雙精度變量。

(3)字符型:字符可以是任何單個(gè)字母、數(shù)字、標(biāo)點(diǎn)符號(hào)或特殊符號(hào)。如'a'、'x'、'$'等都是字符常量。除了以上形式的字符常量外,C還允許用一種特殊形式的字符常量,就是以一個(gè)“\”開頭的字符序列。

112計(jì)算機(jī)工程學(xué)院例如,前面已經(jīng)遇到過的,在printf函數(shù)中的'\n',它代表一個(gè)“換行”符。這是一種“控制字符”,在屏幕上是不能顯示的。在程序中也無法用一個(gè)一般形式的字符表示,只能采用特殊形式來表示。這種以“\”開頭的特殊字符稱為“轉(zhuǎn)義字符”,常用的“轉(zhuǎn)義字符”見表2-1。113計(jì)算機(jī)工程學(xué)院表2-1轉(zhuǎn)義字符及其含義

字符形式

含義

ASCII代碼值

\n換行,將當(dāng)前位置移到下一行開頭10\t水平制表(跳到下—個(gè)tab位置)9\b退格,將當(dāng)前位置移到前一列8\r回車,將當(dāng)前位置移到本行開頭13\f換頁,將當(dāng)前位置移到下頁開頭12\\反斜杠字符“\”92\’單引號(hào)字符39\”雙引號(hào)字符34\ddd1到3位8進(jìn)制數(shù)所代表的字符\xhh1到2位16進(jìn)制數(shù)所代表的字符114計(jì)算機(jī)工程學(xué)院

如果需要的字符不止一個(gè),就要定義一個(gè)字符串。字符串是兩個(gè)或多個(gè)字符的組合。字符串常量是雙引號(hào)括起來的零個(gè)、一個(gè)或多個(gè)字符序列,如“CProgram”。編譯程序自動(dòng)地在每一個(gè)字符串末尾添加串結(jié)束符′\0′,因此,所需要的存儲(chǔ)空間比字符串的字符個(gè)數(shù)多一個(gè)字節(jié),故上述字符在內(nèi)存中如下存放:不要將字符常量與單字符的字符串常量混淆?!鋋′是字符常量,"a"是字符串常量,二者不同。可通過指定char數(shù)據(jù)類型來聲明字符數(shù)據(jù)。

CProgram\o115計(jì)算機(jī)工程學(xué)院VC++中數(shù)據(jù)的范圍類型存儲(chǔ)長(zhǎng)度取值范圍[signed]short[int]2字節(jié)(16位)-32768~32767(-215~215-1)unsignedshort[int]2字節(jié)(16位)0~65535(0~216-1)[signed]int4字節(jié)(32位)-2147483648~2147483647(-231~231-1)unsigned[int]4字節(jié)(32位)0~4294967295(0~232-1)[signed]long[int]4字節(jié)(32位)-2147483648~2147483647(-231~231-1)unsignedlong[int]4字節(jié)(32位)0~4294967295(0~232-1)計(jì)算機(jī)工程學(xué)院類型存儲(chǔ)長(zhǎng)度取值范圍有效數(shù)字精度float4字節(jié)±(3.4×10-38~3.4×1038)6~7位6位double8字節(jié)±(1.7×10-308~1.7×10308)15~16位6位計(jì)算機(jī)工程學(xué)院-128~1271有符號(hào)字符型signedchar0~(28-1)0~2551無符號(hào)字符型unsignedchar-27~(27-1)-128~1271字符型char19位有效位-3.4×104932~3.4×10493210長(zhǎng)雙精度型longdouble15位有效位-1.7×10308~1.7×103088雙精度型double7位有效位-3.4×1038~3.4×10384單精度型float-2147483648~21474836474有符號(hào)長(zhǎng)整型signedlongint0~(232-1)0~42949672954無符號(hào)長(zhǎng)整型unsignedlongint-231~(231-1)-2147483648~21474836474長(zhǎng)整型longint-32768~327672有符號(hào)短整型signedshortint0~655352無符號(hào)短整型unsignedshortint-32768~327672短整型shortint-32768~327672有符號(hào)整型signedint0~(216-1)0~655352無符號(hào)整型unsignedint-215~(215-1)-32768~327672整型int備注范圍字節(jié)說明類型計(jì)算機(jī)工程學(xué)院2.運(yùn)算符和表達(dá)式C語言的運(yùn)算符范圍很豐富,由這些運(yùn)算符可以組成相應(yīng)的表達(dá)式。

(1)算術(shù)運(yùn)算符和算術(shù)表達(dá)式C語言中的算術(shù)運(yùn)算符有:+加法運(yùn)箅符,-減法運(yùn)算符,* 乘法運(yùn)算符,/除法運(yùn)算符,%模運(yùn)算符或稱求余運(yùn)算符,%兩側(cè)均應(yīng)為整型數(shù)據(jù),如7%4的值為3。對(duì)于/運(yùn)算符,若除數(shù)和被除數(shù)均為整數(shù),則結(jié)果只取整數(shù)部分,舍棄小數(shù)部分,如7/4=1;而若除數(shù)或被除數(shù)中有一個(gè)為實(shí)數(shù),則結(jié)果就是double型,如7/4.0=1.75。算119計(jì)算機(jī)工程學(xué)院

術(shù)表達(dá)式就是用算術(shù)運(yùn)算符和括號(hào)將運(yùn)算對(duì)象(也稱操作數(shù))連接起來的、符合C語法規(guī)則的式子,如,表達(dá)式7%2+5-2就是合法的算術(shù)表達(dá)式。

(2)關(guān)系運(yùn)算符和關(guān)系表達(dá)式

C語言了提供6種關(guān)系運(yùn)算符:>大于,>=大于等于,<小于,<=小于等于,==等于,!=不等于。由關(guān)系運(yùn)算符將兩個(gè)表達(dá)式(可以是任意類型的表達(dá)式)連接起來的式子,稱為關(guān)系表達(dá)式,例如,a+b>6是合法的關(guān)系表達(dá)式。關(guān)系表達(dá)式的值是一個(gè)邏輯值“真”或“假”,在C語言中,沒有邏輯值這種類型,而是用整數(shù)1代表邏輯值”真”,120計(jì)算機(jī)工程學(xué)院用0代表邏輯值“假”,所以若關(guān)系表達(dá)式中的關(guān)系成立,則表達(dá)式值為1;若不成立,則表達(dá)式值為0。

(3)邏輯運(yùn)算符和邏輯表達(dá)式C語言提供了3種邏輯運(yùn)算符:&&邏輯“與”,||邏輯“或”,!邏輯“非”。其中“&&”和“||”

是雙目運(yùn)算符,它要求有兩個(gè)運(yùn)算量(操作數(shù)),例如a&&b,“!”是單目運(yùn)算符,它只需要一個(gè)運(yùn)算量,例如!a。邏輯運(yùn)算的運(yùn)算法則通常以真值表的形式表示,如表2-2所示:121計(jì)算機(jī)工程學(xué)院表2-2邏輯運(yùn)算的真值表

aba&&ba或b!a真真真真假真假假真假假真假真真假假假假真122計(jì)算機(jī)工程學(xué)院邏輯表達(dá)式的運(yùn)算量和結(jié)果值都是邏輯量,和關(guān)系運(yùn)算一樣,C語言在給出邏輯運(yùn)算結(jié)果時(shí),用1表示“真”,0表示“假”,但在判斷一個(gè)量是否為“真”時(shí),認(rèn)為0表示“假”,非0表示“真”,即將一個(gè)非零的數(shù)值認(rèn)為“真”。

(4)賦值運(yùn)算符和賦值表達(dá)式最基本的賦值運(yùn)算符是=,由賦值運(yùn)算符組成的表達(dá)式稱為賦值表達(dá)式,其形式為:

<變量>=<表達(dá)式>

123計(jì)算機(jī)工程學(xué)院含義是先求出<表達(dá)式>的值,然后將此值送入<變量>對(duì)應(yīng)的存儲(chǔ)單元,而整個(gè)賦值表達(dá)式的值就是<變量>的值。在賦值號(hào)=之前加上某些特定運(yùn)算符,可構(gòu)成復(fù)合運(yùn)算符,復(fù)合運(yùn)算符包括+=、-=、*=、/=、%=等運(yùn)算符,例如:a+=8 等價(jià)于 a=a+8。賦值運(yùn)算符按照“自右而左”的結(jié)合順序,連續(xù)多個(gè)=運(yùn)算符的運(yùn)算次序是先右后左,因此,“j=2”外面的括弧可以不要,即“i=(j=2)”和“i=j=2”等價(jià),都是先求“j=2”的值(得2),然后再賦給i,下面是賦值表達(dá)式的例子:124計(jì)算機(jī)工程學(xué)院a=b=c=10 賦值表達(dá)式的值為10,a、b、c的值均為10賦值表達(dá)式也可以包含復(fù)合的賦值運(yùn)算符。如:a+=a-=a*a也是一個(gè)賦值表達(dá)式。如果a的初值為4,此賦值表達(dá)式的求解步驟如下:①先進(jìn)行“a-=a*a”的運(yùn)算,它相當(dāng)于a=a-a*a=4-16=-12。②再進(jìn)行“a+=-12”的運(yùn)算,相當(dāng)于a=a+(-12)=-12-12=-24。125計(jì)算機(jī)工程學(xué)院(5)自增、自減運(yùn)算符

++i和i++的作用都相當(dāng)于i=i+1,但兩者在執(zhí)行次序上是有差別的。++i是先執(zhí)行i=i+1后,再使用i的值,而i++是先使用i的值后,再執(zhí)行i=i+1。例如,設(shè)i的原值等于3,則執(zhí)行下面的賦值語句:j=++i; i的值先加1后變成4,再賦給j,j的值為4j=i++; 先將i的值3賦給j,j的值為3,然后i加1后變?yōu)?126計(jì)算機(jī)工程學(xué)院--運(yùn)算符的使用和++類似,這里不再重復(fù)講解了。在使用這兩個(gè)運(yùn)算符時(shí),還要注意它們只能用于變量,而不能用于常量或表達(dá)式。(6)其它運(yùn)算符和表達(dá)式

C語言中有條件運(yùn)算符“?:”,用其構(gòu)成的條件表達(dá)式的一般形式是:<表達(dá)式1>?<表達(dá)式2>:<表達(dá)式3>例如,表達(dá)式max=(a>b)?a:b就是將a、b兩數(shù)中的較大值送給max。這里,該表達(dá)式整體為一賦

127計(jì)算機(jī)工程學(xué)院值表達(dá)式,賦值號(hào)右邊為條件表達(dá)式。C語言還提供了一種被稱為逗號(hào)運(yùn)算符的特殊運(yùn)算符“,”,用它將兩個(gè)表達(dá)式連接起來,稱為逗號(hào)表達(dá)式。逗號(hào)表達(dá)式的一般形式為:<表達(dá)式1>,<表達(dá)式2>其含義是先求<表達(dá)式1>,再求<表達(dá)式2>,整個(gè)表達(dá)式的值就是<表達(dá)式2>的值。例如逗號(hào)表達(dá)式a=3+8,a+4,則先求a=3+8,得11,然后求解a+4,得15,故整個(gè)逗號(hào)表達(dá)式的值為15。128計(jì)算機(jī)工程學(xué)院(7)運(yùn)算符的優(yōu)先級(jí)和結(jié)合性下面給出C語言中所有操作符的優(yōu)先級(jí),但由于C語言中運(yùn)算符眾多,讀者應(yīng)該先記住各類運(yùn)算符之間的運(yùn)算次序?yàn)椋豪ㄌ?hào)

單目運(yùn)算符

算術(shù)運(yùn)算符

關(guān)系運(yùn)算符

邏輯運(yùn)算符

三目運(yùn)算符

賦值運(yùn)算符

逗號(hào)運(yùn)算符。然后再記住:算術(shù)運(yùn)算符中:*、/、%的優(yōu)先級(jí)比+、-高,++、--是單目運(yùn)算符關(guān)系運(yùn)算符中:>、>=、<、<=的優(yōu)先級(jí)比==、!=高129計(jì)算機(jī)工程學(xué)院邏輯運(yùn)算符中:&&的優(yōu)先級(jí)比||高,!是單目運(yùn)算符如果在一個(gè)運(yùn)算對(duì)象兩側(cè)的運(yùn)算符的優(yōu)先級(jí)別相同,如a*b/c,則按規(guī)定的“結(jié)合性”處理。3.?dāng)?shù)據(jù)類型轉(zhuǎn)換

(1)自動(dòng)轉(zhuǎn)換整型和實(shí)型可以混合運(yùn)算,前已述及,字符型數(shù)據(jù)可以與整數(shù)通用,因此,整型、實(shí)型、字符型數(shù)據(jù)間可以混合運(yùn)算。例如:1+a+1.5是合法的。在進(jìn)行運(yùn)算時(shí),不同類型的數(shù)據(jù)要先轉(zhuǎn)換成

130計(jì)算機(jī)工程學(xué)院同一類型,然后進(jìn)行運(yùn)算。轉(zhuǎn)換的規(guī)則如下圖:圖1-13表達(dá)式中類型自動(dòng)轉(zhuǎn)換規(guī)則unsigneddoublelongintchar、shortfloat131計(jì)算機(jī)工程學(xué)院

如果賦值運(yùn)算符兩側(cè)的類型不一致,但都是數(shù)值型或字符型時(shí),在賦值時(shí)要進(jìn)行類型轉(zhuǎn)換,轉(zhuǎn)換規(guī)則是將賦值運(yùn)算符右側(cè)數(shù)據(jù)的類型轉(zhuǎn)換為左側(cè)變量的類型。當(dāng)賦值表達(dá)式左邊變量的數(shù)據(jù)類型級(jí)別高于右邊表達(dá)式的級(jí)別時(shí),仍按圖1-13中的規(guī)則轉(zhuǎn)換;否則,就要把右邊高級(jí)別表達(dá)式的數(shù)據(jù)類型轉(zhuǎn)換成左邊低級(jí)別變量的數(shù)據(jù)類型。

(2)強(qiáng)制類型轉(zhuǎn)換以上的轉(zhuǎn)換是自動(dòng)進(jìn)行的,稱為自動(dòng)轉(zhuǎn)換據(jù)。一種類型的數(shù)據(jù)還可以強(qiáng)制轉(zhuǎn)換成另一種類型數(shù)據(jù),稱為強(qiáng)制轉(zhuǎn)換,其一般形式是:

132計(jì)算機(jī)工程學(xué)院(<類型名>)<表達(dá)式>這個(gè)整體稱為強(qiáng)制類型表達(dá)式,例如:(int)(f1+f2)強(qiáng)制類型表達(dá)式的類型是<類型名>所代表的類型,因此,假如i是整型,則(float)i這個(gè)強(qiáng)制類型表達(dá)式的類型是float型,但i仍保留原先的整型。

133計(jì)算機(jī)工程學(xué)院1.2.3技能訓(xùn)練

【實(shí)驗(yàn)1.2.1】運(yùn)行下面的程序,分析運(yùn)行結(jié)果。

#include<stdio.h>voidmain(){inti=5,j=5;intx,y,z,a,b,c;charch1,ch2;i++;printf("i=%d,j=%d\n",++i,j++);x=10;134計(jì)算機(jī)工程學(xué)院x+=x-=x-x;

溫馨提示

  • 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. 人人文庫(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)論