这是代码的一部分:
scanf("%d%d%d",&a,&b,&c);
for(i=1;i<34;i++)
for(j=1;j<21;j++)
for(t=1;t<11;t++)
if(3*i+a==5*j+b==10*t+c) //左边==这样用为什么不可以呀,我想要它们都相等呀
==是用于判断是否相等的,=才是赋值语句
if(3*i+a==5*j+b==10*t+c)
改成
if((3*i+a)==(5*j+b)&&(5*j+b)==(10*t+c))
分成:if(3*i+a==5*j+b) && (5*j+b==10*t+c))
这个很简单啊 ==左右两边如果相等是返回一个1的要是不相等就会返回一个0的,你这程序明显有问题,就是拿一个1 或者 0跟10*t+c 相比 你感觉能对吗啊
所以改为if((3*i+a)==(5*j+b)&&(5*j+b)==(10*t+c)) 就可以了
1楼的答案是正解,这里就不写了,之所以你写的不对,是因为,==是个判断操作符,结果在C语言里面应该是0值和非0值,如果相等为非零值,如果不想等为0.由于两个==的优先级相同,那么先计算右边的==,返回应该是两种情况,就是前面所说的两种结果,跟第一个比较大小一般来说没什么实际意义。
对于楼上的正解提供的&&操作符说明一下,这个是个逻辑运算符,如果左边的结果为0也就是不成立,那么不会计算右边的表达式而返回0。同理的还有||这个或逻辑运算。如果使用C++,Java,C#这些语言,他们会提供bool,boolean,bool这些来表示对错。C语言中使用0和非0来判断,因为具体是多少,这个不太清楚,可以自己试验一下。
同意上面所说的,==是表判断的,=才是赋值。举个例子a=2,b=0,if(b=a)与if(b==a)这两个就不一样,前者是真后者是假,在很多编程中都是要注意的。
按照运算符优先级,会先运算3*i+a==5*j+b ,结果是一个布尔值,布尔值与10*t+c 怎么比
if是一个条件判断语句,你的想法是很对的,就是在句法的掌握上再详细一点就没有问题了。
if(3*i+a==5*j+b==10*t+c) 这样不是判断三个数是否相等的。 楼上有提出可行方案。这里我在强调一点。 ==是判断运算符。 而且是从右往左,
你那样使用就变成 先判断右边5j+b==10t+c是否成立,成立整个结果就是1 不成力就是0. 然后再判断这个结果是否与3i+a是否相等 很明显这样就不是
你要比较的那种效果。 望对你有帮助
这个是不能像数学那样写的,要表达这个意思只有有三个条件用&&连接