C語言編程入門教程精簡版.ppt_第1頁
C語言編程入門教程精簡版.ppt_第2頁
C語言編程入門教程精簡版.ppt_第3頁
C語言編程入門教程精簡版.ppt_第4頁
C語言編程入門教程精簡版.ppt_第5頁
已閱讀5頁,還剩430頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

C語言程序設(shè)計請大家邊動手邊觀看 第一章計算機(jī)語言與C語言概述 1 1計算機(jī)語言概念 計算機(jī)語言定義計算機(jī)能夠識別和接受的語言 要使計算機(jī)按自己的意圖工作 必須使用計算機(jī)所能接受 理解和執(zhí)行的指令指揮計算機(jī)工作 計算機(jī)語言的種類機(jī)器語言低級語言匯編語言 面向計算機(jī) BASIC入門語言F77科學(xué)計算高級語言Foxpro數(shù)據(jù)庫管理 面向問題 C多用途 計算機(jī)語言 機(jī)器語言最早問世 用二進(jìn)制代碼構(gòu)成指令 如 100000 110000 用機(jī)器語言編程的缺點 繁瑣 不直觀 不易調(diào)試 如計算y 2x2 3x 1需要七八條指令 移植性差 依賴于計算機(jī) 匯編語言用符號構(gòu)成指令 如 MOV ADD用匯編語言編程 相對直觀 但仍繁瑣 仍是面向計算機(jī)的語言 匯編語言是計算機(jī)間接接受的語言 高級語言與低級語言相比 有根本性的區(qū)別 是面向問題的語言 高級語言的一條指令 語句 y 2 x x 3 x 1 對應(yīng)于 y 2x2 3x 1y sin x 對應(yīng)于 y sinx用高級語言編程 直觀 易懂 移植性好 不依賴于具體計算機(jī) 上機(jī)運行高級語言程序需經(jīng)過編譯 編譯執(zhí)行要上機(jī)完成一個計算問題 主要的任務(wù)就是用高級語言編寫出相應(yīng)的源程序 即至少要學(xué)會一種計算機(jī)語言 高級語言源程序 機(jī)器指令目的程序 結(jié)果 編譯程序 1 2C語言的特點集高級語言和低級語言的優(yōu)點于一身 能實現(xiàn)低級語言的大部分功能 如直接訪問內(nèi)存物理地址 進(jìn)行位操作等 圖形功能強(qiáng) 運算符和數(shù)據(jù)結(jié)構(gòu)豐富 語法限制不太嚴(yán)格 程序設(shè)計自由度大 生成目標(biāo)代碼質(zhì)量高 程序執(zhí)行效率高 1 3簡單的C程序介紹例1 main 主函數(shù)說明 程序框架printf abcdef 函數(shù)體 語句程序的功能是輸出字符串 abcdef 例2 求兩數(shù)之和 main inta b c aa 100 b 50 bc a b cprintf nc d c 程序運行結(jié)果 c 150 例3 求兩數(shù)中的最大值 函數(shù)類型函數(shù)名形參main intmax intx inty inta b c intz scanf d d axbycz 兩個函數(shù)組成 3 5 3 5 5 5 總結(jié)上例可知 1 C程序由函數(shù)構(gòu)成 2 函數(shù)由兩部分組成 函數(shù)說明部分 函數(shù)名 函數(shù)類型 形參名 形參類型 函數(shù)體 實現(xiàn)函數(shù)的具體操作 由語句構(gòu)成 3 程序總是從main函數(shù)開始執(zhí)行 4 書寫格式自由 5 語句必須有分號 第二章算法2 1算法的概念要利用計算機(jī)處理問題 光學(xué)習(xí)語言的語法規(guī)則還不夠 最重要的是要學(xué)會針對各類型的問題 擬定出有效的解題方法和步驟 解題方法和步驟就是算法 算法 為了解決一個問題而采取的有限步驟 計算機(jī)算法 如何使計算機(jī)一步一步地工作的具體過程 利用計算機(jī)處理問題的步驟 1 設(shè)計好算法 算法設(shè)計 2 用計算機(jī)語言實現(xiàn)算法 程序設(shè)計 算法必須是 有效 的 算法設(shè)計還要充分考慮算法的好壞 衡量算法好壞的主要標(biāo)準(zhǔn) 程序簡練 執(zhí)行速度快 占空間少 例 考慮的算法 算法 直接表達(dá) 直接用語句s 1 2 3 4 5 6 7 8 9 10 當(dāng)項數(shù)較多時該算法不適用 s i 1 10 算法 迭代法 累加求和法 s 1 2 3 4 5 6 7 8 9 10算法步驟 si 使s 0 使i 1累加器記數(shù)器 s i s i 1 i 若i 10轉(zhuǎn) 否則轉(zhuǎn) 輸出s 0 1 1 2 3 3 6 4 10 5 該算法通用 是好算法 2 2算法的表示算法需要有統(tǒng)一的表示方法常用的表示方法有 自然語言流程圖結(jié)構(gòu)化流程圖N S流程圖 1 自然語言對于計算s 1 2 3 4 5 6 7 8 9 10用自然語言表示為 使s 0 s為累加器 使i 1 i為計數(shù)器 s i s 累加求和公式 i 1 i 計數(shù)器加1 若i 10轉(zhuǎn) 否則轉(zhuǎn) 輸出s的值特點 通俗易懂 文字冗長 含義不大嚴(yán)格 2 流程圖用流程圖符號表示算法 常用的流程圖符號起止框輸入輸出框處理框流程線判斷框 對于計算s 1 2 3 4 5 6 7 8 9 10用流程圖表示為 s i s i 1 i S i s S i s i 10 輸出s 0 s 1 i 直觀形象 易于理解 次序清楚 Y N 3 結(jié)構(gòu)化流程圖傳統(tǒng)的流程圖有一個弊端 對流程線沒有嚴(yán)格的限制 對于較復(fù)雜的算法可能會變成亂麻一般 BS型算法 為克服這一弊端 提出了由三個基本結(jié)構(gòu)組成算法流程圖的思想 結(jié)構(gòu)化流程圖 三個基本結(jié)構(gòu) 順序結(jié)構(gòu)按固定順序 從上到下或從左到右 執(zhí)行的結(jié)構(gòu) A B a b 選擇結(jié)構(gòu)根據(jù)條件P選擇執(zhí)行哪一個分支 成立不成立 p A B a b 成立 不成立 例 計算y 1 x當(dāng)x 0時y 10000當(dāng)x 0時的算法流程圖圖 選擇結(jié)構(gòu) 輸入x X 0 10000 y 1 x y 輸出y Y N 循環(huán)結(jié)構(gòu)重復(fù)執(zhí)行某些操作的結(jié)構(gòu) 分為兩種 當(dāng)型循環(huán)和直到型循環(huán) 當(dāng)型循環(huán)直到型循環(huán) P1 A A P2 a a b b Y Y N N 可以看出 每個基本結(jié)構(gòu)都只有一個入口和一個出口 因此 用三個基本結(jié)構(gòu)構(gòu)成的流程圖不會象亂麻一般 用三個基本結(jié)構(gòu)構(gòu)成的流程圖就成為結(jié)構(gòu)化流程圖 用結(jié)構(gòu)化流程圖描述的算法稱為結(jié)構(gòu)化算法 相應(yīng)的程序設(shè)計就稱為結(jié)構(gòu)化程序設(shè)計 觀察前例 0 s 1 i S i s i 1 i i 10 輸出s 順序結(jié)構(gòu) 循環(huán)結(jié)構(gòu) y n 4N S流程圖N S流程圖的三個基本結(jié)構(gòu) A B P 成立 不成立 A B A B 當(dāng)P1 直到P2 順序結(jié)構(gòu) 選擇結(jié)構(gòu) 循環(huán)結(jié)構(gòu) 例 計算y 1 x當(dāng)x 0時y 10000當(dāng)x 0時的N S流程圖 輸入x X 0 是 否 10000 y1 x y 輸出y 例 計算s 1 2 3 4 5 6 7 8 9 10的N S流程圖 i 10直到i 10直到型當(dāng)型 0 s 1 i 輸出s 1 i 0 s s i s i 1 i s i s i 1 i 輸出s 第三章數(shù)據(jù)類型 運算符與表達(dá)式3 1C的數(shù)據(jù)類型 基本類型 整型 實型 字符型 枚舉型 構(gòu)造類型 略 指針類型 略 空類型各類型包含常量與變量 3 2常量與變量 常量與符號常量常量在程序運行過程中其值保持不變的量 符號常量用來代表一個常量的標(biāo)識符 definePI3 1415926 例 definePI3 1415926main floatr 2 c c 2 PI r printf f c 變量其值可以改變的量 變量的三要素 變量名每個變量有一個名字 作為識別該變量的標(biāo)識符 變量的值每個變量有一個值 變量的值是隨時可以改變的 變量的存儲單元每個變量占據(jù)一個內(nèi)存單元 用于存放變量的值 變量名a變量值存儲單元 3 變量的命名規(guī)則 由字母 數(shù)字和下劃線組成以字母或下劃線開頭a x1 y 2 b1 1c合法1x a 2 不合法變量必須先定義后使用 程序中何時使用常量 何時使用變量 3 3整型數(shù)據(jù) 整型常量即整常數(shù) c的整常數(shù)有三種形式 十進(jìn)制整數(shù)與數(shù)學(xué)中的整數(shù)一致 如 100 123 15等 八進(jìn)制整數(shù)以0開頭的整數(shù) 如 010 07 020等 十六進(jìn)制整數(shù)以0 x開頭的整數(shù) 如 0 x10 0 xff 0 x2a等 整型變量用于存放整數(shù)的變量 分4種類型 基本型 inta16位 可表示的數(shù)值范圍 32768 32767 短整型 shortintb16位 可表示的數(shù)值范圍 32768 32767 長整型 longintc32位 數(shù)值范圍 2147483648 2147483647 無符號型 加上unsigned只存放正數(shù) 如 unsignedintx變量x為無符號整數(shù) 16位全表示數(shù)碼 數(shù)值范圍 0 65535在程序設(shè)計中 如果要使用整型變量 必須首先選擇以上類型符來定義變量 然后才能使用 例 main 定義 inta b c a 100 b 50 使用c a b printf d c 一般根據(jù)什么原則選擇變量的類型 3 4實型數(shù)據(jù) 實型常量可使用兩種形式表示 小數(shù)形式 如1 23 3 141592615 48 指數(shù)形式 如1e 201 23e5 實型變量用于存放實數(shù)的變量分單精度和雙精度兩種 floata b定義a和b為單精度型變量32位 7位有效數(shù)字 10 38 1038doublex y定義x和y為雙精度型變量64位 15位有效數(shù)字 10 308 10308 例 main floatr c doubler c r 5 c 2 3 1415926 r printf f c 3 5字符型數(shù)據(jù) 字符常量用單引號括起來的一個字符 a x 1 等除此外 以 開頭的字符如 n t 等稱為轉(zhuǎn)義字符 祥見書表3 3 字符型變量用于存放字符的變量 charc1 c2定義c1和c2為字符型變量c1 a c2 b 字符賦值字符型變量存放一個字符 占據(jù)一個字節(jié) 字符型數(shù)據(jù)的存儲形式存放ASCII碼不是而是如字符 a 在內(nèi)存中存放97 b 存放98 與整數(shù)的存儲形式一致 它們之間可以通用一個字符數(shù)據(jù)既可以作字符用 也可以作整數(shù)用 取其ASCII代碼 如 32 a 相當(dāng)于32 97若intx charc 則x a c 97 x 97 c a 都允許 a 97 字符串常量用雙引號括起來的字符序列 如 abcde china a 也屬字符串 注意 a 與 a 的區(qū)別 對于 charc c a 用法錯誤 字符串中每個字符各占一個字節(jié) 并且在字符串結(jié)尾加上一個結(jié)束標(biāo)記 0 如 china 在內(nèi)存中占6個字節(jié) china 0C語言中專門的字符串變量 可用字符數(shù)組存放 以后介紹 3 6變量賦初值在定義變量的同時給相應(yīng)的變量賦初值 如 inta 3 afloatb 5 2 charc a intx y z 6 效果 在給變量分配內(nèi)存單元的同時在相應(yīng)的單元中存放初值 3 3 7各數(shù)值型數(shù)據(jù)間的混合運算整型 實型 字符型數(shù)據(jù)間可以進(jìn)行混合運算 如 10 a 1 5運算時 參加運算的兩個數(shù)據(jù)如果類型不同 則首先將其類型轉(zhuǎn)換成一致再運算 轉(zhuǎn)換規(guī)則是 將優(yōu)先級低的類型轉(zhuǎn)換到優(yōu)先級高的類型 數(shù)據(jù)類型的優(yōu)先級 高doublefloatlongunsignde低intchar 3 8算術(shù)運算符與算術(shù)表達(dá)式 基本的算術(shù)運算符 算術(shù)表達(dá)式用算術(shù)運算符將運算對象連接起來的式子用于表達(dá)數(shù)學(xué)公式的式子如 2 x y 1 a表達(dá)式經(jīng)過運算最終得到一個值 算術(shù)表達(dá)式的值 運算符的優(yōu)先級與結(jié)合性優(yōu)先級 在對表達(dá)式求值時 如果存在多個運算符 則運算的先后次序按運算符的優(yōu)先級別從高到底進(jìn)行 運算符的優(yōu)先級關(guān)系為 高 低 如 a 2 x先算 2 a 2 有括號的情況 結(jié)合性 如果在一個運算對象兩邊的運算符的優(yōu)先級相同 則按規(guī)定的 結(jié)合方向 處理 如 a b cb與 結(jié)合是從左到右 稱 左結(jié)合性 b與 結(jié)合是從右到左 稱 右結(jié)合性 每個運算符都有相應(yīng)的優(yōu)先級和結(jié)合性 基本算術(shù)運算符都是左結(jié)合性 計算表達(dá)式例 2 A 1 2 01 3 2 1構(gòu)造表達(dá)式例2x2 3x 1 a ba b a ba bx yx y a b a b a b a b 2 x x 3 x 1 不能省 a b a b x y x y a b a b x y x y a b a b x y x y 強(qiáng)制類型轉(zhuǎn)換可以用強(qiáng)制類型轉(zhuǎn)換運算符將一個表達(dá)式的值轉(zhuǎn)換成所需類型 如 int x y float 7 3 應(yīng)用舉例 inta 200 b 300 c c a b 100 可知 有自動轉(zhuǎn)換和強(qiáng)制轉(zhuǎn)換 當(dāng)自動轉(zhuǎn)換達(dá)不到目的時 可用強(qiáng)制轉(zhuǎn)換 c long a b 100 c long a b 100 自增 自減運算符自增運算符 使變量值加1自減運算符 使變量值減1兩種用法 i i先加 減 后用i i 先用后加 減 兩種用法對i效果一樣 但表達(dá)式的值不同 例 假設(shè)i的原值為5 j i j j i j 注意 和 只能用于變量 如 3 和 a 1 不合法 和 為右結(jié)合性 i i i 若i的原值是5 則該表達(dá)式的值是多少 例 分析執(zhí)行下列語句后的結(jié)果 a 5 abcdb a c a b d a b c 5 5 6 5 0 6 7 2 6 1 兩種特殊情況 k i i i i j是i j 還是 i j i 雖然與i i 1等效 但使用自增自減運算符的代碼優(yōu)化程度好 因而經(jīng)常使用 但用時需特別小心 3 9賦值運算符和賦值表達(dá)式 賦值運算符 稱賦值運算符 其作用是將一個數(shù)據(jù)賦給一個變量 如 a 5不要理解為 等號 執(zhí)行賦值運算的結(jié)果 是將右邊的數(shù)據(jù)存入左邊變量所對應(yīng)的內(nèi)存單元中 賦值規(guī)則如果賦值運算符兩側(cè)的類型不一致 則在賦值時要進(jìn)行類型轉(zhuǎn)換 轉(zhuǎn)換規(guī)則為 實型 整變量舍去小數(shù)部分 inta 5 5 a中為5 整型 實變量數(shù)值不變 以浮點形式存儲 字符型 整變量放在整形變量低8位 保持原值不變原則 inta A 復(fù)合賦值運算符在賦值運算符前加上其它運算符 可以構(gòu)成復(fù)合賦值運算符 a 3 a a 3b x 5 b b x 5 x c 6 x x c 6 y a 4 y y a 4 k b 2 k k b 2 屬于高效率運算符 賦值表達(dá)式主要實現(xiàn)賦值運算的表達(dá)式 一般形式 如 a 5y 2 x 3a a 1不是衡等作用 將右邊表達(dá)式的值賦給左邊的變量 賦值表達(dá)式的值取左邊變量的值 賦值表達(dá)式右邊的可以是任何表達(dá)式 如 a b 5 賦值表達(dá)式中包含賦值表達(dá)式賦值運算符的優(yōu)先級低于所有算術(shù)運算符 且是右結(jié)合性 a b 5 與a b 5等效 例 計算以下表達(dá)式的值 a b c 5a 5 c 6 a b 4 c 6 a b 4 5 c 6 5 a b c為整型變量 a a a a 設(shè)a的原值為3 賦值表達(dá)式是C語言中的一個重要成分 在賦值表達(dá)式后加一分號就成為常用的賦值語句 如y 2 x 1 賦值表達(dá)式作為表達(dá)式的一種 可以出現(xiàn)在任何表達(dá)式中 如 x 2 b 3 a k 5 b 3 10逗號表達(dá)式逗號也是一種運算符 用它對兩個表達(dá)式實現(xiàn)連接運算 3 5 6 8稱逗號表達(dá)式 逗號表達(dá)式的一般形式 表達(dá)式1 表達(dá)式2取表達(dá)式2的值作為整個逗號表達(dá)式的值 如 a 3 5 a 4逗號表達(dá)式的值為 60 一個逗號表達(dá)式又可以與另一個表達(dá)式組成一個新的逗號表達(dá)式 如 a 3 5 a 4 a 5因此 逗號表達(dá)式的一般形式可以擴(kuò)展為 表達(dá)式1 表達(dá)式2 表達(dá)式3 表達(dá)式n取表達(dá)式n的值作為整個逗號表達(dá)式的值 逗號運算符的優(yōu)先級最低 且是左結(jié)合性 逗號運算符只起到連接作用 沒有實際操作 第四章最簡單的C程序設(shè)計 C程序最基本的成分是語句目前我們已掌握的語句 變量說明語句 inta b c 表達(dá)式語句 x y 特別地 a 5 賦值語句 可以編寫簡單程序如 main intx y x 5 y 2 x x 3 x 1 該程序語法上完整 但還缺少輸出 數(shù)據(jù)的輸出用輸出函數(shù)實現(xiàn) 其中的兩種輸出函數(shù) 1 putchar函數(shù) 字符輸出函數(shù) 用于輸出一個字符 如 putchar a putchar 100 charc b putchar c 例 輸出單詞Boy的完整程序 include stdio h 注意該語句的作用main chara b c a B b o c y putchar a putchar b putchar c 2 printf函數(shù) 格式輸出函數(shù) 任意類型 任意格式 任意個數(shù) 例如 inta 100 b 56 printf a d b d a b 普通字符格式說明格式控制輸出表列輸出結(jié)果 a 100 b 56 后的字符稱格式字符 不同格式字符對應(yīng)不同的數(shù)據(jù)類型 d格式符 按整數(shù)格式輸出幾種用法 d不指定寬度 按實際寬度輸出 md按指定寬度輸出 m為寬度 ld用于輸出長整型數(shù) 例 inta 125 b 453 longc 65535 printf a d b 5d c ld a b c 輸出結(jié)果 a 125 b 453 c 65535 ld也可以按指定寬度輸出 printf c 8ld c 輸出結(jié)果 c 65535注意 格式字符的類型要與對應(yīng)的輸出對象的類型一致 c格式符 用于輸出字符charc A printf c c c c B 輸出結(jié)果 c A B輸出對象既可以是字符變量 字符常量 還可以是整型表達(dá)式 如 inta 100 charb A printf n d c a a printf n c d b b 輸出結(jié)果 100 dA 65 s格式符 用于輸出字符串 s不指定寬度 ms指定寬度 左靠齊 ms指定寬度 右靠齊 m ns指定寬度m 只取左端n個字符 右靠齊 m ns指定寬度m 只取左端n個字符 左靠齊 例 printf 1 s abcd printf 2 8s abcd printf 3 8s abcd printf 4 8 3s abcd printf 5 8 3s abcd 1 abcd2 abcd3 abcd4 abc5 abc f格式符 按小數(shù)形式輸出實數(shù) f由系統(tǒng)指定寬度 6位小數(shù) m nf指定寬度m 小數(shù)位數(shù)n 右靠齊 m nf指定寬度m 小數(shù)位數(shù)n 左靠齊注意 寬度包括符號和小數(shù)點 例 floata 3 141592654 b 14 326795 c 125 2468 printf na f b 8 3f c 10 2f a b c 輸出結(jié)果 a 3 141592 b 14 326 c 125 24 完整前面的程序 main intx y x 5 y 2 x x 3 x 1 printf ny d y 程序設(shè)計例 編寫程序計算如圖中的電流I 假設(shè)U 220 R1 30 R2 60 R3 45 U I R1 R2 R3 算法設(shè)計 I U R1 U R2 U R3程序設(shè)計 main I U R1 U R2 U R3 intU 220 R1 30 R2 60 R3 45 floatI printf nI f I 正確的程序 main intU 220 R1 30 R2 60 R3 45 floatI I float U R1 float U R2 float U R3 printf nI f I 考慮通用 main intU R1 R2 R3 floatI 輸入U R1 R2 R3I float U R1 float U R2 float U R3 printf nI f I 數(shù)據(jù)的輸入getchar函數(shù) 字符輸入 include stdio h main charc c getchar 等待鍵盤輸入putchar c scanf函數(shù) 格式輸入 與printf函數(shù)相反 用于輸入若干任意類型的數(shù)據(jù) scanf d d d 格式控制地址列表 scanf d d d 執(zhí)行此函數(shù)時 等待從鍵盤輸入三個整數(shù)給a b c若從鍵盤輸入358則系統(tǒng)即從鍵盤緩沖區(qū)取出這三個數(shù)分別賦給a b c注意與printf的區(qū)別 注意格式的匹配 如 scanf 3d 2d 4d 在鍵盤輸入時 用分隔符把每個數(shù)據(jù)隔開 標(biāo)準(zhǔn)的分隔符是空格 如 12315023若想用逗號作分隔符 則 scanf d d d 不要隨便使用普通字符 如使用 scanf a d b dc d a b c 對應(yīng)數(shù)據(jù)輸入 a 123 b 150 c 23 前面的歐姆定律 main intU R1 R2 R3 floatI scanf d d d d 求三角形面積 include math h main floata b c area s scanf f f f 使用數(shù)學(xué)函數(shù) 使用三角函數(shù) include math h main floatx y scanf f 第五章選擇結(jié)構(gòu)程序設(shè)計 對于如下的函數(shù)計算 算法上屬于一個選擇結(jié)構(gòu) y 用于實現(xiàn)選擇結(jié)構(gòu)的主要是if語句 1 x當(dāng)x 0時 10000當(dāng)x 0時 if語句的最常見形式為 if 關(guān)系表達(dá)式 語句1 else語句2 如 if x 0 y 1 x elsey 10000 其中x 0就是一個關(guān)系表達(dá)式 就是一個關(guān)系運算符 5 1關(guān)系運算符和關(guān)系表達(dá)式1 關(guān)系運算符用于進(jìn)行比較運算的運算符 共有六種 優(yōu)先級與結(jié)合性 前4種大于后兩種 低于算術(shù)運算符而高于賦值運算符 左結(jié)合性 2 關(guān)系表達(dá)式一般形式 表達(dá)式 關(guān)系運算符 表達(dá)式 如 a ba b b c經(jīng)過關(guān)系運算后最終有一個值 關(guān)系表達(dá)式的值 關(guān)系表達(dá)式的值只有0 假 或1 真 例 設(shè)a 2 b 4 c 1計算以下關(guān)系表達(dá)式的值 a ba b b c a b 可以是字符表達(dá)式 x 2 y 5 可以是賦值表達(dá)式 a b c 甚至可以是關(guān)系表達(dá)式a b b c 例 假設(shè)x 3 y 5 z 1 計算以下關(guān)系表達(dá)式的值 x z yxz x zy x z x y 2 x 1 5 2邏輯運算符和邏輯表達(dá)式有時 只用一個簡單的關(guān)系表達(dá)式無法完整地表達(dá)一個條件 如 y 其中的條件需要用邏輯表達(dá)式來表達(dá) x 0 a 0 就是一種邏輯運算符 1 x 1 a當(dāng)x 0 a 0時 10000其它 1 邏輯運算符 邏輯與兩個操作數(shù)都為真時 運算結(jié)果為真 邏輯或兩個操作數(shù)之一為真時即為真 邏輯非 單目運算 操作數(shù)為真 假 時為假 真 如 若a 2 b 3 c 0則 a b b c0a b b c1 a b 0 優(yōu)先級 由高到低 邏輯非算術(shù)運算符關(guān)系運算符 邏輯與 邏輯或賦值運算符 結(jié)合性 左結(jié)合性 2 邏輯表達(dá)式實際上 前面所舉例子即為邏輯表達(dá)式 a b b ca b b c a b 邏輯表達(dá)式的值同樣只有1和0 但參加邏輯運算的操作數(shù)可以是任意類型的數(shù)據(jù) 可以是任意大小 例 a b b c是合法的邏輯表達(dá)式 此時以0代表假 非0代表真 例 設(shè)a 2 b 3 c 0 計算以下表達(dá)式的值 a bb ca c a c b c c a b bc 10 對于邏輯表達(dá)式的兩種基本技能 邏輯表達(dá)式的計算 邏輯表達(dá)式的構(gòu)造 邏輯表達(dá)式的構(gòu)造舉例 a b ca和b之一為0 但不同時為0 a b c5 4 3 a b b c a 0 b 0 a 0 b 0 a b 0 a b 0 a b 0 對于a 0 b 0 a 0 b 0a 0可以用 a代替a 0可以直接用a a b a b但必須是運算結(jié)果作為邏輯量的情況下 y a 0 與y a不等效 5 3if語句1 if語句的三種形式 if 表達(dá)式 語句 有一分支為空 scanf d if 表達(dá)式 語句1 else語句2 if x 0 y 1 x elsey 10000 if 表達(dá)式1 語句1 elseif 表達(dá)式2 語句2 elseif 表達(dá)式3 語句3 else語句n if score 100 printf A elseif score 90 printf B elseif score 80 printf C elseif score 70 printf D elseif score 60 printf E elseprintf F 對于 1 x當(dāng)x 0時 10000當(dāng)x 0時 一般用 if x 0 y 1 x elsey 10000 也可用 y 10000 if x 0 y 1 x y y 1 x if x 0 y 10000 例 習(xí)題5 5 x x 1 2x 1 1 x 10 3x 11 x 10 y main floatx y scanf f 說明 語句中的表達(dá)式可以是任意表達(dá)式 if x y 1 x elsey 10000 一個if結(jié)構(gòu)不可分割 if x y 1 x z 10 elsey 10000 一個分支中包含多個語句時 要用 if a 0 x 1 y 2 else x 10 y 20 分支程序設(shè)計舉例 基本技巧和算法 例 從鍵盤輸入三個整數(shù)到變量a b c 輸出其中最大的數(shù) 兩種典型算法 枚舉法 將各種可能性枚舉出來 選擇法 先假設(shè)后判斷更新 選擇法main inta b c max scanf d d d 例 從鍵盤輸入三個整數(shù)到變量a b c 要求按從大到小的順序輸出 兩種典型算法 枚舉法 將各種可能的排列枚舉出來 換位法 將a b c中的數(shù)據(jù)換位 換位法main inta b c t scanf d d d 3 5 8 5 3 8 5 5 3 a b c 2 if語句的嵌套在if語句中 又包含一個或多個if語句 if score 80 if score 90 printf A elseprintf B elseif score 60 printf C elseprintf D 注意else與if的匹配 3 條件運算符如果兩個分支的內(nèi)容都是給同一個變量賦值 則可用簡單的條件運算符處理 if a b max a elsemax b 可用 max a b a b 賦值運算符右邊為一條件表達(dá)式 條件表達(dá)式的一般形式 表達(dá)式1 表達(dá)式2 表達(dá)式3 條件表達(dá)式的執(zhí)行過程 a b a b優(yōu)先級 低于關(guān)系運算符 高于賦值運算符 結(jié)合性 右結(jié)合性 表達(dá)式1 條件表達(dá)式取表達(dá)式3的值 條件表達(dá)式取表達(dá)式2的值 非0 0 例 求a b c中的最大值 max a b a c a c b c b c 5 4switch語句 多分支 適用于根據(jù)一個表達(dá)式的值就可確定走哪個分支的情況 switch 表達(dá)式 常量表達(dá)式1 語句1常量表達(dá)式2 語句2 常量表達(dá)式n 語句ndefault 語句n 1 例 成績分檔 switch score 10 case10 printf A case9 printf B case8 printf C case7 printf E case6 printf F default printf G 注 應(yīng)使用break switch score 10 case10 printf A break case9 printf B break case8 printf C break case7 printf E break case6 printf F break default printf G 5 5程序舉例 習(xí)題5 10 有4個圓塔 圓心分別為 2 2 2 2 2 2 2 2 圓半徑為1 這4個塔的高度為10m 塔以外無建筑物 今輸入任一點的坐標(biāo) 求該點的建筑高度 塔外的高度為0 算法設(shè)計 條件 在某一圓內(nèi) 在圓1內(nèi)或在圓2內(nèi)或在圓3內(nèi)或在圓4內(nèi) 若設(shè)變量c1 c2 c3 c4分別代表是否在相應(yīng)的圓內(nèi) 則以上條件為 c1 c2 c3 c4 10在某一圓內(nèi) 0在圓外 x y h c1 x 2 2 y 2 2 1c2 x 2 2 y 2 2 1c3 x 2 2 y 2 2 1c4 x 2 2 y 2 2 1 main inth c1 c2 c3 c4 floatx y scanf f f 第六章循環(huán)控制6 1概述所謂循環(huán)控制 就是如何實現(xiàn)循環(huán)結(jié)構(gòu)的控制問題 有4種方法 用goto語句和if構(gòu)成循環(huán) 用while語句 用do while語句 用for語句 6 2用goto語句和if語句構(gòu)成循環(huán)例 對于計算s 1 2 3 4 5 6 7 8 9 10 0s 1i s i s i 1 i i 10 輸出s y n s 0 i 1 lable s i i if i 10 gotolable printf d s 語句標(biāo)號 無條件轉(zhuǎn)向語句 goto語句可以構(gòu)造循環(huán) 但不主張用 因為它容易破壞結(jié)構(gòu)化程序設(shè)計 goto語句可以構(gòu)造循環(huán) 但不主張用 因為它容易破壞結(jié)構(gòu)化程序設(shè)計 6 3while語句while語句是專門用于實現(xiàn)循環(huán)控制的語句之一 其一般形式為 while 表達(dá)式 語句含義 當(dāng)表達(dá)式的值為非0時 執(zhí)行循環(huán)體 否則執(zhí)行后續(xù)語句 語句關(guān)鍵 表達(dá)循環(huán)條件的表達(dá)式 循環(huán)體 語句關(guān)鍵字 執(zhí)行過程 while 表達(dá)式 語句 表達(dá)式 循環(huán)體 0 非0 i 10 s 0i 1 s s ii i 1 例 用while語句實現(xiàn)前面算法 main inti 1 s 0 while i 10 s s i i printf n d s 注意與if語句的區(qū)別 循環(huán)體中要有使循環(huán)條件趨于成立的條件 y n while i 10 s s i i 可簡寫為 while i 10 s i 非0 真 0 假 表達(dá)式 循環(huán)體 6 4do while語句do while語句主要用于實現(xiàn)直到型循環(huán) 其一般形式為 do循環(huán)體while 表達(dá)式 執(zhí)行過程 真 s 0i 1 i 10 s s ii i 1 假 例 用do while語句實現(xiàn)前面算法 main inti 1 s 0 dos i while i 10 printf n d s 注意與while語句的區(qū)別 假 表達(dá)式2 求解表達(dá)式1 循環(huán)體 求解表達(dá)式3 真 6 5for語句for語句是一種使用最為靈活 并且是用得最多的循環(huán)控制語句 其一般形式為 for 表達(dá)式1 表達(dá)式2 表達(dá)式3 循環(huán)體大體含義 對于 的情況執(zhí)行循環(huán)體內(nèi)容 例 用for語句實現(xiàn)前面的算法 s 0 for i 1 i 10 i s i 標(biāo)準(zhǔn)形式 表達(dá)式1 表達(dá)式2 表達(dá)式3 循環(huán)體 可以理解 循環(huán)變量i從初值1開始到終值10 步長為1 重復(fù)執(zhí)行循環(huán)體 for語句的常見變化 s 0 i 1 for i 10 i s i s 0 for i 1 i 10 s i s 0 i 1 for i 10 s i 省略表達(dá)式1 省略表達(dá)式3 省略表達(dá)式1和3 s 0 i 1 for s i if i 10 break s 10 i 10 for i s i 省略表達(dá)式2 表達(dá)式2是任意表達(dá)式 s 0 for i 1 j 10 i j i j s i j 12345678910在程序設(shè)計中不要過分追求它的多變性 i j 用逗號表達(dá)式 例 求n n 1 2 3 n 1 n參照累加求和main inti n 5 s 1 for i 1 i n i s i printf ns d s 注意s的初值 注意當(dāng)n較大時的情況 求和與連乘都是最常用的算法 要熟練掌握 例 求自然數(shù)1 100中能被3整除的數(shù)之和 main inti s 0 printf n d s 求能被3整除但不被7整除的數(shù)之和 for i 1 i 100 i s i for i 1 i 100 i if i 3 0 s i for i 3 i 100 i 3 s i for i 3 i 100 i 3 if i 7 s i 例 求任意100個數(shù)中的最大值 main inti a max max for i 1 imax max a printf nmax d max 循環(huán)體中沒有引用循環(huán)變量 i的作用 求任意個數(shù)中的最大值 for i 1 i if a 9999 break max 32768 外重循環(huán) 內(nèi)重循環(huán) 執(zhí)行200次 要掌握多重循環(huán)執(zhí)行的全過程 6 6循環(huán)的嵌套循環(huán)體內(nèi)又包含另一個完整的循環(huán)結(jié)構(gòu) 多重循環(huán) for i 1 i 10 i for j 1 j 20 j s i j 以上多重循環(huán)結(jié)構(gòu)可以簡寫為 for i 1 i 10 i for j 1 j 20 j s i j 例 找出行號乘以列號等于100的座位 main inti j for i 1 i 30 i for j 1 j 20 j if i j 100 printf n d d i j 注意循環(huán)的關(guān)系 例 百錢買百雞問題 給定100塊錢 要求正好買100只雞 已知公雞5元 只 母雞3元 只 小雞1元 3只 問公雞 母雞和小雞應(yīng)各買多少只 若考慮用方程組 x y z 1005x 3y z 3 100是一多解問題 用測試法求解的程序 main intx y z for x 1 x 100 x for y 1 y 100 y for z 1 z 100 z if x y z 100 程序可進(jìn)一步簡化為 main intx y z for x 1 x 20 x for y 1 y 33 y z 100 x y if 5 x 3 y z 3 0 100 printf n d d d x y z 用測試法求解問題的典型例子 測試法求解的程序設(shè)計有兩個要點 通過循環(huán)列出所有可能的解 對所有列出的可能的解進(jìn)行條件測試 例 判斷一個數(shù)m是否為素數(shù) main inti m scanf d 用測試法求解 例 習(xí)題6 6 打印出所有的 水仙花數(shù) 所謂 水仙花數(shù) 是指一個三位數(shù) 其各位數(shù)字的立方和等于該數(shù)本身 如 153是一水仙花數(shù) 因為153 13 53 33 main inti j k n for n 100 n 999 n i j k if i i i j j j k k k n printf n d n 通過循環(huán)列出n的所有可能的范圍 i n 100 k n 10 j n 10 10 main inti j k n for i 1 i 9 i for j 0 j 9 j for k 0 k 9 k n i 100 j 10 k if i i i j j j k k k n printf n d n 通過循環(huán)列出i j k的所有可能的范圍 例 習(xí)題6 4 求S i 1 2 3 4 19 20 20 i 1 main inti j floatt s 0 for i 1 i 20 i s printf ns f s 用兩重循環(huán)實現(xiàn) s t t 1 for j 1 j i j t j 用遞推法 遞推公式 ti ti 1 i 求S i 1 2 3 4 19 20 20 i 1 1 i 1 i 1 ti 1 i 20 i 2 20 i 2 main inti j floatt 1 s t for i 2 i 20 i t t i s t printf ns f s 例 遞推公式 s i 1 1 20 1 2 3 4 20 11111 ti ti 1 i main inti j floatt 1 s t for i 2 i 20 i t t i s t printf ns f s t t i 習(xí)題6 3 s a aa aaa aaaa aaaaa2 22 222 2222 22222遞推公式 ti ti 1 ti ti 1 10 a main inti j a 2 floatt a s t for i 2 i 5 i t t 10 a s t printf ns f s 例 求方程2x3 3x2 4x 1 0的根 簡單迭代法基本思想 將原方程f x 化為 x2 g x1 x2 2x13 3x12 1 4迭代公式 迭代過程 假定一個x1 x2 g x1 不成立 x2 x1 x1 x2 輸出x2 成立 main floatx1 x2 scanf f x1 x2 牛頓迭代法基本思想 牛頓迭代公式f x1 f x1 x1 x2 x2 x1 f x1 f x1 x1 x2 y x f x1 f x2 main floatx1 x2 f1 f scanf f 例 求定積分 數(shù)值積分 f x a b x sinx x dx a b 等分n h b a n 第i個矩形 x x a i 1 h include math h main intn i floata b x y h s 0 scanf f f d 第七章數(shù)組7 1數(shù)據(jù)結(jié)構(gòu)與數(shù)組的概念影響程序設(shè)計的因素除算法外還有數(shù)據(jù)結(jié)構(gòu) 數(shù)據(jù)結(jié)構(gòu)概念編寫一個程序除了重視算法的設(shè)計外 還需重視數(shù)據(jù)類型的選擇 即選擇合適的數(shù)據(jù)類型來存放要處理的數(shù)據(jù) 在程序設(shè)計中 數(shù)據(jù)類型就稱為數(shù)據(jù)結(jié)構(gòu) 選擇合適的數(shù)據(jù)類型實際上就是進(jìn)行數(shù)據(jù)結(jié)構(gòu)的設(shè)計 在程序設(shè)計中有格言 數(shù)據(jù)結(jié)構(gòu) 算法 程序說明數(shù)據(jù)結(jié)構(gòu)與算法同等重要 算法依賴于數(shù)據(jù)結(jié)構(gòu) 對于同一個問題的求解 可以采用不同的數(shù)據(jù)結(jié)構(gòu)和不同的算法 對不同的數(shù)據(jù)結(jié)構(gòu)有不同的算法 其復(fù)雜程度也會不同 選擇合適的數(shù)據(jù)結(jié)構(gòu) 可以降低算法的復(fù)雜程度 因此 在程序設(shè)計中應(yīng)重視數(shù)據(jù)結(jié)構(gòu)的設(shè)計 例 求任意100個數(shù)中的最大值 main inti a max max 32768for i 1 imax max a printf nmax d max 用一個簡單變量作為數(shù)據(jù)結(jié)構(gòu) 合理 算法簡單 對于三個數(shù)的排序 main inta b c t scanf d d d 對于很多個數(shù)的排序用變量會很復(fù)雜而用數(shù)組會使算法很簡單 仍可用變量作為數(shù)據(jù)結(jié)構(gòu) 數(shù)組的概念inta 10 a 0 a 1 a 2 a 3 a 4 a 5 a 6 a 7 a 8 a 9 一組具有同樣類型的數(shù)據(jù)的集合統(tǒng)一用一個名字代表 數(shù)組名 代表一組數(shù) 數(shù)組元素 下標(biāo) 數(shù)組名 數(shù)組中的各成員稱數(shù)組元素 由數(shù)組名加下標(biāo)唯一地確定 將一組數(shù)用一個名字代表 便于管理 只有一個下標(biāo)的數(shù)組稱為一維數(shù)組 可有二維數(shù)組 三維數(shù)組 七維數(shù)組 7 2一維數(shù)組的定義和引用 定義一般形式 類型符數(shù)組名 常量表達(dá)式 inta 10 floatb 10 類型符數(shù)組名長度作用 分配一組連續(xù)的內(nèi)存單元 說明 數(shù)組必須先定義后使用 數(shù)組名的命名規(guī)則與變量相同 常量表達(dá)式表示元素的個數(shù) 長度 下標(biāo)從0開始 常量表達(dá)式不能包含變量 即不允許作動態(tài)定義 引用逐個引用其元素 不能進(jìn)行整體引用 引用的一般形式 數(shù)組名 下標(biāo) 如 a 0 50 a 1 100 a 2 a 0 a 1 與a2 a0 a1有根本性的區(qū)別 下標(biāo)可變 例 從鍵盤輸入10個數(shù) 用變量 不方便 scanf d d d d d d d d d d 用循環(huán)控制輸入個數(shù)和下標(biāo)的變化 注意下標(biāo)的變化范圍 初始化在定義數(shù)組的同時給數(shù)組賦初值 inta 10 0 1 2 3 4 5 6 7 8 9 inta 10 0 1 2 3 4 inta 0 1 2 3 4 應(yīng)用舉例 1 對100個學(xué)生的分?jǐn)?shù)統(tǒng)計最高分 最低分和平均分 兩種方法 用變量作為存放初始數(shù)據(jù)的數(shù)據(jù)結(jié)構(gòu)用數(shù)組作為存放初始數(shù)據(jù)的數(shù)據(jù)結(jié)構(gòu) main inti a max min floataver 0 max 0 min 100 for i 0 imax max a if a min min a aver a aver 100 printf n d d f max min aver 用變量 main inti a 100 max min floataver 0 for i 0 imax max a i if a i min min a i aver a i aver 100 printf n d d f max min aver 用數(shù)組 找最大最小的位置 max 0 min 0 if a i a max max i if a i a min min i 2 統(tǒng)計高于平均分的人數(shù) main inti a n floataver 0 for i 0 i 100 i scanf d n 0 for i 0 iaver n printf n d n 用變量 數(shù)據(jù)結(jié)構(gòu)不合理 main inti a 100 n floataver 0 for i 0 iaver n printf n d n 用數(shù)組 1 3 對100個學(xué)生的分?jǐn)?shù)統(tǒng)計出每分一檔人數(shù) 0 1 2 3 4 99 100 main inti a for i 1 i 100 i scanf d 輸出 inti a n 101 for i 0 i 101 i n i 0 n a 完整程序 main inti a n 101 for i 0 i 0 i printf n 3d 3d i n i 體會數(shù)組作為存放結(jié)果的數(shù)據(jù)結(jié)構(gòu)時的優(yōu)越性 按10分一檔統(tǒng)計 main inti a n 101 for i 0 i 101 i n i 0 for i 1 i 100 i scanf d inti a n 11 for i 0 i 11 i n i 0 n a 10 4 對10個學(xué)生的分?jǐn)?shù)按從小到大的順序排序后輸出 兩種典型的排序算法 選擇法和起泡法 選擇法基本思想 首先選擇最小的數(shù)放在0位置 再在剩下的數(shù)中選擇最小的數(shù)放在下一位置 依次類推 共進(jìn)行9次選擇 5874390126 每次選擇都要與其后的所有數(shù)進(jìn)行比較換位 5874390126 i j main inta 10 i j t for i 0 ia j t a i a i a j a j t for j 0 j 10 j printf 3d a j 5874390126 5874390126 i j 先找最小值所在的位置 最后再換位 main inta 10 i j t k for i 0 i 10 i scanf d 起泡法基本思想 首先將所有數(shù)中的最大值 冒泡 到最后位置 再將剩下的數(shù)中的最大值 冒泡 到上一位置 依次類推 共進(jìn)行9次 冒泡 每次 冒泡 都是一種翻滾過程 即相鄰兩個數(shù)進(jìn)行比較換位 5874390126 main inta 10 i j t for i 0 ia i 1 t a i a i a i 1 a i 1 t for j 0 j 10 j printf 3d a j 要特別注意兩個循環(huán)的范圍 5 循環(huán)移位對一數(shù)列中的每個數(shù)向后移3個位置 最后3個數(shù)移到最前面 58743901261265874390 用循環(huán)移位實現(xiàn) 5874390126main inti j k a 10 for i 0 i 10 i scanf d for i 1 i 10 i a i a i 1 for i 9 i 0 i a i a i 1 k a 9 a 0 k for j 1 j 3 j k a 9 6 狐貍找兔子問題繞圍繞著山頂有10個洞 一只兔子和一只狐貍分別住在洞里 狐貍總想吃掉兔子 一天 兔子對狐貍說 你想吃掉我有一個條件 先把洞順序編號 你從最后一個洞出發(fā) 第一次先到第一個洞找我 第二次隔一個洞找 第三次隔兩個洞找 依次類推 尋找次數(shù)不限 我躲在一個洞里不動 只要找到我你就可以飽餐一頓 狐貍一想只有10個洞 尋找次數(shù)又不限 那有找不到的呢 馬上答應(yīng)了條件 結(jié)果狐貍跑斷了腿也沒找到 請問兔子躲在哪個洞里 1 2 3 4 6 7 8 9 10 5 算法思想 開辟數(shù)組 每個元素代表一個洞 并賦初值0 表示各個洞都還未找 然后按規(guī)律找 每找一個洞 對應(yīng)的數(shù)組元素就賦值1 表示已找過 最后根據(jù)數(shù)組元素值1與0來識別各洞是否已找過 main inti k 10 inta 10 0 0 0 0 0 0 0 0 0 0 for i 1 i 10000 i k k i 10 if k 0 k 10 a k 1 1 for i 0 i 10 i if a i 0 printf 3d i 1 7 3二維數(shù)組的定義和引用 定義一般形式 類型符數(shù)組名 常量表達(dá)式 常量表達(dá)式 inta 3 4 floatb 5 10 行列 二維數(shù)組的邏輯結(jié)構(gòu)就如同一張表格 a 0 0 a 0 1 a 0 2 a 0 3 a 1 0 a 1 1 a 1 2 a 1 3 a 2 0 a 2 1 a 2 2 a 2 3 存放形式 按行存放 a 0 a 1 a 2 二維數(shù)組可以看作是一個特殊的一維數(shù)組 它的元素又是一個一維數(shù)組 C語言這樣的處理方法在很多情況下顯得很方便 與一維數(shù)組相比 二維數(shù)組的定義多一個長度 其元素多一個下標(biāo) 在應(yīng)用中 如果要處理的數(shù)據(jù)如同一數(shù)列 則可定義一維數(shù)組來存放 而如果要處理的數(shù)據(jù)如同一張表格 則應(yīng)定義二維數(shù)組來存放 引用引用形式 數(shù)組名 下標(biāo) 下標(biāo) 如 a 0 3 a 1 2 a 2 3 其元素有兩個下標(biāo) 例 從鍵盤輸入12個數(shù)到二維數(shù)組中 inta 3 4 i j for i 0 i 3 i for j 0 j 4 j scanf d 需要用兩重循環(huán)來控制兩個下標(biāo)的變化 如果鍵盤輸入的數(shù)據(jù)是 123456789101112 則在數(shù)組中如何存放 兩個循環(huán)換

溫馨提示

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

最新文檔

評論

0/150

提交評論