不枉风来水顺 发表于 2023-10-16 12:12:33

困难!!!!

我的代码为什么不能好好工作?
#include<stdio.h>
int main()
{
        int i=0,n=0,sum1=0,sum2=0,count1=0,count2=0,count3=0;
        int num;
       
        do
        {
                scanf("%d",&num);
                i++ ;
        }while(num != -1);
       
        for(n=0;n<i;n++)
        {
                num > 0 ? sum1 += num,count1++ : sum1 = sum1;
                num < 0 ? sum2 += num,count2++ : sum2 = sum2;
                num== 0 ? count3++ : count3 = count3;
        }
        printf("%d %d %d\n",count1,count3,count2);
        printf("%d %d\n",sum1,sum2);
       
       
        return 0 ;
}
这是题目:
请写一段正负数统计的程序。

输入格式:
为若干整数,以-1结束(测试数据保证这组数中只有最后一个-1)。

输出格式:
共两行,第一行为三个整数(用一个空格分隔),依次为这组数中正数的个数,0的个数和负数的个数(不统计最后的-1)。

第二行为用一个空格分隔的两个整数,依次为这组数中所有正数的和及所有负数的和(不包括最后的-1)。

测试数据保证求和的结果可以用int型存储。。

isdkz 发表于 2023-10-16 12:13:03

这段代码的问题在于,在定义num数组时,使用了一个未初始化的变量i ,导致数组大小不确定,可能会越界,从而导致程序崩溃。

另外,根据题目要求,输入的数值中包含了一个结束符-1 ,但是在统计正负数和求和时,却把这个数值也算在内了,应该在循环时做出相应的处理。

以下是我修改后的代码:

#include<stdio.h>
int main()
{
    int i = 0, n = 0, sum1 = 0, sum2 = 0, count1 = 0, count2 = 0, count3 = 0;
    int num; // 假设输入的数值不超过 1000 个

    do
    {
      scanf("%d", &num[ i]);
      i++;
    } while (num != -1);

    for (n = 0; n < i - 1; n++) // 注意要减去结束符 -1
    {
      if (num > 0)
      {
            sum1 += num;
            count1++;
      }
      else if (num < 0)
      {
            sum2 += num;
            count2++;
      }
      else
      {
            count3++;
      }
    }

    printf("%d %d %d\n", count1, count3, count2);
    printf("%d %d\n", sum1, sum2);

    return 0;
}


希望能帮到你!

陶远航 发表于 2023-10-16 12:13:38

你的代码有几个问题:

1. 你在声明数组 int num[ i]; 时,i 还没有被初始化为任何值,所以数组大小是未定义的。你需要在读取数字之前确定数组的大小。

2. 在 do-while 循环中,你使用了 num 来判断循环是否结束,但此时 i 的值已经超出数组范围。你可以将读取的数字存储在一个动态分配的数组中,或者使用一个足够大的固定大小数组来存储输入。

修正后的代码如下所示:

#include <stdio.h>
#define MAX_SIZE 100

int main() {
    int i = 0, n = 0, sum1 = 0, sum2 = 0, count1 = 0, count2 = 0, count3 = 0;
    int num;

    do {
      scanf("%d", &num[ i]);
      i++;
    } while (num != -1);

    for (n = 0; n < i - 1; n++) {
      if (num > 0) {
            sum1 += num;
            count1++;
      } else if (num < 0) {
            sum2 += num;
            count2++;
      } else {
            count3++;
      }
    }

    printf("%d %d %d\n", count1, count3, count2);
    printf("%d %d\n", sum1, sum2);

    return 0;
}


这样应该能够正确统计正数、负数和零的个数,并计算它们的和。
请注意,本回答来自GPT-3.5
如果问题已经解决,请设置最佳答案
页: [1]
查看完整版本: 困难!!!!