|
发表于 2020-9-6 19:38:54
|
显示全部楼层
下面的程序已经可以运行了,没有闪退现象,但有一告警,原因已经在最后注释中了,你自己可稍修改,也可不予理睬
- #include <stdio.h>
- const int ll=80;
- int main()
- {
- int jg(int y); // 定义函数jg()
- int md(int m,int j); // 定义函数md()
- int y1 = 0,y2,m1 = 0,m2,d1 = 0,d2,s1;
- int i,sum = 0;
- int y3 = y1 + 80,m3 = m1,d3 = d1;
- float perc;
- printf("日期格式是xxxx xx xx\n"
- "请输入生日:");
- scanf("%d %d %d",&y1,&m1,&d1);
- printf("请输入今日:");
- scanf("%d %d %d",&y2,&m2,&d2);
- printf("对输入的检查:\n"
- "%d %d %d\n"
- "%d %d %d\n"
- ,y1,m1,d1,y2,m2,d2);
- sum = 0;
- for(i = y1 + 1;i < y2;i++)
- {
- if(1 == jg(i))
- {
- sum = sum + 366;
- }
- else if(0 == jg(i))
- {
- sum = sum + 365;
- }
- }
- for(i = m1 + 1;i <= 12;i++)
- {
- ` sum = sum + md(i,jg(y1));
- }
- for(i = 1;i < m2;i++)
- {
- sum = sum + md(i,jg(y2));
- }
- for(i = d1;i <= md(m1,jg(y1));i++)
- {
- sum = sum + 1;
- }
- for(i = 1;i <= d2;i++)
- {
- sum = sum + 1;
- }
- printf("您活了%d天\n",sum);
- s1 = sum;
- sum = 0;
- for(i = y2 + 1;i < y3;i++)
- {
- if(1 == jg(i))
- {
- sum = sum + 366;
- }
- else if(0 == jg(i))
- {
- sum = sum + 365;
- }
- }
- for(i = m1 + 1;i <= 12;i++)
- {
- sum = sum + md(i,jg(y2));
- }
- for(i = 1;i < m2;i++)
- {
- sum = sum + md(i,jg(y3));
- }
- for(i = d2;i <= md(m1,jg(y2));i++)
- {
- sum = sum + 1;
- }
- for(i = 1;i <= d3;i++)
- {
- sum = sum+1;
- }
- perc = (float)s1 / (float)(sum + s1) * 100;
- printf("如果你能活到80岁你还剩下%d天,已经活了%.3f %c\n",sum,perc,'%');
- return 0;
- }
- int jg(int y)
- {
- int flag = 0;
- if(y % 400 == 0 || y % 4 == 0 && y % 400 != 0)
- {
- flag = 1;
- }
- return flag;
- }
- int md(int m,int j)
- {
- if(m == 1 || m == 3 || m == 5 || m == 7 || m == 8 || m == 10 || m == 12)
- {
- return 31;
- }
- else if(m == 4 || m == 6 || m == 9 || m == 11)
- {
- return 30;
- }
- else if(m == 2 && j == 1)
- {
- return 29;
- }
- else if(m == 2 && j == 0)
- {
- return 28;
- }
- }// 此处有一个告警:不是所有的控件路径都返回值,原因是 m = 2,j != 0 和 1 时,没有返回值
复制代码
|
|