C語言課后答案_第1頁
C語言課后答案_第2頁
C語言課后答案_第3頁
C語言課后答案_第4頁
C語言課后答案_第5頁
已閱讀5頁,還剩28頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、習(xí)題11.1 各列舉幾種你所知道的計(jì)算機(jī)硬件和軟件。硬件:cpu、內(nèi)存、硬盤、光盤、鍵盤、鼠標(biāo)等軟件:windows、qq、internet explorer、word等1.2 馮·諾依曼機(jī)模型有哪幾個(gè)基本組成部分?運(yùn)算器、存儲(chǔ)器、輸入和輸出。1.3 嘗試把例1-4改為計(jì)算“123+456”。#include <stdio.h>main()printf("%dn", 123+456);1.4 列舉幾種你知道的程序設(shè)計(jì)語言。c、c+、java、c#、php、asp、pascal等1.5 舉幾個(gè)在生活和學(xué)習(xí)中,it技術(shù)被成功應(yīng)用的例子??删幊痰奈⒉t、洗衣

2、機(jī),手機(jī),文曲星,電子游戲機(jī)等。習(xí) 題 2 答 案2.1 合法的為:t3 _var2.2 選擇填空(1)(2) b(3) a(4) b(5)(6)(7)(8) b2.3(1) sqrt(a*a+b*b)/(2*c) 或 sqrt(pow(a,2)+pow(b,2)/(2*c)(2) fabs(a+b)*(c+d)+2 )(3) (log(x)+sin(y)/2 (注:y應(yīng)為弧度)例: 若y值為30°,sin(y)應(yīng)寫成sin (3.14/180*30),不能直接寫成sin(30) (4) 2*3.1415*r 或 #define pi 3.1415 表達(dá)式寫為: 2*pi*r(5)

3、1/(1+1.0/x)(6) (sin(3.14/180*30)+2*exp(x)/(2*y+pow(y,x)習(xí) 題 3 答 案3.1 答案:表達(dá)式語句,函數(shù)調(diào)用語句,控制語句,空語句和復(fù)合語句。3.2答案:(1)c (2) d3.3答案:(1) 錯(cuò)誤:在scanf函數(shù)中,參數(shù)應(yīng)是a,b兩個(gè)變量的地址。改正:scanf("%d,%d",&a,&b);(2) 錯(cuò)誤:數(shù)據(jù)輸出格式與數(shù)據(jù)類型不匹配。改正:printf("%f", f); (3) 錯(cuò)誤:數(shù)據(jù)輸入格式與數(shù)據(jù)類型不匹配。改正:scanf("%lf%ld",&

4、;var, &a);(4) 錯(cuò)誤:在scanf函數(shù)中的輸入格式控制串中多了n,a,b前面少了& 。改正:scanf("%d,%d",&a,&b);(5) 錯(cuò)誤:%f的輸入格式不應(yīng)有精度控制。改正:scanf("%5f",&f);(6) 錯(cuò)誤:程序輸入錯(cuò)誤使得變量a,b的值不是6,2。改正:應(yīng)輸入 a=6,b=2 3.4答案:(1)aabbccabc(2) 0 1 1(3) 68(4) 3.(5) 12 9 13 9(6) 12 9 13 9(7) -1,65535,ffff(8) 123.,1.e+002,123.

5、4 3.5已知三角形的三邊長a,b,c,計(jì)算求三角形面積的公式為: = , area = 要求編寫程序,從鍵盤輸入a,b,c的值,計(jì)算并輸出三角形的面積area。參考答案:因?yàn)?/2在c語言中的值為0,整個(gè)表達(dá)式為0,s 值始終是0,所以結(jié)果是錯(cuò)誤的。程序如下:#include <stdio.h>#include <math.h>main() float a, b, c; /*a,b,c為三邊變量*/float s, area; printf("input a,b,c:");scanf("%f,%f,%f",&a,&

6、;b,&c);s = 1.0 / 2 * (a + b + c);area = sqrt(s * (s - a) * (s - b) * (s - c);printf("area=%.2fn", area);程序運(yùn)行結(jié)果:input a,b,c:3,4,5area=6.003.6編程從鍵盤輸入圓的半徑r,計(jì)算并輸出圓的周長和面積。程序參考答案:#include <stdio.h>#define pi 3.14main() float r ; /*r為半徑變量*/float circum, area;printf("input r:")

7、;scanf("%f", &r);circum = 2*pi*r;area = pi*r*r,printf("circum=%.2f,area=%.2fn", circum, area);程序運(yùn)行結(jié)果:input r:5circum=31.40,area=78.50習(xí) 題 四4.1 簡答題: 所謂算法,就是一個(gè)有窮規(guī)則的集合,其中的規(guī)則確定了一個(gè)解決某一特定類型問題的運(yùn)算序列。簡單的說,就是為解決一個(gè)具體問題而采取的確定的有限的操作步驟,當(dāng)然這里我們所說的算法僅指計(jì)算機(jī)算法,即計(jì)算機(jī)能執(zhí)行的算法。每個(gè)程序都要依靠算法和數(shù)據(jù)結(jié)構(gòu),在某些特殊領(lǐng)域,例

8、如計(jì)算機(jī)圖形學(xué)、數(shù)據(jù)結(jié)構(gòu)、語法分析、數(shù)值分析、人工智能和模擬仿真等等,解決問題的能力幾乎完全依賴于最新的算法和數(shù)據(jù)結(jié)構(gòu)。因此,針對(duì)某一應(yīng)用領(lǐng)域,要想開發(fā)出高質(zhì)高效的程序,除了要熟練掌握程序設(shè)計(jì)語言這種工具和必要的程序設(shè)計(jì)方法以外,更重要的是要多了解、多積累并逐漸學(xué)會(huì)自己設(shè)計(jì)一些好的算法。 結(jié)構(gòu)化程序設(shè)計(jì)是一種進(jìn)行程序設(shè)計(jì)的原則和方法,按照這種原則和方法設(shè)計(jì)出的程序的特點(diǎn)是:結(jié)構(gòu)清晰,容易閱讀,容易修改,容易驗(yàn)證。結(jié)構(gòu)化程序設(shè)計(jì)的基本思想歸納起來有以下幾點(diǎn):l 采用順序、選擇和循環(huán)三種基本結(jié)構(gòu)作為程序設(shè)計(jì)的基本單元,避免無限制地使用goto語句而使流程任意轉(zhuǎn)向。l 三種基本結(jié)構(gòu)應(yīng)具有如下良好特性

9、: 只有一個(gè)入口。 只有一個(gè)出口。 無死語句,即不存在永遠(yuǎn)都執(zhí)行不到的語句。 無死循環(huán),即不存在永遠(yuǎn)都執(zhí)行不完的循環(huán)。l 程序設(shè)計(jì)采用“自頂向下、逐步求精”和模塊化的方法。 自頂向下(top-down)方法是先寫出結(jié)構(gòu)簡單清晰的主程序來表達(dá)整個(gè)問題,在此問題中包含復(fù)雜的子問題用子程序來實(shí)現(xiàn),若子問題中還包含復(fù)雜的子問題,再用另外一個(gè)子程序來解決,直到每一細(xì)節(jié)都可以用高級(jí)語言清楚表達(dá)為止。逐步求精技術(shù)可以理解為是一種不斷地自底向上的修正所補(bǔ)充的自頂向下的程序設(shè)計(jì)方法。選擇題 c d b d a4.2 寫出下列程序的運(yùn)行結(jié)果。 over! right right right? abcdefg$ab

10、cdefgend! abcdefgend! * * *4.3 閱讀程序,按要求,在空白處填寫適當(dāng)?shù)谋磉_(dá)式或語句,使程序完整,并符合題目要求。(year % 4 = 0 && year % 100 != 0) | (year % 400 = 0) flag (ch >= 'a' && ch <= 'z') | (ch >= 'a' && ch <= 'z') ch <= '9' && ch >= '0'

11、 ch = ' ' fahr celsius = 5.0 / 9 * (fahr - 20) fahr = fahr + step4.5編程判斷輸入整數(shù)的正負(fù)性和奇偶性。流程圖如圖4-1。#include <stdio.h>main()int m;scanf("%d", &m);/*輸入一個(gè)整數(shù)*/if (m >= 0)/*是否為正數(shù)*/if (m%2 = 0)/*是正數(shù),且能被2整除,是正偶數(shù)*/printf("%d is a positive evenn", m);else/*不能被2整除,是正奇數(shù)*/pri

12、ntf("%d is a positive oddn", m);/*if(m>=0)結(jié)束*/else if (m % 2 = 0) printf("%d is a negative evenn", m);/*是負(fù)偶數(shù)*/else printf("%d is a negative oddn", m);/*是負(fù)奇數(shù)*/程序運(yùn)行結(jié)果如下:第一次運(yùn)行:66 is a positive even第二次運(yùn)行:-76 is a negative odd4.6編程計(jì)算分段函數(shù): ,輸入x,打印出y值。流程圖如圖4-2。#include <

13、stdio.h>#include <math.h>main()int x;double y;scanf("%d", &x); /* 輸入一個(gè)整數(shù)*/if (x > 0) y = exp(-x); /*如果大于0,計(jì)算y=exp(-x)的值 */else if (x = 0) y = 1; /*x=0,則y=1*/else y = -exp(x); /*x<0,則y=-exp(x)*/printf("y=%fn", y);程序運(yùn)行結(jié)果如下:第一次運(yùn)行:4y=0.第二次運(yùn)行:0y=1.第三次運(yùn)行:-4y=-0.4.7輸入

14、三角形的三條邊a,b,c ,判斷它們能否構(gòu)成三角形,若能則指出是何種三角形:等腰三角形、直角三角形、一般三角形。流程圖如圖4-3。#include <stdio.h>#include <math.h>#define limit 1e-1main()float a, b, c;int flag = 1;scanf("%f, %f, %f", &a, &b , &c);/*輸入三角形的三條邊*/if (a + b) > c && (b + c) > a)&& (a + c) > b

15、)/*三角形的基本條件*/if (fabs(a-b) <= limit | fabs(b-c) <= limit| fabs(c-a) <= limit) /*等腰三角形的條件*/printf("等腰");flag = 0;if (fabs(a * a + b * b - c * c) <= limit| fabs(a * a + c * c - b * b) <= limit| fabs(c * c + b * b - a * a) <= limit) /*直角三角形的條件 */printf("直角");flag =

