A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© x331275955 中级黑马   /  2015-4-15 21:45  /  1250 人查看  /  1 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 x331275955 于 2015-4-15 23:14 编辑

       今天在基础测试里,研究了好久这个问题,小明从2006年1月1日开始,每三天结识一个美女两天结识一个帅哥,编程实现当输入2006年1月1日之后的任意一天,输出小明那天是结识美女还是帅哥(注意润年问题)      
  1. /*
  2. 小明从2006年1月1日开始,每三天结识一个美女两天结识一个帅哥,编程实现当输入2006年1月1日之后的任意一天,输出小明那天是结识美女还是帅哥(注意润年问题)(C语言)
  3. */

  4. #include <stdio.h>
  5. //定义jisuan函数,并将用户输入值带入nian,yue,ri
  6. int jisuan(int nian,int yue,int ri)
  7. {
  8.     //定义函数year,mon,day用来储存年差的天数,月差的天数,日期差的天数
  9.     int year = 0;
  10.     int mon = 0;
  11.     int day = 0;
  12.     //计算闰年和平年的年差天数闰年则多一天,平年则是365天
  13.     if(nian>2008)
  14.     {year=((nian - 2004-1)/4)+(nian-2006)*365;
  15.     }else
  16.     {
  17.         year=((nian-2006)*365);
  18.     }
  19.     //设定数组,设定闰年的12个月份每个月的天数,平年的12个月份的每个月的天数
  20.     int runnian[12] = {31,29,31,30,31,30,31,31,30,31,30,31};
  21.     int pingnian[12] = {31,28,31,30,31,30,31,31,30,31,30,31};
  22.    
  23.     //如果是闰年,则按照闰年月份的数组计算
  24.     if(nian%4==0)
  25.     {
  26.     for (int a = 1; a < yue ;a++ )
  27.     {
  28.         mon = mon + runnian[a-1];
  29.     }
  30.     }
  31.     //反之,则按平年月份的数组计算
  32.     else
  33.     {for (int a = 1; a < yue ;a++ )
  34.     {
  35.         mon = mon + pingnian[a-1];
  36.     }
  37.     }
  38.     //日期直接相减
  39.     day = ri-1;
  40.    
  41.     //定义变量jieguo,用来赋值年差,月差,日差的总和
  42.     int jieguo = 0;
  43.     jieguo = year + mon + day;
  44.    
  45.     //这是用来测试的。。
  46.     /*
  47.     printf("%d年%d月%d日\n",nian,yue,ri);
  48.     printf("年差的天数:%d,月差的天数:%d,日差的天数:%d\n",year,mon,day);
  49.     printf("%d\n",jieguo);
  50.     */
  51.    
  52.     //定义变量meinv,shuaige,用来计算小明在当天结识的结果
  53.     int meinv=0;
  54.     meinv =jieguo%3;
  55.     int shuaige=0;
  56.     shuaige = jieguo%2;
  57.    
  58.     //如果当天的天数差能被3整除,则说明小明当天结识的是美女。
  59.     if(meinv==0 && shuaige!=0)
  60.     {
  61.         printf("小明今天结识了美女\n");
  62.     }
  63.     //如果当天的天数差能被2整除,则说明小明当天结识的时帅哥。
  64.     if(shuaige==0 && meinv!=0)
  65.     {
  66.         printf("小明今天结识了帅哥\n");
  67.     }
  68.     //如果当天的天数差既能被3整除,又能被2整除,则说明他当天既结识了美女,又结识了帅哥
  69.     if(shuaige==0 && meinv==0)
  70.     {
  71.         printf("小明今天即结识了帅哥又结识了美女\n");
  72.     }
  73.     //如果当天的天数差既不能被3整除,又不能被2整除,则说明他当天谁也没结识
  74.     if(shuaige!=0 && meinv!=0)
  75.     {
  76.         printf("小明今天谁也没结识\n");
  77.     }
  78.    
  79.     return 0;
  80. }
  81. int main()
  82. {
  83.     //提示输入日期
  84.     printf("请输入2006年1月1日后的任意一天,年月日间请用空格断开\n");
  85.    
  86.     //定义变量nian,yue,ri,用来存入输入的值
  87.     int nian;
  88.     int yue;
  89.     int ri;
  90.    
  91.     //将输入的值分别赋值给变量nian,yue,ri
  92.     scanf("%d %d %d",&nian,&yue,&ri);
  93.    
  94.     //如果输入的值不在范围则提示输入不正确
  95.     if (nian<2006||yue<1||yue>31||ri<1||yue>31)
  96.     {
  97.         printf("输入不正确\n");
  98.         
  99.     }
  100.     //反之则调用函数jisuan,开始计算。
  101.     else
  102.     {
  103.         jisuan(nian,yue,ri);
  104.    
  105.     }
  106.     return 0;
  107. }
复制代码
//设定数组,设定闰年的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],)这里让我很想不通,求大神指点~~

1 个回复

倒序浏览
楼主你好 这个问题是这样的,数组是从零开始计算的,即 runnian[0]=31
——————————————————————————————————————————
如果我解决了你的问题,请按照这个帖子把问题改成已解决,这样你我都能得到技术分,谢谢
http://bbs.itheima.com/thread-85079-1-1.html
回复 使用道具 举报 1 0
您需要登录后才可以回帖 登录 | 加入黑马