C语言程序设计第五版 谭浩强 第五章课后答案

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/gjggj/article/details/92250696

谭浩强 C语言程序设计第五版 第五章课后答案

3.求两个正整数m和n,求其最大公约数和最小公倍数。

#include<stdio.h>
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<stdio.h>
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<stdio.h>
#include<math.h>
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<stdio.h>
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<stdio.h>
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<stdio.h>
#include<math.h>
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<stdio.h>
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<stdio.h>
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<stdio.h>
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天早上想再吃的时候,就剩下一个桃子。求第一天共摘多少个桃子。

扫描二维码关注公众号,回复: 7197265 查看本文章
#include<stdio.h>
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<stdio.h>
#include<math.h>
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 <stdio.h>
#include <math.h>
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<stdio.h>
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 <stdio.h>  
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语言程序设计第五版 谭浩强 第六章课后答案

猜你喜欢

转载自blog.csdn.net/gjggj/article/details/92250696
今日推荐