C语言复习01——课后习题代码练习(小部分有价值的)
第五章
3⭐️⭐️⭐️⭐️⭐️
辗转相处求最大公因数,最小公倍数
#include<stdio.h>
int main() {
int n, m,r;
int t;
printf("请输入两个正整数:\n");
scanf_s("%d%d", &n, &m);
if (n < m) {
t = n;
n = m;
m = t;
}
int p = n * m;
while (m!=0)
{
r =n%m;
n = m;
m = r;
}
printf("最小公倍数:%d\n", n);
printf("最大公因数:%d", p/n);
}
注意点:
辗转想相除的算法思路
9 ⭐️⭐️⭐️
求出1000以内的“完数”:因子之和为本身
例如:6的完数是1,2,3
要求输出 :
6 its factors are 1,2,3
#include<stdio.h>
int main() {
int sum;
for (int i = 2; i < 1001; i++) {
sum = 0;
for (int j = 1; j < i; j++) {
if (i % j == 0) sum += j;
}
if (sum == i){
printf("%d its factors are ",i);
printf("1");
for (int j = 2; j < i; j++) {
if (i % j == 0) {
printf(",%d", j);
}
}
printf("\n");
}
}
}
注意点:
1、如何在得出完数之后再把因子输出来?
重新遍历一遍
2、逗号分隔
3、层级关系
10⭐️
求序列之和
#include<stdio.h>
int main() {
double i = 1, j = 2;
int t;
double sum =0;
for (int n = 0; n <20; n++) {
sum += j / i;
t = i;
i = j;
j = j + t;
}
printf("%f", sum);
}
注意点:
精度
11⭐️
#include<stdio.h>
int main() {
double h=100, x=0;
for (int i = 0; i < 10; i++) {
if (i == 0)
x = h;
else
x += 2 * h;
h = h / 2;
}
printf("第十次落地时经过%f米,第十次反弹%f米", x, h);
}
注意点:
精度:设定的和输出的。算法还好不是很难,仔细就行。
12⭐️
猴子吃桃,每天吃当前数量的一半加一个,到第十天只有1个,问一开始有多少个
#include<stdio.h>
int main() {
int n=1;
for (int i = 0; i < 9; i++) {
n = 2 * (n + 1);
}
printf("第一天摘了%d个", n);
}
注意点:
迭代次数不要搞错,第十天只有一个,但第十天没吃!
13⭐️⭐️
迭代求开跟(以2为例)
#include<stdio.h>
int main() {
double x = 1.5;
double t = 1;
while (x-t>0.00005 ||x-t<-0.00005)
{
t = x;
x = (x + 2 / x) / 2;
}
printf("%f", x);
}
注意点:
while里面的循环条件 ||,不要&&