16、 0;if (flag)printf("一般");printf("三角形n");elseprintf("不是三角形n"); 程序運(yùn)行結(jié)果如下:第一次運(yùn)行:3,4,5直角三角形第二次運(yùn)行:4,4,5等腰三角形第三次運(yùn)行:10,10,14.14等腰直角三角形第四次運(yùn)行:3,4,9不是三角形4.8在屏幕上顯示一張如下所示的時(shí)間表: *time* 1 morning 2 afternoon 3 night please enter your choice:操作人員根據(jù)提示進(jìn)行選擇,程序根據(jù)輸入的時(shí)間序號(hào)顯示相應(yīng)的問候信息,選擇1時(shí)顯示&quo

17、t;good morning", 選擇2時(shí)顯示"good afternoon", 選擇3時(shí)顯示"good night",對(duì)于其它選擇顯示"selection error!",用switch語句編程實(shí)現(xiàn)。算法思想:使用printf函數(shù)輸出一個(gè)簡單的菜單語句,通過switch語句進(jìn)行選擇。需要注意的問題是:輸入選項(xiàng)是字符型的,所以在case后的數(shù)字要加單引號(hào)。#include <stdio.h>main()char c;printf("*time*n");printf("1 mornin

18、g n");printf("2 afternoon n");printf("3 night n");printf("please enter your choice");/*建立相應(yīng)的菜單 */c = getchar();/*輸入選項(xiàng)*/switch (c)/*通過switch選擇 */case '1':printf("good morning n");break;case '2': printf("good afternoon n");break;ca

