鱼C论坛

 找回密码
 立即注册
查看: 1957|回复: 2

困难!!!!

[复制链接]
发表于 2023-10-16 12:12:33 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
我的代码为什么不能好好工作?
  1. #include<stdio.h>
  2. int main()
  3. {
  4.         int i=0,n=0,sum1=0,sum2=0,count1=0,count2=0,count3=0;
  5.         int num[i];
  6.        
  7.         do
  8.         {
  9.                 scanf("%d",&num[i]);
  10.                 i++ ;
  11.         }while(num[i-1] != -1);
  12.        
  13.         for(n=0;n<i;n++)
  14.         {
  15.                 num[n] > 0 ? sum1 += num[n],count1++ : sum1 = sum1;
  16.                 num[n] < 0 ? sum2 += num[n],count2++ : sum2 = sum2;
  17.                 num[n]== 0 ? count3++ : count3 = count3;
  18.         }
  19.         printf("%d %d %d\n",count1,count3,count2);
  20.         printf("%d %d\n",sum1,sum2);
  21.        
  22.        
  23.         return 0 ;
  24. }
复制代码

这是题目:
  1. 请写一段正负数统计的程序。

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

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

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

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

复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2023-10-16 12:13:03 | 显示全部楼层
这段代码的问题在于,在定义  num  数组时,使用了一个未初始化的变量  i ,导致数组大小不确定,可能会越界,从而导致程序崩溃。

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

以下是我修改后的代码:

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

  6.     do
  7.     {
  8.         scanf("%d", &num[ i]);
  9.         i++;
  10.     } while (num[i - 1] != -1);

  11.     for (n = 0; n < i - 1; n++) // 注意要减去结束符 -1
  12.     {
  13.         if (num[n] > 0)
  14.         {
  15.             sum1 += num[n];
  16.             count1++;
  17.         }
  18.         else if (num[n] < 0)
  19.         {
  20.             sum2 += num[n];
  21.             count2++;
  22.         }
  23.         else
  24.         {
  25.             count3++;
  26.         }
  27.     }

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

  30.     return 0;
  31. }
复制代码


希望能帮到你!
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-10-16 12:13:38 | 显示全部楼层
你的代码有几个问题:

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

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

修正后的代码如下所示:

  1. #include <stdio.h>
  2. #define MAX_SIZE 100

  3. int main() {
  4.     int i = 0, n = 0, sum1 = 0, sum2 = 0, count1 = 0, count2 = 0, count3 = 0;
  5.     int num[MAX_SIZE];

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

  10.     for (n = 0; n < i - 1; n++) {
  11.         if (num[n] > 0) {
  12.             sum1 += num[n];
  13.             count1++;
  14.         } else if (num[n] < 0) {
  15.             sum2 += num[n];
  16.             count2++;
  17.         } else {
  18.             count3++;
  19.         }
  20.     }

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

  23.     return 0;
  24. }
复制代码


这样应该能够正确统计正数、负数和零的个数,并计算它们的和。
请注意,本回答来自GPT-3.5
如果问题已经解决,请设置最佳答案
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-4-22 06:41

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表