有人可以帮我解决在Dev-C ++上用C语言编程的练习吗?

时间:2011-05-06 18:15:03

标签: c

编写一个读取数字的程序,直到您读取数字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);

7 个答案:

答案 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 ++也支持+ =。