19、se '3': printf("good nightn");break;default: printf("selection error!n");程序運(yùn)行結(jié)果如下:第一次運(yùn)行:*time*1 morning2 afternoon3 nightplease enter your choice:1good moning第二次運(yùn)行:*time*1 morning2 afternoon3 nightplease enter your choice:3good night4.9讀入一個(gè)年份和月份,打印出該月有多少天(考慮閏年),用switch語句編

20、程。#include <stdio.h>main()int year, month;scanf("%d, %d", &year, &month); /*輸入相應(yīng)的年和月*/switch (month)case 1:case 3:case 5:case 7:case 8:case 10:case 12:printf("31 daysn");break;case 2:if (year % 4 = 0 && year % 100 != 0) | (year % 400 = 0) printf("29 day

21、sn"); /*閏年的2月有29天 */elseprintf("28 daysn"); /*平年的2月有28天 */break; case 4:case 6:case 9:case 11:printf("30 daysn");break;default:printf("input error!n");程序運(yùn)行結(jié)果如下:第一次運(yùn)行:1988,531 days第二次運(yùn)行:1988,229 days第三次運(yùn)行:1989,228 days4.10編程計(jì)算1+3+5+7+ +99+101的值。算法一:利用for循環(huán)語句實(shí)現(xiàn),在循環(huán)體外

