譚浩強 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天早上想再喫的時候,就剩下一個桃子。求第一天共摘多少個桃子。
#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;
}