第1章程序設(shè)計(jì)入門(mén).ppt_第1頁(yè)
第1章程序設(shè)計(jì)入門(mén).ppt_第2頁(yè)
第1章程序設(shè)計(jì)入門(mén).ppt_第3頁(yè)
第1章程序設(shè)計(jì)入門(mén).ppt_第4頁(yè)
第1章程序設(shè)計(jì)入門(mén).ppt_第5頁(yè)
已閱讀5頁(yè),還剩46頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

第一講 程序設(shè)計(jì)入門(mén) 主講 高放哈爾濱理工大學(xué)集訓(xùn)隊(duì) 本講要點(diǎn) 算術(shù)表達(dá)式變量及其輸入順序結(jié)構(gòu)程序設(shè)計(jì)分支結(jié)構(gòu)程序設(shè)計(jì)C C 編碼規(guī)范 自學(xué) 小結(jié)與習(xí)題 算術(shù)表達(dá)式 先看一段小程序程序的運(yùn)行結(jié)果如下圖 n表示回車換行 算術(shù)表達(dá)式 看不懂每行什么意思 不要緊 我們一起來(lái)探索一下 下面做4個(gè)實(shí)驗(yàn) 實(shí)驗(yàn)1 修改程序 輸出3 4的結(jié)果實(shí)驗(yàn)2 修改程序 輸出5 6的結(jié)果實(shí)驗(yàn)3 修改程序 輸出8 4的結(jié)果實(shí)驗(yàn)4 修改程序 輸出8 5的結(jié)果 算術(shù)表達(dá)式 8 5輸出了1 注意 在C語(yǔ)言中 8 5的確切的含義是8除以5所得的商值的整數(shù)部分 下面是一段輸出8 5并保留一位小數(shù)的程序注意 上面程序中 百分號(hào)后面是小數(shù)點(diǎn) 然后是數(shù)字1 再然后是小寫(xiě)字母l 最后是小寫(xiě)字母f 算術(shù)表達(dá)式 下面再做3個(gè)實(shí)驗(yàn)實(shí)驗(yàn)5 把 1lf中的數(shù)字1改為2 結(jié)果如何 能猜想出 1 的確切意思嗎 如果把小數(shù)點(diǎn)和1都刪除 lf的含義是什么 算術(shù)表達(dá)式 解答 lf表示輸出double浮點(diǎn)數(shù) 1lf表示輸出double浮點(diǎn)數(shù) 并且小數(shù)點(diǎn)后面保留一位數(shù)字 2lf表示輸出double浮點(diǎn)數(shù) 并且小數(shù)點(diǎn)后面保留二位數(shù)字 算術(shù)表達(dá)式 實(shí)驗(yàn)6 字符串 1lf不變 把8 0 5 0改成原來(lái)的8 5 結(jié)果如何 結(jié)果 輸出了0 0 算術(shù)表達(dá)式 實(shí)驗(yàn)7 字符串 1lf改為原來(lái)的 d 8 0 5 0不變 結(jié)果如何 算術(shù)表達(dá)式 實(shí)際上 如果編譯器不同 可能得到的結(jié)果也不同對(duì)于上面的實(shí)驗(yàn)6和實(shí)驗(yàn)7的答案很難簡(jiǎn)單的解釋 真正的原因是涉及整數(shù)和浮點(diǎn)編碼問(wèn)題在這里大家需要清楚一點(diǎn) 計(jì)算機(jī)中用不同的方式表示整數(shù)和浮點(diǎn)數(shù) 想詳細(xì)了解看教材吧 算術(shù)表達(dá)式 總結(jié)一下我們通過(guò)實(shí)驗(yàn)學(xué)到了什么整數(shù)值用 d 實(shí)數(shù)用 lf輸出 對(duì)于實(shí)數(shù) 如果想輸出3位小數(shù)點(diǎn) 就用 3lf 4位就是 4lf 類推 整數(shù) 整數(shù) 整數(shù) 浮點(diǎn)數(shù) 浮點(diǎn)數(shù) 浮點(diǎn)數(shù) 提問(wèn) 整數(shù) 浮點(diǎn)數(shù) 浮點(diǎn)數(shù) 整數(shù) 答案 都是浮點(diǎn)數(shù) 實(shí)際上 只要算式中包含浮點(diǎn)數(shù) 所有的整數(shù)在計(jì)算之前都會(huì)先轉(zhuǎn)換成浮點(diǎn)數(shù) 算術(shù)表達(dá)式C 輸出一定要用printf嗎 當(dāng)然不是 剛才講的是C語(yǔ)言的輸入輸出方式 如果采用C 寫(xiě)代碼 還可以有更簡(jiǎn)單的方式 算術(shù)表達(dá)式C C 用cout輸出 和 usingnamespacestd 就行了 關(guān)于前者的相關(guān)術(shù)語(yǔ)叫 頭文件 后者的相關(guān)術(shù)語(yǔ)叫 命名空間 算術(shù)表達(dá)式C 前面說(shuō)cout更方便 但也有不方便的時(shí)候 那么cout怎么控制輸出小數(shù)位數(shù) 較printf麻煩一些 這時(shí)候發(fā)現(xiàn)還是printf好用 算術(shù)表達(dá)式 cout就說(shuō)到這 是不是覺(jué)得讓計(jì)算機(jī)算個(gè)1 2太low了 下面寫(xiě)一個(gè)程序讓計(jì)算機(jī)計(jì)算 算術(shù)表達(dá)式 計(jì)算機(jī)計(jì)算說(shuō)明 sqrt 是一個(gè)數(shù)學(xué)函數(shù) 用它就得加上 include 變量及其輸入 在程序中可以通過(guò)鍵盤(pán)輸入 然后根據(jù)輸入內(nèi)容來(lái)計(jì)算結(jié)果 程序如下 注意 scanf中的占位符和變量的數(shù)據(jù)類型應(yīng)一一對(duì)應(yīng) 且每個(gè)變量前需要 符號(hào) 變量及其輸入 輸入底面積半徑r和高h(yuǎn) 輸出圓柱體的表面積 保留3位小數(shù) 格式見(jiàn)樣例 樣例輸入 3 59樣例輸出 Area 274 889分析 圓柱體的表面積 底面積 2 側(cè)面積 根據(jù)平面幾何知識(shí) 底面積 r2 側(cè)面積 2 rh 變量及其輸入 圓柱體的表面積 底面積 2 側(cè)面積 根據(jù)平面幾何知識(shí) 底面積 r2 側(cè)面積 2 rh const表示聲明一個(gè)常量 常量就是不能改變的量 所以要初始化一個(gè)值 探究 如果嘗試改變常量會(huì)如何 賦值是個(gè)動(dòng)作 先計(jì)算右邊的值 再賦給左邊的變量 覆蓋它原來(lái)的值 變量及其輸入 總結(jié)一下 scanf的用法和printf有些類似 占位符的表示意義是相同的 只不過(guò)一個(gè)是輸入 一個(gè)是輸出 scanf輸入變量的時(shí)候 注意在變量前加上符號(hào) 取地址符 聲明一個(gè)常數(shù)時(shí) 在前面加上const就行 注意一定要初始化 變量及其輸入C 當(dāng)然 前面說(shuō)過(guò) C 有自己的輸入方式 它叫cin 用法與cout也非常類似 十分方便 注意 cin是 就像cin把一個(gè)值塞到變量里面去 變量及其輸入C 加上ios sync with stdio false 可以加速 順序結(jié)構(gòu)程序設(shè)計(jì) 例1 2三位數(shù)反轉(zhuǎn) 輸入一個(gè)三位數(shù) 分離出它的百位 十位和個(gè)位 反轉(zhuǎn)后輸出 樣例輸入 127樣例輸出 721 分析 首先將三位數(shù)讀入變量n 然后進(jìn)行分離 百位數(shù) n 100 兩邊都是整數(shù) 所以除完是整數(shù) 十位數(shù) n 10 10 這里的 是取余數(shù)操作 個(gè)位數(shù) n 10 順序結(jié)構(gòu)程序設(shè)計(jì) 疑問(wèn) 當(dāng)輸入520時(shí) 應(yīng)該輸出025還是25 如果在比賽中出現(xiàn)了這種題目描述不清或者歧義的問(wèn)題 可以向比賽舉辦方提問(wèn) 發(fā)Message 順序結(jié)構(gòu)程序設(shè)計(jì) 當(dāng)然 這道題也可以這么寫(xiě) d表示一個(gè)整數(shù) 3d表示一個(gè)整數(shù) 至少占3位 如果不到3位 在前面用空格補(bǔ)齊 03d表示一個(gè)正數(shù) 至少占3位 如果不到3位 在前面用0補(bǔ)齊 順序結(jié)構(gòu)程序設(shè)計(jì) 例1 3交換變量 輸入兩個(gè)整數(shù)a和b 交換二者的值 然后輸出 樣例輸入 82416樣例輸出 16824 分析 按題目的所說(shuō) 先把變量存入變量a和b 然后交換 最經(jīng)典的方法是三變量法 思考 能不能直接寫(xiě)成a b b a 順序結(jié)構(gòu)程序設(shè)計(jì) 另一個(gè)方法沒(méi)有借助任何變量 但較難理解 十分巧妙吧 不過(guò)實(shí)際上不常用 因?yàn)楸仨氁x加減法才可以用 僅作為思維訓(xùn)練就可以了 假設(shè)輸入12則最開(kāi)始a 1 b 2 a a b a 3 b a b b 3 2 1 a a b a 3 1 2 順序結(jié)構(gòu)程序設(shè)計(jì) 多數(shù)算法競(jìng)賽采用黑盒測(cè)試 即只考查程序解決問(wèn)題的能力 而不關(guān)心它采用的方法 所以三變量法不是解決變量交換的最佳途徑 對(duì)于本題而言 最合適程序如下 KeepItSimpleandStupid KISS 分支結(jié)構(gòu)程序設(shè)計(jì) 例1 4雞兔同籠 已知雞和兔的總數(shù)量為n 總腿數(shù)為m 輸入m和n 依次輸出雞的數(shù)目和兔的數(shù)目 如果無(wú)解 則輸出 Noanswer 不要引號(hào) 樣例輸入 1432樣例輸出 106樣例輸入 122樣例輸出 Noanswer 分支結(jié)構(gòu)程序設(shè)計(jì) 分析 設(shè)雞有a只 兔有b只 則a b n 2a 4b m 聯(lián)立解得a 4n m 2 b n a 在本題中 首先 a和b都是整數(shù) 其次 a和b必須是非負(fù)的 可以通過(guò)下面的程序判斷 分支結(jié)構(gòu)程序設(shè)計(jì) if語(yǔ)句的基本格式為 if 條件 語(yǔ)句1 else語(yǔ)句2 m 2 1 a 0 b 0是一個(gè)邏輯表達(dá)式 和算術(shù)表達(dá)式類似 邏輯表達(dá)式也由運(yùn)符符和值構(gòu)成 例如 運(yùn)算符稱為 邏輯或 a b表示a和b只要有一個(gè)為真 a b就為真 如果a和b都為真 則a b也為真 if語(yǔ)句的條件是一個(gè)邏輯表達(dá)式 它的值可能為真 也可能為假 分支結(jié)構(gòu)程序設(shè)計(jì) 練習(xí) 寫(xiě)出代碼完成以下功能 如果a 0則輸出a 否則輸出 aif a 0 printf d n a elseprintf d n a 如果a 0或b 0輸出a 否則輸出 aif a 0 b 0 printf d n a elseprintf d n a 如果a 0且b 0輸出a 否則輸出 aif a 0 分支結(jié)構(gòu)程序設(shè)計(jì) 小結(jié) if語(yǔ)句中的條件可以由多個(gè)條件組成而成 組成的方式有與 注意 這里的 和 一樣 是一個(gè)符號(hào) 表示不等于 表示等于 分清等于符號(hào) 和賦值符號(hào) 分支結(jié)構(gòu)程序設(shè)計(jì) 練習(xí) 如果a大于0或者b和c都大于0 輸出c的值 如果a或b大于0且c大于0 輸出c的值 優(yōu)先級(jí) 如果記不清優(yōu)先級(jí) 加上括號(hào)永遠(yuǎn)是對(duì)的 分支結(jié)構(gòu)程序設(shè)計(jì) 練習(xí) 如果a小于b 交換變量a與b的值如果后面有多條語(yǔ)句加上大括號(hào)組成一條復(fù)合語(yǔ)句 分支結(jié)構(gòu)程序設(shè)計(jì) 短路特性 在邏輯表達(dá)式a b中 只要a為真 無(wú)論b的取值為真或假 a b均為真 換句話說(shuō) 只要a真 不必計(jì)算b的值 C語(yǔ)言正是采取了這樣的策略 稱為短路 short circuit 類似地 邏輯表達(dá)式a b 也存在這種短路現(xiàn)象 只要a為假 不必計(jì)算b的值 結(jié)果必為假 分支結(jié)構(gòu)程序設(shè)計(jì) 練習(xí) 寫(xiě)出下列各邏輯表達(dá)式的值 真為1 假為0 設(shè)a 3 b 4 c 5 1 a b c b c答案 由于b c為假 所以剩下的就不用計(jì)算了 2 a b c b c答案 1 由于a為真 所以剩下的就不用計(jì)算了 3 a b c 1答案 1 由于1為真 所以剩下的就不用計(jì)算了 4 x a y b 0答案 0 由于0為假 所以剩下的就不用計(jì)算了 分支結(jié)構(gòu)程序設(shè)計(jì) 例1 5三整數(shù)排序 輸入3個(gè)整數(shù) 從小到大排序后輸出 樣例輸入 20733樣例輸出 72033 分析 a b c 3個(gè)數(shù)一共只有6種可能的順序 abc acb bac bca cab cba 所以最簡(jiǎn)單的思路是使用6條if語(yǔ)句 分支結(jié)構(gòu)程序設(shè)計(jì) a b c 3個(gè)數(shù)一共只有6種可能的順序 abc acb bac bca cab cba 所以最簡(jiǎn)單的思路是使用6條if語(yǔ)句 輸入111輸出什么 分支結(jié)構(gòu)程序設(shè)計(jì) 注意 編寫(xiě)出來(lái)的程序 即使通過(guò)了題目中給出的樣例 程序仍然可能存在問(wèn)題 這種思路情況下 正確的寫(xiě)法如下 分支結(jié)構(gòu)程序設(shè)計(jì) 另一種思路是把a(bǔ) b c這3個(gè)變量本身改成a b c的形式 首先檢查a和b的值 如果a b 則交換a和b 利用前面進(jìn)過(guò)的三變量交換法 接下來(lái)檢果a和c 最后檢查b和c 分支結(jié)構(gòu)程序設(shè)計(jì) 最后一種思路再次利用了 問(wèn)題求解 這一目標(biāo) 它實(shí)際上并沒(méi)有真的進(jìn)行排序 我們求出了最小值和最大值 并且發(fā)現(xiàn)中間值是可以計(jì)算出來(lái)的 注意 程序1 15中包含了的 當(dāng)前最小值 x和 當(dāng)前最大值 z 它們初始化為a 但是隨著 比較 操作的進(jìn)行而慢慢更新 最后變成真正的最小值和最大值 這個(gè)技巧極為實(shí)用 C C 編碼規(guī)范 這一部分的資料包含在課件的壓縮包中 請(qǐng)大家自己學(xué)習(xí) 這里只強(qiáng)調(diào)兩點(diǎn) 代碼要有縮進(jìn)變量名盡量含義明顯 小結(jié)與習(xí)題 本次課的內(nèi)容主要目的是為了引導(dǎo)大家入門(mén) 所以跳過(guò)了很多細(xì)節(jié)并沒(méi)有展開(kāi) 比如 include是什么意思 scanf printf的具體用法 if else的嵌套和對(duì)應(yīng)等等 這些部分 如果大家想了解 請(qǐng)大家在C C 教材上自己獲得 推薦大家回去自習(xí)教材上if else部分語(yǔ)法 和scanf printf部分語(yǔ)法 不求一次完全看懂 但求比看之前多知道一些 小結(jié)與習(xí)題 同課件打包發(fā)給大家的還有一些習(xí)題 現(xiàn)在大家獨(dú)立完成這些習(xí)題尚有難度 所以每個(gè)習(xí)題都給了答案 請(qǐng)大家閱讀 并上機(jī)照著實(shí)踐 接下來(lái)幾頁(yè)將很快的解釋一些習(xí)題中出現(xiàn)的語(yǔ)法概念 大家在做習(xí)題時(shí)照這參考 小結(jié)與習(xí)題 類型 C C 中變量有類型的概念 比如我們已知的有整形 浮點(diǎn)形 細(xì)分他們有 整形 int整數(shù)longint長(zhǎng)整數(shù)longlongint長(zhǎng)長(zhǎng)整數(shù)unsingedint無(wú)符號(hào)整數(shù) 浮點(diǎn)形 float浮點(diǎn)數(shù)double雙精度浮點(diǎn)數(shù) 就是精度比f(wàn)loat高了一倍 字符形 char布爾形 bool C 特有 小結(jié)與習(xí)題 表示范圍 計(jì)算機(jī)能表示的數(shù)是有限的 比如char形的變量 能表示的范圍 128 127超過(guò)這個(gè)范圍會(huì)產(chǎn)生溢出 小結(jié)與習(xí)題 錯(cuò)誤 編程很容易產(chǎn)生錯(cuò)誤 甚至?xí)钩绦虮罎?比如 除0錯(cuò)誤會(huì)使程序崩潰有些錯(cuò)誤雖然不會(huì)崩潰 但是結(jié)果異常 比如執(zhí)行sqrt 10 將會(huì)得到 1 IND這樣奇怪的結(jié)果 1 IND 是個(gè)什么東西 小結(jié)與習(xí)題 轉(zhuǎn)義字符我們用到現(xiàn)在的換行符 n就是一個(gè)轉(zhuǎn)義字符 這個(gè)符號(hào)接下來(lái)的一個(gè)字符的意義將被轉(zhuǎn)換 從而表達(dá)一些不能直接打出來(lái)的字符 想要輸出 怎么辦 就是一個(gè)選擇 可以理解為 把后面的 轉(zhuǎn)義了 后面的 就沒(méi)有了轉(zhuǎn)義的意義 變成了一個(gè)普通字符 那么還有那些轉(zhuǎn)義字符呢 小結(jié)與習(xí)題 數(shù)學(xué)函數(shù)前面用到的sqrt就是一個(gè)數(shù)學(xué)函數(shù) 常用的

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 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)論