《2022年C语言课后答案 .pdf》由会员分享,可在线阅读,更多相关《2022年C语言课后答案 .pdf(33页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、习题 1 1.1各列举几种你所知道的计算机硬件和软件。硬件: CPU、内存、硬盘、光盘、键盘、鼠标等软件: Windows、QQ、Internet Explorer、Word 等1.2冯诺依曼机模型有哪几个基本组成部分?运算器、存储器、输入和输出。1.3尝试把例 1-4 改为计算“ 123+456” 。#include main() printf(%dn, 123+456); 1.4列举几种你知道的程序设计语言。C、C+、Java、C#、php、asp、Pascal等1.5举几个在生活和学习中,IT 技术被成功应用的例子。可编程的微波炉、洗衣机,手机,文曲星,电子游戏机等。习题2 答案2.1
2、合法的为: t3 _var2.2 选择填空(1)(2) B(3) A(4) B(5) (6)(7)(8)B 2.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 值为 30 ,sin(y)应写成 sin (3.14/180*30), 不能直接写成 sin(30) (4) 2*3.1415*r 或 #define PI 3.1415 表达式写为: 2*PI*r (5) 1/ (1+1.0/x)(6)(s
3、in(3.14/180*30)+2*exp(x)/(2*y+pow(y,x) 习题3 答案3.1 答案:表达式语句,函数调用语句,控制语句,空语句和复合语句。3.2 答案:(1)C (2) D 3.3 答案:(1) 错误: 在 scanf函数中,参数应是 a,b两个变量的地址。改正: scanf(%d,%d,&a,&b); (2) 错误:数据输出格式与数据类型不匹配。改正: printf(%f, f); (3) 错误:数据输入格式与数据类型不匹配。改正: scanf(%lf%ld,&var, &a); (4) 错 误 : 在scanf函 数 中 的 输 入 格 式 控 制 串 中 多了 n,a
4、,b前面少了 & 。改正: scanf(%d,%d,&a,&b); (5) 错误: %f 的输入格式不应有精度控制。改正: scanf(%5f ,&f); (6) 错误:程序输入错误使得变量a,b的值不是 6,2 。改正:应输入a=6,b=23.4 答案:(1)aabbccabc (2) 0 1 1 (3) 68 (4) 3.500000 (5) 12 9 13 9 (6) 12 9 13 9 (7) -1,65535,177777,ffff (8) 123.400002,1.234000e+002,123.4 3.5 已知三角形的三边长a,b,c,计算求三角形面积的公式为:s= )(21cb
5、a, area = )()(csbsass要求编写程序, 从键盘输入 a,b,c的值,计算并输出三角形的面积 area。参考答案 :因为 1/2 在 C 语言中的值为0,整个表达式为0,s 值始终是 0,所以结果是错误的。程序如下:#include #include main() float a, b, c; /*a,b,c为三边变量 */ float s, area; printf(Input a,b,c:); scanf(%f,%f,%f,&a,&b,&c); s = 1.0 / 2 * (a + b + c); area = sqrt(s * (s - a) * (s - b) * (s
6、 - c); printf(area=%.2fn, area); 程序运行结果:Input a,b,c:3,4,5area=6.00 3.6编程从键盘输入圆的半径r, 计算并输出圆的周长和面积。程序参考答案:#include 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 1 页,共 33 页 - - - - - - - - - #define PI 3.14 main() float r ; /*r为半径变量 */ float circum, area; printf(Input
7、r:); scanf(%f, &r); circum = 2*PI*r; area = PI*r*r, printf(circum=%.2f,area=%.2fn, circum, area); 程序运行结果:Input r:5circum=31.40,area=78.50 习 题 四4.1简答题: 所谓算法, 就是一个有穷规则的集合,其中的规则确定了一个解决某一特定类型问题的运算序列。简单的说,就是为解决一个具体问题而采取的确定的有限的操作步骤,当然这里我们所说的算法仅指计算机算法,即计算机能执行的算法。每个程序都要依靠算法和数据结构,在某些特殊领域,例如计算机图形学、数据结构、语法分析、数
8、值分析、人工智能和模拟仿真等等,解决问题的能力几乎完全依赖于最新的算法和数据结构。因此,针对某一应用领域,要想开发出高质高效的程序,除了要熟练掌握程序设计语言这种工具和必要的程序设计方法以外,更重要的是要多了解、多积累并逐渐学会自己设计一些好的算法。 结构化程序设计是一种进行程序设计的原则和方法,按照这种原则和方法设计出的程序的特点是:结构清晰,容易阅读,容易修改,容易验证。结构化程序设计的基本思想归纳起来有以下几点:采用顺序、 选择和循环三种基本结构作为程序设计的基本单元,避免无限制地使用goto语句而使流程任意转向。三种基本结构应具有如下良好特性:只有一个入口。只有一个出口。无死语句,即不
9、存在永远都执行不到的语句。无死循环,即不存在永远都执行不完的循环。程序设计采用“自顶向下、逐步求精”和模块化的方法。 自顶向下( Top-down)方法是先写出结构简单清晰的主程序来表达整个问题,在此问题中包含复杂的子问题用子程序来实现,若子问题中还包含复杂的子问题,再用另外一个子程序来解决,直到每一细节都可以用高级语言清楚表达为止。逐步求精技术可以理解为是一种不断地自底向上的修正所补充的自顶向下的程序设计方法。选择题 C D B D A 4.2写出下列程序的运行结果。over! rightrightright? abcdefg$abcdefgEnd! abcdefgEnd! * * * *
10、4.3阅读程序,按要求,在空白处填写适当的表达式或语句,使程序完整,并符合题目要求。(year % 4 = 0 & year % 100 != 0) | (year % 400 = 0) flag(ch = a & ch = A & ch = Z)ch = 0ch = fahr celsius = 5.0 / 9 * (fahr - 20) fahr = fahr + step4.5 编程判断输入整数的正负性和奇偶性。流程图如图4-1。#include main() int m; scanf(%d, &m); /* 输入一个整数 */ if (m = 0) /* 是否为正数 */ if (m%
11、2 = 0) /* 是正数,且能被 2整除,是正偶数 */ printf(%d is a positive evenn, m); else /* 不能被 2整除,是正奇数 */ printf(%d is a positive oddn, m); /*if(m=0)结束 */ else if (m % 2 = 0) 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 2 页,共 33 页 - - - - - - - - - printf(%d is a negative evenn, m)
12、; /* 是负偶数 */ else printf(%d is a negative oddn, m); /* 是负奇数 */ 程序运行结果如下:第一次运行:66 is a positive even 第二次运行:-7 6 is a negative odd 4.6 编程计算分段函数:1xxeye000 xxx,输入 x,打印出 y值。流程图如图4-2。#include #include main() int x; double y; scanf(%d, &x); /* 输入一个整数 */ if (x 0) y = exp(-x); /*如果大于 0 ,计算y=exp(-x)的值 */ else
13、 if (x = 0) y = 1; /*x=0,则 y=1*/ else y = -exp(x); /*x0,则 y=-exp(x)*/ printf(y=%fn, y); 程序运行结果如下:第一次运行:4y=0.018316 第二次运行:0y=1.000000 第三次运行 :-4 y=-0.018316 4.7 输入三角形的三条边a,b,c ,判断它们能否构成三角形,若能则指出是何种三角形:等腰三角形、直角三角形、一般三角形。流程图如图4-3。#include #include #define LIMIT 1e-1 main() float a, b, c; int flag = 1; s
14、canf(%f, %f, %f, &a, &b , &c); /* 输入三角形的三条边*/ if (a + b) c & (b + c) a) & (a + c) b) /* 三角形的基本条件*/ 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 -
15、a * a) = LIMIT) /*直角三角形的条件 */ printf(直角 ); flag = 0; if (flag) printf(一般 ); printf(三角形 n); else printf(不是三角形 n); 程序运行结果如下:第一次运行:3,4,5直角三角形第二次运行:4,4,5等腰三角形第三次运行:名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 3 页,共 33 页 - - - - - - - - - 10,10,14.14等腰直角三角形第四次运行 : 3,4,9
16、不是三角形4.8 在屏幕上显示一张如下所示的时间表: *Time* 1 morning 2 afternoon 3 night Please enter your choice: 操作人员根据提示进行选择,程序根据输入的时间序号显示相应的问候信息,选择1 时显示 Good morning, 选择 2 时显示Good afternoon, 选择 3 时显示 Good night,对于其它选择显示 Selection error!,用 switch语句编程实现。算法思想:使用printf函数输出一个简单的菜单语句,通过 switch语句进行选择。需要注意的问题是:输入选项是字符型的,所以在case
17、后的数字要加单引号。#include main() char c; printf(*Time*n); printf(1 morning n); printf(2 afternoon n); printf(3 night n); printf(please enter your choice); /* 建立相应的菜单 */ c = getchar(); /* 输入选项 */ switch (c) /* 通过 switch选择 */ case 1: printf(Good morning n); break; case 2: printf(Good afternoon n); break; cas
18、e 3: printf(Good nightn); break; default: printf(Selection error!n); 程序运行结果如下:第一次运行:*Time* 1 morning 2 afternoon 3 night Please enter your choice:1Good moning 第二次运行:*Time* 1 morning 2 afternoon 3 night Please enter your choice:3Good night 4.9 读入一个年份和月份, 打印出该月有多少天 (考虑闰年),用 switch语句编程。#include main()
19、int year, month; scanf(%d, %d, &year, &month); /*输入相应的年和月 */ 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 daysn); /*闰年的 2月有 29天 */ else printf(28 daysn); /*平年的 2月有 28天 */ bre
20、ak; case 4: case 6: case 9: case 11: printf(30 daysn); break; default: printf(Input error!n); 程序运行结果如下:名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 4 页,共 33 页 - - - - - - - - - 第一次运行:1988,531 days 第二次运行:1988,229 days 第三次运行:1989,228 days 4.10 编程计算 1+3+5+7+ ,+99+101
21、的值。算法一: 利用 for循环语句实现 , 在循环体外为sum 赋初值0。流程图如图4-4。#include main() int i, sum = 0; for (i = 1; i = 101; i = i+2) sum = sum + i; printf(sum=%dn, sum); 算法二:利用 while循环语句实现, 在循环体外为i 和 sum赋初值。#include main() int i = 1, sum = 0; while (i = 101) sum = sum + i; i = i + 2; printf(sum=%dn, sum); 程序运行结果如下:sum=2601
22、 4.11 编程计算 1*2*3+3*4*5+ ,+99*100*101 的值。算法思想:用累加算法,通项公式为:term=i*(i+1)*(i+2); i=1,3,99。或者为: term=(i-1)*i*(i+1); i=2,4,100。步长为 2。流程图如图4-5。#include 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=%ld,sum); 程序运行结果如下:sum=1300245
23、0 4.12 编程计算 1!+2!+3!+4!+ ,+10!的值。算法一:用累加算法,累加项为 term=term*i; ;i=1,2,10。 term初值为 1,使用单重循环完成。流程图如图4-6。#include 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); 算法二:用内层循环求阶乘,外层循环控制累加的项数。#include main() long term ,sum = 0;
24、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); 程序运行结果为:1!+2!+ +10! = 4037913 4.13 编程计算a+aa+aaa+.+aa.a(n 个 a)的值,n 和 a的值由键盘输入。算法思想:用累加算法,累加项为term=term*10+a; i=1,2,n。term 初值为 0。流程图如图4-7。#include main() long term = 0,
25、sum = 0; 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 5 页,共 33 页 - - - - - - - - - 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; /* 求出累加项*/ sum = sum + term; /* 进行累加 */ printf(sum=%ldn,sum); 程序运
26、行如下:Input a,n:2,4sum=2468 4.14利用.7656543432122前 100项之积计算 。算法一:采用累乘方法,累乘项为term=n*n/(n-1)*(n+1); n=2,4,100,步长为 2。流程图如图4-8。#include main() float term, result = 1; /*累乘项初值应为1*/ int n; for (n = 2; n = 100; n = n + 2) term = (float)( n * n)/( n - 1) * ( n + 1); /*计算累乘项 */ result = result * term; printf(re
27、sult = %fn, 2*result); 算法二:采用累乘方法,累乘项为term=2*n*2*n/(2*n-1)*(2*n+1) ;n=1,2,50,步长为 1。#include 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); /*计算累乘项*/ result = result * term; printf(result = %fn, 2*result); 程序运行结果为:result = 3.126078 4.15利用 泰勒级 数计算
28、e的近似值,!1.! 31! 21! 111ne,当最后一项的绝对值小于10-5时认为达到精度要求,要求统计总共累加了多少项。算法思想: 采用累加算法: e=e+term;寻找累加项的构成规律: 利用前项计算后项比寻找统一的累加项表示形式要简单一些,由.,3! 21! 31,2! 11! 21可以发现前后项之间的关系是: termn=termn-1 n,写成 C 语句便是: term=term/n;term初值为 1.0,n 初值也为 1,n 按 n=n+1 变化。统计累加项数只要设置一个计数器变量即可,这里,计数器变量取名为count,初值为 0,在循环体中每累加一项就加一次1。流程图如图4
29、-9。#include main() int n = 1, 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); 程序运行结果为:e = 2.178282, count = 10 4.16 计算 1-1/2+1/3-1/4+,+1/99-1/100+, ,直到最后一项的绝对值小于10-4为止。算法思想:采用累加算法,累加项通式为:term=sign/n;分子 s
30、ign=-sign;初值为 1,分母 n=n+1;初值为 1。流程图如图 4-10。#include #include main() int n = 1; float term = 1.0, sign = 1,sum = 0; while (fabs(term) = 1e-4) /* 判断末项大小*/ term = sign / n; /* 求出累加项*/ sum = sum + term; /* 累加 */ sign = -sign; /* 改变项的符号*/ n+; /* 分母加1*/ 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - -
31、- - 名师精心整理 - - - - - - - 第 6 页,共 33 页 - - - - - - - - - printf(sum = %fn, sum); 程序运行结果为:sum = 0.693092 4.17 利用泰勒级数计算sin(x) sin(x) x-x3/3!+x5/5!-x7/7!+x9/9!-要求最后一项的绝对值小于10-5,并统计出此时累加了多少项。算法思想: x 由键盘输入,采用累加算法,sum=sum+term,sum 初值为x,利用前项求后项的方法计算累加项:term= -term*x*x/(n+1)*(n+2); term初值为 x,n 初值为 1,n=n+2 。流
32、程图如图4-11。#include main() int n = 1,count = 0; float x; double sum , term; /*因为位数多,所以定义为双精度 */ scanf(%f, &x); sum = x; term = x; /*赋初值 */ do /* 计算相应项,并改应符号*/ 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 = %
33、dn, sum, count); 程序运行结果为:3( 输入的为弧度 ) 。sin(x) = 0.141120, count = 8 4.18 打印所有的 “水仙花数”,所谓“水仙花数”是指一个三位数,其各位数字立方和等于该数本身。例如153 是“水仙花数”,因为153=13+33+53。算法思想:首先确定水仙花数n 可能存在的范围,因为n 是一个三位数,所以范围确定为n 从 100 变化到 999,分离出 n 的个位 i、十位 j、百位 k 后,只要判断 n 是否等于 i*i*i+j*j*j+k*k*k即可知 n 是否是水仙花数。 分离各位数字的方法可参考例4.2。流程图如图 4-12。#i
34、nclude main() int i, j, k, n; printf(result is:); for (n = 100; n 1000; n+) i = n / 100; /* 分出百位*/ j = (n - i * 100) / 10; /* 分出十位*/ k = n % 10; /* 分出个位*/ if (i*100 + j*10 + k = i*i*i + j*j*j + k*k*k) printf(%dt ,n); /* 输出结果*/ printf(n); 程序运行结果为 : result is:153 370 371 407 4.19 从键盘任意输入一个四位数x,编程计算x 的
35、每一位数字相加之和(忽略整数前的正负号)。例如,输入x 为 1234,则由 1234分离出其个位1、 十位 2、 百位 3、 千位 4, 然后 1+2+3+4=10,于是输出 10。算法思想:对输入的整数取绝对值 (绝对值函数为fabs()) ,即可实现忽略整数前的正负号。#include #include main() int i1, i2, i3, i4, k, n; printf(Input data is:); scanf(%d, &n); k = fabs(n); /* 取绝对值 */ i1 = k / 1000; /* 分离出千位 */ i2 = (k - i1 * 1000) /
36、 100; /* 分离出百位 */ i3 = (k - i1 * 1000 - i2 * 100) / 10;/* 分离出十位 */ i4 = k % 10; /* 分离出个位 */ printf(The sum of the total bit is %dn, i1+i2+i3+i4); 程序运行结果为:第一次运行:Input data is :1234The sum of the total bit is 10 第二次运行:名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 7 页,
37、共 33 页 - - - - - - - - - Input data is :5678 The sum of the total bit is 26 4.20 韩信点兵。韩信有一队兵,他想知道有多少人,便让士兵排队报数: 按从 1 至 5 报数,最末一个士兵报的数为1;按从 1至 6 报数,最末一个士兵报的数为5;按从 1 至 7 报数,最末一个士兵报的数为4;最后再按从 1 至 11报数,最末一个士兵报的数为 10。你知道韩信至少有多少兵吗?算法思想:设兵数为x,则按题意 x 应满足下述关系式: x%5 =1 & x%6=5 &x %7=4 & x%11=10 采用穷举法对x 从 1 开始
38、实验,可得到韩信至少有多少兵。流程图如图4-13。#include main() int x = 1 int find = 0; /*设置找到标志为假*/ while (!find) if (x % 5 = 1 & x % 6 = 5 & x % 7 = 4 & x % 11 = 10) find = 1; x+; printf( x = %dn, x); 程序运行结果:x = 2112 4.21 爱因斯坦数学题。爱因斯坦曾出过这样一道数学题:有一条长阶梯,若每步跨2 阶,则最后剩下1 阶,若每步跨3 阶,则最后剩下2 阶,若每步跨5 阶,则最后剩下4 阶,若每步跨6阶,则最后剩下5 阶,只有
39、每步跨7 阶,最后才正好1 阶不剩。请问,这条阶梯共有多少阶?算法思想:设阶梯数为x,则根据题意:阶梯数满足下面的关系式: x%2=1 & x%3=2 & x%5=4 & x%6=5 & x%7=0 采用穷举法对x 从 1 开始实验,可计算出这条阶梯共有多少阶。流程图如图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); 程序运行结果为:x = 120 4.2
40、2 三色球问题。 若一个口袋中放有12个球,其中有 3 个红色的, 3 个白色的, 6 个黑色的,从中任取8 个球,问共有多少种不同的颜色搭配?算法思想:设任取的红球个数为i,白球个数为j,黑球个数为 k,根据题意应有:i+j+k=8 ,0=i=3,0=j=3 ,0=k=6。若红球和白球个数的取值范围是03,在红球和白球个数确定的条件下,黑球个数的取值范围应为k=8-i-j ,只要满足 k=6,i、j、k 的组合即为所求。流程图如图4-15。#include main() int i, j, k; for (i = 0; i = 3; i+) for (j = 0; j = 3; j+) fo
41、r (k = 0; k = 6; k+) i f (i + j + k = 8) printf(i=%d, j=%d, k=%dn, i, j, k); 程序运行结果:i=0,j=2,k=6 i=0,j=3,k=5 i=1,j=1,k=6 i=1,j=2,k=5 i=1,j=3,k=4 i=2,j=0,k=6 i=2,j=1,k=5 i=2,j=2,k=4 i=2,j=3,k=3 i=3,j=0,k=5 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 8 页,共 33 页 - - -
42、 - - - - - - i=3,j=1,k=4 i=3,j=2,k=3 i=3,j=3,k=2 4.23 鸡兔同笼,共有98 个头,386 只脚,编程求鸡、兔个多少。算法思想:设鸡数为x,兔数为y,据题意有:x+y=98 ,2x+4y=386。采用穷举法, x 从 1 变化到 97, y取 98-x,如果 x、y 同时满足条件2x+4y=386 , 则打印 x、y 的值。流程图如图 4-16。#include main() int x, y; for (x = 1; x = 97; x+) y = 98 - x; if (2 * x + 4 * y = 386) printf(x = %d,
43、 y = %d, x, y); 程序运行结果为:x = 3, y = 95 4.24 我国古代的张丘建算经中有这样一道著名的百鸡问题:“鸡翁一,值钱五;鸡母一,值钱三;鸡雏三,值钱一。百钱买百鸡,问鸡翁、母、雏各几何?”意为:公鸡每只5 元,母鸡每只 3 元,小鸡 3 只 1 元。用 100 元买 100 只鸡,问公鸡、母鸡和小鸡各能买多少只?算法思想:设公鸡、母鸡、小鸡数量分别为x,y,z,依题意列出方程组: x+y+z=100 ,5x+3y+z/3=100 ,采用穷举法求解,因 100 元买公鸡最多可买20 只,买母鸡最多可买33 只,所以,x从 0 变化到 20,y 从 0 变化到 33
44、,则 z=100-x-y,只要判断第二个条件是否满足即可。流程图如图4-17 #include 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) printf(x=%d, y=%d, z=%dn, x, y, z); 程序运行结果为:x=0,y=25,z=75 x=4,y=18,z=78 x=8,y=11,z=81 x=12,y=4,z=84 4.25 用一元五角钱人民币兑换5 分、 2 分和 1 分的硬币(每一种都要有)
45、共100 枚,问共有几种兑换方案?每种方案各换多少枚?算法思想:设5 分、 2 分和 1 分的硬币各换x、y、z 枚,据题意有: x+y+z=100 ,5x+2y+z=150,由于每一种硬币都要有,故5 分硬币最多可换28 枚,2 分硬币最多可换73 枚,1 分硬币可换100-x-y 枚,x、y、z 只需满足第二个方程即可打印,对每一组满足条件的 x、y、z 值用计数器计数即可得到兑换方案的数目。流程图如图 4-18。#include main() int x, y, z, count = 0; for (x = 1; x = 28; x+) for (y = 1; y = 73; y+) z
46、 = 100 x - y; if (5*x + 2*y + z = 150) count+; printf(%d, %d, %dn, x, y, z); printf(count = %dn, count); 程序运行结果为:1,46,53 2,42,56 3,38,59 4,34,62 5,30,65 6,26,68 7,22,71 8,18,74 9,14,77 10,10,80 11,6,83 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 9 页,共 33 页 - - - -
47、 - - - - - 12,2,86 count = 12 4.26 编程输出如下上三角形式的乘法九九表。81726463564954484236454035302536322824201627242118151291816141210864987654321987654321算法思想: 根据题意, 第一行打 9 列,第二行打 8 列,, ,最后一行打1 列,为了打印右上三角形式,需要在第n 列先打印4*n-4 列空格,再打印两数相乘结果。#include main() int m, n, i; for (m = 1; m 10; m+) printf(%4d, m); /* 打印表头 */
48、printf(n); for (m = 1; m 10; m+) printf( -); printf(n); for (n = 1; n = 9; n+) /*被乘数 n从1变化到 9*/ for (i = 1; i = 4*n - 4; i+) printf( ); /* 输出相应空格使数字右对齐*/ for (m = n;m 10;m+) /*乘数 m从n变化到 9*/ printf(%4d, m * n); /*输出第 m行n列中的 m*n 的值 */ printf(n); /* 输出换行符 , 准备打印下一行*/ 4.27 编程打印以下图案。(1)(2)(3)第(1)题:#inclu
49、de main() int i, j, k; for (i = 1; i = 4; i+) /*i控制行数 */ for (j = 1; j = 4 - i; j+) /* 随行数的增加,输出递减数目的空格*/ printf( ); for (k = 1 ;k = 6; k+) /*每行输出 6个* 字符 */ printf(*); printf(n); /*将光标移到下一行起始位置处*/ 第(2)题#include main() int i , j , k; for (i = 1; i = 4; i+) /*控制行数 */ for (k = 1; k = (2 * i - 1); k+) /
50、*控制每行输出的* 号个数 */ printf(*); printf(n); /* 输出一行后换行*/ 第(3)题#include main() int i , j, k ; for (i = 1; i = 4; i+) /* 控制行数 */ for (j = 1; j = 8 - i; j+) /* 随行数的增加,输出递减数目的空格*/ printf( ); for (k = 1;k = (2 * i - 1);k+) printf(*); printf(n); * * * * * * * * * * * * 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - -