鱼C论坛

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

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

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

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

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

x
   d = 31-(m==4)+(m==6)+(m==9)+(m==11)(关于求每个月多少天的)
谢谢
最佳答案
2019-5-11 15:44:22
首先,这句代码写错了,少了个括号
正确的应该是:
  1. 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天
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2019-5-11 15:44:22 | 显示全部楼层    本楼为最佳答案   
首先,这句代码写错了,少了个括号
正确的应该是:
  1. 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天
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

 楼主| 发表于 2019-5-11 15:46:08 | 显示全部楼层
哦,谢谢啦,你这么一说,我瞬间就明白啦,非常感谢
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

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

  1.     m = 1 :
  2.     m == 4     取值:0
  3.     m == 6     取值:0
  4.     m == 9     取值:0
  5.     m == 11    取值:0
  6.     d = 31-(m==4)+(m==6)+(m==9)+(m==11) = 31

  7.     m = 4 :
  8.     m == 4     取值:1
  9.     m == 6     取值:0
  10.     m == 9     取值:0
  11.     m == 11    取值:0
  12.     d = 31-(m==4)+(m==6)+(m==9)+(m==11) = 30

  13.     m = 8 :
  14.     m == 4     取值:0
  15.     m == 6     取值:0
  16.     m == 9     取值:0
  17.     m == 11    取值:0
  18.     d = 31-(m==4)+(m==6)+(m==9)+(m==11) = 31

  19.     m = 11 :
  20.     m == 4     取值:0
  21.     m == 6     取值:0
  22.     m == 9     取值:0
  23.     m == 11    取值:1
  24.     d = 31-(m==4)+(m==6)+(m==9)+(m==11) = 30      
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

额,这。。这个是为啥呢,我用VC++6.0可以呀,一般不都是逻辑真为1,逻辑假为0嘛?
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

下面有一位大佬提出了以前不同的观念,请您看看呗
小甲鱼最新课程 -> https://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)

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

  2. int main(void)
  3. {
  4.         int m                                                                                 ;
  5.         for(m = 1 ; m < 13 ; m ++) printf("%2d : %d\n" , m , 31-((m==4)+(m==6)+(m==9)+(m==11))) ;
  6.         printf("\n")                                                                          ;
  7. }
复制代码

小甲鱼最新课程 -> https://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)
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

哦哦,尴尬,谢谢哈,
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

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

  2. int main(void)
  3. {
  4.         int y , m , d                                                                                          ;

  5.         printf("请输入一个年份: ")                                                                              ;
  6.         scanf("%d" , & y)                                                                                      ;
  7.         for(m = 1 ; m < 13 ; m ++) {
  8.                 d = 31-(m==2)*3-(m==4 || m==6 || m==9 || m==11)+(m==2)*(! (y % 4) && (y % 100 || ! (y % 400))) ;
  9.                 printf("%2d : %d\n" , m , d)                                                                   ;
  10.         }
  11.         printf("\n")                                                                                           ;
  12. }
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

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

而且,关系表达式 ...

    粗心,没有发现暗藏的问题。谢谢指正!
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

使用道具 举报

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

谢谢他们!!!
小甲鱼最新课程 -> https://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;
接下来就是我刚开始求助的程序(记得加大括号)。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

       你想知道什么,说清楚一点!
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

你们的回答里的程序使用什么编辑的,我还可以复制的,我本来想通过截图上传程序的,然后发现我没有权限
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

      编辑器使用的是 Windows 记事本,编译器用的是 TDM-GCC,最好的一款 GNU C/C++ 编译器。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

谢谢
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-4-26 13:11

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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