C語言趣味程序百例精解.pptx_第1頁
C語言趣味程序百例精解.pptx_第2頁
C語言趣味程序百例精解.pptx_第3頁
C語言趣味程序百例精解.pptx_第4頁
C語言趣味程序百例精解.pptx_第5頁
已閱讀5頁,還剩139頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、,一南軍三軍盟附啊在事自里啤,目錄,1 1 2 3 4 5 6 6 7 8 0 2 2 3 4 5 6 7 8 1 1 1 2 2 3 4 5 5 6 6 8 9 0 0 1 鳴,唱E 咱A 咽BA 唱E 咽A 咱aA 唱A 唱EA,唱 “ny,“oy 內(nèi)“, nZM Oyu “ay 萬“0“。, nZM “OZ 只“。 “。,“7 內(nèi)u n嚕HW,肉4UU,咱EA, 數(shù) 山 皮 位 時(shí) 山 川 口 剛 , 吁 的 ,T t,J 1 個(gè) ,u,三 川 川 叫,得 ,法 線 “, , 獲 忖 ,主 ,段 “, 題 , 數(shù) 數(shù) 數(shù) ,HHHb,與 “ 叮叮 數(shù) 忡 少 明,網(wǎng) 犯, 獻(xiàn) 瞇 鹽 鹽

2、,數(shù), 叫,”,跚 線 線 ,尾 的 多,數(shù) 曬 事 錢 利 魚,魚數(shù) 的 的 數(shù) 方 朗 ,回 族 和,刷 刷 刷 卜 明 叫 樹 時(shí)32孟22佳 跚 地 稱芷,速 怦 脯 數(shù) 數(shù) 數(shù) jm 瞅 數(shù)Z,M 制 制 制 星 最 次 乘 書 輝 刪 蟬 陽 瞅 臍 僻 觸 蠟 刊 蚓 輒 峨 斗,他 軒 陽 剛 撾 蛐 陰 陽 相 黝 精 明 刊 , 繪 繪 繪 歌 求 高 階 借 楊 章 1 2 3 4 5 6 7 8 9 第,10 第二章 11 12 13 14 15 16 17 第三章 18 19 20 21 22 23 24 25 26 27 28 29 第四章 30 31 32,.,3

3、3 34 35 第五章 36 37 38 39 40 41 第六章 42 43 44 45 46 47 第七章 48 49 50 51 52 53 54 55 56 57 第八章 58 拉丁方.”.“.” 59 填表格 60 61 62 63 64 65 66 67 68 第九章 69 70 2,L,回文素?cái)?shù) 要發(fā)就發(fā) 素?cái)?shù)幻方,.”.”.”.33 .”.34 .36 44 44 45 45,不定方程求整數(shù)解.”.”.”. 百錢百雞問題. 愛因斯坦的數(shù)學(xué)題.”.,換分幣. - .”川.,年齡幾何.“.“. . 46 三色球問題. .47,馬克思手稿中的數(shù)學(xué)題.47,分?jǐn)?shù)踵題. 49,最大公約數(shù)

4、和最小公倍數(shù). , .”、.49 50,分?jǐn)?shù)比較.“.”. 分?jǐn)?shù)之和.”,將真分?jǐn)?shù)分解為埃及分?jǐn)?shù)“.52,列出真分?jǐn)?shù)序列.”. :.” 53,計(jì)算分?jǐn)?shù)的精確值.“.54 邏鏡推理與判斷.56 新娘和新郎”.“.56 委派任務(wù).”.57 誰在說謊.”.58 誰是竊賊”.”.”.”.“.59 黑與白.”.”.”.60,謎語博士的難題 (1) . . 61,謎語博士的難題( 2) .62 哪個(gè)大夫哪天值班.“.”.“.64 區(qū)分旅客國籍. .66 誰家孩子跑最慢“.”.”.68 70 70,數(shù)字。到的奇妙變幻.川.”.,1 9 分成 1 : 2 I 3 的三個(gè) 3 位數(shù).”. ,. 72 1 9 組

5、成三個(gè) 3 位的平方數(shù). . .”73,由 8 個(gè)整數(shù)形成奇特的立方體.-. - .:.山. 75,減式還原 “ 乘式還原( 1) .、.”.”“. . 78,乘式還原(2).“.“.79 除式還原(1)“.”.”.“82 83,除式還原(2).”.?山”.叩“.,九位累進(jìn)可除數(shù).”.”.,_. 85,徽的變幻 .”.”.”.88 魔術(shù)師的猜牌術(shù)( 1) . ,.,.叫.”. 88 魔術(shù)師的猜牌術(shù)( 2).”.”.川”. .”.川. 89,,,,,民,AV,1A “。,nO AA崎,FD 。4 QJV Qd nV,AV A 。qd pu,au 。o,nv qu,A叢E nt nu 14,RU

