C语言初阶小练习(4)

目录

 

//打印星型图案进阶

//打印指定月份的日历

 //百元买百鸡

//将一个正整数分解成质因子的连乘积

//求一组数中正整数的个数即其算数平均值(continue的用法)


//打印星型图案进阶

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
int main()
{
	int i = 0;
	for (i = 1; i <= 5; i++)//控制前5行
	{
		if (i % 2 == 0)//控制偶数行
		{
			int m = -i + 5;
			int n = 2 * i - 1;
			for (; m > 0; m--)
			{
				printf(" ");
			}
			for (; n > 0; n--)
			{
				printf("*");
			}
			printf("\n");
		}
		if (i % 2 == 1)//控制奇数行
		{
			int m = -i + 5;
			int n = 2 * i - 1;
			for (; m > 0; m--)
			{
				printf(" ");
			}
			for (; n > 0; n--)
			{
				printf("^");
			}
			printf("\n");
		}

	}
	for (i = 6; i <= 9; i++)//控制后4行
	{
		if (i % 2 == 0)//控制偶数行
		{
			int m = i - 5;
			int n = - 2 * i + 19;
			for (; m > 0; m--)
			{
				printf(" ");
			}
			for (; n > 0; n--)
			{
				printf("*");
			}
			printf("\n");
		}
		if (i % 2 == 1)//控制奇数行
		{
			int m = i - 5;
			int n = -2 * i + 19;
			for (; m > 0; m--)
			{
				printf(" ");
			}
			for (; n > 0; n--)
			{
				printf("^");
			}
			printf("\n");
		}

	}
}

//打印指定月份的日历

这个小程序很有意思,但是有点难度,主要是这里面的day含义不清,容易把人绕进去(我不会说我就是其中一个的!!)

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
int main()
{
	int month = 0;
	int week = 0;
	int	maxday = 0;
	int	day = 0;//day在整个工程中没有实际意义,或者说有很多不同的意义
	printf("请输入月份:");
	scanf("%d", &month);
	printf("本月一号是周几:");
	scanf("%d", &week);//此为一个月的第一天是星期几
	printf("本月一共有多少天:");
	scanf("%d", &maxday);
	printf("\n————————— %2d 月 ———————\n", month);//相当于打印菜单
	printf("\n    日    一    二    三    四    五    六\n");
	++week;
	if (week == 8)//如果第一天是星期日,加一等于8,根据日历可知在第一列
	{
		day = week = 1;
	}
	else
	{
		day = week;
	}
	while (day-- > 1)//如果第一天是星期日,则前面不需要空格
	{
		printf("      ");
	}
	day = 1;//空格打印完后再将day赋值为1,表示一个月的第一天
	while (day <= maxday)
	{
		printf("%6d", day++);//先打印day,再将day++
		if (++week == 8)//先将week++,再判断是否相等
		{
			printf("\n");//打印完一周后换行
			week = 1;
		}
	}
	printf("\n");
	return 0;
}

 //百元买百鸡

公鸡5元/只,母鸡3元/只,小鸡1元3只,求公鸡,母鸡,小鸡各几只。

这种题目如果单纯使用三个循环加上穷举法的话的确很简单,但是要计算大约103万次,算法效率太低。我们注意到,公鸡5元/只,母鸡3元/只,也就是说公鸡最多20只,母鸡最多33只,而小鸡就是100-公鸡-母鸡,这样一来,程序便简化多了。鸡兔同笼问题,客人握手问题,选手分组名单问题,排列组合问题都可以用此方法解决哦~

注:可能不止一种答案

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
int main()
{
	int cook = 0;
	int hen = 0;
	int chi = 0;
	for (cook = 1; cook < 20; cook++)
	{
		for (hen = 1; hen < 33; hen++)
		{
			chi = 100 - cook - hen;
			if (cook * 5 + hen * 3 + chi / 3.0 == 100)
			{
				printf("公鸡 %d 只,母鸡 %d 只,小鸡 %d 只\n", cook, hen, chi);
			}
		}
	}
	return 0;
}

//将一个正整数分解成质因子的连乘积

这个道理是懂得透透的了,但自己不一定会写呜呜呜,要熟能生巧啊!!

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
int main()
{
	int n = 0;
	int i = 2;//i不能从3开始,要照顾到下面的n % i
	printf("请输入一个整数:");
	scanf("%d", &n);
	printf("%d=", n);
	do
	{
		if (i >= n)//即n=0,1,2时
		{
			printf("%d\n", n);
			break;//跳出do-while循环
		}
		if (n % i == 0)//一个数的最小因子就是2
		{
			printf("%d*", i);
			n = n / i;
		}
		else
		{
			i++;
		}
	} while (i <= n);
	return 0;
}

//求一组数中正整数的个数即其算数平均值(continue的用法)

这题真的不难,但是有好多小坑,我改了好久才完全没错(蓝瘦香菇……)

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
int main()
{
    int i = 0;
    int count = 0;
    int sum = 0;
    int num = 0;
    printf("请输入10个整数:");
    for (i = 0; i < 10; i++)
    {
        scanf("%d",&num);
    
        if (num <= 0)
        {
            continue;//是负数直接跳到for循环的判断部分
        }
            count++;
            sum = sum + num;
    }
    printf("总共有%d个正整数,其总和为%d,其算数平均值为%f\n", count, sum, (float)sum / count);//重点!!
    return 0;
}

下一章<数组>,咱们不见不散!!

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值