




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、 哈爾濱工業大學威海C Programming Language C 語言程序設計 C語言的祖師爺Dennis M. Ritchie/Ritchie漫畫像C is quirky, flawed, and an enormous success.C詭異離奇、缺陷重重,卻獲得巨大成功Who am i?姓名:徐永東聯系方式: :Email: 推薦使用Email方式交流答疑課件/徐永東 用戶名:test (pub),密碼:123456提交作業和實驗報告Hu r u?用過計算機嗎?用來干什么?學過編程嗎?哪些語言?課程特點緊密圍繞在以C語言為核心的課中央周圍,進行計算機科學的啟蒙教育,重點在于程序設計樂
2、趣與能力重于知識,考試是?,成績是!自學、自主、自信、自樂人人做“稀飯課程說明課程性質:必修課學時安排:42 30考核方式:筆試 70%實驗 20%+平時10%平時要求:出勤 作業課程網站:見介紹課堂幫規不礙他人,為所欲為可隨時進入,不可任意外出可大聲喧嘩,不可竊竊私語可伏案小睡,不可鼾聲大作可眉來眼去,不可動手動腳喧嘩有獎,自由萬歲藐視教師,鄙視書本課外幫規人手一書,不要重樣禁止提問,大方討論說出你對問題的看法思想共享,程序保密藐視教師,鄙視書本必備知識中文閱讀,英文查字典www瀏覽,下載,搜索收發emailWindows根本操作文件管理忠告不要溺愛本課,而冷落其它!程序演示welcome.
3、c程序演示welcome.c程序演示pro1.c程序演示pro1.c程序演示music1.c程序演示music1.c程序演示music.c程序演示music.c程序演示fk.c程序演示fk.c程序演示連連看C語言的四種常用編程環境DOS狀態下:Turbo C 2.0, Turbo C&C+ 3.0Windows狀態下:WIN-TC, Visual C+ 6.0, Visual C+.NetTurbo C 2.0Turbo C & C+ 3.0WIN-TCVisual C+ 6.0 (可視化的)編程語言的開展史人與計算機的對話兩個說不同母語的人的對話方式:一方學另一方的語言雙方都學習一種第三方語
4、言人與計算機的對話方式:計算機學習人的語言自然語言理解人學習計算機的語言學習第三方語言機器語言計算1+1101110000000000100000000000001010000000100000000匯編語言MOV AX, 1101110000000000100000000ADD AX, 1000001010000000100000000BASIC語言PRINT 1+1C語言#include main()printf(%dn, 1+1);C語言的創世紀一切從一個叫“Space Travel的電子游戲開始為了讓他的游戲能在PDP-7上運行,Ken Thompson用匯編語言給PDP-7寫了一個操
5、作系統UNIX匯編太不好用了,Thompson需要高級語言試驗了一些高級語言,包括Fortran,都不理想他在BCPL根底上,自己設計了一個B語言UNIX開始開展,B也不夠用了Dennis Ritchie參加,把B改造成C開始用C重寫UNIX流行語言排行榜 C語言與程序設計是計算機專業和非計算機專業的一門技術根底選修課程,大學一年級或大二年級開設。 通過本課程的學習使學生更好地了解和應用計算機,培養學生應用計算機獨立解決問題的能力,讓學生真正掌握一門使用計算機的語言工具,為學生今后無論是從事計算機或非計算機工作都奠定了良好的、扎實的計算機語言根底。你應該知道 本課程的性質、目的與任務 我們將遵
6、照國家教委考試中心制定的 “二級C語言考試大綱 來進行教學,所以在內容上緊扣大綱考試要求,在語言上力求通俗易懂、循序漸進。 你應該知道你應該知道自主學習重視上機實踐上機要求禁做與課程學習無關的事情看懂編譯信息,逐步學會各種調試方法算法及程序代碼在上機前搞定 本課程學習方法講課順序請翻開課本。第一章 簡單C語言設計簡單的C程序實例 /* 一個簡單的C程序實例 */*purpose: I have a dreamauthor : Zhang Weigangcreated: 2021/06/30 21:18:08*/#include #include void main(void)int nNumb
7、er1;nNumber1 = 1;printf(“Hello C language!n);printf(“I have a dream that one day I will be skillful in C programming!n);printf(“I have a dream that one day I will be a famous computer scientist!n);printf(“I have a dream that one day I will solve the Goldbachs conjecture problem and “prove that %d +
8、%d = %d by using C!n, nNumber1, nNumber1, 2);printf(“I hava a dream today!n);Hello C language!I have a dream that one day I will be skillful in C programming!I have a dream that one day I will be a famous computer scientist!I have a dream that one day I will solve the Goldbachs conjecture problem an
9、d prove that 1 + 1 = 2 by using C!I hava a dream today!X1 起止端點 輸入/輸出 一般處理 預定義處理 條件判斷 連接點 流程線 注釋框用程序流程圖來描述程序End程序流程圖描述剛剛的程序Begin變量聲明變量初始化輸出 字符串1輸出 字符串2輸出 字符串3輸出 字符串4與變量輸出 字符串5簡單的C程序實例 /* 一個簡單的C程序實例 */*purpose: I have a dreamauthor : Zhang Weigangcreated: 2021/06/30 21:18:08*/#include #include void ma
10、in(void)int nNumber1;nNumber1 = 1;printf(“Hello C language!n);printf(“I have a dream that one day I will be skillful in C programming!n);printf(“I have a dream that one day I will be a famous computer scientist!n);printf(“I have a dream that one day I will solve the Goldbachs conjecture problem and
11、“prove that %d + %d = %d by using C!n, nNumber1, nNumber1, 2);printf(“I hava a dream today!n);注釋翻開另一個文件主函數名 變量聲明語句 賦值語句 函數調用語句 C程序結構 Hello C language!I have a dream that one day I will be skillful in C programming!I have a dream that one day I will be a famous computer scientist!I have a dream that
12、one day I will solve the Goldbachs conjecture problem and prove that 1 + 1 = 2 by using C!I hava a dream today!C程序結構 簡單程序擴展 計算器解決方案 (1) 變量聲明:聲明的變量用于存放數據;(2) 變量初始化:通過變量賦值或通過鍵盤輸入給出; (3) 輸出結果:將結果輸出到屏幕或窗口;(4) 在對變量初始化時,要保證作除法運算有意義,即保證除數不為零;(5) 取余運算僅對于整數有意義。計算過程實現及分析 #include #include void main(void)int l
13、Operator,rOperator;/* 定義兩個整型變量,用于存放左右操作數 */int nResult1,nResult2,nResult3,nResult4,nResult5;/* 定義五個整型變量,用于存放結果 */lOperator = 4;rOperator = 5;nResult1= lOperator+rOperator;/* 計算lOperator與rOperator相加并將和存入nResult1中 */nResult2= lOperator-rOperator;/* 計算lOperator與rOperator相減并將差存入nResult2中 */nResult3= lOp
14、erator*rOperator;/* 計算lOperator與rOperator相乘并將積存入nResult3中 */nResult4= lOperator/rOperator;/* 計算lOperator與rOperator相除并將商存入nResult4中 */nResult5= lOperator%rOperator;/* 算lOperator與rOperator的模并將余數存入nResult5中 */printf(“ %d “, nResult1); /* 將和顯示在屏幕上 */printf(“ %d “, nResult2);/* 將差顯示在屏幕上 */printf(“ %d “,
15、nResult3);/* 將積顯示在屏幕上 */printf(“ %d “, nResult4);/* 將商顯示在屏幕上 */printf(“ %d “, nResult5);/* 將余數顯示在屏幕上*/關于根本整型 int long int unsigned int float double char常用的數據類型與存儲方式 數組 文件 結構體 共用體void基本類型構造類型指針類型空類型數據類型Data Type數據類型基本類型構造類型指針類型空類型整型實型(浮點型)字符型枚舉類型數組類型結構體類型共用體類型單精度實型雙精度實型基本整型長整型短整型無符號整型數據類型多型遍地走,安知我多大?
16、數據為什么要區分類型?不同類型的數據代表不同的數據表示形式合法的取值范圍占用內存空間大小可參與的運算種類 根本數據類型int整數,在目前絕大多數機器上占4個字節。TC2中是2個字節float單精度浮點數,一般是4個字節長double雙精度浮點數,一般是8個字節長char字符,一般是1個字節長用來表示256個ASCII字符,或者0255的整數數據類型修飾符shortshort int,短整數,一般2個字節長。通常簡寫為shortlonglong int,長整數,一般是4個字節長。通常簡寫為longlong double,長雙精度高精度浮點數,一般是10個字節長。signed用來修飾char、in
17、t、short和long,說明他們是有符號的整數正整數、0和負整數。一般缺省都是有符號的,所以這個修飾符通常省略unsigned用來修飾char、int、short和long,說明他們是無符號的整數正整數和0 1 byte 在16位環境中(DOS),占用 2 個字節的空間 1 byte int -3276832767 在32位環境中(Windows等),占用 4 個字節的空間 1 byte int a; a=9; 1 byte Do you know -9 ? 00001001 00 0000 0 000001001 a92000變量名地址編號2001 原碼: 用二進制的最高位表示數符 用 0
18、,表示正數 用 1,表示負數 數值局部那么為 真值的絕對值常用的 有三種表示方法 原碼機器數反碼補碼 補碼: 那么先將其表示成原碼,然后除符號外,再逐位取反 即0變1,1變0最后再加上1。 例如: 求 2 的補碼即-2在內存中的儲存方式 1 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0原碼負數以補碼形式存儲反碼補碼 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 x-y=x+(-y) 補碼: 神奇地化減法為加法。 例如: 求 7-6 = 7+-6 0 0 0 0 0 0 0 0 0 0 0 0 0 1
19、 1 17-6補碼結果=1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1超出取值范圍會怎樣?TC2中int的范圍是-215215-1如果我們給它一個小于-215或者大于215-1的數會如何呢?小蛇能吞下大象嗎?溢出Overflow造成的危害一臺安裝了Windows 95/98的機器,如果連續運行49.7天沒有重新啟動,可能死機 原因:Windows自啟動時刻起,有一個計數器,記錄系統已經運行了多少毫秒。這個計數器是個unsigned long 類型的變量unsigned long的最大值是:4294967295一
20、天有 24*60*60*1000 = 86400000毫秒4294967295 / 86400000 = 49.71026961805當49.7天的時候,此計數器會溢出,引起死機使用變量要注意不要對變量所占的字節數想當然用sizeof獲得變量或者數據類型的長度sizeof(int);2_Sizeof 1 byte 在計算機中占用 4 個字節的空間 1 byte 1 byte 1 byte float 此空間只能用于存放 實型數據 即32位二進制數 小數局部包括符號3個字節 指數局部包括指數的符號1字節 以指數形式存儲例如: float x; +.314159261 指數形式:0.3141592
21、6E1 1 byte 3 byte 小數局部 指數數符x=3.1415926; x 0.31415926E1 1 byte char 用于表示字符型數據 在計算機中占用 1 個字節的空間 例如:char ch; ch=a; 單引號 雙引號 a “studentAmerican Standard Code for Information Interchange ASCII 碼 a - 97 (ASCII) 例如: 27=128 0-9, A-Z, a-z 及各種運算符號、標點和控制符號 01100001變量與常量常量常數不動如山是一種在程序中保持固定類型和固定值的數據。變量我的地盤我做主是在程序
22、執行過程中可以改變、賦值的量。是由編程人員自己定義的。變量的的命名規那么 lOperator,rOperator,nResult為變量標識符,變量的名字遵循標識符的命名規那么:(1) 由英文字母、數字和下劃線組成,其必須以英文字母或下劃線開頭;(2) 不允許使用關鍵字作為標識符的名字;(3) 標識符命名應做到“見名知意;(4) 標識符區分大小寫。變量聲明的一般形式類型說明符 變量名標識符1,變量名標識符2,.;int lOperator,rOperator;技巧:在使用變量時,必須遵循先定義、后使用的原那么。 關鍵字 關鍵字Keyword又稱保存字,它們是C語言中預先規定的具有固定含義的一些單
23、詞,例如:int, return等。C語言提供的關鍵字總共有32個,詳見附錄C。C程序常見符號分類 關鍵字Keyword 又稱為保存字,C語言中預先規定的具有固定含義的一些單詞 標識符Identifier系統預定義標識符用戶自定義標識符函數名、變量名 運算符Operator: 詳見P17 分隔符Separator 空格、回車/換行、逗號等 其它符號 大花括號“和“通常用于標識函數體或者一個語句塊 “/*和“*/是程序注釋所需的定界符 數據Data變量Variable常量Constant 計算過程實現及分析 #include #include void main(void)int lOperat
24、or,rOperator;/* 定義兩個整型變量,用于存放左右操作數 */int nResult1,nResult2,nResult3,nResult4,nResult5;/* 定義五個整型變量,用于存放結果 */lOperator = 4;rOperator = 5;nResult1= lOperator+rOperator;/* 計算lOperator與rOperator相加并將和存入nResult1中 */nResult2= lOperator-rOperator;/* 計算lOperator與rOperator相減并將差存入nResult2中 */nResult3= lOperator
25、*rOperator;/* 計算lOperator與rOperator相乘并將積存入nResult3中 */nResult4= lOperator/rOperator;/* 計算lOperator與rOperator相除并將商存入nResult4中 */nResult5= lOperator%rOperator;/* 算lOperator與rOperator的模并將余數存入nResult5中 */printf(“ %d “, nResult1); /* 將和顯示在屏幕上 */printf(“ %d “, nResult2);/* 將差顯示在屏幕上 */printf(“ %d “, nResul
26、t3);/* 將積顯示在屏幕上 */printf(“ %d “, nResult4);/* 將商顯示在屏幕上 */printf(“ %d “, nResult5);/* 將余數顯示在屏幕上*/有關表達式與表達式語句 表達式由函數、變量、運算符、常量等組成,每個表達式都有具體的數值。表達式+分號構成了表達式語句。(1) 簡單賦值運算符記為“=,它的作用是將一個表達式的值賦給一個變量。由“=連接的式子稱為賦值表達式。其一般形式為:變量=表達式(2) 賦值運算符是右結合性運算符。如x=y=z,由于“=的右結合性,應先執行y=z,再執行x=(y=z)運算。 有關表達式與表達式語句(3) 如果賦值運算符
27、兩邊的數據類型不相同,系統將自動進行類型轉換,即把賦值號右邊的類型換成左邊的類型。(4) 在程序中常常需要對變量賦初值,以便使用變量。在定義時賦以初值的方法,稱為初始化。為了方便,在變量說明中賦初值的一般形式為:類型說明符 變量1 = 值1,變量2 = 值2,;有關算術運算符 (1) 描述數據運算的特殊符號稱為運算符。 (2) 算術運算符的優先級:當不同優先級的運算符進行混合運算時,按照由高到低運算符的優先級進行計算。(3) 算術運算符的結合性:同一優先級的算術運算符進行混合運算時,結合性是按自左至右,即先左后右。 技巧:在數值運算時,一般先考慮運算符的優先級,再考慮結合性。 計算過程實現及分
28、析 #include #include void main(void)int lOperator,rOperator;/* 定義兩個整型變量,用于存放左右操作數 */int nResult1,nResult2,nResult3,nResult4,nResult5;/* 定義五個整型變量,用于存放結果 */lOperator = 4;rOperator = 5;nResult1= lOperator+rOperator;/* 計算lOperator與rOperator相加并將和存入nResult1中 */nResult2= lOperator-rOperator;/* 計算lOperator與r
29、Operator相減并將差存入nResult2中 */nResult3= lOperator*rOperator;/* 計算lOperator與rOperator相乘并將積存入nResult3中 */nResult4= lOperator/rOperator;/* 計算lOperator與rOperator相除并將商存入nResult4中 */nResult5= lOperator%rOperator;/* 算lOperator與rOperator的模并將余數存入nResult5中 */printf(“ %d “, nResult1); /* 將和顯示在屏幕上 */printf(“ %d “,
30、 nResult2);/* 將差顯示在屏幕上 */printf(“ %d “, nResult3);/* 將積顯示在屏幕上 */printf(“ %d “, nResult4);/* 將商顯示在屏幕上 */printf(“ %d “, nResult5);/* 將余數顯示在屏幕上*/有關函數printf()printf 函數調用的一般形式為: printf(“格式控制字符串,輸出表列);結果分析 編譯運行程序compute.c,顯示程序運行結果,如圖1-12所示。圖1-12 compute.c程序運行結果格式輸出函數格式輸出函數printf(格式控制字符串, 輸出參數表);輸出假設干個任意指定
31、類型的數據例子:printf(“Hello, World!n);printf(“%d,%dn,a,b);printf(“sum=%dn,sum);格式輸出函數printf(a=%d b=%f, a, b); 函數名輸出表列普通字符格式說明格式控制格式說明:%普通字符原樣輸出x = 34; y = 3.14;Printf(“x =%d,y=%fn, x, y);輸出:x = 34,y = 3.14%d 以帶符號十進制整數輸出%o 以八進制無符號整數輸出無前導0%x 以十六進制無符號整數輸出無前導0 x%u 以十進制無符號整數輸出%c 以字符形式輸出單個字符%s 輸出一個字符串%f 以小數形式輸出
32、浮點數6位小數%e 以標準指數形式輸出6位小數%g 選用%f,%e中輸出寬度較小的一種格式printf格式字符P315l 長整型整數,加在d、o、x、u前L long double型數,加在f、e、g前m 表示數據占用的最小寬度例如:%3d 數據寬度大于m,按實際寬度輸出 數據寬度小于m時,補空格n 對實數表示輸出n位小數例如:%5.3d 對字符串表示最多輸出的字符個數- 改變輸出內容的對齊方式 缺省為右對齊printf附加格式說明符整型數據的輸出printf(格式控制,輸出參數表;格式控制說明- %.%d: 以十進制形式輸入、輸出整數%o: 以八進制形式輸入、輸出整數%x: 以十六進制形式輸
33、入、輸出整數#include void main() printf(“%d, %o, %xn, 10, 10, 10); printf(“%d, %d, %dn, 10, 010, 0 x10); printf(“%d, %xn,012, 012);001010運行結果:10, 12, a10, 8, 1610, a#include void main() int a, b; scanf (“%o %d, &a, &b); printf (“%d, %5dn, a, b); printf (“%x, %dn, a, b);輸入17 17運行結果17f 17:b的ASCII碼98#include
34、 main() printf(“%c,%dn,b, b); printf(“%c,%dn,98, 98); printf(“%c,%dn,97, b-1);運行結果b 98b 98a 97關于實型 實型家族包括: 單精度型(float)和雙精度型(double)。實型的取值范圍與值的精度與機器有關,一般float占4字節(32位),提供7位有效數字;double占8字節,提供15-16位有效數字。 程序清單1-3 division.c/* 一個關于除法運算符的程序實例 */*purpose: 驗證/運算符的操作數都為整數或有個為實數的結果是不同的author : Wangweicreated:
35、 2021/07/10 15:19:20*/#include #include void main(void)printf(“ %d,%dn “, 20/7, -20/7);printf(“ %f,%fn “, 20.0/7, -20.0/7);注意:求余運算符(%)要求參與運算的量均為整型,運算的結果等于兩數相除后的余數。兩整數相除結果仍為整數,小數局部全部舍去,并非四舍五入。實型數據的輸出float和double使用相同的格式控制說明%f 以小數形式輸出浮點數,保存6位小數%e 以指數形式輸出 1位整數.5位小數e 3位指數#include Void main() float f = 12
36、3.45; double d = 3.1415926; printf(“%f, %en, f, f); printf(“%f, %en, d, d); printf(“%5.3f, %5.2f, %.2fn, d, d, d);一共5位,小數3位,小數點一位運行結果為:123.450000, 1.23450e+023.141593, 3.14159e+003.142, 3.14, 3.14#include main()float f1 = 100.15799, f2 = 12.55, f3 = 1.7;int n1 = 123, n2 = 45, n3 = 6; printf(printf W
37、ITHOUT width or precision specifications:n);printf(%fn%fn%fn, f1, f2, f3);printf(%dn%dn%dn, n1, n2, n3);printf(printf WITH width and precision specifications:n);printf(%5.2fn%6.1fn%3.0fn, f1, f2, f3);printf(%5dn%6dn%3dnn, n1, n2, n3);再看一個例子深入解讀1. 細節的解讀數據是程序處理的對象,數據可以依其本身的特點進行分類。 在程序中,我們使用變量這個抽象實體來存儲
38、計算機中的數據,變量的使用要遵從先聲明后使用的規那么。當為不同的變量賦值的時候,就必須使用賦值運算符。 程序清單overflow.c 程序1-4/* 一個關于整數溢出的程序實例 */*purpose: 數據超過表示范圍就會溢出author : Yan Jianencreated: 2021/07/10 15:58:22*/#include #include void main(void) short int iNum;iNum=32767;iNum=i_num+1;printf(“ num=%dn “, iNum); 查看一下結果是什么,思考一下為什么會出現這種情況呢? 2. 如何解決一個問題
39、第一步,分析問題。 第二步,給出解決問題的方法和步驟。 第三步,代碼編寫。 第四步,正確性驗證。 3. 編程風格的問題程序清單1-5style.c /* 一個代碼風格混亂的程序實例 */*purpose: 代碼混亂的弊端author : Yan Jianencreated: 2021/07/10 16:21:23 */#include #include long b, c=2800, d, e, f2801, g;void main(void)for(; b-c; ) fb+ = 10000/5;for(; d=0, g=c*2; c-=14, printf(“%.4d,e+d/10000), e=d%10000) for(b=c;d+=fb*10000,fb=d%-g,d/=g-,-b;d*=b);getch();能讀懂嗎?#include /* 對 fahr = 0, 20, ., 300 打印華氏溫度與攝氏溫度對照表
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
評論
0/150
提交評論