【c语言】流程控制语句学习(1)

一、最大公约数和最小公倍数

输入两个数据,计算他们的最大公约数和最小公倍数 

运行效果:

实现代码:

#include<stdio.h>

int main(void)
{
	int a,b;
	printf("请输入两个数:");
	scanf("%d %d",&a,&b);
	//最小值
	int min = a < b ? a : b;
	//求最大公约数
	while(a % min != 0 || b % min != 0)
	{
		min--;
	} 
	printf("最大公约数为:%d\n",min);
	//求最小公倍数
	int c =(a*b) / min;
	printf("最小公倍数为:%d\n",c);
	return 0;
}

二、求前n项和

求以下数列前n项的和:2/1、3/2、5/3,8/5,13/8,21/13......

规律:1.下一项的分子 = 这一项的分子+这一项的分母

           2.下一项的分母 = 这一项的分子

运行效果:

代码展示:

#include<stdio.h>

int main()
{
	int i,n;
	double sum = 0.0;
	double fenzi = 2.0,fenmu = 1.0;//初始分子分母
	
	printf("请输入要求的项数n:");
	scanf("%d",&n);
	
	for(i = 0; i < n; i++) 
	{
		sum += fenzi / fenmu;
		double temp = fenzi;
		fenzi = fenzi + fenmu; // 下一项的分子
		fenmu = temp;	// 下一项的分母
	}
	
	 printf("前 %d 项和为 %.2f\n", n, sum);
	 return 0;
}

三、统计二进制数1出现次数

计算一个数,它的二进制格式里面有多少个1。

运行效果:

代码展示:

#include<stdio.h>

int main()
{
	int count = 0;
	unsigned int n;
	
	printf("请输入一个正数:");
	scanf("%d",&n); 
	
	while(n != 0)
	{
		//判断低位是否为1
		if(n & 1 == 1) 
		{
			count++;
		}
		//改变n值
		n = n >> 1; 
	}
	printf("%d",count);
    return 0;
}

四、人民币兑换方案---穷举法

用100元人民币兑换5元、2元、1元人民币共50张,每种人民币至少1张,  
问共有多少种兑换方案,输出每一种方案三种人民币的数量。

运行效果:

代码展示:

#include<stdio.h>

int main()
{
	int count = 0;
	int x,y,z;

	//100块钱,最多有20张5元 
	for(x = 1; x <= 20; x++)
	{
		//最多有50张2元
		for(y = 1; y <= 50; y++)
		{
		//最多有100张1元
			for(z = 1; z <= 100; z++)
			{
				if(x+y+z==50&&5*x+2*y+z==100)
				{
					count++;
					printf("方案 %d: 5元=%d张, 2元=%d张, 1元=%d张\n", count, x, y, z);
				}
			}
				
		} 
	}
	printf("共有 %d 种兑换方案。\n", count);
	return 0;
}

五、判断日期

输入日期,打印该日期是该年的第几天

运行效果:

代码展示:

第一种方法

#include<stdio.h>

int main(void) {
	int year, month, day; 
	printf("请输入日期 (年-月-日)\n");
	scanf("%d %d %d", &year, &month, &day);

	int count = 0;  // 统计总天数

	// 判断是否是闰年
	int isLeap = (year % 4 == 0 && year % 100 != 0) || (year % 400 == 0);
	switch (month) {
		case 12:
			count += 30;  // 累加11月的天数
		case 11:
			count += 31;  // 累加10月的天数
		case 10:
			count += 30;  // 累加9月的天数
		case 9:
			count += 31;  // 累加8月的天数
		case 8:
			count += 31;  // 累加7月的天数
		case 7:
			count += 30;  // 累加6月的天数
		case 6:
			count += 31;  // 累加5月的天数
		case 5:
			count += 30;  // 累加4月的天数
		case 4:
			count += 31;  // 累加3月的天数
		case 3:
			count += isLeap ? 29 : 28;  // 累加2月的天数,考虑闰年
		case 2:
			count += 31;  // 累加1月的天数
		case 1:
			count += 0;   // 1月不需要累加
	}

	// 加上当前月份的天数
	count += day;

	// 打印结果
	printf("%d年%d月%d日是该年的第%d天\n", year, month, day, count);

	return 0;
}

第二种方法

#include <stdio.h>

int main(void) 
{
    int year, month, day;  
    int i;
    
    printf("请输入日期(年-月-日):\n");
    scanf("%d %d %d", &year, &month, &day);

    int count= 0;  // 统计总天数

    // 判断是否是闰年
    int isLeap = (year % 4 == 0 && year % 100 != 0) || (year % 400 == 0);

    // 每个月的天数
    int daysInMonth[] = {31, isLeap ? 29 : 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};

    // 累加前几个月的天数
    for ( i = 0; i < month - 1; i++) {
        count += daysInMonth[i];
    }

    // 加上当前月份的天数
    count += day;

    // 打印结果
    printf("%d年%d月%d日是该年的第%d天\n", year, month, day, count);

    return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值