求解决“由键盘任意输入10个数据,分别统计其中的正数个数、正数之和、负数个数、负数之和”的编程问题

#include<stdio.h>
void main()
{
long int i,a[10],zhengshu=0,fushu=0,m=0,n=0;
for(i=1;i<=10;i++)
scanf("%ld",&a[i]);
for(i=1;i<=10;i++)
if(a[i]>0)
{
zhengshu=zhengshu+a[i];
m++;
}else
{
fushu=fushu+a[i];
n++;
}
printf("zhengshu=%ld,geshu=%ld,fushu=%ld\n,geshu=%ld\n",zhengshu,m,fushu,n);
}
编写时没错,但执行时运算结果错误。。输入10个用空格间断的数据时,敲回车键没反应,无法运行。。

数组越界了,C语言中定义 long a[10], 其元素依次为 a[0], a[1], a[2]... a[9]

所以循环的时候,一般这样

for (i = 0; i < 10; i ++)
{
    scanf("%ld", &a[i]);
}

 另外,在做你这道题时,没有必要做两次循环,一个循环就可以了呀

scanf到了一个数之后,立即判断其正负性,然后做相应的累加即可

所以,连数组都没必要使用,哈哈。

追问

我是新手,能不能详细纠正一下。。

追答#include <stdio.h>

void main()
{
long i;
long zhengshu = 0;
long fushu = 0;
long m = 0;
long n = 0;
long a[10];

for (i = 0; i < 10; i ++)
{
scanf("%ld", &a[i]);
}

for (i = 0; i < 10; i ++)
{
if (a[i] > 0)
{
zhengshu = zhengshu + a[i];
m ++;
}
else
{
fushu = fushu + a[i];
n ++;
}
}

printf("zhengshu=%ld,geshu=%ld\nfushu=%ld,geshu=%ld\n",zhengshu,m,fushu,n);
}

温馨提示:答案为网友推荐,仅供参考
第1个回答  2014-04-18
亲 你的数组定义为10个,数组下标是从0开始的,最多是到a[9]。您的循环中是到10的 所以超出了!而且您的判断没有考虑0的存在,0既不是正数也不是负数!你把循环里面改成for(i=0;i<10;i++)试试!
相似回答