鱼C论坛

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

困难!!!!

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

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

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

x
我的代码为什么不能好好工作?
#include<stdio.h>
int main()
{
        int i=0,n=0,sum1=0,sum2=0,count1=0,count2=0,count3=0;
        int num[i];
        
        do
        {
                scanf("%d",&num[i]);
                i++ ;
        }while(num[i-1] != -1); 
        
        for(n=0;n<i;n++)
        {
                num[n] > 0 ? sum1 += num[n],count1++ : sum1 = sum1;
                num[n] < 0 ? sum2 += num[n],count2++ : sum2 = sum2;
                num[n]== 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型存储。。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 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]; // 假设输入的数值不超过 1000 个

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

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

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

    return 0;
}

希望能帮到你!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

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

2. 在 do-while 循环中,你使用了 num[i-1] 来判断循环是否结束,但此时 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[MAX_SIZE];

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

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

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

    return 0;
}

这样应该能够正确统计正数、负数和零的个数,并计算它们的和。
请注意,本回答来自GPT-3.5
如果问题已经解决,请设置最佳答案
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-12-23 22:06

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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