江淮學院72學時全套講義打印稿.ppt_第1頁
江淮學院72學時全套講義打印稿.ppt_第2頁
江淮學院72學時全套講義打印稿.ppt_第3頁
江淮學院72學時全套講義打印稿.ppt_第4頁
江淮學院72學時全套講義打印稿.ppt_第5頁
已閱讀5頁,還剩202頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1,概 述,說明:教育部關(guān)于大學生計算機能力的統(tǒng)一要求。 目的: (1)掌握C語言的語法知識 (2)掌握C語言程序設(shè)計方法 (3)鍛煉嚴密的邏輯思維能力,提高科學研究的素質(zhì) 與前導課程關(guān)系【大學計算機基礎(chǔ)】 計算機系統(tǒng)的硬件組成(參看2.1.2) 2、8、10、16進制整數(shù)的轉(zhuǎn)換(參看2.2.1、2.2.2) 數(shù)據(jù)在計算機中的存放形式(參看2.3.1、2.3.2) 計算機基本操作(參看4.2.1、4.2.2、4.2.3) WORD編輯(參看5.2.1、5.2.2、5.2.3) 知識結(jié)構(gòu): (1)自然語言的知識結(jié)構(gòu) (2)C語言的知識結(jié)構(gòu) (3)教材的知識結(jié)構(gòu),2,自然語言的知識結(jié)構(gòu),C語言的知識結(jié)構(gòu),教材的知識結(jié)構(gòu),3,學習方法提要: (1)詞類、句型、程序結(jié)構(gòu) 分析、記憶 (2)程序設(shè)計與調(diào)試 上機實驗、總結(jié) (3)常用算法與標準程序段 分析、實驗、記憶 考試要求: (1)時間:期中考試、期末考試 (2)范圍:課堂教學的所有內(nèi)容、作業(yè)中的習題 (3)題型:單項選擇題(10題20分)、填空題 (10空20分) 程序閱讀題( 4題20分)、程序填空題( 2題10分) 程序設(shè)計題( 3題30分) 教學要求: (1)課堂教學方式:講解總結(jié)實例分析提問討論 (2)實驗教學方式:(前)準備(中)自主(后)總結(jié)與記錄 (3)課堂紀律: 按時不出聲 (4)作業(yè)通過實驗來驗證其正確性。,4,第1章 C語言概述, C語言概況 C程序概況 運行C程序的步驟與方法與(重點) 補充 計算機程序 計算機程序 一串計算機能識別的、可執(zhí)行的指令。 【例】 操作系統(tǒng) 專家編好大家使用的計算機程序 本班成績統(tǒng)計程序 自己編寫自己使用的計算機程序。 計算機語言 計算機語言 寫計算機程序所遵守的某種語法規(guī)則的集合(指令的集合)。 【三個階段】機器語言 又名二進制語言,用0和1組成指令(含操作和數(shù)據(jù)) 符號語言 又名匯編語言,用指定的單詞和數(shù)字組成指令 高級語言 用接近人類的自然語言和數(shù)學公式組成指令(語句) 高級語言的發(fā)展 非結(jié)構(gòu)化語言、結(jié)構(gòu)化語言(如C)、面向?qū)ο蟮恼Z言(如C+) 1.1 C語言出現(xiàn)的歷史背景 【發(fā)展過程】 60年 +硬件處理 63年 簡化 67年 簡化 70年 擴充 72、73年 可移植 77年 標準化 ALGOL CPL BCPL B C 獨立C 78年 標準化 83年 標準化 89 標準化 90年 標準化 99年 舊標準C 83ANSI C C89 ISO C(c89) C99 (美國國家標準) (美國國家標準) (國際標準化組織) (國際標準化組織) 【編譯程序】Turbo C、Quick C、Microsoft C、BORLAND C、C+、VC+,5,1.2 C語言的特點【略】邊學邊理解 1.3 簡單C語言程序介紹 【例1】從鍵盤上輸入兩個實數(shù),輸出他們的和。 #include “stdio.h“ /* 將標準輸入輸出函數(shù)包含到本程序中 */ void main() /* 主函數(shù)的標記,main稱為主函數(shù)名 */ float a,b,s; /* 定義實型變量a、b、s */ scanf(“%f,%f“, /* 輸出變量s中的實數(shù) */ /* 主函數(shù)的結(jié)束,前面的表示主函數(shù)的開始, 后面的表示主函數(shù)的結(jié)束 */,6,【例2】從鍵盤上輸入兩個整數(shù),求并輸出他們中的大者和小者。 #include int max(int x,int y) /* 非主函數(shù)的標記,max是函數(shù)名、x和y是函數(shù)參數(shù) */ int z; /* 定義本函數(shù)用到的變量z */ if (xy) /* 如果x大于y*/ z=x; /* 將參數(shù)x中的整數(shù)送到變量z中 */ else /* 否則 */ z=y; /* 將參數(shù)y中的整數(shù)送到變量z中 */ return(z); /* 返回變量z中的整數(shù),即參數(shù)x和y中的大者 */ /* 本函數(shù)的結(jié)束標記 */ int min(int x,int y) /* 非主函數(shù)的標記,min是函數(shù)名、x和y是函數(shù)參數(shù) */ int z; if (xy) z=x; else z=y; return(z); void main() int a,b,s; /* 定義整型變量a、b、s */ ; scanf(“%d,%d“,/* 輸出變量s中的整數(shù) (兩個整數(shù)中的小者) */ ,7,關(guān)于C程序的初步小結(jié): (1)組成C程序的符號都是鍵盤上符號,即ASCII代碼字符集的字符(參看附錄A P364)。 其他符號(如漢字)只能出現(xiàn)在“ “中間或/* */中間。 (2)總是有一個,并且只能有一個名為“main”的主函數(shù); 其他函數(shù)稱為非主函數(shù),可以沒有,也可以有很多個。 (3)任何C程序的結(jié)構(gòu)都是下列幾種之一: 函數(shù)1 主函數(shù) 函數(shù)1 函數(shù)2 函數(shù)1 . . 函數(shù)2 主函數(shù) 主函數(shù) . . 函數(shù)n (4)程序的執(zhí)行總是從主函數(shù)體的第1條語句開始,到最后一條語句結(jié)束 非主函數(shù)的執(zhí)行,只能利用函數(shù)調(diào)用來執(zhí)行。 (5)任何函數(shù)的基本結(jié)構(gòu)都是這樣的: 函數(shù)名(函數(shù)參數(shù)1,函數(shù)參數(shù)2,.)【參數(shù)可以沒有】 函數(shù)中所使用的變量的定義; 【可以沒有】 輸入某些變量的值; 【可以沒有】 對參數(shù)和變量的加工處理; 【可以沒有】 輸出某些變量的值; 【可以沒有】 返回某些變量的值; 【主函數(shù)沒有、非主函數(shù)可以沒有】 【花括號及括住的部分稱為函數(shù)體、前面稱為函數(shù)頭】 (6)語句的最后一定有“分號”,一行可以寫多條語句。一個語句可以寫在多行上。 最好的書寫格式是縮格對齊方式,稱為“結(jié)構(gòu)化”書寫格式。 (7)輸入、輸出使用系統(tǒng)函數(shù)scanf()和printf()來完成,程序的開頭要加 #include 或 #include “stdio.h“ (我們常用) (8)注釋是用“/*”和“*/”括住的任何一串符號??梢猿霈F(xiàn)在程序的任何一處。,8,1.4 C程序的上機調(diào)試步驟與方法【用VC+6.0編譯程序】 【預備知識】 調(diào)試窗口 VC的主窗口 運行窗口 運行程序時會自動彈出一個窗口, 接收輸入數(shù)據(jù),并顯示輸出結(jié)果。 基本操作方法(后面用到處再介紹) 編譯、調(diào)試程序的過程是在Windows窗口 下進行的,應掌握Windows的基本操作方法。 例如,菜單驅(qū)動方法、工具按鈕的使用、 熱鍵、對話框操作、文本框輸入、鼠標操作等。 編輯修改源程序和WORD操作類似。 【調(diào)試程序的步驟(參看1.4.1節(jié)) 】 參看右圖 【調(diào)試程序的方法 】,9,第一步:開機、啟動VC+6.0 【建議:在D盤根目錄下建一個自己的文件夾】 【方法】通電,啟動WINDOWS; 依次選取“開始”、“程序”、“Microsoft Visual C+ 6.0 ” 再單擊“Microsoft Visual C+6.0”菜單;將出現(xiàn)下列VC+主窗口。 也可以直接雙擊桌面上的VC+6.0的圖標。 工作區(qū) 顯示當前工作區(qū)的名稱,以樹狀結(jié)構(gòu)顯示工程文件夾及其中的源程序名。 編輯區(qū) 顯示正在編輯調(diào)試的源程序。 輸出區(qū) 顯示編輯區(qū)中的源程序在編譯、連接時的錯誤信息。,10,常用菜單 File (文件) New (新建) 創(chuàng)建源程序文件。 Open (打開) 調(diào)入已經(jīng)建立的源程序文件。 Close Workspace (關(guān)閉工作區(qū)) 關(guān)閉當前工作區(qū),結(jié)束某個程序的調(diào)試。 Save(保存) 保存編輯區(qū)的文件(存盤)。 Edit(編輯) Cut (剪切) 刪除選中的陰影區(qū)并復制到剪貼板中。 Copy (復制) 將陰影區(qū)復制到剪貼板中。 Paste (粘貼) 將剪貼板中內(nèi)容插入到光標處。 【注】選定陰影區(qū)的方法是用鼠標拖曳。 Build(創(chuàng)建) Compile (編譯)【Ctrl+F7 】對工作區(qū)的源程序進行編譯生成OBJ文件。 Build (創(chuàng)建) 【F7 】 對工作區(qū)的源程序進行連接生成EXE文件。 Execute (執(zhí)行) 【Ctrl+F5 】運行編譯連接后的可執(zhí)行程序(EXE文件)。,11,第二步:建立新的源程序 【方法】 執(zhí)行菜單命令“File | New”, 在彈出的對話框中單擊“Files”標簽,顯示結(jié)果如下圖。 選取“C+ Source File”。 在“Location”文本框中選取或輸入源程序所在的路徑。例如“D:CCW” 在“File”文本框輸入源程序文件名,擴展名選C。例如“P1.C” 。 單擊“Ok”按鈕。光標將出現(xiàn)在編輯區(qū),可以輸入源程序清單。 注:建議文件名構(gòu)成 姓名拼音章號_題號.C 如CCW6_5.C,12,第三步 調(diào)試舊的源程序 【方法】 執(zhí)行菜單命令“File | Open”或工具按鈕 , 將彈出如圖所示的對話框。 單擊“查找范圍”文本框右邊的向下箭頭按鈕, 選定存放源程序所在的文件夾。 在下面的列表框中選定“源程序”文件。例如“P2.C”。 單擊“打開”按鈕。 源程序清單將出現(xiàn)在主窗口的編輯區(qū),可以對其進行編輯修改與調(diào)試。,13,第四步 編輯源程序清單 【方法】同WORD操作?!究梢允褂脻h字,修改源程序時一定要回到英文輸入】。 第五步 存盤 【方法】執(zhí)行菜單命令“File | Save”或 按對應工具按鈕 。 第六步 編譯生成中間代碼文件(.OBJ) 【方法】 執(zhí)行菜單命令“Build | Compile”或熱鍵“Ctrl+F7”或常用工具 。 此時將彈出一個對話框,單擊“是”按鈕。 在輸出區(qū)將顯示編譯后的結(jié)果。 【說明】無錯誤:在輸出區(qū)顯示錯誤條數(shù)(0)、警告性錯誤條數(shù)(0); 有錯誤:在輸出區(qū)顯示錯誤條數(shù)、警告性錯誤條數(shù)、 以及出錯的程序行數(shù)和原因。(有警告性錯誤可以連接!) 第七步 連接生成可執(zhí)行文件(.EXE) 【方法】 執(zhí)行菜單命令“Build | Build ”或按熱鍵“F7”或按常用工具 。 在輸出區(qū)將顯示連接后的結(jié)果。 【說明】無錯誤:在輸出區(qū)顯示錯誤條數(shù)(0)、警告性錯誤條數(shù)(0); 有錯誤:在輸出區(qū)顯示錯誤條數(shù)、警告性錯誤條數(shù)、 以及出錯的原因。,14,第八步 運行目標程序 【方法】 單擊菜單命令“Build | Execute ”?;驘徭I“Ctrl+F5”或常用工具 。 【說明】 程序運行時,會自動彈出一個“運行窗口”。 如果程序沒有輸入,則窗口中將顯示程序運行的輸出結(jié)果; 如果程序有輸入, 則窗口中將有光標閃爍,等待輸入。 程序運行結(jié)束后,窗口中將顯示“Press any Key to Continue”, 按任何鍵將退出“運行窗口”,返回VC主窗口。 第九步 調(diào)試下一個程序【經(jīng)常忘了這一步,造成錯誤或死機!】 【方法】 執(zhí)行菜單“File|Close Workspace”,將彈出一個對話框,單擊“是”按鈕。 (1)如果接著調(diào)試新程序 從第二步開始; (2)如果接著調(diào)試舊程序 從第三步開始 第十步:退出VC 【方法】單擊VC 主窗口右上角的關(guān)閉按鈕。 【異常情況的強迫關(guān)閉】按“Ctrl+Alt+Delete”鍵,彈出任務(wù)管理器, 選中“應用程序”標簽,再選取要關(guān)閉的“VC+6.0”,單擊“結(jié)束任務(wù)”按鈕。 第十一步:關(guān)機。 【方法】單擊菜單命令“開始 | 關(guān)機”。 【建議】備一個U盤,關(guān)機前復制本次實驗的源程序文件(擴展名為C)到U盤備份。,15,第一章習題答疑,1.5 輸出指定的三行符號。 提示:一行符號的輸出方法如下: printf(”符號符號n”); 1.7 上機運行本章的3個例題。 重點:熟悉C程序的調(diào)試步驟和每步的操作方法 可以制造錯誤,增加練習的機會。 說明:從第4章開始的程序設(shè)計題目,格式要求如下: 題目 修改后正確 程序清單 的程序清單 輸入數(shù)據(jù) 錯誤原因的 輸出結(jié)果 分析,16,第二章 程序的靈魂算法,算法概念 算法的表示 結(jié)構(gòu)化程序設(shè)計方法 程序數(shù)據(jù)結(jié)構(gòu)算法 2.1 算法的概念 算法解決某個問題的方法步驟(計算方法、數(shù)學方法、物理方法等) 2.2 簡單算法舉例 【例一】表決型的會議【算法】第1步 宣布會議開始 第2步 宣讀某個決議草案 第3步 通過監(jiān)票人和計票人名單 第4步 宣讀投票注意事項 第5步 投票 第6步 計票 第7步 宣布投票結(jié)果 第8步 宣布會議結(jié)束,17,【例二】計算123.100 【算法1】 【算法2】 【算法3】 【算法4】 令S為0 令S、K均為0 令S、K均為0 計算: 計算:S=S+1 計算:S=S+K 計算:K=K+1 計算:S=S+2 計算:K=K+1 計算:S=S+K 輸出S . 判斷:若k101轉(zhuǎn) 判斷:若k100 轉(zhuǎn) 計算:S=S+100 否則輸出S 否則輸出S 輸出S 【分析:哪種算法好? 討論:算法的優(yōu)劣】 【例三】判別某年份是否閏年? 【算法】輸入年份到Y(jié)中; 判斷:若Y能被4除盡且不能被100除盡;或能被400除盡,是閏年 否則,不是閏年?!舅惴ㄕf明:1年是365天5小時48分46秒】 2.3 算法的特點 (1)有窮性(有始有終) 反例,計算+(-2)+(-1)+0+123 (2)確定性(無二義) 反例,高個子坐后排,矮個子坐前排。 (3)可操作性(可做到的)反例,向上跳半米,向上跳半米,到達月球。 (4)沒有或有若干個輸入 例如,例二無輸入、例三有輸入 (5)沒有或有若干個輸出 例如,例二、例三均有輸出,18,2.4 算法的表示 【例二的算法1】 【例二的算法2】 順序結(jié)構(gòu) 循環(huán)結(jié)構(gòu) (1)用自然語言 前面對三個算法的描述。 (2)用流程圖 【例一的算法】 順序結(jié)構(gòu) . 選擇結(jié)構(gòu) 【例三的算法】 . 【注:流程圖的國家標準】,Y,N,19,【說明】三種基本結(jié)構(gòu)的流程圖 順序結(jié)構(gòu) 選擇(分支)結(jié)構(gòu) 重復(循環(huán))結(jié)構(gòu) 單分支 雙分支 當型 直到型 (3)N-S圖 順序結(jié)構(gòu) 選擇(分支)結(jié)構(gòu) 重復(循環(huán))結(jié)構(gòu) 單分支 雙分支 當型 直到型 (4)偽代碼 【例二算法二】BEGIN 【例三】BEGIN S=0,K=0 INPUT Y DO S=S+K IF Y%4=0 AND Y%100!=0 OR Y%400=0 K=K+1 PRINT YES! UNTIL K100 ELSE PRINT S PRINT NO! END END,20,(5)用某種計算機語言來寫(用C語言來寫) 【例二算法二】#include “stdio.h“【例三】#include “stdio.h“ void main() void main() int s,k; int y; s=0; scanf(“%d“, 2.5 結(jié)構(gòu)化程序設(shè)計方法 (1)自頂向下,逐步細化 第一步 將算法分成幾個大的步驟,每步寫出本步驟的局部功能。 第二步 對上述步驟中的每一步進行細化。 反復進行,直到每個步驟都對應一個基本結(jié)構(gòu)(順序、選擇、循環(huán)) (2)模塊化 將程序劃分為相互獨立的小程序(模塊,也就是C語言中的函數(shù))。 每個模塊的語句數(shù)目以50條左右為佳。 (3)結(jié)構(gòu)化編程 程序段的結(jié)構(gòu)只有三種:順序結(jié)構(gòu) 選擇結(jié)構(gòu)(單分支、雙分支、多分支) 重復結(jié)構(gòu)(當型循環(huán)、直到型循環(huán)、次數(shù)型循環(huán)) 結(jié)構(gòu)化程序設(shè)計語言必須保證每種結(jié)構(gòu)的程序段都可使用一條語句實現(xiàn)。 【說明】書寫源程序清單時,建議采用“結(jié)構(gòu)化書寫方法”。 具體說,每條語句都有規(guī)定的書寫格式(縮格對齊),希望能遵守。,21,程序設(shè)計的技巧,程序設(shè)計的基本思路 (1)輸入(原始數(shù)據(jù)) (2)計算與加工(算法,可能產(chǎn)生一些中間結(jié)果數(shù)據(jù)) (3)輸出(最終結(jié)果數(shù)據(jù)) 數(shù)據(jù)結(jié)構(gòu)設(shè)計的基本思路 (1)原始數(shù)據(jù)的類型與存放處 (2)中間結(jié)果的類型與存放處 (3)最終結(jié)果的類型與存放處 算法設(shè)計的思路 (1)來源于其他專業(yè)知識(如判閏年) (2)來源于本課程的介紹(排序、查找、求最大數(shù)等) (3)臨時構(gòu)造(例如游泳池的最佳路線),22,第三章 數(shù)據(jù)類型、運算符和表達式,詞類之一 常量 詞類之二 變量 詞類之三 運算符 詞類之四 表達式 各種詞類的數(shù)據(jù)類型 3.1 C語言的數(shù)據(jù)類型 數(shù)據(jù)類型:是指數(shù)據(jù)在計算機中存放的形式。 不同類型的數(shù)據(jù)有不同的加工方法。 C語言的數(shù)據(jù)類型分類 參看下表。,23,C語言的數(shù)據(jù)類型表 帶符號整型 (簡稱整型) 帶符號整型 帶符號短整型(簡稱短整) 帶符號長整型(簡稱長整) 整型 無符號整型 (簡稱無符號整型) 無符號整型 無符號短整型(簡稱無符號短整) 無符號長整型(簡稱無符號長整) 基本類型 單精度型 實型 雙精度型 字符型 數(shù)據(jù)類型 數(shù)組型(字符串型) 構(gòu)造類型 結(jié)構(gòu)型 共用型 指針型 空類型,24,3.2 常量與變量 一、常量與符號常量 (1)常量 直接寫在程序清單中的數(shù)據(jù),分為整型、實型、字符型、字符串。 (2)符號常量 用名字來替代常量。 【定義方法】#define 符號常量名 常量 【注】符號常量名:用戶任取的一個標識符。 標識符 :字母開頭的字母、數(shù)字、下劃線等組成,長度8或32。 符號常量通常用大寫字母組成,以便區(qū)別其他的對象,如變量名。 符號常量性質(zhì)是常量,不能象變量那樣給其賦新值。 二、變量 (1)變量 利用數(shù)據(jù)定義語句在程序中定義的對象,用來存放數(shù)據(jù)。 (2)變量名 標識符(通常用小寫字母組成) ,在定義時確定的。 (3)變量值 變量中存放的數(shù)據(jù),通過輸入、初始化、賦值獲得。 (4)變量數(shù)據(jù)類型 變量中能存放的數(shù)據(jù)類型,在定義時確定的。 【注】變量名區(qū)分字母大小寫的!如ccw、Ccw、CCw、CCW是不同變量名。 標識符不能是關(guān)鍵字(C語句中使用的英語單詞) C語言的關(guān)鍵字請參考附錄B,P365(后續(xù)課程會一一介紹)。,25,3.3 整型數(shù)據(jù) 一、整型常量及其表示方法 【表示方法】有3種。 十進制整數(shù) 通常形式的整數(shù) 例如 +12、 -12、 12。 八進制整數(shù) 以0開頭的八進制整數(shù) 例如 +012、 -012、 012。 十六進制整數(shù) 以0x開頭的十六進制整數(shù) 例如+0x12、-0x12、0x12。 二、整型變量 【作用】存放整型數(shù)據(jù)。 【定義方法】存儲類型符 數(shù)據(jù)類型符 變量名1=初值,變量名2=初值,.; 其中:方括號中內(nèi)容是可以省略的,變量名是標識符,初值是常量或常量表達式。 數(shù)據(jù)類型符可以是下列任一種: 整型 短整型 長整型 無符號整型 無符號短整型 無符號長整型 類型符 int short long unsigned int unsigned short unsigned long 字節(jié)數(shù) 4(2) 2 4 4(2) 2 4 【功能】定義某種數(shù)據(jù)類型的變量,分配內(nèi)存,并賦予初值。 【注】int、unsigned int在VC中為4字節(jié)。 三、整型常量的數(shù)據(jù)類型 在VC中整型常量均為帶符號長整型 【注 】在VC中整型常量后可以加字母L或l,如1L、12000L。,通用的數(shù)據(jù)定義語句,參看基礎(chǔ)知識P1,參看基礎(chǔ)知識P2-P10,26,3.4 浮點(實)型數(shù)據(jù) 一、浮點型常量的表示方法 【表示方法】(1)普通的十進制實數(shù),帶小數(shù)點。如0.0、-123.、.456 (2)指數(shù)形式(在字母E或e的后面寫上10的方次),如12.3E3、1e-5。 二、浮點型變量 【定義方法】存儲類型符 數(shù)據(jù)類型符 變量名=初值,.; 其中:數(shù)據(jù)類型符 可以是下列任一種: 單精度浮點型 float 占4字節(jié) 范圍:10-3710+38 (7位有效數(shù)字) 雙精度浮點型 double 占8字節(jié) 范圍:10-30710+308(16位有效數(shù)字) 變量名 用戶給出的標識符,初值是常量或常量表達式。 【功能】定義某種數(shù)據(jù)類型的變量,并賦予初值。 【注】浮點型常量不區(qū)分單、雙精度。 賦值時有效數(shù)字超出將截去多余數(shù)字。 例如,賦予單精度實型變量時, 1234.56789變成1234.568。 3.5 字符型數(shù)據(jù) 一、字符常量 【表示方法】 (1)可顯示字符。用單引號()括住單個字符。 如0、 A、 a。 (2)所有字符(包括不可顯示字符)。 用單引號括住“轉(zhuǎn)義字符”,常用轉(zhuǎn)義字符參看右表。,通用的數(shù)據(jù)定義語句,27,二、字符型變量 【定義方法】存儲類型符 數(shù)據(jù)類型符 變量名=初值,.; 其中:數(shù)據(jù)類型符只能是char,占用的內(nèi)存字節(jié)數(shù)是1。 變量名是標識符,初值是常量或常量表達式。 【功能】定義字符型的變量,并賦予初值。 【注】字符型數(shù)據(jù)在內(nèi)存中實際存放的是對應字符的ASCII代碼值(0127)。 因此,字符型數(shù)據(jù)可以看成帶符號或無符號的整型數(shù)據(jù)。 而整型數(shù)據(jù)只要不超出范圍(0127),也可以看成是字符型數(shù)據(jù)。 【例】#include “stdio.h“ 【說明】整型、實型、字符型合稱數(shù)值型 void main() int i; char c=97; i=A; printf(“%c,%dn“,c,i); /* 程序是正確的,輸出結(jié)果是:a,65*/ 三、字符串常量(簡稱字符串) 【表示方法】雙引號(“)括住的若干個字符(包括轉(zhuǎn)義字符)。 【例】 “、“1“、“1.23“、“abc“、“n“、“nnxyz“ 。 【注】(1)字符串在內(nèi)存的存放規(guī)則是:按順序依次存放字符串中每個字符的ASCII 代碼值,最后自動存放一個“0”,其值為0,稱為字符串結(jié)束標記符。 (2)字符串長度字符串中的字符數(shù)目。 (3)字符串占用的內(nèi)存字節(jié)數(shù)字符串長度1。 (4)無字符的字符串稱為空字符串,簡稱空串??沾L度為0,占用1個字節(jié)。 (5)字符串與字符常量是不同的。 a和“a“是不同的數(shù)據(jù)類型,占用字節(jié)數(shù)不同。 (6) C中沒有字符串變量,是用字符型數(shù)組來存放的,以后介紹。,介紹常用字符 的ASCII代碼 AZ、az、09,通用的數(shù)據(jù)定義語句,28,3.6 變量賦初值 【方法】在定義變量時,給出初值。 【注】初值是常量或已經(jīng)定義過的符號常量、或由它們組成的表達式(常量表達式), 其數(shù)據(jù)類型與變量的數(shù)據(jù)類型要一致。 【例】#define PI 3.14159 錯誤的 int i=10,j=-6+1,k; int i=10,j=i+1; float f=1.2345,s=0.0-0.1,x1,x2=PI+1; float f=1.2345,s=0.0-f; char c1=a,c2=A+1,c3; char c1=a,c2=c1+1; 3.7 各種基本數(shù)據(jù)類型的數(shù)據(jù)之間混合運算 【規(guī)則】 double float 橫向:必定先轉(zhuǎn)換 縱向:沿箭頭按需要轉(zhuǎn)換 表達式計算時 long 就長不就短 unsigned int short、char 【例】設(shè)有定義: char c=1; int i=2; long L=3L; float f=4.0; 計算“c*i/L+f”的過程是: (1)c*i c轉(zhuǎn)換成int型,和i相乘,運算結(jié)果是int型 (2)(c*i)/L c*i轉(zhuǎn)換成long型,和L相除,運算結(jié)果是long型 (3)(c*i/L)+f (c*i/L)和f轉(zhuǎn)換成double型,相加,運算結(jié)果是double型 最后對基本類型的數(shù)據(jù)給一個小結(jié)表。,此處用大寫。 因為小寫字母l和數(shù)字1相似。,29,基本數(shù)據(jù)類型的小結(jié),30,3.8 算術(shù)運算符與算術(shù)表達式 基本算術(shù)運算符(+ - + - * / %) 一、C的運算符 算術(shù)運算符 增1減1運算符(+ -) 關(guān)系運算符( = = .) 指針運算符(& * + -) 注:掌握運算符必須掌握:運算符、對象數(shù)目、運算符的位置、對象的類型、 運算規(guī)則、運算結(jié)果的類型、 優(yōu)先級、結(jié)合性。,31,二、算術(shù)運算符 【說明】 (1)優(yōu)先級:單目 雙目 (3)模運算結(jié)果符號與被除數(shù)相同。 *、/、% 、 例如,28 10 8(商為2) (2)除運算的結(jié)果與除數(shù)、被除數(shù)的數(shù)據(jù)類型有關(guān)。 28-10 8(商為-2) 兩個都是整型,則為整除,只取商的整數(shù)部分。 -28 10-8(商為-2) 例如,28/102 -28-10-8(商為2) 28.0/10=2.8 28/10.0=2.8 28.0/10.0=2.8,32,三、強制運算符 【優(yōu)先級】單目算術(shù)、強制 雙目算術(shù) 【例】 (float)(7%3)的結(jié)果是1.000000 7位有效數(shù)字 (double)(5/2)的結(jié)果是2.000000000000000 16位有效數(shù)字 (int)(3.7+2.2)的結(jié)果是5 【注】其后無括號,僅對第一個數(shù)據(jù)起作用,如(int)3.7+2.2的結(jié)果是5.2 四、自增自減運算符,33,【優(yōu)先級】+、-、單目算術(shù)、強制 雙目算術(shù) 【例】#include “stdio.h“ void main() int k=3; printf(“%dn“,+k); 輸出結(jié)果是4,k為4 printf(“%dn“,k+); 輸出結(jié)果是4,k為5 【注】(1)注意理解后綴+、-的加減1的時間。 i=3; k=i+; k為3、i為4 i=3; k=(i+)+(i+)+(i+) k=3+3+3=9、i=3+1+1+1=6 結(jié)論:后綴的+和-是所在的表達式全部計算結(jié)束后,再進行加減1的運算。 (2)自左向右盡可能地選取多個運算符組成復合運算符。 k=1; k+k+k 相當于(k+)+(k+)+k,結(jié)果是3,k為3。 (3)+和-只能作用于變量,不能作用于表達式。 k=1; +k相當+(+k),其中(+k)是正確的,但+(+k)是錯誤的。 (4)注意TC中函數(shù)參數(shù)的計算順序是自右向左的(VC中是自左向右)。 k=1; printf(“%d,%d”,k,k+); 輸出結(jié)果是2,1(VC中是1,1)。 五、算術(shù)表達式 表達式 :用運算符將合適的運算對象連接起來的式子。 表達式值 :表達式的最終運算結(jié)果值。 表達式類型(兩種分類):表達式值的數(shù)據(jù)類型、最后一個運算符的類型。 運算符的運算對象 :常量、變量、表達式(常量、變量看成表達式特例)。 表達式運算的轉(zhuǎn)換規(guī)則:就長不就短。 算術(shù)表達式 :用算術(shù)運算符將合適的運算對象連接起來的式子。,34,3.9 賦值運算符與賦值表達式 一、賦值運算符 【注】(1)前一個運算對象只能是變量,后一個運算對象是表達式(或常量、變量)。 (2)賦值時的轉(zhuǎn)換規(guī)則是:就左不就右。 當字節(jié)數(shù)少的值賦予字節(jié)數(shù)多的變量時,不會出錯;反之,可能會出錯。 【例】int k; k=3.99; k為3。 float f; f=3; f為3.000000 unsigned short u=65535; short k; k=u; k為-1 long L=32768; short s; s=L; s為-32768,復習:帶符號整數(shù)與無符號整數(shù),35,二、復合賦值運算符 【優(yōu)先級】 +、-、+、-、強制 雙目算術(shù) 賦值 就長不就短,轉(zhuǎn)為雙精度 所有賦值運算符的優(yōu)先級相同。 【注】后5個將在第12章“位運算”介紹。 右邊表達式自動加圓括號。 【例】int k=3; k-=3; k為0。 int k=3; float f=3.0; f*=3; f為9.000000 k*=1+2; int k=-5; k/=2; k為-2 相當于“k=k*(1+2);” long L=5; L%=8L; L為5L,常見的警告型錯誤: float f; f=1.0+2.0;,36,三、賦值表達式 賦值表達式: 用賦值運算符連接變量和表達式組成的式子。 賦值表達式的值: 賦予左邊變量的值。 賦值表達式的類型: 左邊變量的數(shù)據(jù)類型。 【注】(1)賦值表達式也是表達式,可以出現(xiàn)在賦值運算符的右邊。 例如,int k1=1,k2=2,k3; k3=k2=k1=5; k3=k2=k1=5相當于k3=(k2=(k1=5); 結(jié)果k3、k2、k1均為5。 注:定義變量時的初值只能是常量(或常量組成的表達式) 下列定義語句是錯誤的:int k1=k2=k3=5; (2)賦值運算符的左邊只能是變量,不能是表達式。 例如,int k1=1,k2; k2=k1+2=3; k2=k1+2=3相當于k2=(k1+2)=3),賦值運算符的左邊是表達式。 【例】int a=2; 計算表達式“a+=a-=a*a”和變量a的值。 a+=a-=a*a相當于a+=(a-=a*a)。 先算a-=a*a,相當于a=a-(a*a),表達式計算結(jié)果是-2,a是-2。 再算a+=(-2),相當于a=a+(-2),表達式計算結(jié)果是-4,a是-4。 3.10 逗號運算符與逗號表達式 一、逗號運算符 運算符是“,”; 雙目中綴、運算對象是表達式。 運算規(guī)則是先計算左邊的表達式,再計算右邊的表達式。 運算結(jié)果是右邊表達式的值;類型是右邊表達式的數(shù)據(jù)類型。 結(jié)合性是自左向右的。,37,二、逗號表達式 逗號表達式: 用逗號運算符連接兩個表達式組成。 逗號表達式的值: 右邊表達式的值。 倒數(shù)第2 逗號表達式的類型:右邊表達式的數(shù)據(jù)類型。 倒數(shù)第1 【注】不是所有的逗號都是逗號運算符。 例如,int k=5,j=6; printf(“%d,%d“,k,j+1); 【說明】運算符的優(yōu)先級:+、-、+、-、強制 雙目算術(shù) 賦值 逗號 各種賦值運算符是同級的、多個逗號運算符也是同級的。 【例】 3+5,4+2,3+1 逗號表達式值為4。 int a,b,c; a=3,b=4,c=5 逗號表達式值為5,變量a、b、c值依次為3、4、5。 int a,b,c; c=(a=3,b=4) 賦值表達式值為4,變量a、b、c值依次為3、4、4。 int x,a; x=(a=3,3*6) 賦值表達式值為18,變量a、x值依次為3、18。 int x,a; x=a=3,3*6; 逗號表達式值為18,變量a、x值均為3。 int a=3,b=4,c=5; printf(“%d,%d,%dn“,a,b,c); 輸出結(jié)果是3,4,5 printf(“%d,%d,%dn“,(a,b,c),b,c); 輸出結(jié)果是5,4,5 【編程經(jīng)驗】不要自找麻煩,使用一些難以理解的表達式。 (1)int n=5,a=12; a%=(n%=2) 結(jié)果n為1、a為0、表達式為0。 (2)int a=16; a+=a-=a*=a 結(jié)果a為0、表達式為0。,38,第三章習題答疑(一),3.3 十進制帶符號整數(shù)轉(zhuǎn)換成八、十六進制整數(shù)。 通用驗證程序清單如下: #include ”stdio.h” void main() int x=?; printf(”%o %xn”,x,x); /* 以八、十六進制輸出 */ 其中:? 是對應的帶符號整數(shù)。 輸出結(jié)果是4字節(jié)八進制整數(shù) 十六進制整數(shù),39,3.7 字符加密(用后4個字母) 提示:每個字母+4即是后4個字母 不能是W、X、Y、Z。 3.9 計算某個表達式的值。 通用驗證程序清單如下: #include ”stdio.h” void main() 每次換成新表達式 ? xx; xx=( 表達式 ); /* 計算表達式值存入xx */ printf(”%?n”,xx); 其中:? 表達式對應的數(shù)據(jù)類型符(需事先判斷) ? 表達式為整型,則為d 表達式為實型,則為f,第三章習題答疑(二),40,3.10 寫出程序運行的輸出結(jié)果,上機驗證。 3.12 a=12,計算某表達式后,求變量a的值。 通用驗證程序清單如下: #include ”stdio.h” void main() short a=12,n=5; 表達式; printf(”%dn”,a); 其中:表達式 每次換成新表達式 輸出結(jié)果是變量a的值。,第三章習題答疑(三),41,第四章 最簡單的C程序設(shè)計 順序程序設(shè)計,C語句 函數(shù)調(diào)用語句 數(shù)據(jù)定義語句 表達式語句和賦值語句 分支語句(3個) 復合語句和空語句 控制語句 循環(huán)語句(5個) 字符輸入輸出函數(shù) 轉(zhuǎn)向語句(1個) 數(shù)據(jù)輸入輸出函數(shù) 返回語句(1個) 順序結(jié)構(gòu)程序設(shè)計 函數(shù)調(diào)用語句 表達式語句(賦值語句) 4.1 C語句概述 復合語句 【說明】 空語句 (1)函數(shù)調(diào)用語句 函數(shù)名(實際參數(shù)1,實際參數(shù)2,.); (2)表達式語句 表達式; (3)復合語句 語句1; . 語句K; 其中可以出現(xiàn)任何語句,數(shù)據(jù)定義語句要集中寫在前面。 (4)空語句 ;,函數(shù)與函數(shù)調(diào)用的概念 f(x,y)=x2+6y-7 f(2,1)=22+61-7=3,42,4.2 賦值語句 【格式】變量表達式; 【注】表達式語句的一種。 4.3 數(shù)據(jù)輸入輸出概念及其在C語言中的實現(xiàn)。 一、程序中的輸入輸出要求 #include “stdio.h“ #include “stdio.h“ void main()只能計算5+8的程序 void main()能計算任何兩整數(shù)和的程序 int x1,x2,x; int x1,x2,x; x1=5,x2=8; 輸入兩個整數(shù)存入x1,x2; x=x1+x2; x=x1+x2; 看不到計算結(jié)果 輸出變量x中的值; 二、C語言中輸入輸出的實現(xiàn) 【方法】利用系統(tǒng)函數(shù)中的輸入輸出函數(shù)。 【注】(1)系統(tǒng)函數(shù) 系統(tǒng)已經(jīng)編好的一段程序,能完成特定功能。 (2)使用系統(tǒng)函數(shù)的方法 函數(shù)調(diào)用,即“函數(shù)名(實參1,.)”。 (3)使用系統(tǒng)函數(shù)的程序開始必須寫:#include “頭文件名.h“ 其中的“頭文件”中含有該系統(tǒng)函數(shù)的程序清單。 (4)頭函數(shù)有很多種,存放輸入輸出函數(shù)的頭文件名是“stdio.h”。 存放數(shù)學類函數(shù)的頭文件名是“math.h”。,43,4.4 字符數(shù)據(jù)的輸入輸出 一、字符輸出函數(shù) 【調(diào)用格式】 putchar(ch) 參數(shù)ch:字符型表達式(結(jié)果為0127的整型或字符型數(shù)據(jù)) 【功能】在顯示器上顯示ch對應的單個字符。 【例】#include “stdio.h“ /* 程序中使用了字符輸出函數(shù) */ void main() putchar(ch1);putchar(n);putchar(ch2); char ch1; 輸出結(jié)果是:A int ch2; 改為 B ch1=A,ch2=66; 改為 putchar();putchar(ch1);putchar(); putchar(ch1+1);putchar(ch2-1); 輸出結(jié)果是:A 輸出結(jié)果是:BA 二、字符輸入函數(shù) 【調(diào)用格式】 getchar() 【功能】從鍵盤上讀取單個字符作為函數(shù)的返回值。 【注】(1)通常的使用方法:字符(整)型變量getchar(); (2)鍵盤上輸入數(shù)據(jù),輸完后應跟一個“回車鍵”。注意回車鍵也是一個字符。 【例】#include “stdio.h“ /* 程序中使用了字符輸入函數(shù) */ void main() 若輸入A回車鍵B回車鍵 char c; 則輸出結(jié)果是:A 不能輸入 c=getchar(); putchar(c); 若輸入AB回車鍵 c=getchar(); putchar(c); 則輸出結(jié)果是:AB 【討論】若一定要按第1種方法輸入,程序怎么改! 【說明】鍵盤緩沖區(qū)的概念。,44,4.5 格式輸入輸出函數(shù) 一、格式輸出函數(shù) 【調(diào)用格式】printf(“輸出格式字符串“,表達式1,表達式2,.) 其中:“輸出格式字符串”是由“輸出格式字符”與“非格式字符”組成的一串字符。 【功能】按自左向右(TC中自右向左)順序計算各個表達式的值,然后按照自左向右的 順序,依據(jù)“輸出格式字符串”中的“輸出格式字符”規(guī)定的格式輸出表達式值。 “輸出格式字符串”中的“非格式字符”將原樣原位置輸出。 【注】(1)輸出格式字符及其對應的格式。參看下頁的表格。 (2)0255之間的整數(shù)可以使用“%c”格式輸出(256個符號稱擴展ASCII代碼)。 (3)單個字符可以使用“%d”、“%o”、“%x”、“%u”格式輸出。 (4)常用輸出格式字符: 帶符號整數(shù) 無符號整數(shù) 長整數(shù) 無符號長整數(shù) 實數(shù) 字符 字符串 %d %u %ld %lu %f %c %s (5)常用的非格式字符: ,(數(shù)據(jù)間隔) n 回車換行 【例】#include “stdio.h” /*使用系統(tǒng)函數(shù)printf()應有#include “stdio.h“ */ void main() int i=1; short s=2; long l=3L; float f=4.0; double d=5.0; char c=A; printf(“i=%d,s=%d,l=%ldn“,i,s,l); 輸出結(jié)果:i=1,s=2,l=3 printf(“f=%f,d=%5.2fn“,f,d); 輸出結(jié)果:f=4.000000,d= 5.00 printf(“%c%cn%sn“,c,c+32,“string!“); 輸出結(jié)果:Aa string! 跳頁,printf(“%d%d“,12,345); 12345 printf(“%d,%d“,12,345); 12,345 printf(“%dn%d“,12,345); 12 345,128-255在VC中是亂碼!,45,46,二、格式輸入函數(shù) 【格式】scanf(“輸入格式字符串“,地址1,地址2,.) 其中:“輸入格式字符串”是由“輸入格式字符”與“非格式字符”組成的一串字符。 【功能】按照自左向右的順序,依據(jù)“輸入格式字符串”中的“輸入格式字符”規(guī)定的格式 從鍵盤輸入數(shù)據(jù),按次序存入地址1,地址2,. 對應的變量中。 “輸入格式字符串”中的“非格式字符”必須原樣原位置輸入。 【注】(1)地址的寫法: 若輸入:1,2,3回車鍵4 5回車A回車B回車鍵 則i=1,其他變量值不確定!且這些不能輸入 跳頁 用來接受回車換行符號,47,48,4.6 順序結(jié)構(gòu)程序設(shè)計例 程序設(shè)計方法:讀3遍題目,了解已知什么?求什么?設(shè)計算法、提取數(shù)據(jù)結(jié)構(gòu)。 【例一】輸入三角形邊長,求面積。 【程序設(shè)計】 (1)算法:輸入3個邊長a、b、c; 用下列公式計算面積s。 ,其中L=(a+b+c)/2; 輸出面積s。 (2)數(shù)據(jù)結(jié)構(gòu):設(shè)計存放原始數(shù)據(jù)、中間數(shù)據(jù)、最終結(jié)果數(shù)據(jù)的變量名及類型。 原始數(shù)據(jù):a、b、c(實型); 中間結(jié)果:L(實型); 最終結(jié)果:s(實型)。 【程序清單】 #include “stdio.h“ #include “math.h“ /* 其中用到開方的系統(tǒng)函數(shù)sqrt(表達式) */ void main() float a,b,c,L,s; /* 由數(shù)據(jù)結(jié)構(gòu)確定的數(shù)據(jù)定義語句 */ scanf(“%f,%f,%f”, 注:在VC中此處會出現(xiàn)警告性錯誤。雙精度數(shù)存入單精度變量L。 在VC中,這樣的警告性錯誤不影響程序的正確運行!,49,【例二】輸入a、b、c,求方程ax2+bx+c=0的兩個實根(假定b2-4ac0)。 【程序設(shè)計】(1)算法:輸入a、b、c; 用公式計算:db2-4ac, 用公式計算 輸出兩個實根x1和x2。 (2)數(shù)據(jù)結(jié)構(gòu):原始數(shù)據(jù):a、b、c(實型); 中間結(jié)果:d(實型); 最終結(jié)果:x1、x2(實型)。 【程序清單】 #include “stdio.h“ #include “math.h“ /* 程序中用到開方函數(shù)sqrt(表達式) */ void main() float a,b,c,d,x1,x2; scanf(“%f,%f,%f“, 【順序結(jié)構(gòu)程序設(shè)計方法】 輸入 計算(算法設(shè)計) 數(shù)據(jù)結(jié)構(gòu)設(shè)計 輸出,50,第四章 習題答疑(一),4.4 給變量的值,編程序輸出指定的格式與數(shù)

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論