鱼C论坛

 找回密码
 立即注册
查看: 821|回复: 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 编辑
#include <stdio.h>

int getDays(int year,int month)
{
        int days                                                                   ;
        days = 30                                                                  ;
        switch(month) {
                case  1:
                case  3:
                case  5:
                case  7:
                case  8:
                case 10:
                case 12: days ++                                                   ;
                         break                                                     ;
                case  2: 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[month - 1]                                                          ;
        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))                                              ;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 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;
        }

}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

使用道具 举报

发表于 2020-11-13 19:07:32 | 显示全部楼层
满意的话记得设置最佳答案
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 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) {
                case  1:
                case  3:
                case  5:
                case  7:
                case  8:
                case 10:
                case 12: days ++                                                   ;
                         break                                                     ;
                case  2: 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[month - 1]                                                          ;
        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))                                              ;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-11-13 23:42:55 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-1-12 17:56

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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