鱼C论坛

 找回密码
 立即注册
查看: 1026|回复: 5

[已解决]c语言求助 函数

[复制链接]
发表于 2020-11-13 18:54:07 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
设计函数int getDays(int year,int month),根据给定的年year和月份month,计算该月的天数并返回。 提示:注意闰年的判断。

输入与输出要求: 输入两个整数y,m,即年份与月份。输出该年内该月的天数,占一行。 测试用例保证输入合法。
请帮忙看看那里出错了?谢谢。

#include<stdio.h>

int getDays(int year,int month) ;

int main()
{
    int year, month ;

    scanf("%d%d",&year,&month);
    printf("There are %d days in month %d year %d.\n",getDays(year,month), month, year) ;

    return 0 ;   
}
int getDays(int year,int month)
{
       
        switch(month)
        {
        case 1:printf("31\n");break;
        case 2:printf("30\n");break;
        case 3:printf("29\n");break;
        case 4:printf("28\n");break;
   
        if((month=1)||(month=3)||(month=5)||(month=7)||(month=8)||(month=10)||(month=12))
                return 1;
        if((month=4)||(month=6)||(month=9)||(month=11))
                return 2;
        {
        if((year%4==0)&&(year%100!=0)||(year%400==0))
                return 3;
        else
                return 4;
         }
                  
         }

}

最佳答案
2020-11-13 20:58:45
本帖最后由 jackz007 于 2020-11-13 21:19 编辑
  1. #include <stdio.h>

  2. int getDays(int year,int month)
  3. {
  4.         int days                                                                   ;
  5.         days = 30                                                                  ;
  6.         switch(month) {
  7.                 case  1:
  8.                 case  3:
  9.                 case  5:
  10.                 case  7:
  11.                 case  8:
  12.                 case 10:
  13.                 case 12: days ++                                                   ;
  14.                          break                                                     ;
  15.                 case  2: days -= 2                                                 ;
  16.                          if(!(year % 4) && (year % 100) || ! (year & 400)) days ++ ;
  17.                          break                                                     ;
  18.         }                                                                          ;
  19.         return days                                                                ;
  20. }

  21. main(void)
  22. {
  23.         int y , m                                                                  ;
  24.         scanf("%d%d" , & y , & m)                                                  ;
  25.         printf("%d\n" ,  getDays(y , m))                                           ;
  26. }
复制代码

        简化版
  1. #include <stdio.h>

  2. int getDays(int year ,int month)
  3. {
  4.         int md[] = {31 , 28 , 31 , 30 , 31 , 30 , 31 , 31 , 30 , 31 , 30 , 31} , days ;
  5.         days = md[month - 1]                                                          ;
  6.         if(month == 2 && (! (year % 4) && year % 100 || ! ( year % 400))) days ++     ;
  7.         return days                                                                   ;
  8. }

  9. main(void)
  10. {
  11.         int y , m                                                                     ;
  12.         scanf("%d%d" , & y , & m)                                                     ;
  13.         printf("%d\n" ,  getDays(y , m))                                              ;
  14. }
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2020-11-13 19:04:23 | 显示全部楼层
  1. #include<stdio.h>

  2. int getDays(int year, int month);

  3. int main()
  4. {
  5.         int year, month;

  6.         scanf("%d%d", &year, &month);
  7.         printf("There are %d days in month %d year %d.\n", getDays(year, month), month, year);

  8.         return 0;
  9. }

  10. int getDays(int year, int month)
  11. {
  12.         int result=0;  //作为case判断的条件

  13.         //这部分搬到上面,先判断
  14.         if ((month = 1) || (month = 3) || (month = 5) || (month = 7) || (month = 8) || (month = 10) || (month = 12))
  15.                 result= 1;
  16.         if ((month = 4) || (month = 6) || (month = 9) || (month = 11))
  17.                 result = 2;
  18.         {
  19.                 if ((year % 4 == 0) && (year % 100 != 0) || (year % 400 == 0))
  20.                         result = 3;
  21.                 else
  22.                         result = 4;
  23.         }

  24.         switch (result)        //注意返回值是你函数调用部分最终要的结果,前面闰年判断不能用1234作为返回,而应用result变量代替
  25.         {
  26.         case 1:return 31; break;
  27.         case 2:return 30; break;
  28.         case 3:return 29; break;
  29.         case 4:return 28; break;
  30.         }

  31. }
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-11-13 19:06:34 | 显示全部楼层
修改见注释部分,,
1、if月份判断的部分提前了
2、if判断的结果用变量result代替return,避免返回值直接返回到第10行调用部分,造成出错
3、case判断条件用result代替,打印改为return
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-11-13 19:07:32 | 显示全部楼层
满意的话记得设置最佳答案
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-11-13 20:58:45 | 显示全部楼层    本楼为最佳答案   
本帖最后由 jackz007 于 2020-11-13 21:19 编辑
  1. #include <stdio.h>

  2. int getDays(int year,int month)
  3. {
  4.         int days                                                                   ;
  5.         days = 30                                                                  ;
  6.         switch(month) {
  7.                 case  1:
  8.                 case  3:
  9.                 case  5:
  10.                 case  7:
  11.                 case  8:
  12.                 case 10:
  13.                 case 12: days ++                                                   ;
  14.                          break                                                     ;
  15.                 case  2: days -= 2                                                 ;
  16.                          if(!(year % 4) && (year % 100) || ! (year & 400)) days ++ ;
  17.                          break                                                     ;
  18.         }                                                                          ;
  19.         return days                                                                ;
  20. }

  21. main(void)
  22. {
  23.         int y , m                                                                  ;
  24.         scanf("%d%d" , & y , & m)                                                  ;
  25.         printf("%d\n" ,  getDays(y , m))                                           ;
  26. }
复制代码

        简化版
  1. #include <stdio.h>

  2. int getDays(int year ,int month)
  3. {
  4.         int md[] = {31 , 28 , 31 , 30 , 31 , 30 , 31 , 31 , 30 , 31 , 30 , 31} , days ;
  5.         days = md[month - 1]                                                          ;
  6.         if(month == 2 && (! (year % 4) && year % 100 || ! ( year % 400))) days ++     ;
  7.         return days                                                                   ;
  8. }

  9. main(void)
  10. {
  11.         int y , m                                                                     ;
  12.         scanf("%d%d" , & y , & m)                                                     ;
  13.         printf("%d\n" ,  getDays(y , m))                                              ;
  14. }
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-11-13 23:42:55 | 显示全部楼层
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2025-7-12 13:59

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表