22、為sum賦初值0。流程圖如圖4-4。#include <stdio.h>main()int i, sum = 0;for (i = 1; i <= 101; i = i+2)sum = sum + i;printf("sum=%dn", sum);算法二:利用while循環(huán)語句實(shí)現(xiàn),在循環(huán)體外為i和sum賦初值。#include <stdio.h>main()int i = 1, sum = 0;while (i <= 101)sum = sum + i;i = i + 2;printf("sum=%dn", sum)

23、;程序運(yùn)行結(jié)果如下:sum=26014.11編程計(jì)算1*2*3+3*4*5+99*100*101的值。算法思想:用累加算法,通項(xiàng)公式為:term=i*(i+1)*(i+2); i=1,3,99?;蛘邽椋簍erm=(i-1)*i*(i+1); i=2,4,100。步長為2。流程圖如圖4-5。#include <stdio.h>main()int i ;long term, sum = 0;for (i = 1; i <= 99; i = i + 2)term = i * (i + 1) * (i + 2);sum = sum + term;printf("sum=%l

24、d",sum);程序運(yùn)行結(jié)果如下:sum=4.12編程計(jì)算1!+2!+3!+4!+10!的值。算法一:用累加算法,累加項(xiàng)為term=term*i; ;i=1,2,10。term初值為1,使用單重循環(huán)完成。流程圖如圖4-6。#include <stdio.h>main()long term = 1,sum = 0;int i;for (i = 1; i <= 10; i+)term = term * i;sum = sum + term;printf("1!+2!+.+10! = %ld n", sum);算法二:用內(nèi)層循環(huán)求階乘,外層循環(huán)控制累加

25、的項(xiàng)數(shù)。#include <stdio.h>main()long term ,sum = 0;int i, j;for (i = 1; i <= 10; i+)term = 1;for (j = 1; j <= i; j+)term = term * j;sum = sum + term;printf("1!+2!+10! = %ld n", sum);程序運(yùn)行結(jié)果為:1!+2!+10! = 4.13編程計(jì)算 a+aa+aaa+.+aa.a(n個(gè)a)的值,n和a的值由鍵盤輸入。算法思想:用累加算法,累加項(xiàng)為term=term*10+a; i=1,2,

26、n。term初值為0。流程圖如圖4-7。#include <stdio.h> main()long term = 0,sum = 0;int a , i, n;printf("input a,n: ");scanf("%d,%d", &a, &n);/*輸入a,n的值*/for (i = 1; i <= n; i+)term = term * 10 + a;/*求出累加項(xiàng)*/sum = sum + term;/*進(jìn)行累加*/printf("sum=%ldn",sum);程序運(yùn)行如下:input a,n

27、:2,4sum=24684.14利用前100項(xiàng)之積計(jì)算。算法一:采用累乘方法,累乘項(xiàng)為term=n*n/(n-1)*(n+1); n=2,4,100,步長為2。流程圖如圖4-8。#include <stdio.h>main()float term, result = 1; /*累乘項(xiàng)初值應(yīng)為1*/int n;for (n = 2; n <= 100; n = n + 2)term = (float)( n * n)/( n - 1) * ( n + 1); /*計(jì)算累乘項(xiàng)*/result = result * term;printf("result = %fn&qu

