C语言编程两题

本文讲述了两道编程题目,一是根据用户输入的数字打印从1到指定位数的最大十进制数,二是计算给定日期在当年的天数,涉及循环、边界值处理和闰年/平年的判断。
摘要由CSDN通过智能技术生成

在这里插入图片描述

编程题一:

  • 题目描述:输入数字 n ,按顺序打印出从 1 到最大的 n 位十进制数。比如输入 3 ,则打印出 1、2、3 一直到最大的 3 位
    数 999 。
  • 用返回一个整数列表来代替打印
  • n 为正整数

示例1:

输入1
输出:[1,2,3,4,5,6,7,8,9]

示例2:

输入 2
输出:[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17…………95,96,97,98,99]

分析:题目需要一个数字,那我们就给一个输入,然后是按顺序遍历,那么需要用到循环,从示例中很好看出循环初始值和判断条件,变量调整就不用阐述。然而,需要考虑的是循环判断条件怎样产生呢?不可能从9改到99……999999?这里需要和我们输入的那个数产生联系。我们看到输入1,最大就是9,而10就是边界,10=10;输入2,最大就是99,100=10*10;输入3,以此内推,我们就可以用一个循环,把判断条件的边界值找出来,用一个变量接收,作为循环判断的条件,代码如下👇👇👇👇:

#include<stdio.h>
int main()
{
	int number = 0;
	printf("请输入一个数:\n");
	scanf_s("%d", &number);
	int num = 1;

	for (int i = 1; i <= number; i++)//输入的数字是多少,就循环这么多次
	{
		num *= 10;//如3,则num=1000,最大就是999
	}
	
	for (int j = 1; j < num; j++)
	{
		printf("%d ", j);
		if (j % 10 == 0)//为了整齐,换个行
			printf("\n");
	}
	return 0;
}

代码结果展示👀👀👀:
在这里插入图片描述


编程题二

  • 题目描述:根据输入的日期,计算是这一年的第几天。
    保证年份为4位数且日期合法。

输入描述:
输入一行,每行空格分割,分别是年,月,日

输出描述:
输出是这一年的第几天

示例:

输入:2012 12 31
输出:366

  • 分析:我们看到根据输入年份来计算这一年过去了多少天,脑海中第一想到的就是年分为闰年【366】和平年【365】;所以判断是什么年必须要。其次就是我们要怎样把每个月的天数加起来呢?我们输入的只是年月日,所以我们可以根据每一年的月份的天数用一个一维数组存储【一开始写平年的天数划分】,因为每年除了2月有变化,其他第是按大小月划分的。之后我们再去计算天数就可以分为两类了,先判断输入的年份是闰年还是平年,是平年就直接求【输入月份是小于2月的,就直接是日数,大于2的就得把month对应的天数加上日数】。如果是闰年就得在前面的基础上加上1天【在输入月份大于2月份的时候才加一天,因为2月以前都是一样的】。代码展示👇👇👇:
#include<stdio.h>
int isLeap(int year)
{
	if (year % 4 == 0 && year % 100 != 0 || year % 400 == 0)
		return 1;
	else
		return 0;
}

int main()
{
	int arr[] = { 0,31,28,31,30,31,30,31,31,30,31,30 };//平年,闰年就加一天就欧克,最后一个月直接从day里面加就OK。
	int year = 0, month = 0, day = 0;
	int count = 0;//计算总的天数
	printf("请输入合法日期:\n");
	scanf_s("%d %d %d", &year, &month, &day);
	//先不管是什么年,直接把month前面的天数相加
	for (int i = 1; i < month; i++)
	{
		count += arr[i];
	}
	count += day;

	//如果是闰年就得加一天,所以接下来判断
	if (isLeap(year))
	{
		if (month >= 3)//要到达或超过3月份才加以1
			count += 1;
	}

	//如果是平年就直接输出
	printf("该日期是这一年的%d天\n", count);
	return 0;
}

代码结果👀👀👀:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  • 3
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值