6、Qu au nwu nv,1i qJV 嚴(yán)D,n3,9 9 9 9 9 9 0山 QU Od 9 0 0 0 0 0 0 o o 1 1 1 2 2 2 2 2 3 3 3 3 3,唱EA 唱EE 咱EA 咽 唱a 咱E4 唱EEA 咽, 咱EA 唱A 咽EA 唱EA 唱EA 唱EA,喃自4,唱EA EA 咽A TE啥唱EA 咽EA,、,EA 4,數(shù) 整 , 正 “, ,uu, 字 ,u,個(gè) 碼 川 質(zhì) 數(shù),5 硅 性,uuuu, 馬 H 羅,的 塊 , 趣 uu,uuuuuu, ,U,H 列 數(shù),3 4, 題 ,) 有,HHHH,UHHHUH 川 、尸 u,n,為,法, 寸 的 果 趣 0

7、0 個(gè) “ “,u,H,u,uqqu,序 u 譯 u,的 u,加 U,1 磅,糖 山 灑,值 值 一 數(shù) 理 成,” “, H,U, 戲 戲 程 翻 件 的 川,題 間,示 分,分 想 似 似的 “ “,常 定 形 戲,” 換 “ “,游 游 川 味 “,數(shù) “ 條 “ 數(shù) “,合 表 叫 孩 書 ,的 猜 近 近 方 想 理 克 斯 的 游 牌 交 軍 戲 數(shù) 數(shù) “,趣 子 伯 賽 異 題 整 動,夫,組 能 1 小 買 松 與 的 的 平 猜 定 列 徹 數(shù) 力 發(fā) 子 將 “,游猜 猜 塔 它 產(chǎn) 拉 比 特 問 正 移,瑟 票 數(shù) 稱 個(gè) 明 瓦 理 數(shù) 谷 方 布 科 文 智 動

8、白 勝 山 機(jī) 機(jī) 諾 其 子 阿 美 足 后 MK 字,約,郵 和 可 川 小 波 定 求 求 奇 角 四 卡 尼 固,自 黑 常 搶 搬 入 人 漢,兔 將 選 滿 八 超 數(shù),章,章,。, 刊 刊 刊 付 章 刊m mm 陽 白 白 第,臼 UM 臼 “ 盯 胞 第,的 問 貝 歸 歸,二 問 歸 mw 阻 四 川, 第,f,3,,,第一章最簡單的問題與算法,,,作為趣味程序設(shè)計(jì)的入門,我們先來涉獵一些簡單的例子。通過這些例子,讓讀者體驗(yàn)一 下程序設(shè)計(jì)的樂趣。 1. 繪制余弦曲線 在屏幕上用“鈴”顯示 0。360。的余弦函數(shù)cos(x )曲線。 姥問題分析與算法設(shè)計(jì), 如果在程序中使用數(shù)

9、組,這個(gè)問題十分簡單。但若規(guī)定不能使用數(shù)組,問題就變得不容易 了。 關(guān)鍵在于余弦曲線在 0。360。的區(qū)間內(nèi),一行中要顯示兩個(gè)點(diǎn)F 而對一般的顯示器來說, 只能按行輸出,即:輸出第一行信息后,只能向下一行輸出,不能再返回到上一行。為了獲得本 題要求的圖形就必須在行中次順序輸出兩個(gè)“禱”。 為了同時(shí)得到余弦函數(shù) cos(x )圖形在一行上的兩個(gè)點(diǎn),考慮利用 cos (x )的左右對稱性。 將屏幕的行方向定義為 x ,列方向定義為y ,則o1so的圖形與 180。360。的圖形是左右對 稱的。若定義圖形的總寬度為 62 列,計(jì)算出 x 行。180。時(shí)y 點(diǎn)的坐標(biāo) m ,那么在同一行與之 對稱的 1

10、80。.360。的y 點(diǎn)的坐標(biāo)就應(yīng)為 62-m 。程序中利用反余弦函數(shù)acos 計(jì)算坐標(biāo)儀,y) 的對應(yīng)關(guān)系。 使用這種方法編出的程序短小精練,體現(xiàn)了一定的技巧。 普程序說明與注釋 #include (stdio. h #include (math. h) main() double y; mt x ,口1;,for (y = 1; y = -1; y O. 1) ,憐 y 為列方向,值從 1到一 1,步長為0. 1 鈴,m=acos(y )鈴 10;,鈴計(jì)算出y 對應(yīng)的弧度 m ,乘10 為圖形放大倍數(shù)鈴,for (x=l; xm; x+) printf (” ; print(” II) I

11、 for(; x62-m; x+) printf (”) ; printf (”鈴n);,贊控制打印左側(cè)的贅號鈴,鈴控制打印同一行中對稱的右側(cè)禱號禱,鑄運(yùn)行結(jié)果,?,民,民,* *,當(dāng)k ,民,* *,*,,民,* * , 嶇 比 民,*, ,*,大 ,* 民,曾, ,也民, ,食k,*,長思考題,如何實(shí)現(xiàn)用“禱”顯示 oo360。的sin(x )曲線。 2. 繪制余弦曲線和直線 在屏幕上顯示 0。360的 cos(x )曲線與直線們對45 鑄(y-1)+31 的迭加圖形。其中 cos(x )圖形用“脊”表示, f (x )用“十”表示,在兩個(gè)圖形的交點(diǎn)處則用 f(x)圖形的符號。 鈴問題分析