28、ot;, 2*result);算法二:采用累乘方法,累乘項(xiàng)為term=2*n*2*n/(2*n-1)*(2*n+1) ;n=1,2,50,步長為1。#include <stdio.h> main()float result = 1,term;int n;for (n = 1; n <= 50; n+)term = (float)(2*n*2*n)/(2*n-1)*(2*n+1); /*計(jì)算累乘項(xiàng)*/result = result * term;printf("result = %fn", 2*result);程序運(yùn)行結(jié)果為:result = 3.4.15利

29、用泰勒級(jí)數(shù)計(jì)算的近似值,當(dāng)最后一項(xiàng)的絕對(duì)值小于10-5時(shí)認(rèn)為達(dá)到精度要求,要求統(tǒng)計(jì)總共累加了多少項(xiàng)。算法思想:采用累加算法:e=e+term;尋找累加項(xiàng)的構(gòu)成規(guī)律:利用前項(xiàng)計(jì)算后項(xiàng)比尋找統(tǒng)一的累加項(xiàng)表示形式要簡單一些,由可以發(fā)現(xiàn)前后項(xiàng)之間的關(guān)系是:termn=termn-1÷n,寫成c語句便是:term=term/n; term初值為1.0,n初值也為1,n按n=n+1變化。統(tǒng)計(jì)累加項(xiàng)數(shù)只要設(shè)置一個(gè)計(jì)數(shù)器變量即可,這里,計(jì)數(shù)器變量取名為count,初值為0,在循環(huán)體中每累加一項(xiàng)就加一次1。流程圖如圖4-9。#include <math.h>main()int n = 1,

30、 count =1;float e = 1.0, term = 1.0;while (fabs(term) >= 1e-5)term = term / n;e = e + term;n+;count+;printf("e = %f, count = %dn", e, count);程序運(yùn)行結(jié)果為:e = 2., count = 104.16計(jì)算1-1/2+1/3-1/4+1/99-1/100+,直到最后一項(xiàng)的絕對(duì)值小于10-4為止。算法思想:采用累加算法,累加項(xiàng)通式為:term=sign/n;分子sign=-sign;初值為1,分母n=n+1;初值為1。流程圖如圖4-

31、10。#include <stdio.h>#include <math.h>main()int n = 1;float term = 1.0, sign = 1,sum = 0;while (fabs(term) >= 1e-4)/*判斷末項(xiàng)大小*/term = sign / n;/*求出累加項(xiàng)*/sum = sum + term;/*累加*/sign = -sign;/*改變項(xiàng)的符號(hào)*/n+;/*分母加1*/printf("sum = %fn", sum);程序運(yùn)行結(jié)果為:sum = 0.4.17利用泰勒級(jí)數(shù)計(jì)算sin(x)sin(x) x-

32、x3/3!+x5/5!-x7/7!+x9/9!-要求最后一項(xiàng)的絕對(duì)值小于10-5,并統(tǒng)計(jì)出此時(shí)累加了多少項(xiàng)。算法思想:x由鍵盤輸入,采用累加算法,sum=sum+term,sum初值為x,利用前項(xiàng)求后項(xiàng)的方法計(jì)算累加項(xiàng):term= -term*x*x/(n+1)*(n+2); term初值為x,n初值為1,n=n+2。流程圖如圖4-11。#include <math.h>main()int n = 1,count = 0;float x;double sum , term; /*因?yàn)槲粩?shù)多,所以定義為雙精度 */scanf("%f", &x);sum =

33、 x;term = x; /*賦初值*/do/*計(jì)算相應(yīng)項(xiàng),并改應(yīng)符號(hào)*/term = -term * x * x / (n + 1) * (n + 2);sum = sum + term; /*累加 */n = n + 2;count+;while (fabs(term) >= 1e-5);printf("sin(x) = %f, count = %dn", sum, count);程序運(yùn)行結(jié)果為:3( 輸入的為弧度)。sin(x) = 0., count = 84.18打印所有的“水仙花數(shù)”,所謂“水仙花數(shù)”是指一個(gè)三位數(shù),其各位數(shù)字立方和等于該數(shù)本身。例如153

