编写一个读取数字的程序,直到您读取数字999,然后该过程停止读取。因此请尽量使用。然后显示计算机中导入的两位数字的总和,包括正数和负数,以及导入计算机的总数。
当我插入数字999时,过程停止。这很好。 我确定if命令是错误的,因为它不会添加任何数字。 我运行它并打印出两位数字的总和为0。
int num1, a, sum;
a = 0;
sum = 0;
do
{
printf("give number\n");
scanf("%d", &num1);
a = a + 1;
if ((num1>=-99) && (num1<=-10) && (num1>=10) && (num1<=99))
{
sum = sum + num1;
}
printf("the sum of the two digit numbers is %d\n", sum);
}
while (num1 != 999);
printf("the sum of the two digit numbers is %d\n", athr);
printf("the number of numbers that were inserted overall is %d\n", a);
答案 0 :(得分:7)
您的if
声明永远不会成立:
if ((num1>=-99) && (num1<=-10) && (num1>=10) && (num1<=99))
因为两个有效范围不重叠,而您使用&&
来“组合”它们。
使用
if (((-99 <= num1) && (num1 <= -10)) || ((10 <= num1) && (num1 <= 99)))
代替。
我今天的可读性提示:请注意,我略微重新比较了这些比较。范围比较更接近地反映了它们在代数符号中的表现:
(-99 <= num1 <= -10) or (10 <= num1 <= 99)
这是一件小事,但我发现能够遵循这些测试的逻辑会有很大的不同。只是不要陷入编码的陷阱:
if ((-99 <= num1 <= -10) || (10 <= num1 <= 99))
遗憾的是,它在C / C ++中在语法上有效,但不会为您提供所需的结果。
答案 1 :(得分:1)
num1
可以是&lt; -10和&gt; 10?
答案 2 :(得分:1)
(num1>=-99) && (num1<=-10) && (num1>=10) && (num1<=99)
一个数字如何满足所有这些条件?例如,(num1<=-10) && (num1>=10)
想到一个可以满足这两个条件的数字?
答案 3 :(得分:1)
你的病情
(num1>=-99) && (num1<=-10) && (num1>=10) && (num1<=99)
永远不会是true
,因为没有数字都可以为负(<=-10
)和为正(>=10
)。
答案 4 :(得分:1)
你搞砸了两位数的支票:
你做了
(-99 <= n <= -10) AND (10 <= n <= 99)
你应该已经完成了
(-99 <= n <= -10) OR (10 <= n <= 99)
(或者是C中的||
答案 5 :(得分:1)
问题是你的if语句。让我们用2个任意2位数字来试试吧。 -42和42。
对于否定的42:
true true false false
((num1>=-99) && (num1<=-10) && (num1>=10) && (num1<=99))
积极的42:
false false true true
((num1>=-99) && (num1<=-10) && (num1>=10) && (num1<=99))
答案 6 :(得分:1)
如果包含math.h,则可以将其简化为:
if (fabs(num1) >= 10 && fabs(num1) <= 99){
sum = sum + num1;
}
虽然我猜C ++也支持+ =。