12、與算法設(shè)計(jì) 本題可以在上題的基礎(chǔ)上進(jìn)行修改。圖形迭加的關(guān)鍵是要在分別計(jì)算出同一行中兩個(gè)圖 形的列方向點(diǎn)坐標(biāo)后,正確判斷相互的位置關(guān)系。為此,可以先判定圖形的交點(diǎn),再分別控制打 印兩個(gè)不同的圖形。 鑄程序說明與注釋 #include (stdio. h) #include (math. h) main() double y; int x , m , n , yy; for (yy=O; yy if ( x=m ,羨運(yùn)行結(jié)果, * *, ,*, ,3比,*,*, 民,*, ,*,,比 民,民, *,民 也比,民,* ? ?翻,*,* ,*,民,鑄思考題 如何實(shí)現(xiàn) sin(x)曲線與 cos(x )

13、曲線圖形的同時(shí)顯示。 3. 繪制圓,在屏幕上用“禱”畫一個(gè)空心的圓。 鈴問題分析與算法設(shè)計(jì) 打印圓可利用圖形的左右對稱性。根據(jù)圓的方程 z R R=X X+Y Y 可以計(jì)算出圓上每點(diǎn)行和列的對應(yīng)關(guān)系。 鑄程序說明與注釋 #include (stdio. h #include (math. h main() double y; mt x ,口l; for (y=lO; y=-10; y 一 m = 2.5 鈴 sqrt(l-00-y 餐 y);,鈴圓的半徑為 10 鈴,鈴計(jì)算行y 對應(yīng)的列坐標(biāo) m。2. 5 是屏幕縱橫比調(diào)節(jié)系數(shù),因?yàn)槠聊坏?行距大于列距,不進(jìn)行調(diào)節(jié)顯示出來的將是橢圓鑄,for

14、(x=l; x30-m; x+) print (”) ;,贊圖形左側(cè)空白控制憐 3,print”譽(yù)”); for (; x30+m; x 十十) printf (”) ; print (”傳n”;,禱圓的左側(cè)鈴禱 禱圖形的空心部分控制鈴 鈴圓的右側(cè)鈴備, 鑄運(yùn)行結(jié)果,警礙 言6,.,當(dāng),.2鼻,.習(xí) 、6 、 薩,3,. 刻,、 習(xí),言,、6,、,、昏,到薩,、 3鼻,.,布,,尊,.,刻, 、6 、,到薩,. 、6,、,尊且$,鈴忠考題,實(shí)現(xiàn)函數(shù) y=x2 的圖形與圓的圖形的疊加顯示。 4. 歌星大獎賽 在歌星大獎賽中,有 10 個(gè)評委為參賽的選手打分,分?jǐn)?shù)為 1到 100 分。選手最后得分

15、為 z 去掉一個(gè)最高分和一個(gè)最低分后其余 8 個(gè)分?jǐn)?shù)的平均值。請編寫一個(gè)程序?qū)崿F(xiàn)。 鑄問題分析與算法設(shè)計(jì) 這個(gè)問題的算法十分簡單,但要撞意在程序中判斷最大、最小值的變量是如何賦初值的。 鈴程序說明與注釋 main() int integer, i, max, min, sum;,max=-32768; min=32767; sum=O;,鈴先假設(shè)當(dāng)前的最大值 max 為 C 語言革型數(shù)的最小值勢 鈴先假設(shè)當(dāng)前的最小值 min 為 C 語言整型數(shù)的最大值 I 將求累加和變量的初值置為 0 鑄,for (i = 1; imax) max=integer; if (integermin) min=i

16、nteger;,禱輸入評委的評分憐 鈴計(jì)算總分憐 ,快通過比較篩選出其中的最高分鑄 鈴?fù)ㄟ^比較篩選出其中的最低分鑄,printf (”Canceled max score: %dnCanceled min score: %d”, max, min); 4,print (” Average score: %dn,(sum-max-min)/8);,鈴輸出結(jié)果禱,鈴運(yùn)行結(jié)果 Input number 1=90 Input number 2 = 91 Input number 3=93 Input number 4=94 Input number 5= 90 Iriput number 6=99 I

17、nput number 7 = 97 Input number 8=92 Input number 9=91 Input number 10=95 Canceled max score: 99 Canceled min score : 90 Average score: 92 骨思考題 題目條件不變,但考慮同時(shí)對評委的評分進(jìn)行裁判,即在 10 個(gè)評委中找出最公平(即評分 最接近平均分)和最不公平(即與平均分的差距最大)的評委,程序應(yīng)怎樣實(shí)現(xiàn)? s. 求最大約數(shù) 問 555555 的約數(shù)中最大的三位數(shù)是多少? 鈴問題分析與算法設(shè)計(jì) 根據(jù)約數(shù)的定義,對于一個(gè)整數(shù) N,除去1和它自身之外,凡能整除

