孤岛recwert 发表于 2020-11-13 18:54:07

c语言求助 函数

设计函数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 19:04:23

#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)
{
        int result=0;//作为case判断的条件

        //这部分搬到上面,先判断
        if ((month = 1) || (month = 3) || (month = 5) || (month = 7) || (month = 8) || (month = 10) || (month = 12))
                result= 1;
        if ((month = 4) || (month = 6) || (month = 9) || (month = 11))
                result = 2;
        {
                if ((year % 4 == 0) && (year % 100 != 0) || (year % 400 == 0))
                        result = 3;
                else
                        result = 4;
        }

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

}

昨非 发表于 2020-11-13 19:06:34

修改见注释部分,,
1、if月份判断的部分提前了
2、if判断的结果用变量result代替return,避免返回值直接返回到第10行调用部分,造成出错
3、case判断条件用result代替,打印改为return

昨非 发表于 2020-11-13 19:07:32

满意的话记得设置最佳答案哈

jackz007 发表于 2020-11-13 20:58:45

本帖最后由 jackz007 于 2020-11-13 21:19 编辑

#include <stdio.h>

int getDays(int year,int month)
{
      int days                                                                   ;
      days = 30                                                                  ;
      switch(month) {
                case1:
                case3:
                case5:
                case7:
                case8:
                case 10:
                case 12: days ++                                                   ;
                         break                                                   ;
                case2: days -= 2                                                 ;
                         if(!(year % 4) && (year % 100) || ! (year & 400)) days ++ ;
                         break                                                   ;
      }                                                                        ;
      return days                                                                ;
}

main(void)
{
      int y , m                                                                  ;
      scanf("%d%d" , & y , & m)                                                ;
      printf("%d\n" ,getDays(y , m))                                           ;
}
      简化版
#include <stdio.h>

int getDays(int year ,int month)
{
      int md[] = {31 , 28 , 31 , 30 , 31 , 30 , 31 , 31 , 30 , 31 , 30 , 31} , days ;
      days = md                                                          ;
      if(month == 2 && (! (year % 4) && year % 100 || ! ( year % 400))) days ++   ;
      return days                                                                   ;
}

main(void)
{
      int y , m                                                                     ;
      scanf("%d%d" , & y , & m)                                                   ;
      printf("%d\n" ,getDays(y , m))                                              ;
}

昨非 发表于 2020-11-13 23:42:55

{:10_277:}
页: [1]
查看完整版本: c语言求助 函数