




版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
1、C語言程序設計基本方法和技巧大學計算機公共基礎課2授課計劃周次理論內(nèi)容實驗內(nèi)容1第1講 C語言概述與理論課對應2第2講 C語言快速入門與理論課對應3第3講 基本數(shù)據(jù)類型與理論課對應4第4講 輸入輸出和庫函數(shù)與理論課對應5第5講 運算符和表達式與理論課對應6第6講 語句和算法與理論課對應7第7講 選擇結構與理論課對應8第8講 循環(huán)結構與理論課對應9第9講 函數(shù)與理論課對應10第10講 作用范圍和存儲類別與理論課對應11第11講 數(shù)組與理論課對應12第11講 數(shù)組與理論課對應13第12講 指針與理論課對應14第13講 字符串與理論課對應15第14講 結構體與理論課對應16第15講 編譯預處理與理論
2、課對應17第16講 文件與理論課對應18*第17講 高級數(shù)據(jù)結構(選講)與理論課對應C語言程序設計第一講 C語言概述C 語言程序設計4第一講 C語言概述預備知識計算機組成和工作原理計算機語言和程序C語言的簡史為什么學習和使用C語言C語言程序的開發(fā)過程C語言編程環(huán)境C語言編程實驗環(huán)境C語言程序設計5計算機計算機(Computer)能進行計算和邏輯判斷的設備在一組指令(instructions)程序(programs)的控制下處理數(shù)據(jù)硬件(Hardware)組成計算機的各種物理部件鍵盤、鼠標、顯示器、內(nèi)存、硬盤、光驅(qū)等等軟件(Software)計算機中運行的程序和數(shù)據(jù)C語言概述6計算機的組成計算機
3、包括六大部件輸入單元(Input unit)從輸入設備(鍵盤、鼠標)獲得數(shù)據(jù)輸出單元(Output unit)把數(shù)據(jù)輸出到輸出設備(顯示器、打印機等)內(nèi)存(Memory unit)臨時存儲正在處理的數(shù)據(jù)和運行的程序可以快速地訪問容量不大C語言概述7計算機的組成中央處理單元(Central processing unit, CPU)算術邏輯單元(Arithmetic and logic unit, ALU)進行算術運算和邏輯判斷控制器(Control unit)管理和協(xié)調(diào)計算機的其它部件輔助存儲器(Secondary storage unit)保存需長期存儲的數(shù)據(jù)和非活動的程序保存時間長價格便宜
4、、容量大例如硬盤、光盤、磁帶C語言概述8計算機的工作原理六大部件緊密協(xié)作C語言概述9計算機的工作原理CPU負責執(zhí)行程序從內(nèi)存中讀取一條指令執(zhí)行該指令從內(nèi)存中讀取下一條指令并執(zhí)行一個主頻為1GHz的CPU可以在一秒鐘內(nèi)進行大約一億次這樣的操作 CPU有自己的工作區(qū):包括若干個寄存器(Registers)CPU只能理解有限的指令(CPU的指令集)指令能夠完成的任務是具體的例如,把一個數(shù)從內(nèi)存移動到某一個寄存器C語言概述10計算機程序和語言存儲在計算機中的一切內(nèi)容都是二進制的數(shù)字形式數(shù)據(jù):數(shù)、字符、圖片、聲音、動畫等等指令計算機程序確切告訴計算機如何完成某項任務的指令序列就是一套程序計算機語言用來編
5、寫程序C語言概述#include #include void main() float a,b,c,p,disc,q,x1,x2; scanf(%f%f%f,&a,&b,&c); p=-b/(2*a); disc=b*b-4*a*c; q=sqrt(disc)/(2*a); x1=p+q; x2=p-q; printf(x1=%f,x2=%f,x1,x2);00110011001101100110011001101111機器語言數(shù)字形式的指令碼就是機器語言(Machine language)用機器語言編寫的程序能夠被計算機直接理解和執(zhí)行但是,編寫程序非常費力例如,編寫程序完成兩個數(shù)相加的任務需
6、要以下幾步把地址為2000的內(nèi)存單元中的數(shù)復制到寄存器1;把地址為2004的內(nèi)存單元中的數(shù)復制到寄存器2;把寄存器2中的數(shù)與寄存器1中的數(shù)相加,結果保留在寄存器1中;把寄存器1中的數(shù)復制到地址為2008的內(nèi)存單元中。C語言概述00110011001101112匯編語言符號化的指令碼就是匯編語言(Assembly language)例如,完成兩個數(shù)相加的匯編語言程序匯編語言程序必須被翻譯成機器語言程序才能被執(zhí)行匯編程序(Assembler)充當“翻譯”C語言概述ldreg n1, r1把變量n1的值復制到寄存器1(r1);ldreg n2, r2把變量n2的值復制到寄存器2(r2);add r1
7、, r2把r2中的數(shù)與r1中的數(shù)相加,結果保留在r1中;store r1, sum把r1中的數(shù)復制到變量sum。13高級語言高級語言(High-level language)使用數(shù)學符號和類似英語的單詞例如,完成兩個數(shù)相加的C語言程序從多方面提高了編程效率不必考慮CPU的指令集不必考慮CPU實現(xiàn)特定任務的精確步驟采用接近人類思考問題的方式去書寫程序高級語言程序必須被編譯程序(Compiler)翻譯成機器語言程序才能被執(zhí)行C語言概述sum = n1 + n2;14C語言的簡史C語言的起源美國貝爾實驗室的Dennis Ritchie在1972年開發(fā)的用于設計UNIX操作系統(tǒng)其前身是B語言(Ken
8、Thompson于1970年為第一個UNIX系統(tǒng)開發(fā)的語言)C語言的標準美國國家標準化組織(ANSI)于1983年成立了一個委員會(X3J11),以確定C語言的標準。該標準(ANSI C)于1989年被正式采用,即C89。最新的標準是C99標準。目前,大多數(shù)C語言編譯器沒有完全實現(xiàn)C99的所有修改。C語言概述15為什么學習和使用C語言C語言的特點C語言是一種強大而靈活的語言,可以用來編寫任意復雜的程序。C語言簡潔、緊湊,使用方便、靈活。C語言程序效率高、運行速度快。C語言是可移植的。C語言很適合結構化程序設計,因而要求用戶以功能模塊的方式來思考問題。C語言具有自我擴展能力。C語言概述16為什么
9、學習和使用C語言C與C+(C加加,see-plus-plus)貝爾實驗室于二十世紀八十年代在C語言的基礎上開發(fā)的。C+是C語言的超集,包含了C語言的所有內(nèi)容,同時增加了面向?qū)ο缶幊谭矫娴膬?nèi)容。C與Java(爪哇)Sun公司于1995年發(fā)布的面向?qū)ο缶幊陶Z言。Java也是基于C語言的。C與C#(see-sharp)微軟在2000年6月與.NET平臺一同推出。C#也是從C語言派生的一種面向?qū)ο笳Z言。C語言概述17C語言程序的開發(fā)過程一般分成五個步驟定義程序目標設計程序編寫代碼編譯運行、測試和調(diào)試程序C語言概述18C語言程序的開發(fā)過程定義程序目標在開始解決問題之前,程序的開發(fā)人員必須徹底了解問題的是
10、什么,對即將要創(chuàng)建的程序要做的事情有個清晰的想法。這需要仔細考慮以下問題程序需要什么信息程序需要執(zhí)行哪些計算和操作程序應該報告什么信息例如,計算任意一個圓環(huán)的面積提出問題,明確目標圓環(huán)是什么?如何計算?計算精度?C語言概述19C語言程序的開發(fā)過程設計程序決定程序如何去解決問題。需要考慮如何給程序提供必要的數(shù)據(jù)程序中如何表示數(shù)據(jù)用什么方法來處理數(shù)據(jù)程序如何組織程序怎樣報告結果完成這個程序需要多長時間應該用一般的概念考慮設計中的問題,而不是考慮具體的代碼。 C語言概述20C語言程序的開發(fā)過程編寫代碼編寫代碼來實現(xiàn)前面的設計,即用某一門語言來表示程序設計。需要開發(fā)人員熟練掌握該語言的知識。可以在草稿
11、紙上勾畫自己的想法或書寫代碼,但最終必須將代碼輸入計算機。輸入代碼所采用的機制則取決于具體的編程環(huán)境。一般來說,需要使用文本編輯器(例如Windows的記事本程序)來創(chuàng)建一種文件,稱為源文件源文件包含程序設計的C語言表示形式(稱為源程序或源代碼)C語言概述21C語言程序的開發(fā)過程編譯把C語言源程序轉(zhuǎn)換成機器語言表示的程序。這種程序可以直接被計算機理解和執(zhí)行,所以稱之為可執(zhí)行程序,放在可執(zhí)行文件中。編譯的具體細節(jié)取決于使用的編程環(huán)境。C語言分兩步完成這一工作:編譯和鏈接。編譯器將源代碼轉(zhuǎn)換為目標代碼,并存在目標文件中。鏈接器將目標代碼與其他代碼結合起來生成可執(zhí)行文件。這種把編譯和鏈接分開來做的方
12、法便于程序的模塊化??梢苑謩e編譯程序的各個模塊,然后用鏈接器把編譯過的模塊結合起來。這樣,如果需要改變一個模塊,則不需要重新編譯所有其他模塊。C語言概述22C語言程序的開發(fā)過程運行、測試和調(diào)試程序運行包含可執(zhí)行程序的文件,觀察運行的結果。在不同的系統(tǒng)中運行程序的方式可能不同。例如,Windows的控制臺和資源管理器。應該對程序進行仔細的檢查,看程序是否在做該做的事。比較好的做法是為驗證程序的正確性設計一個測試計劃。越早做越好,因為它有助于理清程序員的思路。程序中的錯誤被稱為bug,調(diào)試(Debug)就是要發(fā)現(xiàn)并修正錯誤。C語言概述23C語言的編程環(huán)境開發(fā)程序的具體操作取決于使用的編程環(huán)境因為C
13、語言是可移植的,所以它在許多環(huán)境中都是可用的。例如UNIX、Linux、Windows和MS-DOS。C語言編程環(huán)境包括一系列程序。編輯器編譯器鏈接器運行和調(diào)試環(huán)境C語言概述Hello.cHello.objHello.exe編輯器源代碼編譯器目標代碼鏈接器可執(zhí)行代碼啟動代碼庫代碼執(zhí)行如果有錯如果有錯如果有錯24C語言的編程環(huán)境編輯器使用一個文本編輯器程序輸入源代碼,并將代碼保存在源文件中。一般,C程序的源文件名稱的擴展名是.c例如和。該名稱應該遵循特定的操作系統(tǒng)的命名規(guī)則。例如,MS-DOS要求基本名包含的字符數(shù)不能大于8,所以不是合法的DOS文件名。Windows允許長文件名,所以是合法的W
14、indows文件名。C語言概述Hello.c編輯器源代碼25C語言的編程環(huán)境編譯器編譯器接收源文件,生成目標文件,擴展名為.obj或.o。編譯器還會檢查輸入的程序是否是有效的C語言程序。如果編譯器發(fā)現(xiàn)錯誤,就會報告出錯,且不能生成可執(zhí)行程序。這時就必須修改錯誤,然后再編譯。顯然,為了能迅速找到錯誤,理解特定編譯器的報錯信息是一項有用的技能。C語言概述Hello.cHello.obj編輯器源代碼編譯器目標代碼如果有錯26C語言的編程環(huán)境鏈接器目標代碼雖然已經(jīng)是機器代碼,但還不能被執(zhí)行。缺少下面兩個東西啟動代碼:相當于程序和操作系統(tǒng)之間的接口。 庫函數(shù)的代碼:庫文件中包含許多函數(shù)的目標代碼。 鏈接
15、器的作用就是將這三個元素(目標代碼、啟動代碼和庫代碼)結合起來,并將它們放在一個文件中,即可執(zhí)行文件,擴展名為.exe或.out。C語言概述Hello.objHello.exe目標代碼鏈接器可執(zhí)行代碼啟動代碼庫代碼如果有錯27Windows的C語言編程環(huán)境Windows的C語言編程環(huán)境Windows并不包含C編譯器,所以需要獲得并安裝一個C編譯器。 許多現(xiàn)代的編譯器都是集成開發(fā)環(huán)境(或叫IDE)的一部分。包括一個編輯器、編譯器、鏈接器和包括一個符號調(diào)試程序在內(nèi)的運行支持系統(tǒng)。許多軟件廠商都提供了基于Windows的集成開發(fā)環(huán)境Microsoft公司的Visual C/C+Borland公司的C
16、/C+ BuilderMetrowerks公司的Code Warrior目前,大多數(shù)IDE把C和C+編譯器結合在一起。C語言概述28DOS的C語言編程環(huán)境DOS的C語言編程環(huán)境基于DOS的IDE Borland公司的Turbo CBorland公司的Borland C+許多Windows上的IDE也提供了在DOS命令行環(huán)境中編程的命令行工具。C語言概述29C語言編程實驗環(huán)境簡介上機實驗環(huán)境簡介舉例演示的基本操作啟動創(chuàng)建源文件構建工程(編譯、鏈接)運行程序C語言概述30小結C是一種通用的程序設計語言,具有許多突出的優(yōu)點。程序設計的初學者應該嚴格按照C語言程序的開發(fā)過程進行訓練,以便盡快掌握程序設
17、計的基本原則。C是一種需要編譯的高級語言。進行C語言編程的具體操作依賴于所使用的編程環(huán)境。程序設計是一門實踐性很強的課程,在學習過程中必須十分重視實驗環(huán)節(jié)。C語言概述第二講 C語言快速入門32第二講 C語言快速入門C語言程序的基本結構C語言的字符集和關鍵字編程環(huán)境C語言程序設計33C語言程序的基本結構一個簡單的C語言程序問題:在屏幕上顯示一行文字:“Hello World!”源程序運行結果C語言快速入門/* 在屏幕上顯示Hello World! */#include void main() /* 定義主函數(shù) */ printf(Hello World!n); Hello World!34C語言
18、程序的基本結構一個簡單的C語言程序程序結構分析C語言快速入門/* 在屏幕上顯示Hello World! */#include void main() /* 定義主函數(shù) */ printf(Hello World!n); 注釋部分以增加程序的可讀性。不被執(zhí)行。35C語言程序的基本結構一個簡單的C語言程序程序結構分析C語言快速入門/* 在屏幕上顯示Hello World! */#include void main() /* 定義主函數(shù) */ printf(Hello World!n); 預處理命令 程序中包含某一文件內(nèi)容。 “stdio.h”為標準輸入輸出函數(shù)頭文件名。36C語言程序的基本結構一個
19、簡單的C語言程序程序結構分析C語言快速入門/* 在屏幕上顯示Hello World! */#include void main() /* 定義主函數(shù) */ printf(Hello World!n); 函數(shù) C程序由函數(shù)組成。一個C程序有且僅有一個主函數(shù)(main函數(shù))。37C語言程序的基本結構一個簡單的C語言程序程序結構分析C語言快速入門/* 在屏幕上顯示Hello World! */#include void main() /* 定義主函數(shù) */ printf(Hello World!n); 函數(shù)說明 說明函數(shù)類型、函數(shù)名和函數(shù)參數(shù)。38C語言程序的基本結構一個簡單的C語言程序程序結構分析
20、C語言快速入門/* 在屏幕上顯示Hello World! */#include void main() /* 定義主函數(shù) */ printf(Hello World!n); 函數(shù)體 包括變量說明和語句執(zhí)行部分。39C語言程序的基本結構一個簡單的C語言程序程序結構分析C語言快速入門/* 在屏幕上顯示Hello World! */#include void main() /* 定義主函數(shù) */ printf(Hello World!n); 函數(shù)調(diào)用語句 格式輸出函數(shù)printf( )。 輸出“Hello world!”。Hello World!40C語言程序的基本結構含有算術運算的C語言程序問題:
21、求方程 的根(設 )。源程序C語言快速入門#include #include void main() float a,b,c,p,disc,q,x1,x2; scanf(%f%f%f,&a,&b,&c); p=-b/(2*a); disc=b*b-4*a*c; q=sqrt(disc)/(2*a); x1=p+q; x2=p-q; printf(x1=%f,x2=%f,x1,x2);41C語言程序的基本結構含有算術運算的C語言程序程序結構分析C語言快速入門#include #include void main() float a,b,c,p,disc,q,x1,x2; scanf(%f%f%f
22、,&a,&b,&c); p=-b/(2*a); disc=b*b-4*a*c; q=sqrt(disc)/(2*a); x1=p+q; x2=p-q; printf(x1=%f,x2=%f,x1,x2); 預處理命令42C語言程序的基本結構含有算術運算的C語言程序程序結構分析C語言快速入門#include #include void main() float a,b,c,p,disc,q,x1,x2; scanf(%f%f%f,&a,&b,&c); p=-b/(2*a); disc=b*b-4*a*c; q=sqrt(disc)/(2*a); x1=p+q; x2=p-q; printf(x1
23、=%f,x2=%f,x1,x2); 函數(shù) 一個主函數(shù)(main函數(shù))。43C語言程序的基本結構含有算術運算的C語言程序程序結構分析C語言快速入門#include #include void main() float a,b,c,p,disc,q,x1,x2; scanf(%f%f%f,&a,&b,&c); p=-b/(2*a); disc=b*b-4*a*c; q=sqrt(disc)/(2*a); x1=p+q; x2=p-q; printf(x1=%f,x2=%f,x1,x2); 函數(shù)說明部分44C語言程序的基本結構含有算術運算的C語言程序程序結構分析C語言快速入門#include #in
24、clude void main() float a,b,c,p,disc,q,x1,x2; scanf(%f%f%f,&a,&b,&c); p=-b/(2*a); disc=b*b-4*a*c; q=sqrt(disc)/(2*a); x1=p+q; x2=p-q; printf(x1=%f,x2=%f,x1,x2); 函數(shù)體 變量說明部分 執(zhí)行部分45C語言程序的基本結構含有算術運算的C語言程序程序結構分析C語言快速入門#include #include void main() float a,b,c,p,disc,q,x1,x2; scanf(%f%f%f,&a,&b,&c); p=-b/
25、(2*a); disc=b*b-4*a*c; q=sqrt(disc)/(2*a); x1=p+q; x2=p-q; printf(x1=%f,x2=%f,x1,x2); 運行程序 鍵盤輸入a、b、c的值; 屏幕顯示x1和x2的值。1 0 -446C語言程序的基本結構包含多個函數(shù)的C語言程序問題:求|a|+|b|的值。源程序C語言快速入門#includefloat absv(float x) float y; y=x=0?x:-x; return y;void main() float a,b,c; printf(input a,b:n); scanf(%f%f,&a,&b); c=absv(
26、a)+absv(b); printf(|a|+|b|=%fn,c);47C語言程序的基本結構包含多個函數(shù)的C語言程序程序結構分析C語言快速入門#includefloat absv(float x) float y; y=x=0?x:-x; return y;void main() float a,b,c; printf(input a,b:n); scanf(%f%f,&a,&b); c=absv(a)+absv(b); printf(|a|+|b|=%fn,c); 程序由兩個函數(shù)組成: absv函數(shù) main函數(shù)48C語言程序的基本結構包含多個函數(shù)的C語言程序程序結構分析C語言快速入門#in
27、cludefloat absv(float x) float y; y=x=0?x:-x; return y;void main() float a,b,c; printf(input a,b:n); scanf(%f%f,&a,&b); c=absv(a)+absv(b); printf(|a|+|b|=%fn,c); 調(diào)用absv函數(shù)求絕對值。49C語言程序的基本結構包含多個函數(shù)的C語言程序程序結構分析C語言快速入門#includefloat absv(float x) float y; y=x=0?x:-x; return y;void main() float a,b,c; print
28、f(input a,b:n); scanf(%f%f,&a,&b); c=absv(a)+absv(b); printf(|a|+|b|=%fn,c); 運行程序 屏幕顯示提示信息; 鍵盤輸入a、b的值; 屏幕顯示a、b絕對值之和。input a,b:-5 1350C語言程序的基本結構C語言程序的基本結構小結C語言快速入門一個C程序由一個或多個函數(shù)組成,但有且僅有一個主函數(shù)(main函數(shù));main函數(shù)是程序執(zhí)行的入口,可置于程序的任何位置。程序中可以有預處理命令(如:include 命令)。預處理命令通常放在程序的最前面。每個語句以分號結尾;預處理命令、函數(shù)頭和花括號“”之后不能加分號。 函
29、數(shù)包括函數(shù)的說明部分和函數(shù)體;函數(shù)體包括變量說明部分和執(zhí)行部分;函數(shù)體由一對花括號“ ”括起來。 括在/*/內(nèi)的文本為注釋。一行可以寫幾個語句,一個語句也可以寫在多行上。程序區(qū)分大小寫字母。一般變量、語句等用小寫字母書寫;符號常量、宏名等用大寫字母書寫。標識符和保留字之間須加空格以示分隔。51C語言的字符集C語言源程序中使用的字符來自C語言的字符集。字符集(Character set)來自ASCII表52個大小寫字母(Letters)A B C D E F G H I J K L M N O P Q R S T U V W X Y Za b c d e f g h i j k l m n o
30、p q r s t u v w x y z10個數(shù)字(Digits)0 1 2 3 4 5 6 7 8 9空白符(Blanks)空格符、制表符、回車符、換行符圖形符號(Graphic characters)! # % & * ( _ ) - + = | ; : , . / ?C語言快速入門52C語言的關鍵字關鍵字(Keywords)是C語言中的詞匯。也稱為保留字(Reserved words)類型說明int、long、short、float、double、char、unsigned、signed、const、void、volatile、enum 、struct、union語句定義if、else
31、、goto、switch、case、do、while、for、continue、break、return、default、typedef存儲類別說明auto、register、extern、static長度運算符sizeofC語言快速入門53C語言的標識符標識符(Identifiers)是程序中引用對象的名稱。用來標識變量、符號常量、數(shù)組、函數(shù)、結構體、共用體、自定義類型等。命名規(guī)則只能包括大小寫字母、數(shù)字和下劃線;首字符必須是字母或下劃線;一般內(nèi)部標識符的前31個字符有效,而外部標識符的前6個字符有效;(視具體編譯器的規(guī)定)不能與關鍵字相同。C語言快速入門count,student_name
32、,sum,test13,_number,Sum M.John,$123,hi!,12xyz,void54編程環(huán)境舉例演示的基本操作創(chuàng)建工作區(qū)創(chuàng)建工程(程序)并添加到工作區(qū)創(chuàng)建源文件并添加到工程構建工程(編譯、鏈接)運行程序C語言快速入門55程序的測試與調(diào)試程序錯誤語法錯誤未遵循C的語法規(guī)則。編譯器可以檢查。運行時錯誤在程序運行時執(zhí)行了無法處理的操作。邏輯錯誤程序不能按照預期的方式運行,不能產(chǎn)生預期的結果。C語言快速入門56程序的測試與調(diào)試程序測試審查和運行程序,檢測程序是否存在錯誤。測試步驟在編譯前仔細檢查程序的源代碼,看看是否有明顯的錯誤。查看編譯器發(fā)現(xiàn)的語法錯誤。對于運行時錯誤和邏輯錯誤可
33、以采用正確輸出測試。想找出所有錯誤是不切實際的。C語言快速入門57程序的測試與調(diào)試程序調(diào)試隔離和修正錯誤。調(diào)試方法采用手工方式來跟蹤程序。在程序中的關鍵點放置輸出語句來顯示變量的值。使用調(diào)試器。C語言快速入門58小結C程序的基本結構C語言程序是由一個或多個函數(shù)組成的。函數(shù)可以是標準庫函數(shù)和自定義的函數(shù)。C語言的語句可以包含一個表達式,也可以包含一個函數(shù)調(diào)用,以一個分號作為結束標志。C語言中的變量在使用之前必須先聲明,通過聲明語句中為變量指定一個名字和數(shù)據(jù)類型??梢酝ㄟ^賦值運算改變變量的值。C語言可以使用scanf()函數(shù)和printf()函數(shù)輸入和輸出數(shù)據(jù)。C語言快速入門59小結編譯器可以發(fā)現(xiàn)
34、程序中的語法錯誤,但是程序中的運行時錯誤和邏輯錯誤只有在程序運行時才表現(xiàn)出來。檢測運行時錯誤和邏輯錯誤的一種簡單實用的方法是跟蹤程序的運行狀態(tài),即程序每執(zhí)行一步之后所有或主要變量的值。C語言快速入門第三講 基本數(shù)據(jù)類型61第三講 基本數(shù)據(jù)類型引例變量與常量預備知識內(nèi)儲存器的組織數(shù)據(jù)類型基本數(shù)據(jù)類型整數(shù)類型字符浮點類型C語言程序設計62引例引例問題計算任意一個圓的面積。源程序()基本數(shù)據(jù)類型#include void main() float r, area; /定義變量 scanf(“%f”,&r); /讀取輸入的半徑 area = 3.14*r*r; /計算圓的面積 printf(“area
35、=%f”,area); /輸出1areararea = r263變量與常量數(shù)據(jù)(Data)程序需要使用數(shù)據(jù)。數(shù)據(jù)是信息的載體。數(shù)據(jù)有多種形式:數(shù)、字符、圖片等。常量(Constants)在程序運行之前可以預先設定,并在整個運行過程中沒有變化的數(shù)據(jù)。例如引例中的圓周率。變量(Variables)在程序運行過程中可能變化或被賦值的數(shù)據(jù)。例如引例中的半徑和面積?;緮?shù)據(jù)類型64數(shù)據(jù)類型數(shù)據(jù)類型的作用決定數(shù)據(jù)的存儲方式和占用的存儲空間的大小。決定可以進行的操作。C語言的數(shù)據(jù)類型基本類型整型(integer),字符型(character),浮點型(floating-point),枚舉類型(enumera
36、tion)構造類型結構體(structure),共用體(union),數(shù)組(array)指針類型(pointer)空類型(void)基本數(shù)據(jù)類型65位、字節(jié)和字內(nèi)存儲器的組織基本數(shù)據(jù)類型位(bit):最小的存儲單位,可以容納兩個值之一,即0或1。200020012002字節(jié)(Byte):基本的存儲單位,8位。字(word):自然的存儲單位,包含若干個字節(jié)。例如32位機的一個字就是32位。地址:以字節(jié)為單位從0開始編號。66整數(shù)的存儲方式有符號的正整數(shù)在內(nèi)存中以二進制補碼形式存放。正整數(shù)的補碼與原碼相同。例如:10基本數(shù)據(jù)類型符號位0 0 0 0 0 0 0 00 0 0 0 1 0 1 0RA
37、M數(shù)軸0215-1=32767可表示的數(shù)的范圍-215=-3276867整數(shù)的存儲方式有符號的負整數(shù)在內(nèi)存中以二進制補碼的形式存放。例如:-10基本數(shù)據(jù)類型符號位1 1 1 1 1 1 1 11 1 1 1 0 1 1 0RAM-10的原碼1 0 0 0 0 0 0 00 0 0 0 1 0 1 01 1 1 1 1 1 1 11 1 1 1 0 1 0 11 1 1 1 1 1 1 11 1 1 1 0 1 1 0按位取反加一后得到 -10的補碼符號位不變68整數(shù)的存儲方式無符號整數(shù)所有二進制位都存放數(shù)值。例如:65535基本數(shù)據(jù)類型1 1 1 1 1 1 1 11 1 1 1 1 1 1
38、1RAM0216-1=65535可表示的數(shù)的范圍69整數(shù)的類型C語言提供多種整數(shù)類型為程序員提供了針對不同用途的多種選擇?;緮?shù)據(jù)類型類型名稱類型說明符字節(jié)數(shù)數(shù)值范圍基本整型signed int4-2147483648 2147483647短整型signed short int2-3276832767長整型signed long int4-2147483648 2147483647無符號基本整型unsigned int404294967295無符號短整型unsigned short int2065535無符號長整型unsigned long int404294967295C標準只規(guī)定:shor
39、t int long最大最小值參考僅供參考,實際值與所使用的操作系統(tǒng)、編譯系統(tǒng)、機器有關。70整型常量整型常量有三種形式:十進制(decimal)整數(shù)12 65 65535八進制(octal)整數(shù):帶前綴 0(zero)014 0101 0177777十六進制(hexadecimal)整數(shù):帶前綴 0 x 或 0X0 xc 0 x41 0 xffff默認類型是int,即有符號的基本整型??梢约由虾缶Y u 或 U 表示無符號整數(shù),或者 l 或 L 表示長整數(shù)。0 xb5Lu基本數(shù)據(jù)類型71整型變量聲明變量(Declaration)變量在使用之前必須被聲明。聲明語句的格式:舉例RAM基本數(shù)據(jù)類型
40、,.;int counter;int width, height;short x, y;long number;變量聲明創(chuàng)建了變量:為變量分配了存儲空間。height72整型變量初始化(Initialize)變量為變量賦一個初始值??梢栽诼暶髡Z句中初始化變量。舉例變量獲得值的方法直接賦值輸入初始化基本數(shù)據(jù)類型int counter = 0;int width = 352, height = 288;初始化式RAM288height73整型變量輸出變量的值可以使用printf()函數(shù)。與int類型對應的格式說明符是%d。舉例()基本數(shù)據(jù)類型#include void main() int a,
41、b; a=32767; b=-32768; printf(a=%d,b=%dn, a, b);a=32767,b=-3276874整數(shù)的溢出溢出整數(shù)太大,超出了整數(shù)類型的數(shù)值范圍。使用printf() 時與unsigned int類型對應的格式說明符是%u。舉例()基本數(shù)據(jù)類型#include void main() int a, b; unsigned c, d; a = 2147483647; b = a+1; c = 4294967295; d = c+1; printf(a=%d,b=%dn, a, b); printf(c=%u,d=%u, c, d);a=2147483647,b=
42、-2147483648c=4294967295,d=0?75整數(shù)的溢出溢出結果分析結論a+1 的結果(2147483648) 超出了基本整型變量 b 所能容納(表示)的數(shù)值范圍(-21474836482147483647)。請分析d的結果?;緮?shù)據(jù)類型0 1 1 1 1 1 1 1.1 1 1 1 1 1 11 0 0 0 0 0 0 0.0 0 0 0 0 0 0a(2147483647)1 0 0 0 0 0 0 0.0 0 0 0 0 0 0a+1(2147483648)b(-2147483648)12加正數(shù)減正數(shù)76字符的存儲方式字符編碼計算機使用一種數(shù)字編碼(整數(shù))來表示字符,每一個
43、字符都對應一個特定的整數(shù)。常用的編碼是ASCII(美國信息交換用標準碼)。7位二進制數(shù),十進制碼值范圍從0到127。一般用一個字節(jié)保存,最高位為0。字符的存儲方式與整數(shù)相同舉例字母A的ASCII碼值為65,那么在內(nèi)存中以65的二進制形式存儲,且占一個字節(jié)?;緮?shù)據(jù)類型RAM77字符的類型和字符變量C語言的字符類型:char占一個字節(jié);可視為一個有符號的整數(shù)。舉例()基本數(shù)據(jù)類型#include void main() char c1, c2; /聲明字符變量 c1 = 97; /把一個整數(shù)賦值給字符變量 c2 = c1-32; /字符變量可以進行算術運算 printf(c1=%c,c2=%cn
44、, c1, c2); printf(c1=%d,c2=%dn, c1, c2);c1=a,c2=Ac1=97,c2=6578字符常量字符常量用單引號括起來的一個字符。x 9 +C語言將字符常量視為int類型。舉例()如果int類型為16位,char類型為8位,那么對于bc,將把b和c的ASCII碼值存儲在兩個字節(jié)中,并把c賦值給變量c2。注意:不同系統(tǒng)處理方式不同,結果不同?;緮?shù)據(jù)類型char c1, c2;c1=a;c2=bc;0 1 1 0 0 0 0 1c10 1 1 0 0 0 1 1c20 1 1 0 0 0 1 10 1 1 0 0 0 1 0bcLH9799999879字符常量
45、轉(zhuǎn)義字符(escape character)指代一些特殊的字符。(打印不出來的字符)舉例()基本數(shù)據(jù)類型a 警報 反斜杠()b 退格? 問號(?)f 走紙 單引號()n 換行“ 雙引號(”)r 回車ooo 八進制值(o表示一個八進制數(shù)字)t 水平制表符xhh 十六進制值(h表示一個十六進制數(shù)字)v 垂直制表符#include void main() printf(atbncbd100 x40n);abd80浮點數(shù)的存儲方式浮點數(shù)浮點型數(shù)據(jù)在內(nèi)存中按指數(shù)形式存放。例如:314.15 = 3.1415102基本數(shù)據(jù)類型0 (3.14159)10 0 (2)10 數(shù)符 尾數(shù)部分 階符 階碼 + 3.
46、14159 10+2由此可見,尾數(shù)部分的寬度決定了有效數(shù)字的個數(shù)(即精度),階碼部分的寬度決定了數(shù)值范圍。RAM科學計數(shù)法允許使用少量的數(shù)字表示很大范圍的數(shù)和很小的數(shù)。81浮點數(shù)的類型浮點數(shù)也有多種類型類型名稱及典型大小基本數(shù)據(jù)類型類型名稱類型說明符字節(jié)數(shù)有效數(shù)字數(shù)值范圍單精度float467(s)10-371038雙精度double81516(s)10-30710308長雙精度long double101819(s)10-4931104932S = 1參考僅供參考,實際值與所使用的操作系統(tǒng)、編譯系統(tǒng)、機器有關。數(shù)軸0可表示的正數(shù)可表示的負數(shù)82浮點型常量浮點型常量有兩種形式:十進制形式12.
47、3 .65 0.指數(shù)形式: 1.2e-2 .1E5 7E01.210-20.11057.0100默認類型是double??梢约由虾缶Y f 或 F 表示float類型,或者 l 或 L 表示long double類型,否則該常量是double類型。2.3f 1.2L .1E5f基本數(shù)據(jù)類型83浮點型變量浮點型變量的聲明和初始化舉例基本數(shù)據(jù)類型float radius;double x = 0.0, y = 0.0;不能寫成:double x = y =0.0;84浮點型變量浮點數(shù)的輸出使用printf()函數(shù)float和double對應的格式說明符為%f、%e。舉例()基本數(shù)據(jù)類型#includ
48、e void main() float f; double d;f; d=33333.3333333333; printf(f=%fnd=%f, f, d);有效數(shù)字位數(shù)是有限的,在可表示的有效位之外的數(shù)字被舍去。因此可能會產(chǎn)生誤差。85浮點數(shù)的舍入誤差浮點數(shù)的舍入誤差舉例()基本數(shù)據(jù)類型#include void main() float a, b; a=123456.789e5; b=a+20; printf(a=%fnb=%f, a, b);?86浮點數(shù)的舍入誤差浮點數(shù)的舍入誤差結果分析基本數(shù)據(jù)類型a=123456.789e5;b=a+20;a+20的理論值應該是:但是,一個實型變量能夠
49、保證的有效數(shù)字是7位,后面的數(shù)字將被舍去,是沒有意義的。因此,最后得到應當避免一個很大的數(shù)和一個很小的數(shù)直接相加或相減,否則就會“丟失”較小的數(shù)。87浮點數(shù)的溢出上溢舉例()若某系統(tǒng)中的最大float值為,進行如下操作得到結果下溢舉例:假設-10是最小的指數(shù),能夠保留四位有效數(shù)字如果把數(shù)除以10,將得到結果,但損失了一位有效數(shù)字?;緮?shù)據(jù)類型float toobig = 3.4e38 * 100.0f;printf(“toobig=%f, toobig);inf無窮大(infinity)88小結C語言有多種數(shù)據(jù)類型。基本的數(shù)據(jù)類型包括兩大類:整數(shù)類型浮點類型開發(fā)程序時,應當注意所需變量及其類型
50、的選擇。一般使用int和float表示數(shù),用char表示字符。在使用變量的函數(shù)的可執(zhí)行語句之前聲明該變量,并為它選擇有意義的名字。初始化變量使用的常量應當與變量的類型相匹配?;緮?shù)據(jù)類型第四講 輸入輸出和庫函數(shù)90第四講 輸入輸出和庫函數(shù)引例字符串常量符號常量格式化輸入輸出字符輸入輸出庫函數(shù)C語言程序設計91引例引例問題:計算任意一個球體的體積。源程序()輸入輸出和庫函數(shù)#include #include #define PI 3.14159 /定義符號常量void main() double r, volume; printf(Please input the radius of a bal
51、l: ); scanf(%lf, &r); volume = 4.0/3.0*PI*pow(r, 3.0); /使用數(shù)學函數(shù) printf(“Volume = %.5fn”, volume); /按格式輸出Please input the radius of a ball: 1volume = 4/3r392字符串常量字符串常量用雙引號括起來的字符序列。this is a string x 12345字符串常量的存儲方式字符串中的字符存放在相鄰的存儲單元中,每個字符占用一個單元,在最后加上一個空字符(0)作為結束標識符。舉例輸入輸出和庫函數(shù)thisisastring0每個字符占一個字節(jié)結束標記
52、93字符串常量字符串常量和字符常量的區(qū)別字符x是基本型數(shù)據(jù)。字符串”x”是構造型數(shù)據(jù)。占用的存儲空間大小不同。輸入輸出和庫函數(shù)xx在內(nèi)存中占一個字節(jié)“x”x在內(nèi)存中占兩個字節(jié)094符號常量符號常量符號常量是用一個標識符表示的常量。定義規(guī)則#define 舉例輸入輸出和庫函數(shù)#define MAXSIZE 20#define WELCOME Welcome to you!編譯預處理器將會用替換以后出現(xiàn)的PI標識符。95符號常量為什么需要符號常量名字比數(shù)字包含的信息多。便于維護如果需要在多個地方用到同一個常量,而且必須改變它的值,則只需要修改其符號常量的定義。另一種定義符號常量的方法使用const
53、把一個變量聲明轉(zhuǎn)換成常量聲明。舉例輸入輸出和庫函數(shù)const int MAX_NUMBER = 30;MAX_NUMBER是只讀的。96輸入輸出輸入輸出是以計算機主機為主體而言的。輸出(Output):從主機向外部輸出設備輸出數(shù)據(jù)。輸入(Input):從外部通過輸入設備向主機輸入數(shù)據(jù)。輸入輸出和庫函數(shù)主機鍵盤磁盤光盤掃描儀顯示器打印機磁盤輸入輸出97輸入輸出流流(stream)按直線排列的字符序列每個序列包括0個或多個字符,并用換行符結尾ANSI C支持至少254個字符的序列所有的輸入/輸出都是用流來進行的。輸入輸出和庫函數(shù)S!ci源目的98標準輸入輸出流開始執(zhí)行程序時,3個流自動連接到程序上
54、標準輸入流(standard input)對應的源端設備:keyboard標準輸出流(standard output)對應的目的端設備:screen標準錯誤流(standard error)對應的目的端設備:screen操作系統(tǒng)允許這些流重定向到其它設備輸入輸出和庫函數(shù)type myprog.c prn輸出重定向符輸入重定向符99輸入輸出函數(shù)C語言中數(shù)據(jù)的輸入、輸出是由函數(shù)來實現(xiàn)的。字符輸入函數(shù):getchar()字符輸出函數(shù):putchar()格式輸入函數(shù):scanf()格式輸出函數(shù):printf()它們都屬于標準輸入輸出庫函數(shù),其原型(prototype)都在頭文件(header file
55、)中。輸入輸出和庫函數(shù)100字符輸入輸出putchar()函數(shù)getchar()函數(shù)使用說明程序中必須包含 頭文件輸入輸出和庫函數(shù)#include 101字符輸出putchar使用形式putchar(character);向標準輸出流輸出一個字符character使用說明character可以是以下數(shù)據(jù):字符型數(shù)據(jù)整型數(shù)據(jù)轉(zhuǎn)義字符輸入輸出和庫函數(shù)102字符輸出舉例(cw0302.c)輸入輸出和庫函數(shù)#include void main() char a; int b; a=B; b=79; putchar(a); putchar(n); putchar(b); putchar(n); putc
56、har(Y);BOY103字符輸入getchar使用形式variable = getchar();從標準輸入流讀取一個字符。使用說明只讀取一個字符。該字符可賦給字符變量、整型變量或作為表達式的一部分。輸入輸出和庫函數(shù)104字符輸入舉例(cw0303.c)輸入輸出和庫函數(shù)#include void main() char c; c = getchar(); putchar(c);aaabca989123105格式輸入輸出printf()函數(shù)scanf()函數(shù)使用說明程序中可以不明確指定包含 stdio.h 頭文件輸入輸出和庫函數(shù)#include 可以省略此命令106格式輸出printf使用形式p
57、rintf(, );按格式控制字符串規(guī)定的格式,向指定的輸出設備輸出輸出列表中的輸出項。使用說明格式控制字符串由雙引號括起來的字符串,用于指定輸出格式輸出列表需要輸出的數(shù)據(jù)列表,彼此間用逗號分隔輸出項可以是任意合法的表達式輸入輸出和庫函數(shù)107格式輸出格式控制字符串舉例輸入輸出和庫函數(shù)printf(“n=%5d,f=%5.2fn”, 3, 6.235)普通字符原樣輸出格式說明符(轉(zhuǎn)換規(guī)則)% 修飾符 格式字符指定數(shù)據(jù)的輸出格式108格式輸出格式字符輸入輸出和庫函數(shù)格式字符功 能d, i以十進制有符號形式輸出整數(shù)(正數(shù)不輸出符號)o以八進制無符號形式輸出整數(shù)(不輸出前綴)x, X以十六進制無符號
58、形式輸出整數(shù)(不輸出前綴)u以十進制無符號形式輸出整數(shù)f以小數(shù)形式輸出單、雙精度實數(shù)e, E以指數(shù)形式輸出單、雙精度實數(shù)g, G選用%f和%e格式中輸出寬度較短的一種,不輸出無意義的零c以字符形式輸出,輸出一個字符s輸出字符串109格式輸出格式修飾符輸入輸出和庫函數(shù)修飾符意 義l用于長整型和長雙精度實型數(shù)據(jù),可加在格式字符 d、o、x、u、f 前面。m(正整數(shù))數(shù)據(jù)最小寬度。.n(正整數(shù))對于實數(shù),表示輸出n位小數(shù);對于字符串,表示截取的字符個數(shù)。-輸出的數(shù)字或字符在域內(nèi)向左靠,右邊填空格。#當整數(shù)以八進制或十六進制形式輸出時,輸出前綴。可加在格式字符o、x前面。110格式輸出格式說明符小結輸
59、入輸出和庫函數(shù)格式字符形 式d, i%d,%md,%-md,%ld,%mld,%-mld,%i,o%o,%mo,%-mo,%lo,%mlo,%-mlo,%#o,x, X%x,%mx,%-mx,%lx,%mlx,%-mlx,%#x,u%u,%mu,%-mu,%lu,%mlu,%-mluf%f,%mf,%m.nf,%lf,e, E%e,%me,%m.ne,g, G%gc%cs%s,%ms,%m.ns,要輸出%就用%111格式輸出舉例()輸入輸出和庫函數(shù)void main() int a=97,b=-1; float f=123.4; printf(“%d,%cn”,a,a); printf(“%d
60、,%o,%x,%un”,b,b,b,b); printf(“%f,%e,%gEND”,f,f,f);97,a-1,177777,ffff,655351 1 1 1 1 1 1 11 1 1 1 1 1 1 1BC112格式輸出舉例()輸入輸出和庫函數(shù)void main() int a=1,b=2,c=3; printf(“%d,%d,%d,%dn”,a,b,c); printf(“%d,%d,%dn”,a,b,c,a+b+c);1,2,3,8981,2,3格式說明符和輸出項在數(shù)量和類型上應該一一對應。113格式輸入scanf使用形式scanf(, );按格式控制字符串規(guī)定的格式,從指定的輸入設
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 互聯(lián)網(wǎng)+在儀器儀表行業(yè)的應用案例考核試卷
- 廢棄物肥料化處理經(jīng)濟效益分析考核試卷
- 保健品市場社會責任信息披露規(guī)范考核試卷
- 財務部門個人2024年終工作總結(30篇)
- 印刷品設計的創(chuàng)意與創(chuàng)新考核試卷
- 財務會計求職信11篇 關于財務會計崗位的求職信
- 2025年中國PU高固透明底漆數(shù)據(jù)監(jiān)測研究報告
- 2025年中國LCD模塊數(shù)據(jù)監(jiān)測研究報告
- 2025年中國EAS服務器系統(tǒng)數(shù)據(jù)監(jiān)測報告
- 2025年中國90°內(nèi)絲卡套彎頭數(shù)據(jù)監(jiān)測研究報告
- 2024年江西省公安廳招聘警務輔助人員考試真題
- 2025年湖北省普通高中學業(yè)水平合格性考試模擬(三)歷史試題(含答案)
- 2025年高考全國二卷數(shù)學高考真題解析 含參考答案
- 2025年普通高等學校招生全國統(tǒng)一考試數(shù)學試題(全國一卷)(有解析)
- 2025年日歷表全年(打印版)完整清新每月一張
- GB/T 4744-2013紡織品防水性能的檢測和評價靜水壓法
- 國開經(jīng)濟學(本)1-14章練習試題及答案
- 動火安全作業(yè)票填寫模板2022年更新
- 廣東某火力發(fā)電廠 (4×600MW) 項目建議書
- 林產(chǎn)化工專業(yè)人才培養(yǎng)方案
- 天津市2020-2021學年高二化學下學期期末聯(lián)考試題(含答案)
評論
0/150
提交評論