鱼C论坛

 找回密码
 立即注册
查看: 1898|回复: 17

[已解决]跪求这行代码什么意思呀,以前没见过

[复制链接]
发表于 2019-5-11 15:23:41 | 显示全部楼层 |阅读模式

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

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

x
   d = 31-(m==4)+(m==6)+(m==9)+(m==11)(关于求每个月多少天的)
谢谢
最佳答案
2019-5-11 15:44:22
首先,这句代码写错了,少了个括号
正确的应该是:
 d = 31-((m==4)+(m==6)+(m==9)+(m==11));

然后解释
m==4:
当m为4时,返回1,其他情况返回0。

所以整个语句就是:
m为4,6,9,11时,d就等于31-(1+0+0+0)=30
其他情况为31天
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2019-5-11 15:44:22 | 显示全部楼层    本楼为最佳答案   
首先,这句代码写错了,少了个括号
正确的应该是:
 d = 31-((m==4)+(m==6)+(m==9)+(m==11));

然后解释
m==4:
当m为4时,返回1,其他情况返回0。

所以整个语句就是:
m为4,6,9,11时,d就等于31-(1+0+0+0)=30
其他情况为31天
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

 楼主| 发表于 2019-5-11 15:46:08 | 显示全部楼层
哦,谢谢啦,你这么一说,我瞬间就明白啦,非常感谢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-5-11 15:59:20 | 显示全部楼层
本帖最后由 jackz007 于 2019-5-11 17:37 编辑

       把逻辑值当成整型数来使用,逻辑假取值 0,逻辑真取值 1,于是就构成了计算每个月份天数的表达式。但是,这个表达式带有很大的不确定性,逻辑假取值 0 这个没有问题,逻辑真的取值就不那么确定了,只要是非 0 就都是真,具体取值和编译器有关系。
    m = 1 :
    m == 4     取值:0
    m == 6     取值:0
    m == 9     取值:0
    m == 11    取值:0
    d = 31-(m==4)+(m==6)+(m==9)+(m==11) = 31

    m = 4 :
    m == 4     取值:1
    m == 6     取值:0
    m == 9     取值:0
    m == 11    取值:0
    d = 31-(m==4)+(m==6)+(m==9)+(m==11) = 30

    m = 8 :
    m == 4     取值:0
    m == 6     取值:0
    m == 9     取值:0
    m == 11    取值:0
    d = 31-(m==4)+(m==6)+(m==9)+(m==11) = 31

    m = 11 :
    m == 4     取值:0
    m == 6     取值:0
    m == 9     取值:0
    m == 11    取值:1
    d = 31-(m==4)+(m==6)+(m==9)+(m==11) = 30      
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-5-11 16:39:24 | 显示全部楼层
jackz007 发表于 2019-5-11 15:59
把逻辑值当成整型数来使用,逻辑假取值 0,逻辑真取值 1,于是就构成了计算每个月份天数的表达式。 ...

额,这。。这个是为啥呢,我用VC++6.0可以呀,一般不都是逻辑真为1,逻辑假为0嘛?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-5-11 16:40:38 | 显示全部楼层
Croper 发表于 2019-5-11 15:44
首先,这句代码写错了,少了个括号
正确的应该是:

下面有一位大佬提出了以前不同的观念,请您看看呗
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-5-11 16:42:28 | 显示全部楼层
本帖最后由 Croper 于 2019-5-11 16:48 编辑
jackz007 发表于 2019-5-11 15:59
把逻辑值当成整型数来使用,逻辑假取值 0,逻辑真取值 1,于是就构成了计算每个月份天数的表达式。 ...


同学。。。之所以出现32是因为原表达式少了个括号。。。。我在上面已经说了。。。

而且,关系表达式的结果一定为1或者0,不会出现其他的值;
总之,关系运算符被用来构成关系表达式。关系表达式在为真时值为 1, 为假时值为 0 。通常使用关系表达式作为判断条件的语句(例如 while 和 if)可以使用任何表达式作为判断,非零值被认为是“真”,而零值被认为是 “假”。
(C primer plus,第五版,第六章,3.3)

不然你把这个括号加上试试:
#include <stdio.h>

