1100: C语言程序设计教程(第三版)课后习题11.1--定义一个结构体变量(包括年、月、日)。计算该日在本年中是第几天。【两种方法】
2018-01-22 09:43
701 查看
题目描述
定义一个结构体变量(包括年、月、日)。计算该日在本年中是第几天,注意闰年问题。
输入
年月日
输出
当年第几天
样例输入
2000 12 31
样例输出
366
提示
来源两种方法:
第一种方法理解起来比较容易,但是代码好像比较长,具体实现起来就是把截止到每一个月份末的天数都保存在一个数组里,然后用switch语句进行分支判断。
#include<stdio.h>
struct
{
int y;
int m;
int d;
}d;
void main()
{
int a[11]={31,59,90,120,151,181,212,243,273,304,334};//非闰年
int b[11]={31,59+1,90+1,120+1,151+1,181+1,212+1,243+1,273+1,304+1,334+1};//闰年
scanf("%d %d %d",&d.y,&d.m,&d.d);
if(d.y%100==0)
{
if(d.y%400==0)
{
switch(d.m)
{
case 1:printf("%d",d.d);break;
case 2:printf("%d",d.d+b[0]);break;
case 3:printf("%d",d.d+b[1]);break;
case 4:printf("%d",d.d+b[2]);break;
case 5:printf("%d",d.d+b[3]);break;
case 6:printf("%d",d.d+b[4]);break;
case 7:printf("%d",d.d+b[5]);break;
case 8:printf("%d",d.d+b[6]);break;
case 9:printf("%d",d.d+b[7]);break;
case 10:printf("%d",d.d+b[8]);break;
case 11:printf("%d",d.d+b[9]);break;
case 12:printf("%d",d.d+b[10]);break;
}
}
else
{
switch(d.m)
{
case 1:printf("%d",d.d);break;
case 2:printf("%d",d.d+a[0]);break;
case 3:printf("%d",d.d+a[1]);break;
case 4:printf("%d",d.d+a[2]);break;
case 5:printf("%d",d.d+a[3]);break;
case 6:printf("%d",d.d+a[4]);break;
case 7:printf("%d",d.d+a[5]);break;
case 8:printf("%d",d.d+a[6]);break;
case 9:printf("%d",d.d+a[7]);break;
case 10:printf("%d",d.d+a[8]);break;
case 11:printf("%d",d.d+a[9]);break;
case 12:printf("%d",d.d+a[10]);break;
}
}
}
else
{
if(d.y%4==0)
{
switch(d.m)
{
case 1:printf("%d",d.d);break;
case 2:printf("%d",d.d+b[0]);break;
case 3:printf("%d",d.d+b[1]);break;
case 4:printf("%d",d.d+b[2]);break;
case 5:printf("%d",d.d+b[3]);break;
case 6:printf("%d",d.d+b[4]);break;
case 7:printf("%d",d.d+b[5]);break;
case 8:printf("%d",d.d+b[6]);break;
case 9:printf("%d",d.d+b[7]);break;
case 10:printf("%d",d.d+b[8]);break;
case 11:printf("%d",d.d+b[9]);break;
case 12:printf("%d",d.d+b[10]);break;
}
}
else
{
switch(d.m)
{
case 1:printf("%d",d.d);break;
case 2:printf("%d",d.d+a[0]);break;
case 3:printf("%d",d.d+a[1]);break;
case 4:printf("%d",d.d+a[2]);break;
case 5:printf("%d",d.d+a[3]);break;
case 6:printf("%d",d.d+a[4]);break;
case 7:printf("%d",d.d+a[5]);break;
case 8:printf("%d",d.d+a[6]);break;
case 9:printf("%d",d.d+a[7]);break;
case 10:printf("%d",d.d+a[8]);break;
case 11:printf("%d",d.d+a[9]);break;
case 12:printf("%d",d.d+a[10]);break;
}
}
}
}
/**************************************************************
Problem: 1100
User: 171530425
Language: C
Result: 正确
Time:0 ms
Memory:1092 kb
****************************************************************/
我们也可以对上面的if判断做下优化,把所有闰年的情况放在一个if判断语句的判断体中,这样的话代码就少了一点儿
#include<stdio.h>
struct
{
int y;
int m;
int d;
}d;
void main()
{
int a[11]={31,59,90,120,151,181,212,243,273,304,334};//非闰年
int b[11]={31,59+1,90+1,120+1,151+1,181+1,212+1,243+1,273+1,304+1,334+1};//闰年
scanf("%d %d %d",&d.y,&d.m,&d.d);
if((d.y%100==0&&d.y%400==0)||(d.y%4==0&&d.y%100!=0))
{
switch(d.m)
{
case 1:printf("%d",d.d);break;
case 2:printf("%d",d.d+b[0]);break;
case 3:printf("%d",d.d+b[1]);break;
case 4:printf("%d",d.d+b[2]);break;
case 5:printf("%d",d.d+b[3]);break;
case 6:printf("%d",d.d+b[4]);break;
case 7:printf("%d",d.d+b[5]);break;
case 8:printf("%d",d.d+b[6]);break;
case 9:printf("%d",d.d+b[7]);break;
case 10:printf("%d",d.d+b[8]);break;
case 11:printf("%d",d.d+b[9]);break;
case 12:printf("%d",d.d+b[10]);break;
}
}
else
{
switch(d.m)
{
case 1:printf("%d",d.d);break;
case 2:printf("%d",d.d+a[0]);break;
case 3:printf("%d",d.d+a[1]);break;
case 4:printf("%d",d.d+a[2]);break;
case 5:printf("%d",d.d+a[3]);break;
case 6:printf("%d",d.d+a[4]);break;
case 7:printf("%d",d.d+a[5]);break;
case 8:printf("%d",d.d+a[6]);break;
case 9:printf("%d",d.d+a[7]);break;
case 10:printf("%d",d.d+a[8]);break;
case 11:printf("%d",d.d+a[9]);break;
case 12:printf("%d",d.d+a[10]);break;
}
}
}
第二种实现方法可能不太好理解,但是却实现起来却比较简单,我们不用提前算截至每一月末的天数了,并且代码也比较短
#include<stdio.h>
struct ri
{
int y,m,d;
}p;
int main()
{
int i,j,s=0,a=31,b=30,c=29;
scanf("%d%d%d",&p.y,&p.m,&p.d);
for(i=1;i<p.m;i++)//注意这里一定是小于p.m,因为我们要算的是截止上个月末的天数,当前月还没过完呢,并且给的有当前月的天数,保存在p.d中
{
if(i==1||i==3||i==5||i==7||i==8||i==10)
{
s+=a;
}
else if(i==4||i==6||i==9||i==11)
{
s+=b;
}
else if(i==2)
{
s+=c;
}
}
s=s+p.d;
if((p.y%4==0&&p.y%100!=0)||(p.y%400==0&&p.y%100==0))
{
if(p.m==1)
{
printf("%d",p.d);
}
else
{
printf("%d",s);
}
}
else
{
if(p.m==1)
{
printf("%d",p.d);
}
else
{
printf("%d",s-1);
}
}
return 0;
}
相关文章推荐
- 习题 9.1 定义一个结构体变量(包括年、月、日)。计算该日在本年中是第几天,注意闰年问题。
- 定义一个结构体变量(包括年、月、日)。计算该日在本年中是第几天?注意闰年问题。
- 定义一个结构体变量(包括年月日))计算是本年第几天
- 定义一个结构体变量(包括年、月、日)。计算该日在本年中是第几天?注意闰年问题
- 定义一个结构体变量(包括年、月、日),编写程序,要求输入年月日,程序能够计算并输出改日是本年中的第几天。注意闰年问题。(数组)
- 定义一个结构体变量(包括年、月、日),编写程序,要求输入年月日,程序能够计算并输出改日是本年中的第几天。注意闰年问题。(switch语句)
- (c++)定义一个结构体变量(包括年、月、日)。计算该日在本年中是第几天,注意闰年问题。
- 定义一个结构体变量(包含年月日),计算该日在本年中为第几天?要求写一个days函数.参数是此结构体类型的变量,返回值是整数
- 定义一个结构体变量(包括年月日)。计算某日在一年中是第几天?(注意还要有闰年的判断)
- 定义一个结构体变量(包含年月日),计算该日在本年中为第几天?要求写一个days函数。参数是此结构体类型的变量,返回值是整数
- 定义一个结构体变量,计算该日在本年中是第几天?
- 3、定义一个结构体变量(包含年月日),计算该日在本年中为第几天?要求写一个days函数。参数是此结构体类型的变量,返回值是整数。
- 定义一个结构体变量(包含年月日),写一个函数,计算该日期在本年中为第几天?要求写一个days函数。参数是此结构体类型的变量,返回值是整数。
- 简化版定义一个结构体变量(包含年月日),计算该日在本年中为第几天?要求写一个days函数。参数是此结构体类型的变量,返回值是整数
- 定义一个结构体变量(包含年月日),计算该日在本年中为第几天?要求写一个days函数。参数是此结构体类型的变量,返回值是整数。
- 问题十四:定义一个结构体变量(包括年、月、日),要求输入年、月、日,计算输出该日是该年的第几天。
- P318_11_1 定义一个结构体(含年月日),计算该日期为本年中第几天。注意闰年
- 1079: C语言程序设计教程(第三版)课后习题8.2---求方程 的根,用三个函数分别求当b^2-4ac大于0、等于0、和小于0时的根,并输出结果。从主函数输入a、b、c的值。【两种方法】
- C/C++练习题 定义一个日期变量,进行年、月、日的输入,计算该日期是本年中的第几天。
- 创建一个Rectangle类,添加width和height两个成员变量。 2.在Rectangle中添加两种方法分别计算矩形的周长和面积 3.编程利用Rectangle输出一个矩形的周