鱼C论坛

 找回密码
 立即注册

做C语言S1E17课后作业-2019-1-20

已有 116 次阅读2019-1-20 23:33 |个人分类:C语言作业

做动动手的时候,看了小甲鱼的答案,突发奇想验证从公元1年1月1日到4年1月1日的天数,结果机器运行答案为1134天,个人认为正确答案为1096天。这不重要,重要的是使用题目练习编程能力。
本人小白,在未看答案之前想的解决算法,选择一个时间基点,用(生日-基点)算生日天数,用(现在时间-基点)算现在天数,两数差为结果。
以下代码最后输出时,本机无法输出‘%’,让我很困惑,使用小甲鱼的答案代码也无法输入。
[code]
#include<stdio.h>
int GY(int i,int j,int k)
{//做函数用于解决输入时间与基点的天数差。例如输入1988-5-20时,count1计算1-1-1到1987-12-31的天数,count2计算1988-1-1到1988-4-30的天数,最后总天数count1+count2+日数。
int count1=0,count2=0,num,n,flag=0;
int Yday1[12]={0,31,29,31,30,31,30,31,31,30,31,30};
int Yday2[12]={0,31,28,31,30,31,30,31,31,30,31,30};
if(i-1>=0)
{
if((i%400==0)||(i%100!=0&&i%4==0))//判断输入年份是否是闰年
flag=1;
count1=(i-1)*365;//假设i年份之前全都是非闰年。
for(n=3;n<i;n++)//从3年到(i-1)年,每遇到一个闰年count1自加1。
{
if((n%400==0)||(n%100!=0&&n%4==0))
count1++;
}
if(flag)
{//当i年为闰年计算1月1日到输入的月日天数。
for(n=1;n<=j;n++)
{
count2+=Yday1[n-1];
}
num=count1+count2+k;
}
else
{//当i年为非闰年计算1月1日到输入的月日天数。
for(n=1;n<=j;n++)
{
count2+=Yday2[n-1];
}
num=count1+count2+k;
}
}
return num;
}
int main()
{
int GY(int i,int j,int k);
int sn,sy,sr,num1;
int jn,jy,jr,num2;
printf("请输入你的生日(如1988-05-20):");
scanf("%d-%d-%d",&sn,&sy,&sr);
printf("请输入今天的日期(如2019-01-19):");
scanf("%d-%d-%d",&jn,&jy,&jr);
num1=GY(sn,sy,sr);
num2=GY(jn,jy,jr);
printf("你在这个世界上总共生存了%d天。\n",num2-num1);
//printf("num1=%d,num2=%d",num1,num2);
int En,num3;
En=sn+80;
num3=GY(En,sy,sr);
printf("如果你的寿命有80年,你还剩下%d天。\n",num3-num2);
printf("你已经使用了%.2f\%的生命,请好好珍惜剩下的时间!",(double)(num2-num1)/(num3-num1)*100);
}
[/code]

路过

雷人

握手

鲜花

鸡蛋

评论 (0 个评论)

facelist

您需要登录后才可以评论 登录 | 立即注册

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-10-7 03:23

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

返回顶部