首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往
您找到你想要的搜索结果了吗?
是的
没有找到

C言中的宏陷阱 #define SQU(xx*x

求两个或几个数的乘积: #define SQU(x) x*x 我们正常使用没有问题: 但如果这样写呢? 哎呀,竟然不是100了,难道SQU(10)和SQU(5+5)不等价吗?5+5不是10吗?...那么解决这个问题的办法,相信大家看完之后心里应该有答案了,就是给x加个小括号,使它变成一个整体,如下: 就可以解决了。 然而,这并不没有完! 与此类似的,当我们想算两个数的和的时候呢?...我们继续验证: 正常写,不会触发陷阱,关键没错并不代表没有问题(虽然每个x都加了小括号!) 大家试试这样写: 艾玛! 为嘛不是20*20的400呢?...这么写:#define ADD(x) ((x)+(x)) 怎么样,这样写就没问题了!你的宏,从此百毒不侵! 有什么学习中遇到的问题,请联系我们! C语言研究中心(www.dotcpp.com)

1.3K50

【编程经验】C言中的宏陷阱 #define SQU(xx*x

咳咳咳,今天讲讲C中宏定义(片面),希望对小伙伴们有帮助,开始了: 有同学写过或者想写这样的宏定义吗?...求两个或几个数的乘积: #define SQU(x) x*x 我们正常使用没有问题: 但如果这样写呢? 哎呀,竟然不是100了,难道SQU(10)和SQU(5+5)不等价吗?5+5不是10吗?...那么解决这个问题的办法,相信大家看完之后心里应该有答案了,就是给x加个小括号,使它变成一个整体,如下: 就可以解决了。 然而,这并不没有完! 与此类似的,当我们想算两个数的和的时候呢?...我们继续验证: 正常写,不会触发陷阱,关键没错并不代表没有问题(虽然每个x都加了小括号!) 大家试试这样写: 艾玛! 为嘛不是20*20的400呢?...这么写:#define ADD(x) ((x)+(x)) 怎么样,这样写就没问题了!你的宏,从此百毒不侵!

1.1K80

C言中3-2=?3%-2=?你确定答案吗

抛砖引玉 C语言负数除以正数,与正数除以负数或者负数除以负数的余数和商,正负有谁定呢? -3 / 2 = ?; -3 % 2 = ?; 3 / (-2) = ?; 3 % (-2) = ?...大多数程序设计语言选择了放弃第 3 条,而改为求余数与被除数的正负号相同。这样,性质1和性质2就可以得到满足。大多数C编译器在实践中也都是这样做的。...b=2,c=3,d=-2; int q,r,m,n,x,y; q = a / b; r = a % b; m = c / d; n = c % d;...x = a / d; y = a % d; printf("q=%d, r=%d\n" , q , r); printf("m=%d, n=%d\n" , m ,...n); printf("x=%d, y=%d\n" , x , y); } 最终结论 翻阅资料得出,这个问题在C语言早期是没有固定规定的,所以一些书中会有谁这种行为值不固定,是编译器而内决定

42800

x³+y³+z³=3 怎么解!回答出来给100万

注意审题,以上只是方程x³+y³+z³=3的前两组整数解,第3组整数解是多少,你知道吗? 1953年,数学家Louis Mordell提出一个疑问:这个第3组整数解,它存在吗?...一个正整数能否表示成三个整数的立方之和(x³+y³+z³=k),关于它的每次发现都能引起不小的轰动。 这个看似没技术含量的问题,其实困扰了数学界很久。...472715493453327032)³ 数学化简 为了找到42和3的解决方案,两位数学家从现有算法开始,将立方和公式转化为他们认为更容易求解的形式: 他们将x+y看做一个参数d,进一步修改了算法,...这样,只需寻找d和z的值,即可保证找到对应于k=3xy、z。 即便如此,搜索的数字空间也是无限大的。...而仅仅两周后,他们已经发现,k=3的第3个整数解就找到了,他们还把这组解印在了T恤上。 至此,Mordell在68年前的问题终于得到解答。 那么问题又来了x³+y³+z³=3的第4组解是多少?

42120

C言中3-2=?3%-2=?你确定答案吗

抛砖引玉 C语言负数除以正数,与正数除以负数或者负数除以负数的余数和商,正负有谁定呢? -3 / 2 = ?; -3 % 2 = ?; 3 / (-2) = ?; 3 % (-2) = ?...大多数程序设计语言选择了放弃第 3 条,而改为求余数与被除数的正负号相同。这样,性质1和性质2就可以得到满足。大多数C编译器在实践中也都是这样做的。...b=2,c=3,d=-2; int q,r,m,n,x,y; q = a / b; r = a % b; m = c / d; n = c % d;...x = a / d; y = a % d; printf("q=%d, r=%d\n" , q , r); printf("m=%d, n=%d\n" , m ,...n); printf("x=%d, y=%d\n" , x , y); } 最终结论 翻阅资料得出,这个问题在C语言早期是没有固定规定的,所以一些书中会有谁这种行为值不固定,是编译器而内决定

1.1K61

关于C言中一些需要的注意点(3

1、若果说,自己总是会把=和= = 弄错的话,不如把变量放在右侧,就比如说*(if(3== x)和if(x= =3)),如果可以的话,还是建议第一种写法,因为就算是自己写错了,也可以通过系统自己来帮助我们找出错误...,如果一不小心写成了if(x=3),在第二种的情况下,是很难找出来的。...9、 scanf("%d",&x); scanf("%f",&y); //此时如果输入一个“-13.45e12#0” scanf("%d%f",&x,&y); 此时,因为遇到了==....==,所以x,是-13.而y是,0.45e12。 10、scanf返回值是表示成功的读取的变量的个数,没有读取到的话时返回0,在读取到之前发生错误的话,会返回EOF(-1)。...scanf("%d%*c%d%*c%d",x,y,z); 这种情况,就是为了,防止在输入日期的时候,会造成不同。

7200
领券