18、N 的數(shù)即為 N 的約 數(shù)。因此,最簡單的方法是用 2 到 N-1之間的所有數(shù)去除 N,即可求出N 的全部約數(shù)。本題 只要求取約數(shù)中最大的三位數(shù),則其取值范圍可限制在 100 到 999 之間。 贊程序說明與注鋒 main(), long i; int j; printf(Please input number :”); scanf (” %ld1, j 一一) 鈴所求的約數(shù)的可能取值是從 999 到 100,j 從大到小禱,if (i%j= =0) 禱若是約數(shù),則輸出結(jié)果禱 print (The max factor with 3 digits in %ld is: %d. n”, i j)

19、,鈴使用長整型變量,以免超出整數(shù)的表示范圍禱,break;,5,一一一一一,鈴運(yùn)行結(jié)果 輸入: 555555 輸出:The max factor with 3 digits in 555555 is: 777.,6. 高次方數(shù)的尾數(shù),求 13 的 13 次方的最后三位數(shù)。 禱問題分析與算法設(shè)計(jì) 解本題最直接的方法是:將 13 累乘 13 次后截取最后三位即可。 但是由于計(jì)算機(jī)所能表示的整數(shù)范圍有限,用這種“正確”的算法不可能得到正確的結(jié)果。 事實(shí)上,題目僅要求后三位的值,完全沒有必要求 13 的 13 次方的完整結(jié)果。 研究乘法的規(guī)律會發(fā)現(xiàn):乘積的最后三位的值只與乘數(shù)和被乘數(shù)的后三位有關(guān),與乘

20、數(shù)和 被乘數(shù)的高位無關(guān)。利用這一規(guī)律,可以大大簡化程序。 鈴程序說明與注釋 main(), int. i, x, y, last= 1;鈴變量last 保存求 X 的 Y 次方過程中的部分積的后三位鈴,printf (Input x and y ex 鈴快 Y) :); scanf (” %d 禱鑄 %dI i十),憐 X 自乘Y 次禱,last = iast 提 x %1000;勢將last 乘 X 后對 1000 取模,即求積的后三位禱 printf (” The last 3 digits of %d 贊鑄 %dis: %dn, x, y, last%1000); 問打印結(jié)果鈴 禱運(yùn)行結(jié)

21、果 Input X and Y CX 禱禱 Y): 13 鈴 13 he last 3 qigits of 13禱鑄 13 is: 253 Input X andY CX 鈴禱 Y):13 鈴保 20 The last 3 digits of 13餐善 20 is: 801 7. 階乘尾數(shù)零的個(gè)數(shù) 100!的未尾有多少個(gè)零? 贊問題分析與算法設(shè)計(jì) 可以設(shè)想:先求出 1001 的值,然后數(shù)一下末尾有多少個(gè)零事實(shí)上,與上題一樣,由手計(jì)算 機(jī)所能表示的整數(shù)范圍有限,這是不可能的。,為了解決這個(gè)問題,必須首先從數(shù)學(xué)上分析在 100!結(jié)果值的末尾產(chǎn)生霉的條件。不難看,出z一個(gè)整數(shù)若含有一個(gè)因子 5則必然

22、會在求 100t 時(shí)產(chǎn)生一個(gè)零。因此問題轉(zhuǎn)化為求 1到 10。,這 100 個(gè)整數(shù)中包含了多少個(gè)因子 5。若整數(shù)N 能被 25 整除,則 N 包含 2 個(gè)因子 5 ;若整數(shù)N 能被 5 整除,則 N 包含 1個(gè)因子 5。 鑄程序說明與注釋 main ()、 int a, count=O; 6,for (a=5; a=lOO; a+=5) count 十; if ( ! Ca%25) ) count+;,勢循環(huán)從5 開始,以 5 的倍數(shù)為步長,考察整數(shù)鈴 鈴若為5 的倍數(shù),計(jì)數(shù)器加 1 鈴 擇若為25 的倍數(shù),計(jì)數(shù)器再加 1 鈴,printf(Th number of 0 in the end

23、of 100! is: %d. n”, count);憐打印結(jié)果鈴 鑄運(yùn)行結(jié)果 The number of 0 in the end of 100! is : 24. 禱問題的進(jìn)一步討論 本題的求解程序是正確的,但存在明顯的缺點(diǎn)。程序中判斷整數(shù) N 包含多少個(gè)因子 5 的 方法是與題目中 100 有關(guān)的,若題目中的 100 改為 1000,則就要修改程序中求因子5 的數(shù)目 的算法了。 勢思考題 修改程序中求因子 5 的數(shù)目的算法,使程序可以求出任意 NJ 的末尾有多少個(gè)零。,8. 借書方案知多少 小明有五本新書,要借給 A 、B、C 三位小朋友,若每人每次只能借一本,則可以有多少種不 同的借法