34、是“水仙花數(shù)”,因?yàn)?53=13+33+53。算法思想:首先確定水仙花數(shù)n可能存在的范圍,因?yàn)閚是一個(gè)三位數(shù),所以范圍確定為n從100變化到999,分離出n的個(gè)位i、十位j、百位k后,只要判斷n是否等于i*i*i+j*j*j+k*k*k即可知n是否是水仙花數(shù)。分離各位數(shù)字的方法可參考例4.2。流程圖如圖4-12。#include <stdio.h>main()int i, j, k, n;printf("result is:");for (n = 100; n < 1000; n+)i = n / 100;/*分出百位*/j = (n - i * 100)

35、 / 10;/*分出十位*/k = n % 10;/*分出個(gè)位*/ if (i*100 + j*10 + k = i*i*i + j*j*j + k*k*k)printf("%dt ",n);/*輸出結(jié)果*/printf("n");程序運(yùn)行結(jié)果為:result is:153 370 371 4074.19從鍵盤任意輸入一個(gè)四位數(shù)x,編程計(jì)算x的每一位數(shù)字相加之和(忽略整數(shù)前的正負(fù)號(hào))。例如,輸入x為1234,則由1234分離出其個(gè)位1、十位2、百位3、千位4,然后1+2+3+4=10,于是輸出10。算法思想:對(duì)輸入的整數(shù)取絕對(duì)值(絕對(duì)值函數(shù)為fabs()

36、),即可實(shí)現(xiàn)忽略整數(shù)前的正負(fù)號(hào)。#include <stdio.h>#include <math.h>main()int i1, i2, i3, i4, k, n;printf("input data is:");scanf("%d", &n);k = fabs(n);/*取絕對(duì)值*/i1 = k / 1000;/*分離出千位*/i2 = (k - i1 * 1000) / 100;/*分離出百位*/i3 = (k - i1 * 1000 - i2 * 100) / 10;/*分離出十位*/i4 = k % 10;/*分離

37、出個(gè)位*/printf("the sum of the total bit is %dn", i1+i2+i3+i4);程序運(yùn)行結(jié)果為:第一次運(yùn)行:input data is :1234the sum of the total bit is 10第二次運(yùn)行:input data is :5678the sum of the total bit is 264.20韓信點(diǎn)兵。韓信有一隊(duì)兵,他想知道有多少人,便讓士兵排隊(duì)報(bào)數(shù):按從1至5報(bào)數(shù),最末一個(gè)士兵報(bào)的數(shù)為1;按從1至6報(bào)數(shù),最末一個(gè)士兵報(bào)的數(shù)為5;按從1至7報(bào)數(shù),最末一個(gè)士兵報(bào)的數(shù)為4;最后再按從1至11報(bào)數(shù),最末一個(gè)士兵

38、報(bào)的數(shù)為10。你知道韓信至少有多少兵嗎?算法思想:設(shè)兵數(shù)為x,則按題意x應(yīng)滿足下述關(guān)系式: x%5 =1 && x%6=5 &&x %7=4 && x%11=10采用窮舉法對(duì)x從1開始實(shí)驗(yàn),可得到韓信至少有多少兵。流程圖如圖4-13。#include <stdio.h>main()int x = 1int find = 0; /*設(shè)置找到標(biāo)志為假*/while (!find)if (x % 5 = 1 && x % 6 = 5 && x % 7 = 4 && x % 11 = 10)fi

39、nd = 1;x+;printf(" x = %dn", x);程序運(yùn)行結(jié)果:x = 21124.21愛因斯坦數(shù)學(xué)題。愛因斯坦曾出過這樣一道數(shù)學(xué)題:有一條長階梯,若每步跨2階,則最后剩下1階,若每步跨3階,則最后剩下2階,若每步跨5階,則最后剩下4階,若每步跨6階,則最后剩下5階,只有每步跨7階,最后才正好1階不剩。請(qǐng)問,這條階梯共有多少階?算法思想:設(shè)階梯數(shù)為x,則根據(jù)題意:階梯數(shù)滿足下面的關(guān)系式: x%2=1 && x%3=2 && x%5=4 && x%6=5 && x%7=0采用窮舉法對(duì)x從1開始實(shí)驗(yàn),

