C语言简单编程案例(四)

1.//输入10个整数,求其中正数的个数及平均值,精确到小数点后两位

#include<stdio.h>
int main()
{
	int n = 0;
	int a;
	int num=0; int sum=0; float avg;
	while (n < 10)
	{
		scanf("%d", &a);
		if (a > 0)
		{
			num++;
		}
		sum += a;
		n++;
	}
	avg = sum / 10.0;
	printf("正数:%d,sum=%d,平均值:%.2f", num, sum,avg);
	return 0;
}

2.//已知一首项大于0的等差数列的前四项和为26,前四项的积为880,求这数列
/*
a1,a2,a3,a4:
a1+a2+a3+a4=26;4a1+6d=26;
a1*a2*a3*a4=880; 
等差数列:d,a1>0-->分析,d>0
用枚举法:
4a+6d=26
0<4a<26-->0<a<7
d!=0,d>=1
0<4a<=20-->0<a<=5
a>0,a>=1
0<6d<=22-->0<d<=3
*/

#include <stdio.h>
int main()
{
	int a1, d;
	for (a1 = 1; a1 <= 5; ++a1)
		for (d = 1; d <= 3; ++d)
		{
			if (4 * a1 + 6 * d == 26 && a1 * (a1 + d) * (a1 + 2 * d) * (a1 + 3 * d) == 880)
				goto out;
		}
out:
	printf("首项:%d,公差:%d\n", a1, d);
	return 0;
}

3.//使用格里高利公式求π的近似值,要求精确到最后一项的绝对值小于10^(-5)。(若这一项加进去,则共50001项)
/*
π=4*(1-1/3+1/5-1/7+1/9......)
|第i项|=1/(2i-1)<0.00001-->i>50000,i=50001
*/

#include<stdio.h>
int main()
{
	int i=1;
	double num;
	double sum=0;
	for (i = 1; i<=50001; i++)
	{
		num = 1.0 / (2 * i - 1);
		if (i % 2 == 0)
			sum = sum - num;
		else
			sum = sum + num;
	}
	printf("π的值为:%lf", 4 * sum);
	return 0;
}

4.//统计一个整数的位数
/*
正整数:99
0
负整数:-99
*/

#include<stdio.h>
int main()
{
	int n; int num=1;
	scanf("%d", &n);
	if (n < 0) n = -n;
	while (n / 10 != 0)
	{
		num++;
		n = n / 10;
	}
	printf("整数位数:%d\n", num);
	return 0;
}

5.//求1! + 2! + …. + 100!
/*
(n+1)!=(n)!*(n+1)
*/

#include<stdio.h>
int main()
{
	int i = 1;//计数
	double n=1,sum=0;//注意:double表示范围比long大
	for (i; i <= 100; i++)
	{
		n = n * i;
		printf("%e\n", n);//科学计数法表示
		sum = sum + n;
	}
	printf("%e\n", sum);
	return 0;
}

6.//猴子吃桃
/*
有一只猴子,第1天摘了 m 个桃子 ,当即吃了一半,但还觉得不过瘾 ,就又多吃了一个。
第 2 天又将剩下的桃子吃掉一半,还是觉得不过瘾,就又多吃了 2 个。
以后每天早上都吃了前一天剩下的一半加天数个(例如,第5天吃了前一天剩下的一半加 5 个)。
到第n天早上再想吃的时候,就只剩下一个桃子了。
求:第一天的桃子个数 m
假设:第k天开始有f(k)个,则第k-1天开始有f(k-1)个;
      f(k)=f(k-1)/2-(k-1);
      f(k-1)=2(f(k)+k-1);
      如此,由第n天往第一天去推,给出n和第n天的数(此处默认为1),即可推得第一天
*/

#include<stdio.h>
int main()
{
	int i,n;
	int total = 1;
	scanf("%d", &n);//默认第n天开始有1个
	for (i = n - 1; i > 0; i--)
	{
		total = 2 * (total + i);
	}
	printf("第一天有:%d\n", total);
	return 0;
}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值