24、? 養(yǎng)問題分析與算法設(shè)計(jì) 本問題實(shí)際上是一個(gè)排列問題,即求從 5 個(gè)中取 3 個(gè)進(jìn)行排列的方法的總數(shù)。首先對五本 書從 1 至 5 進(jìn)行編號,然后使用窮舉的方法,假設(shè)三個(gè)人分別借這五本書中的一本,當(dāng)三個(gè)人 所借的書的編號都不相同時(shí),就是滿足題意的一種借閱方法。 勢程序說明與注釋 main() int a, b, c, count=O; printf(11There are different methods for XM to distribute books to 3 :r:eaders: n”) ;,for (a=l; a=5; a+) for (b=l; b=5; b+),贊窮舉第一個(gè)人

25、借 5 本書中的 1本的全部情況替 禱窮舉第二個(gè)人借 5 本書中的 1本的全部情況禱,for (c=l; a! =b C 十) 鑄當(dāng)前兩個(gè)人借不同的書時(shí),窮舉第三個(gè)人借 5 本書中的 1本的全部情況禱,if (cl =a 備打印可能的借閱方法鈴 禱運(yùn)行結(jié)果 There are different methods for XM to distribute books to 3 readers:,9. 楊輝二角形 在屏幕上顯示楊輝三角形: 1,1,1,1,2,1,1,3,3,1,1,4,6,4,1,1,5,10,10,5,1,鑄問題分析與算法設(shè)計(jì) 楊輝三角形中的數(shù),正是“ y )的 N 次方幕展開

26、式中各項(xiàng)的系數(shù)。本題作為程序設(shè)計(jì)中 具有代表性的題目,求解的方法很多,這里僅給出一種。 從楊輝三角形的特點(diǎn)出發(fā),可以總結(jié)出: 第 N 行有 N+l 個(gè)值(設(shè)起始行為第 0 行) ; 對于第N 行的第 J 個(gè)值: CN=2),當(dāng) J=l 或 J=N+l 時(shí)z,其值為 1;,當(dāng) JI =1 且J! =N+l 時(shí):其值為第 N 一1行的第 J一1個(gè)值與第 N-1 行第 J 個(gè)值之和 F 將這些特點(diǎn)提煉成數(shù)學(xué)公式可表示為 z,c.(x,v)= lc(x-1,y 1) + c(x-1,y) 本程序就是根據(jù)以上遞歸的數(shù)學(xué)表達(dá)式編制的。 鈴程序說明與注釋 main() int i,j,n=l3; 8,x=l

27、 或 x=N+l 其它,print ” N=); while (n 12) scanf (” %d”,.n); for (i=O; i=n; i十),for (j=O; j12 一i 川) print (” : for (j=l; ji+2; j+) printf ( %6d”, e(i,j); printf(n );,禱控制輸入正確的值以保證屏幕顯示的圖形正確鈴 鑄控制輸出N行贊,鈴控制輸出第i行前面的空格快 禱輸出第i行的第 j 個(gè)值鈴,int c(x,y) int x, y; int z; if y = = D I I y = = x 十 1) ) return(l); ,鈴求楊輝角形中

28、第 x 行第 y 列的值鈴,提若為x 行的第 1或第 x十1列,則輸出 1 禱,z = c(x 一 l ,y-1) 十 c(x l ,y); 禱否則,其值為前行中第 y 1列與第 y 列值之和禱 return(z); 贊運(yùn)行結(jié)果 輸入:N=12 輸出 z,1,1,1,1,2,1,1,3,3,1,1,4,6,4,1,1,5,10,10,5,1,1,6,15,20,15,6,1,1,7,21,35,35,21,7,1,1,8,28,56,70,56,28,8,1,1,9,36,84,12612684,36,9,1,1,10,45,12021025221012045.,10,1,11,55,1653

29、30462462330165 220495,55,11,1,1,12,66,792924,792495220,66,12,1,9,傳思考題 自行設(shè)汁一種實(shí)現(xiàn)楊輝三角形的方法。 10. 數(shù)制轉(zhuǎn)換 將任一整數(shù)轉(zhuǎn)換為二進(jìn)制形式。 鑄問題分析與算法設(shè)計(jì) 將十進(jìn)制整數(shù)轉(zhuǎn)換為二進(jìn)制形式的方法很多,這里介紹的實(shí)現(xiàn)方法利用了 C 語言能夠?qū)?位進(jìn)行操作的特點(diǎn)。對于 C 語言來說,一個(gè)整數(shù)在計(jì)算機(jī)內(nèi)部就是以二進(jìn)制形式存儲的,所以 沒有必要再將一個(gè)整數(shù)經(jīng)過一系列的運(yùn)算轉(zhuǎn)化為工進(jìn)制形式,只要將整數(shù)在內(nèi)存中的二進(jìn)制 表示輸出即可。 勢程序說明與注釋 #include (stdio. h main() int x; p

30、rint (” Input number:) ; scanf( %d”, 鈴 X :整數(shù)sizeof (int) :int 型在內(nèi)存中所占的字節(jié)數(shù), sizeof (int )秘 8:int 型對應(yīng)的位數(shù)鈴 putchar (n );,printb (x, n) mt x, n; 。 if CnO) ,禱輸出整數(shù)x 二進(jìn)制形式的后 n 位鈴,putchar(O+ ( (unsigned)Cx,鑄輸出第n 位禱,printb 仗,n 一 1);,鈴遞歸調(diào)用,輸出 x 的后 n-1 位堤,Lr i,,鈴運(yùn)行結(jié)果 輸入: 8 輸出: number of decimal form: 8 its bin

31、ary form: 0000000000001000 輸入:8 輸出: number of decimal form: -8 it s binary form: 1111111111111000 輸入: 32767 輸出: number of decimal form: 32767 10,、1,it s binary form : 0111111111111111 輸入:32768 輸申: number of decimal form: -32768 it s binary form: 1000000000000000 輸入: 128 輸出:number of decimal form: 12

32、8 it s binary form : 0000000010000000 眷問題的進(jìn)一步討論 充分利用 C 語言可以對位進(jìn)行操作的特點(diǎn),可以編寫許多其它高級語言不便于編寫甚至 根本無法編寫的程序。位操作是 C 語言的一大特點(diǎn),在深入學(xué)習(xí) C 語言的過程中應(yīng)力求很好 掌握。 程序中使用的位運(yùn)算方法不是最佳的,也可以不用遞歸操作,讀者可自行對程序進(jìn)行優(yōu) 化。 禱思考題 將任意正整數(shù)轉(zhuǎn)換為四進(jìn)制或八進(jìn)制數(shù)。,也,11,第二章生活中的數(shù)學(xué)問題,11. 打魚還是曬網(wǎng),中國有句俗語叫“三天打魚兩天曬網(wǎng)”。某人從 1990 年 1月 1 日起開始“三天打魚兩天曬 網(wǎng)”,問這個(gè)人在以后的某一天中是在“打魚氣

33、還是在“曬網(wǎng)飛 勢問題分析與算法設(shè)計(jì) 根據(jù)題意可以將解題過程分為三步 z 汁算從 1990 年 1月 1 日開始至指定日期一共有多少天; 由于“打魚”和“曬網(wǎng)”的周期為 5 天,所以將計(jì)算出的天數(shù)用 5 去除 F 根據(jù)余數(shù)判斷他是在“打魚”,還是在“曬網(wǎng)”: 若余數(shù)為 1、2、3,則他是在“打魚” 否則是在“曬網(wǎng)”。 在這三步中,關(guān)鍵是第一步。求從 1990 年 1月 1 日至指定日期有多少天,要判斷經(jīng)歷年份 中是否有閏年,若是閏年,二月為 29 天,平年為 28 天。判斷閏年的方法可以用偽語句描述如 下z,1骨,如果(年能被 4 除盡且不能被 100 除盡)或能被 400 除盡) 則該年是閏

