3.求两个正整数m和n,求其最大公约数和最小公倍数。
#include
void main()
{
int m, n, t, i, a = 1;
scanf("%d%d", &m, &n);
if (m < n)
{
t = m;
m = n;
n = t;
}
for (i = 2; i <= n; i++)
{
if (m%i == 0 && n%i == 0)
a = i;
}
printf("最大公约数是:%d\n", a);
t = (m*n) / a;
printf("最小公倍数是:%d", t);
}
C语言程序设计第五版 谭浩强 第4章课后答案
4.输入一行字符,分别统计出其中英文字母,空格,数字和其他字符的个数。
#include
void main()
{
char c;
int i = 0, j = 0, k = 0, l = 0;
while ((c = getchar()) != '\n')
{
if (c >= 65 && c <= 90 || c >= 97 && c <= 122)
i++;
else if (c >= 48 && c <= 57)
j++;
else if (c == 32)
k++;
else
l++;
}
printf("字母%d个\t空格%d个\t数字%d个\t其他字符%d个\n", i, j, k, l);
}
5.求Sn = a + aa + aaa…… + aa···a(n个a)之值,其中a是一个数字,n表示a的位数,n由键盘输入。例如:
2 + 22 + 222 + 2222 + 22222 (此时n = 5)
#include
#include
main()
{
int a, n, sum = 0, i = 1;
scanf("%d%d", &a, &n);
while (i <= n)
{
sum = sum + a;
a = a + 2 * pow(10, i);
i++;
}
printf("%d", sum);
}
C语言程序设计第五版课后答案
6.求 ∑n!(即求1!+ 2!+ 3!+ 4!+ …… + 20!).
n = 1
#include
int main()
{
int n;
int s = 1, sum = 0;
for (n = 1; n <= 20; n++)
{
s = s*n;
sum = sum + s;
}
printf("sum=%d\n", sum);
}
100 50 10
1
7.求 ∑k + ∑k ^ 2 + ∑1 / k
k = 1 k = 1 k = 1
#include
void main()
{
int k1 = 1, k2 = 1, k3 = 1;
int s1 = 0, s2 = 0, s3 = 0, sum;
for (k1 = 1; k1 <= 100; k1++) s1 = s1 + k1;
for (k2 = 1; k2 <= 50; k2++) s2 = s2 + k2*k2;
for (k3 = 1; k3 <= 10; k3++) s3 = s3 + (1 / k3);
sum = s1 + s2 + s3;
printf("%d", sum);
}
C语言程序设计第五版 课后答案
8.输出所有的“水仙花数”,所谓“水仙花数”是指一个3位数,其各位数字立方和等于该数本身。例如,153是水仙花数,因为153 = 1 ^ 3 + 5 ^ 3 + 3 ^ 3。
#include
#include
void main()
{
int x = 100, a, b, c;
while (100 <= x&&x < 1000)
{
a = 0.01*x; b = 10 * (0.01*x - a); c = x - (a * 100) - (b * 10);
if (x == pow(a, 3) + pow(b, 3) + pow(c, 3))
printf("%5d", x);
x++;
}
}
9.一个数如果恰好等于它的因子之和,这个数就称为“完数”。例如,6的因子为1, 2, 3,而6 = 1 + 2 + 3,因此6是“完数”。编程序找出1000之内的所有完数,并按下面格式输出其因子:
6 its factors are 1, 2, 3
#include
void main()
{
int i, j, s;
for (i = 2; i <= 1000; i++)
{
s = 0;
for (j = 1; j < i; j++)
{
if (i%j == 0)
s = s + j;//数字i的真因子之和
}
if (i == s)//如果数字i因子之和=i
{
printf("%d its factors are ", i);//输出完美数
for (j = 1; j < i; j++)
{
if (i%j == 0)
printf("%d,", j);//输出完美数真因子
}
printf("\n");
}
}
}
10.有一个分数序列2 / 1, 3 / 2, 5 / 3, 8 / 5, 13 / 8, 21 / 13……求出这个数列前20项之和。
C语言程序设计第五版 课后答案
#include
void main()
{
int i;
float n = 1, m = 2, t, s, sum = 0;
for (i = 1; i <= 20; i++)
{
s = m / n;
sum = sum + s;
t = m; m = m + n; n = t;
}
printf("%f\n", sum);
}
11.一个球从100m高度自由落下,每次落地后反弹回原来高度的一半,再落下,再反弹。求它在第10次落地时共经过多少米,第10次反弹多高。
#include
void main()
{
int n;
double h = 100, s = 100;
for (n = 1; n <= 10; n++)
{
h *= 0.5; if (n == 1) continue; s = 2 * h + s;
}
printf("第10次一共经过%.2f米,反弹%.2f米", s, h);
}
C语言程序设计第五版 课后答案 谭浩强
12.猴子吃桃问题。猴子第一天摘下若干个桃子,当即吃了一半,好不过瘾,又多吃了一个。第二天早上又吃了剩下的桃子的一半,又多吃了一个。以后每天都吃了前一天剩下的一半零一个,到第10天早上想再吃的时候,就剩下一个桃子。求第一天共摘多少个桃子。
#include
void main()
{
int i = 1, sum = 0;
for (; i <= 10; i++)
sum = sum * 2 + 1;
printf("%d\n", sum);
}
迭代法求a平方根
已知求平方根的迭代公式为:x n + 1 = (xn + a / xn) / 2
要求前后两次求出的差的绝对值小于10 - 5。
#include"stdio.h"
#include"math.h"
void main()
{
float x1 = 1, x2, a;
printf("input a\n");
scanf("%f", &a);
x2 = a;
while (fabs(x1 - x2) >= 1e-5)
{
x1 = x2;
x2 = (x1 + a / x1) / 2;
}
printf("%f,%f", x1, x2);
}
C语言程序设计第五版 课后答案 谭浩强
14.用牛顿迭代法求下面方程在1.5附近的根:2x ^ 3 - 4x ^ 2 + 3x - 6 = 0
#include
#include
int main()
{
int i = 0;
double x1 = 1.5, x2 = 0;//迭代初值
while (fabs(x2 - x1) >= 1e-5)
{
x1 = x1 - (2 * x1*x1*x1 - 4 * x1*x1 + 3 * x1 - 6) / (6 * x1*x1 - 8 * x1 + 3);
x2 = x1 - (2 * x1*x1*x1 - 4 * x1*x1 + 3 * x1 - 6) / (6 * x1*x1 - 8 * x1 + 3);
i++;
printf("第%d次迭代 x1=%9.8f\tx2=%9.8f\n", i, x1, x2);
}
printf("\nx=%9.8f\t共迭代:%d次\n", x2, i);
return 0;
}
15.用二分法求下面方程在( - 10, 10)之间的根:2x3−4x2 + 3x−6 = 0C语言程序设计第五版 课后答案 谭浩强
#include
#include
int main()
{
double a = -10, b = 10, c, x, x1, x2, x3;
for (int i = 0;; i++){
c = (a + b) / 2;
x1 = 2 * pow(a, 3) - 4 * pow(a, 2) + 3 * a - 6;
x2 = 2 * pow(b, 3) - 4 * pow(b, 2) + 3 * b - 6;
x3 = 2 * pow(c, 3) - 4 * pow(c, 2) + 3 * c - 6;
if (!x3) x = c;
else if (x1*x3 < 0) b = c;
else if (x2*x3 < 0) a = c;
if (fabs(a - b) < 1e-8){
x = a;
break;
}
}
printf("Root=%lf\n", fabs(x));
return 0;
}
C语言程序设计第五版 课后答案 谭浩强
16.输出以下图案:
*
#include
main()
{
int i, j, k;
for (i = 0; i <= 3; i++)
{
for (j = 0; j <= 2 - i; j++)
printf(" ");
for (k = 0; k <= 2 * i; k++)
printf("*");
printf("\n");
}
for (i = 0; i <= 2; i++)
{
for (j = 0; j <= i; j++)
printf(" ");
for (k = 0; k <= 4 - 2 * i; k++)
printf("*");
printf("\n");
}
}
17.两个乒乓球队进行比赛,各出三人。甲队为a, b, c三人,乙队为x, y, z三人。已抽签决定比赛名单。有人向队员打听比赛的名单。a说他不和x比,c说他不和x, z比,请编程序找出三队赛手的名单。
#include
int main()
{
char i, j, k; /*是a的对手;j是b的对手;k是c的对手*/
for (i = 'x'; i <= 'z'; i++)
for (j = 'x'; j <= 'z'; j++)
if (i != j)
for (k = 'x'; k <= 'z'; k++)
if (i != k && j != k)
if (i != 'x' && k != 'x' && k != 'z')
printf("A--%c\nB--%c\nC--%c\n", i, j, k);
return 0;
}
C语言程序设计第五版 谭浩强 第四章课后答案
C语言程序设计第五版 谭浩强 第六章课后答案