C语言程序设计第五版谭浩强著 第七章答案
![在这里插入图片描述](https://img-blog.csdnimg.cn/20200629123717216.png)
第七章 用函数实现模块化程序设计
1、写两个函数,分别求两个整数的最大公约数和最小公倍数,用主函数调用这两个函数,并输出结果。两个整数由键盘输人。
题目解析:
该题直接使用“辗转相除法”来求解最大公约数和最小公倍数 最大公约数找出两数中的最小值,然后直接相模,当能够同时被两数整除时,则为最大公约数。 最小公倍数找出两数中的最大值,然后直接进入死循环,直到找到一个数能够同时被两数整除时,则为最小公倍数
【注】此题还有一些比较高级的解法,比如求最大公约数的相减法、欧几里德辗转相除法等,有兴趣的同学可以查询相关资料
代码示例:
#include
//最大公约数
size_t GCD(size_t a, size_t b)
{
size_t gcd;
gcd = a > b ? b : a;
while(gcd > 1)
{
if((a % gcd == 0) && (b % gcd == 0))
return gcd;
gcd--;
}
return gcd;
}
//最小公倍数
size_t LCM(size_t a, size_t b)
{
size_t lcm;
lcm = a > b ? a : b;
while(1)
{
if((lcm % a==0) && (lcm % b==0))
break;
lcm++;
}
return lcm;
}
int main()
{
size_t a, b, result;
printf("请输入两个整数:>");
scanf("%d %d", &a, &b);
result = GCD(a, b);
printf("%d和%d的最大公约数为:%d\n", a, b, result);
result = LCM(a, b);
printf("%d和%d的最小公倍数为:%d\n", a, b, result);
return 0;
}
运行结果:
![C语言程序设计谭浩强第五版课后答案第一题](https://img-blog.csdnimg.cn/20200628141906591.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2dqZ2dq,size_16,color_FFFFFF,t_70)
2、求方程
a
x
2
+
b
x
+
c
=
0
{ax}^2+bx+c=0
ax2+bx+c=0的根,用3个函数分别求当:
b
2
−
4
a
c
b^2-4ac
b2−4ac大于0、等于0和小于0时的根并输出结果。从主函数输入a,b,c的值。
题目解析
根据disc =
b
2
−
4
a
c
b^2-4ac
b2−4ac 的值来决定如何求根,题目本身编程不难,不过需要同学们复习一下高中的数学知识哦。
代码示例
#include
#include
//x1为第一个根,x2为第二个根
float x1, x2, disc, p, q;
void greater_than_zero(float a, float b)
{
float m = sqrt(disc);
x1 = (-b + sqrt(disc)) / (2 * a);
x2 = (-b - sqrt(disc)) / (2 * a);
}
void equal_to_zero(float a, float b)
{
x1 = x2 = (-b) / (2 * a);
}
void smaller_than_zero(float a, float b)
{
p = -b / (2 * a);
q = sqrt(-disc) / (2 * a);
}
int main()
{
int a, b, c;
printf("请输入 a b c:");
scanf("%d %d %d", &a, &b, &c);
printf("表达式为: %d*x^2+%d*x+%d = 0\n", a, b, c);
disc = b*b - 4 * a*c;
if (disc > 0)
{
greater_than_zero(a, b);
printf("disc>0的根为: x1=%f x2=%f\n", x1, x2);
}
else if (disc == 0)
{
equal_to_zero(a, b);
printf("disc==0的根为:x1=%f x2=%f\n", x1, x2);
}
else
{
smaller_than_zero(a, b);
printf("disc |