34、年 f,否則不是閏年。 C 語言中判斷能否整除可使用求余(模)運(yùn)算。 特程序與程序注釋 struct date int year; int month; int day;,、,main() struct date today, term; int yearday, year, day; printf (” Enter year /month/day z ”) ; scanf (” %d%d%d ”,.t()day. year ,鈴輸入日期特,term. month = 12; term. day = 31;,鑄設(shè)置變量的初始值:月餅 鈴設(shè)置變量的初始值z 日禱,for (yearday=O,y

35、ear=l990; yeartoday.year; year+) term. year = year; 12,快定義日期結(jié)構(gòu)禱,._,yearday += days(term);,鈴計(jì)算從 1990 年至指定年的前一年共有多少天鈴,yearday 十 days (today) ; day = yearday % 5; if (dayO , int i,lp; lp = day.year%4=0 勢判定year 為閏年還是平年, lp=O 為平年,非 0 為閏年講,days(day) struct date day; static int day_ tab 213=,蕃二維數(shù)組形式的天數(shù)表作為參

36、數(shù)禱,0,31,28,31,30,31,30,31,31,30,31,30,31, 0,31,29,31,30,31,30,31,31,30,31,30,31,鈴平年每月的天數(shù)禱 鑄閨年每月的天數(shù)勢,for (i=l; iday.month; i+) day. day+ =day 一 tablpi; return(day. day);,飛計(jì)算本年中自 1月 1 日起的天數(shù)鈴,鈴運(yùn)行結(jié)果 Enter year/month/day: 199110 25 He was fishing at that day. Enter year/month/day: 1992 10 25 He was sleep

37、ing at that day. Enter year/month/day: 1993 10 25 He was sleeping at that day. 禱思考題 請打印出任意年份的日歷。 12. 艦交通肇事犯 一輛卡車違反交通規(guī)則,撞人后逃跑?,F(xiàn)場有三人目擊事件,但都沒有記住車號?只記下車 號的一些特征。甲說:牌照的前兩位數(shù)字是相同的 F z說:牌照的后兩位數(shù)字是相同的,但與前 兩位不同;丙是位數(shù)學(xué)家,他說:四位的車號剛好是一個(gè)整數(shù)的平方。請根據(jù)以上線索求出車 號。 提問題分析與算法設(shè)計(jì) 按照題目的要求造出一個(gè)前兩位數(shù)相同、后兩位數(shù)相同且相互間又不同的整數(shù),然后判斷 該整數(shù)是否是另一個(gè)整

38、數(shù)的平方。 鈴程序與程序泣釋 13,.i ,#include math. h main() int i, j, k, c; for (i=l; i二9; i+) for (j=O; j=9; j+) if ( i ! = j ) k=i 鈴 lOOO+i * 100十j 鈴 lO+j; for( c=31; c 禱 ck; c 十); if ( c 禱 c= =k) printf(Lorry-No.,禱 i z 車號前二位的取值鈴 快 j :車號后二位的取值善 鈴判斷兩位數(shù)字是否相異鈴 禱計(jì)算出可能的整數(shù)替 禱判斷該數(shù)是否為另一整數(shù)的平方普 is %d. n”, k);鈴若是,打印結(jié)果鈴,A哇

39、 A哇 巧i 句e,,gu,O N PR ,結(jié) 行 運(yùn) U賞, A I,13. 該存多少錢 假設(shè)銀行一年整存零取的月息為 o. 63% ?,F(xiàn)在某人手中有一筆錢,他打算在今后的五年 中每年的年底取出 1000 元,到第五年時(shí)剛好取完,請算出他存錢時(shí)應(yīng)存入多少。 禱問題分析與算法設(shè)計(jì) 分析存錢和取錢的過程,可以采用倒推的方法。若第五年年底連本帶息要取1000 元,則要 先求出第五年年初銀行存款的錢數(shù): 第五年年初存款1000/(1+12 鈴 0.0063) 依次類推可以求出第四年、第三年.的年初銀行存款的錢數(shù): 第四年年初存款(第五年年初存款 1ooo)Io+12 鑄 0.0063) 第三年年初存

40、款(第四年年初存款 1000)/(1+12 憐 0.0063) 第二年年初存款(第三年年初存款 1ooo)Io+12 椅 0.0063) 第一年年初存款(第二年年初存款十 1000)Io+12 鑄 0.0063) 通過以上過程就可以容易地求出第一年年初要存入多少錢。 鈴程序與程序注釋 main() inti; float total=O.; for (i=O; iS; i 十)善 i 為年數(shù),取值為 04 年禱 total = (tot!J.l + 1000. ) / (1+ . 0063 禱 12); 鈴累計(jì)算出年初存款數(shù)額,第五次的計(jì)算結(jié)果即為題解長 printf(He must save

41、 %. 2 at first. n, total); 鈴運(yùn)仔結(jié)果 He must save 4039. 44 at first.,/ 14,.,14. 怎樣存錢利最大 假設(shè)銀行整存整取存款不同期限的月息利率分別為: 0. 63%期限 1年 0. 66%期限2 年 0. 69%期限 3 年 o. 75%期限5 年 0. 84%期限8 年 利息本金月息利率 12存款年限。 現(xiàn)在某人手中有 2000 元,請通過計(jì)算選擇一種存錢方案,使得錢存入銀行 20 年后得到的 利息最多(假定銀行對超過存款期限的那部分時(shí)間不付利息)。 鈴問題分析與算法設(shè)計(jì) 為了得到最多的利息,存入銀行的錢應(yīng)在到期時(shí)馬上就取出來,

42、然后立刻將原來的本金和 利息加起來再作為新的本金存入銀行,這樣本利不斷地漉動直到滿 20 年為止。由于存款的利 率不同,所以不同的存款方法(年限)存 20 年得到的利息也是不一樣的。 分析題意,設(shè) 2000 元存 20 年,其中 1年存 il 次,2 年存 i2 次,3 年存 i3 次,5 年存 i5 次,8 年存 i8 次,則到期時(shí)存款人應(yīng)得的本利合計(jì)為: 2000 贊 (1十ratel)i1 鑄 Cl +rate2)i2 擇。十 rate3)i3 鈴。rate5Y5 禱 (1+rate8)i8 其中 rateN 為對應(yīng)存款年限的利率。根據(jù)題意還可得到以下限制條件: 0 #include (

43、math. h) main(),int i8, i5, i3, i2, il, n8, n5, n3, n2, nl; float max=O, term; for(i8=0; i83; i8+) for(i5=0; i5= (20-8 鈴 i8)/5; is+) for(i3=0; i3=(20-8 禱 i8-5 鈴 i5)/3; i3+),、 禱窮舉全部可能的存款方式何,for(i2=0; i2= (Z0-8 禱 i8-5 傳 i5-3 提 i3)/2; i2+) il = 20-8 禱 i8-5 禱 i5-3 鈴 i3-2 鈴 i2; terrn=2000. 0 鈴 pow( (doub

44、le) Cl +o. 0063 鈴 12),他ouble)il) 備 pow( (double) (1十 2 鈴 0.0066 禱 12),(double)i2) 15, c_.,l四”趟圃,.,叫“輸葉飛m ,if (termmax) ,禱 pow( (double) (1+3 禱 0. 0069 鈴 12), (double)i3) 鈴 pow( (double) (1+5 鈴 0.0075 鈴 12),(douhle).i5) 禱 pow( (double) (1+8 禱 0.0084 禱 12),(double)i8); 禱計(jì)算到期時(shí)的本利合計(jì)蜂 長若為最大值,記錄存款方式幡,max=

