本帖最后由 x331275955 于 2015-4-15 23:14 编辑
今天在基础测试里,研究了好久这个问题,小明从2006年1月1日开始,每三天结识一个美女两天结识一个帅哥,编程实现当输入2006年1月1日之后的任意一天,输出小明那天是结识美女还是帅哥(注意润年问题) - /*
- 小明从2006年1月1日开始,每三天结识一个美女两天结识一个帅哥,编程实现当输入2006年1月1日之后的任意一天,输出小明那天是结识美女还是帅哥(注意润年问题)(C语言)
- */
- #include <stdio.h>
- //定义jisuan函数,并将用户输入值带入nian,yue,ri
- int jisuan(int nian,int yue,int ri)
- {
- //定义函数year,mon,day用来储存年差的天数,月差的天数,日期差的天数
- int year = 0;
- int mon = 0;
- int day = 0;
- //计算闰年和平年的年差天数闰年则多一天,平年则是365天
- if(nian>2008)
- {year=((nian - 2004-1)/4)+(nian-2006)*365;
- }else
- {
- year=((nian-2006)*365);
- }
- //设定数组,设定闰年的12个月份每个月的天数,平年的12个月份的每个月的天数
- int runnian[12] = {31,29,31,30,31,30,31,31,30,31,30,31};
- int pingnian[12] = {31,28,31,30,31,30,31,31,30,31,30,31};
-
- //如果是闰年,则按照闰年月份的数组计算
- if(nian%4==0)
- {
- for (int a = 1; a < yue ;a++ )
- {
- mon = mon + runnian[a-1];
- }
- }
- //反之,则按平年月份的数组计算
- else
- {for (int a = 1; a < yue ;a++ )
- {
- mon = mon + pingnian[a-1];
- }
- }
- //日期直接相减
- day = ri-1;
-
- //定义变量jieguo,用来赋值年差,月差,日差的总和
- int jieguo = 0;
- jieguo = year + mon + day;
-
- //这是用来测试的。。
- /*
- printf("%d年%d月%d日\n",nian,yue,ri);
- printf("年差的天数:%d,月差的天数:%d,日差的天数:%d\n",year,mon,day);
- printf("%d\n",jieguo);
- */
-
- //定义变量meinv,shuaige,用来计算小明在当天结识的结果
- int meinv=0;
- meinv =jieguo%3;
- int shuaige=0;
- shuaige = jieguo%2;
-
- //如果当天的天数差能被3整除,则说明小明当天结识的是美女。
- if(meinv==0 && shuaige!=0)
- {
- printf("小明今天结识了美女\n");
- }
- //如果当天的天数差能被2整除,则说明小明当天结识的时帅哥。
- if(shuaige==0 && meinv!=0)
- {
- printf("小明今天结识了帅哥\n");
- }
- //如果当天的天数差既能被3整除,又能被2整除,则说明他当天既结识了美女,又结识了帅哥
- if(shuaige==0 && meinv==0)
- {
- printf("小明今天即结识了帅哥又结识了美女\n");
- }
- //如果当天的天数差既不能被3整除,又不能被2整除,则说明他当天谁也没结识
- if(shuaige!=0 && meinv!=0)
- {
- printf("小明今天谁也没结识\n");
- }
-
- return 0;
- }
- int main()
- {
- //提示输入日期
- printf("请输入2006年1月1日后的任意一天,年月日间请用空格断开\n");
-
- //定义变量nian,yue,ri,用来存入输入的值
- int nian;
- int yue;
- int ri;
-
- //将输入的值分别赋值给变量nian,yue,ri
- scanf("%d %d %d",&nian,&yue,&ri);
-
- //如果输入的值不在范围则提示输入不正确
- if (nian<2006||yue<1||yue>31||ri<1||yue>31)
- {
- printf("输入不正确\n");
-
- }
- //反之则调用函数jisuan,开始计算。
- else
- {
- jisuan(nian,yue,ri);
-
- }
- return 0;
- }
复制代码 //设定数组,设定闰年的12个月份每个月的天数,平年的12个月份的每个月的天数
int runnian[12] = {31,29,31,30,31,30,31,31,30,31,30,31};
int pingnian[12] = {31,28,31,30,31,30,31,31,30,31,30,31};
for (int a = 1; a < yue ;a++ )
{
mon = mon + runnian[a-1];
}
看这里的时候我不明白,for函数不是一开始执行一次条件1,也就是a=1,然后进行判断条件也就是a小于yue,条件满足开始循环体mon=mon+runmian[a-1],可是a=1,然后1-1=0了,0的时候数组会读取第一个数值么?(到这里的时候不是还没有执行条件2,也就是a++呢么。mon=mon+runnian[0],)这里让我很想不通,求大神指点~~
|
|