困难!!!!
我的代码为什么不能好好工作?#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型存储。。
这段代码的问题在于,在定义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;
}
希望能帮到你! 你的代码有几个问题:
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]