45、term; nl=il; n2=i2; n3=i3; n5=i5; n8=i8;,printf(For maxinum profit, he should so save his money in a bank:n); printf (made fixed deposit for 8 year : %cl times n”, n8); print (”made fixed deposit for 5 year: %cl timesn”, n5); printf(made fixed deposit for 3 year: %d timesn”, n3);,printf ( printf( pr

46、intf (,made fixed deposit for 2 year: %d timesn”, n2); made fixed deposit for 1 year: %cl timesn”, nl); Total: %. 2fn, max);,岳 i輸出存款方式禱 鈴運(yùn)行結(jié)果 For maxinurn profit, he should so save his money in a bank: made fixed deposit for 8 year: 0 times made fixed deposit for 5 year: 4 times made fixed deposit f

47、or 3 year: 0 times made fixed deposit for 2 year: 0 times made fixed deposit for 1 year: 0 times Total: 8841. 01 可見最佳存款方案為連續(xù)四次存 5 年期。 鈴思考題 某單位對職工出售住房,每套為 2 萬元。買房付款的方法是 2 一次交清,優(yōu)惠20% 。 從第一年開始,每年年初分期付款: 5 年交清,優(yōu)惠 15%; 10 年交清,優(yōu)惠 lOYo; 20 年交清,沒有優(yōu)惠。 現(xiàn)在有人手中正好有 2 萬元,若假定在今后 20 年中物價(jià)和銀行利率均保持不變,問他應(yīng) 當(dāng)選擇哪種付款方式可以使應(yīng)

48、付的錢最少? 15. 捕魚和分魚 A 、B、C、D、E 五人在某天夜里合伙去捕魚,到第二天凌晨時(shí)都疲憊不堪,于是各自找地方 睡覺。日上三桿,A 第一個(gè)醒來,他將魚分為五份,把多余的一條魚扔掉,拿走自己的一份。 B 第 16,飛.耐排,二個(gè)醒來,也將魚分為五份,把多余的一條魚扔掉,拿走自己的一份。 C、D、E 依次醒來,也按同 樣的方法拿魚。問他們合伙至少捕了多少條魚? 養(yǎng)問題分析與算法設(shè)計(jì) 根據(jù)題意,總計(jì)將所有的魚進(jìn)行了五次平均分配,每次分配時(shí)的策略是相同的,即扔掉一 條后剩下的魚正好分為五份,然后拿走自己的一份,余下其它四份。 假定魚的總數(shù)為 X ,則X 可以按照題目的要求進(jìn)行五次分配: X

49、-1 后可被 5 整除,余下的 魚為 4 CX-1) 5。若X 滿足上述要求,則 X 就是題目的解。 勢程序與程序注釋 main(), int n, i, x, flag= 1; for (n=6; flag; n 十),號 flag :控制標(biāo)記禱 鈴采用試探的方法,令試探僵 n 逐步加大禱,for (x=n, i=1 ,else flag= 0 ; if (flag) break; else flag= 1;,提若不能分配則置標(biāo)記 flag=O 退出分配過程悅 禱若分配過程正常結(jié)束則找到結(jié)果退出試探的過程禱 養(yǎng)否則繼續(xù)試探下一個(gè)數(shù)%,printf(Total number of fish c

50、atched = %dn”, n);,禱輸出結(jié)果禱,禱運(yùn)行結(jié)果 Total number of fish catched = 3121 禱問題的進(jìn)一步討論 程序采用試探法,試探的初值為 6 ,每次試探的步長為1。這是過分保守的做法??梢栽谶M(jìn) 一步深入分析題目的基礎(chǔ)上修改初值,增大試探的步長值,以減少試探次數(shù)。 快思考題 請使用其它的方法求解本題。 16. 出售金魚 買買提將養(yǎng)的一缸金魚分五次出售:第一次賣出全部的一半加二分之一條 p 第二次賣出余 下的二分之一加三分之一條 z 第三次賣出余下的四分之一加四分之一條 z 第四次賣出余下的五 分之一加五分之一條 p 最后賣出余下的 11 條。問原來魚缸中共有幾條魚? 鑄題目分析與算法設(shè)計(jì) 題目中所有的魚是分五次出售的,每次賣出的策略相同 z 第 j 次賣剩下的(j 十 )分之一再 加 l/(j+l)條。第五次將第四次余下的 11條全賣了。 假定第 j 次魚的總數(shù)為 X ,則第j 次留

溫馨提示

  • 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)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論