是否有可能在C程序中不使用数组或循环打印负整数的总和?



我们的活动需要输入4个数字,正数或负数,并且只将负数相加。

的例子:

-30.22
10.50
-2.2
-1.8

结果是-34.22总结了负数。

目前还没有讨论循环或数组。有可能用数学方程来解吗?如果我试着编码,我似乎找不到任何答案。

可以用if-else-elseif语句解决吗?

将输入读入四个变量,然后使用四个if语句在它们为负时将它们加到总数中。

float a, b, c, d;
scanf("%f %f %f %f", &a, &b, &c, &d);
float total = 0;
if (a < 0) {
total += a;
}
if (b < 0) {
total += b;
}
if (c < 0) {
total += c;
}
if (d < 0) {
total += d;
}
printf("%.2fn", total);

也可以使用条件运算符

float total = (a < 0 ? a : 0) + (b < 0 ? b : 0) + (c < 0 ? c : 0) + (d < 0 ? d : 0);

一些老师布置的作业真可怜。

也许你想要这个:

#include <stdio.h>
int main(void)
{
float a, b, c, d;
scanf("%f %f %f %f", &a, &b, &c, &d);
float total = (a < 0 ? a : 0) + (b < 0 ? b : 0) + (c < 0 ? c : 0) + (d < 0 ? d : 0);
printf("%f", total);
}

没有循环,没有if/else。

但是要注意,这是非常糟糕的代码。

不使用ifwhile(和co)的解决方案

int main(void) {
float n1 = 0, n2 = 0, n3 = 0, n4 = 0;
printf("Insert first number: ");
scanf("-%f", &n1);
scanf("%*[^n]");
printf("Insert second number: ");
scanf(" -%f", &n2);
scanf("%*[^n]");
printf("Insert third number: ");
scanf(" -%f", &n3);
scanf("%*[^n]");
printf("Insert fourth number: ");
scanf(" -%f", &n4);
scanf("%*[^n]");
float sum = -n1 - n2 - n3 - n4;
printf("Sum of all negative numbers: %fn", sum);
return 0;
}

解释scanf("-%f", &n1)将有两种可能的行为:

  • 在正数的情况下(例如:3.14+1.2),它将无法解析输入(因为它无法匹配第一个-符号),因此变量n1保持0;
  • 在负数的情况下(例如:-5-3.1),它将匹配减号并将数字的其余部分放入n1(因此n153.1,例如)。

基本上,对于所有四个数字,如果用户输入为正,则n0;如果输入为负,则n为数字的绝对值(2.0代替-2.0等)。

scanf("%*[^n]")将在(可能的)正数之后清除输入缓冲区(因为scanf()不会匹配正数)。

float sum = -n1 - n2 - n3 - n4是一个(奇怪的)"one_answers",但这是必要的,因为所有四个数字要么是0,要么是负数的负数。


免责声明

这个答案被认为是不好的做法它的技术永远不应该在实际程序中使用。这个答案的唯一目的是证明存在一个不使用循环和条件的OP问题的解决方案。然而,每个C程序员都应该使用循环和/或条件来使他们的代码更干净、更安全(看看"好"的其他答案)。解决方案).

相关内容

  • 没有找到相关文章

最新更新