int main(void)
{
        int m                                                                                 ;
        for(m = 1 ; m < 13 ; m ++) printf("%2d : %d\n" , m , 31-((m==4)+(m==6)+(m==9)+(m==11))) ;
        printf("\n")                                                                          ;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-5-11 17:13:05 | 显示全部楼层
本帖最后由 jackz007 于 2019-5-11 17:19 编辑
Croper 发表于 2019-5-11 16:42
同学。。。之所以出现32是因为原表达式少了个括号。。。。我在上面已经说了。。。

而且,关系表达式 ...


     看来,确实有问题,问题出在运算符不一致,后面的 3 个加号应该统一改成减号
d = 31-(m==4)+(m==6)+(m==9)+(m==11)
     这样就没有问题了:
d = 31-(m==4)-(m==6)-(m==9)-(m==11)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-5-11 17:37:46 | 显示全部楼层
Croper 发表于 2019-5-11 15:44
首先,这句代码写错了,少了个括号
正确的应该是:

哦哦,尴尬,谢谢哈,
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-5-11 17:45:10 | 显示全部楼层
本帖最后由 jackz007 于 2019-5-11 18:07 编辑

      楼主的代码有错误,进行修正,同时增加解决 2 月份及闰年的问题,楼主可以测试一下。
#include <stdio.h>

int main(void)
{
        int y , m , d                                                                                          ;

        printf("请输入一个年份: ")                                                                              ;
        scanf("%d" , & y)                                                                                      ;
        for(m = 1 ; m < 13 ; m ++) {
                d = 31-(m==2)*3-(m==4 || m==6 || m==9 || m==11)+(m==2)*(! (y % 4) && (y % 100 || ! (y % 400))) ;
                printf("%2d : %d\n" , m , d)                                                                   ;
        }
        printf("\n")                                                                                           ;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2019-5-11 18:11:22 | 显示全部楼层
Croper 发表于 2019-5-11 16:42
同学。。。之所以出现32是因为原表达式少了个括号。。。。我在上面已经说了。。。

而且,关系表达式 ...

    粗心,没有发现暗藏的问题。谢谢指正!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-5-11 18:25:50 | 显示全部楼层
佩服007,关键不只是热心,还能想出更为合理正确的方式来解决问题。。
而不是单纯地解决当下的问题。。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-5-11 18:33:48 | 显示全部楼层
老笨啊 发表于 2019-5-11 18:25
佩服007,关键不只是热心,还能想出更为合理正确的方式来解决问题。。
而不是单纯地解决当下的问题。。

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

使用道具 举报

 楼主| 发表于 2019-5-12 08:10:33 | 显示全部楼层
jackz007 发表于 2019-5-11 17:45
楼主的代码有错误,进行修正,同时增加解决 2 月份及闰年的问题,楼主可以测试一下。

你们是用什么打印然程序然后上传的,我好像不能上传截图图片,说一下这道题思路,首先判断输入的年份是否是闰年赋值给一个变量f,逻辑真为1,假为0.
f==1?printf("%d是闰年",year):printf(“%d不是闰年",year”);
然后2月单独考虑,
if(m==2) days=28+f;
接下来就是我刚开始求助的程序(记得加大括号)。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-5-12 09:32:43 | 显示全部楼层
套你猴子(甲鱼 发表于 2019-5-12 08:10
你们是用什么打印然程序然后上传的,我好像不能上传截图图片,说一下这道题思路,首先判断输入的年份是 ...

       你想知道什么,说清楚一点!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-5-12 10:30:20 | 显示全部楼层
jackz007 发表于 2019-5-12 09:32
你想知道什么,说清楚一点!

你们的回答里的程序使用什么编辑的,我还可以复制的,我本来想通过截图上传程序的,然后发现我没有权限
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-5-12 10:50:19 | 显示全部楼层
套你猴子(甲鱼 发表于 2019-5-12 10:30
你们的回答里的程序使用什么编辑的,我还可以复制的,我本来想通过截图上传程序的,然后发现我没有权限
...

      编辑器使用的是 Windows 记事本,编译器用的是 TDM-GCC,最好的一款 GNU C/C++ 编译器。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-5-12 11:43:35 | 显示全部楼层
jackz007 发表于 2019-5-12 10:50
编辑器使用的是 Windows 记事本,编译器用的是 TDM-GCC,最好的一款 GNU C/C++ 编译器。

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-10-3 17:06

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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