40、可計(jì)算出這條階梯共有多少階。流程圖如圖4-14。main()int x = 1, find = 0;while (!find)if (x % 2 = 1 && x % 3 = 2 && x % 5 = 4 && x % 6 = 5 && x % 7 = 0)find = 1;x+;printf(" x = %dn", x);程序運(yùn)行結(jié)果為:x = 1204.22三色球問題。若一個(gè)口袋中放有12個(gè)球,其中有3個(gè)紅色的,3個(gè)白色的,6個(gè)黑色的,從中任取8個(gè)球,問共有多少種不同的顏色搭配?算法思想:設(shè)任取的紅球個(gè)數(shù)為

41、i,白球個(gè)數(shù)為j,黑球個(gè)數(shù)為k,根據(jù)題意應(yīng)有:i+j+k=8,0<=i<=3,0<=j<=3,0<=k<=6。若紅球和白球個(gè)數(shù)的取值范圍是03,在紅球和白球個(gè)數(shù)確定的條件下,黑球個(gè)數(shù)的取值范圍應(yīng)為k=8-i-j,只要滿足k<=6,i、j、k的組合即為所求。流程圖如圖4-15。#include <stdio.h>main()int i, j, k;for (i = 0; i <= 3; i+)for (j = 0; j <= 3; j+)for (k = 0; k <= 6; k+)if (i + j + k = 8)pri

42、ntf("i=%d, j=%d, k=%dn", i, j, k);程序運(yùn)行結(jié)果:i=0,j=2,k=6i=0,j=3,k=5i=1,j=1,k=6i=1,j=2,k=5i=1,j=3,k=4i=2,j=0,k=6i=2,j=1,k=5i=2,j=2,k=4i=2,j=3,k=3i=3,j=0,k=5i=3,j=1,k=4i=3,j=2,k=3i=3,j=3,k=24.23雞兔同籠,共有98個(gè)頭,386只腳,編程求雞、兔個(gè)多少。算法思想:設(shè)雞數(shù)為x,兔數(shù)為y,據(jù)題意有:x+y=98,2x+4y=386。采用窮舉法,x從1變化到97,y取98-x,如果x、y同時(shí)滿足條件2x+

43、4y=386,則打印x、y的值。流程圖如圖4-16。#include <stdio.h>main()int x, y;for (x = 1; x <= 97; x+)y = 98 - x;if (2 * x + 4 * y = 386)printf("x = %d, y = %d", x, y);程序運(yùn)行結(jié)果為:x = 3, y = 954.24我國古代的張丘建算經(jīng)中有這樣一道著名的百雞問題:“雞翁一,值錢五;雞母一,值錢三;雞雛三,值錢一。百錢買百雞,問雞翁、母、雛各幾何?”意為:公雞每只5元,母雞每只3元,小雞3只1元。用100元買100只雞,問公雞、

44、母雞和小雞各能買多少只?算法思想:設(shè)公雞、母雞、小雞數(shù)量分別為x,y,z,依題意列出方程組:x+y+z=100,5x+3y+z/3=100,采用窮舉法求解,因100元買公雞最多可買20只,買母雞最多可買33只,所以,x從0變化到20,y從0變化到33,則z=100-x-y,只要判斷第二個(gè)條件是否滿足即可。流程圖如圖4-17#include <stdio.h>main()int x, y, z;for (x = 0; x <= 20; x+)for (y = 0; y <= 33; y+)z = 100 x - y;if (5*x + 3*y + z/3.0 = 100)

45、printf("x=%d, y=%d, z=%dn", x, y, z);程序運(yùn)行結(jié)果為:x=0,y=25,z=75x=4,y=18,z=78x=8,y=11,z=81x=12,y=4,z=844.25用一元五角錢人民幣兌換5分、2分和1分的硬幣(每一種都要有)共100枚,問共有幾種兌換方案?每種方案各換多少枚?算法思想:設(shè)5分、2分和1分的硬幣各換x、y、z枚,據(jù)題意有:x+y+z=100,5x+2y+z=150,由于每一種硬幣都要有,故5分硬幣最多可換28枚,2分硬幣最多可換73枚,1分硬幣可換100-x-y枚,x、y、z只需滿足第二個(gè)方程即可打印,對(duì)每一組滿足條件的x

