大学计算机基础第七周2道例题

  1. 输入一个整数,然后显示该整数的所有因子并统计因子的个数
#include<stdio.h>
int main()
{
	int a;
	scanf_s("%d", &a);
	if (a > 0)
	{
		int i = 1;
		int count = 0;//用count表示总数
		while (i <= a)
		{
			if (a%i ==0)//因子:即除以之后余数为0
			{
				count++;
			}
			i++;
		}
		printf("%d\n", count);
		
	}
	return 0;
}

  1. 求水仙花数。如果一个三位数的个位数、十位数和百位数的立方和等于该数自身,则称该数为水仙花数。编一程序求出所有的水仙花数。

#include<stdio.h>
int main()
{
	for (int a = 100; a < +999; a++)
	{
		int onesplace, tensplace, hundredsplace;
		onesplace = a / 1 % 10;
		tensplace = a / 10 % 10;
		hundredsplace = a / 100 % 10;
		if (a == onesplace * onesplace*onesplace + tensplace * tensplace * tensplace + hundredsplace * hundredsplace * hundredsplace)
		{
			printf("%d\n", a);
		}
	}
	return 0;
}

  1. 计算 e=1/1+1/2!+⋯+1/n!+⋯
    算法分析:定义三个变量:n、u、e;u=1/n!;e为和;while语句当u<10^(-7)停止;
    While(u>=10^-7)
    {
    u=u/n;
    e=e+u;
    n++;
    }
#include<stdio.h>
int main()
{
	int n = 1;
	double u = 1;
	double e = 0;
	while (u >= 1.0E-7)//1.0E—7=10^(-7)
	{
		u = u / n;
		e = e + u;
		n++;
	}
	printf("%g", e);
	return 0;
}

  1. 编写程序求斐波那契数列的第n项和前n项之和。斐波那契数列是形如
    0,1,1,2,3,5,8,13……的递推数列
    算法分析:定义三个变量:n、ai、ai_1、b、s;
    初始i=1,ai=0,ai_1=1,s=0,输入n;
    采用for语句:(int i=1;i<=n ;i++);
    {
    b=ai_1;
    ai_1=ai;
    ai=ai+b;
    S=s+ai_1
    }
#include<stdio.h>
int main()
{
	int n,b;
	scanf_s("%d\n", &n);
	int ai = 1;
	int ai_1 = 0;
	int sum = 0;
	if (n == 1)
		printf("0 0");
	else
	{
		for (int i = 2; i <= n; i++)//输入的n可能是123...但第一项并不符合递推。
		{
			sum = sum + ai;
			b = ai_1;
			ai_1 = ai;
			ai = ai + b;
		}
		printf("%d %d", ai, sum);
	}
	return 0;
}

  1. 1条蠕虫,长度为1英寸,在一口深为n英寸的井的底部。已知,蠕虫每分钟可以向上爬u英寸,但必须休息1分钟才能接着往上爬。在休息的过程中,蠕虫又下滑了d英寸。就这样,上爬和下滑重复进行。请问,蠕虫需要多长时间才能爬出井?不足一分钟按一分钟计,并且假定只要在某次上爬过程中蠕虫的头部到达了井的顶部,那么蠕虫就完成任务了。初始时,蠕虫是趴在井底的(即高度为0)。请编程模拟蠕虫爬动,求蠕虫爬出井的时间。
    在这里插入图片描述
#include<stdio.h>
int main()
{
	int n, u, d;//n为井高,u为每分钟爬行高度,d为每分钟下滑高度
	int t=0, h=0;
	scanf_s("%d%d%d", &n, &u, &d);
	for (;;)//for引导无限循环,执行的程序写在后面,用“break”来打破循环
	{
		h += u;//“h+=u”表示h=h+u
		t++;
		if (h >= n)
			break;
		h -= d;
		t++;
	}
	printf("%d", t);
	return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值