C语言练习(4)

一个数恰好是他的因子之和,这个数就被称为“完数”。例如;6=1+2+3.求1000内的完数

#include <stdio.h>

// 判断一个数是否为完美数的函数
int isPerfect_numbers(int num)
{
    int sum = 1; // 初始化因子和为1,因为1是所有正整数的因子
    for (int i = 2; i * i <= num; i++) // 从2开始遍历到num的平方根
    {
        if (num % i == 0) // 如果i是num的因子
        {
            sum += i; // 将i加入因子和中
            if (num != num / i) // 如果i不等于num/i(避免重复计算)
            {
                sum += num / i; // 将num/i加入因子和中
            }
        }
    }
    return sum == num; // 如果因子和等于num,返回1,否则返回0
}

int main()
{
    for (int perfect_numbers = 2; perfect_numbers <= 1000; perfect_numbers += 2) // 从2开始遍历到1000,步长为2(只考虑偶数)
    {
        if (isPerfect_numbers(perfect_numbers)) // 如果perfect_numbers是完美数
        {
            printf("%d\n", perfect_numbers); // 输出perfect_numbers
        }
    }
    return 0;
}

一球从100米高度自由落下,每次落地反弹后跳回原来高度的一半,再落下,求十次落地后,共经过多少米?第10次多高?

#include <stdio.h>
int main()
{
	double height = 100;// 初始高度为100米
	int time = 10;// 下落次数为10次
	double distance = 0;// 总距离初始化为0
	for (time = 1; time <= 10; time++)
	{
		distance = distance + height;// 累加每次下落的距离
		height = height / 2;// 每次落地后,高度减半
		if (time != 10)
			distance = distance + height;// 除了最后一次落地,其他次数还有反弹高度的距离
	}
	printf("%lf\n", distance);
	printf("%lf\n", height);
	return 0;
}

函数表达

void cDH(double* distance, double* height)
{
	*distance = 0;
	*height = 100;
	for (int times = 1; times <= 10; times++)
	{
		*distance += *height;
		*height = *height / 2;
		if (times != 10)
			*distance += *height;
	}
}
int main()
{
	double distance = 0;
	double height = 0;
	cDH(&distance, &height);
	printf("%lf\n", distance);
	printf("%lf\n", height);
	return 0;
}

猴子吃桃问题:猴子第一天摘了若干个桃子,当即吃了一半,不过瘾,又吃了一个,第二天早上又将剩下的桃子吃了一半,又多吃了一个。以后每天都吃了前一天的一半多一个,到第10天只剩一个桃子。求第一天吃了多少?

#include <stdio.h>
int main()
{
	int peach = 0;
	int peach1 = 1;
	for (int i = 1; i <= 10; i++)
		peach = peach * 2 + peach1;
	printf("%d\n", peach / 2 + 1);
	return 0;
}

函数表达

#include <stdio.h>
int calculatePeach(int  day)
{
	int peach = 0;
	int peach1 = 1;
	for (int i = 1; i <= day; i++)
		peach = peach * 2 + 1;
	return peach / 2 + 1;
}
int main()
{
	int day = 10;
	calculatePeach(day);
	printf("%d\n", calculatePeach(day));
	return 0;
}

打印菱形,数字类图形

#include <stdio.h>
// 打印一个由数字组成的菱形
void print_rhombus(int n)
{
    int i = 0; // 循环计数器i
    int j = 0; // 循环计数器j
    for (i = 1; i <= n; i++) // 从第1行到第n行
    {
        for (j = 1; j <= n - i; j++) // 打印空格,控制每行的缩进
        {
            printf(" ");
        }
        for (j = 1; j <= 2 * i - 1; j++) // 打印数字,控制每行的数字个数
        {
            printf("%d", i % 10); // 取i的个位数作为打印的数字
        }
        printf("\n"); // 换行
    }
    for (i = n - 1; i >= 1; i--) // 从第n-1行到第1行
    {
        for (j = 1; j <= n - i; j++) 
        {
            printf(" ");
        }
        for (j = 1; j <= 2 * i - 1; j++) 
        {
            printf("%d", i % 10); 
        }
        printf("\n"); // 换行
    }
}

int main()
{
    print_rhombus(5); // 调用函数打印一个5行的菱形
    return 0;
}

有一序列 2/1,3/2,5/3,8/5,13/8,21/13...求这个数列的前20项之和。

#include <stdio.h>
int main()
{
    double a = 2; // 初始化变量a为2
    double b = 1; // 初始化变量b为1
    double sum = 0; // 求和
    
    for (int i = 1; i <= 20; i++) // 循环20次
    {
        sum += a / b; // 将a除以b的结果加到sum上
        a += b; // 更新a的值,将b加到a上
        b = a - b; // 更新b的值,将a减去b
    }
    
    printf("%lf", sum); // 输出sum的值,使用%lf格式化字符串表示double类型的值
    return 0;
}

 函数表达

include <stdio.h>
double series(int n)
{
	double a = 2;
	double b = 1;
	double sum = 0;
	for (int i = 1; i <= n; i++)
	{
		sum += a / b;
		a += b;
		b = a - b;
	}
	return sum;
}
int main()
{
	int n = 20;
	series(n);
	printf("%lf", series(n));
	return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值