46、、y、z值用計(jì)數(shù)器計(jì)數(shù)即可得到兌換方案的數(shù)目。流程圖如圖4-18。#include <stdio.h>main()int x, y, z, count = 0;for (x = 1; x <= 28; x+)for (y = 1; y <= 73; y+)z = 100 x - y;if (5*x + 2*y + z = 150)count+;printf("%d, %d, %dn", x, y, z);printf("count = %dn", count);程序運(yùn)行結(jié)果為:1,46,532,42,563,38,594,34,6

47、25,30,656,26,687,22,718,18,749,14,7710,10,8011,6,8312,2,86count = 124.26編程輸出如下上三角形式的乘法九九表。算法思想:根據(jù)題意,第一行打9列,第二行打8列,最后一行打1列,為了打印右上三角形式,需要在第n列先打印4*n-4列空格,再打印兩數(shù)相乘結(jié)果。 #include <stdio.h>main()int m, n, i;for (m = 1; m < 10; m+)printf("%4d", m);/*打印表頭*/printf("n");for (m = 1; m

48、 < 10; m+)printf(" -");printf("n");for (n = 1; n <= 9; n+) /*被乘數(shù)n從1變化到9*/for (i = 1; i <= 4*n - 4; i+)printf(" "); /*輸出相應(yīng)空格使數(shù)字右對(duì)齊*/for (m = n;m < 10;m+) /*乘數(shù)m從n變化到9*/printf("%4d", m * n); /*輸出第m行n列中的m*n的值*/printf("n"); /*輸出換行符,準(zhǔn)備打印下一行*/4.

49、27編程打印以下圖案。 * * * * * * * * (1) (2) (3)第(1)題:#include <stdio.h>main()int i, j, k;for (i = 1; i< = 4; i+) /*i控制行數(shù)*/for (j = 1; j <= 4 - i; j+) /* 隨行數(shù)的增加,輸出遞減數(shù)目的空格*/printf(" ");for (k = 1 ;k <= 6; k+) /*每行輸出6個(gè)*字符*/printf("*");printf("n"); /*將光標(biāo)移到下一行起始位置處*/第

50、(2)題#include <stdio.h>main()int i , j , k;for (i = 1; i <= 4; i+) /*控制行數(shù)*/for (k = 1; k <= (2 * i - 1); k+) /*控制每行輸出的*號(hào)個(gè)數(shù)*/ printf("*");printf("n"); /*輸出一行后換行*/ 第(3)題#include <stdio.h>main()int i , j, k ;for (i = 1; i <= 4; i+)/* 控制行數(shù)*/for (j = 1; j <= 8 -

51、 i; j+) /* 隨行數(shù)的增加,輸出遞減數(shù)目的空格*/printf(" ");for (k = 1;k <= (2 * i - 1);k+)printf("*");printf("n");4.28按如下格式打印100以內(nèi)整數(shù)的平方根表。算法思想:表內(nèi)第1行打印09的平方根,表內(nèi)第2行打印1019的平方根,表內(nèi)第3行打印2029的平方根,表內(nèi)第10行打印9099的平方根。設(shè)表的行為x,表的列為y,則對(duì)應(yīng)第x行第y列的表值為sqrt(x*10+y)。#include <stdio.h>#include <mat

52、h.h>main()int m, n, i;for (m = 0; m < 10; m+) printf("%7d", m);/*打印表頭*/printf("n");for (n = 0; n < 10; n+)/*乘數(shù)n從1變化到9*/ printf("%d", n);/*輸出每行的頭數(shù)字*/for (m=0; m<10; m+)/*被乘數(shù)m從1變化到9*/printf(" %4.3f ", sqrt(n * 10 + m);/*輸出第m行n列中的值*/printf("n");/*輸出換行符,準(zhǔn)備打印下一行*/習(xí)題55.1 (1) acd(2) bc5.2 (1) delay()未先聲明或定義就使用;(2) 沒有參數(shù)的函數(shù)應(yīng)該注明void;(3) 變量times未賦值就使用;(4) 沒有return語句5.3 2,6,42,35.4 設(shè)計(jì)一個(gè)函數(shù),用來判斷一個(gè)整數(shù)是否為素?cái)?shù)。方法分析:按照素?cái)?shù)的定義,可以用2到number-1的所有整數(shù)去除number,

溫馨提示

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