哪个大神,能给我看一下这个代码错在哪了。可以运行,但是结果错了?

//输入一批非0整数,直到用户输入0为止。求其中奇数的平均值和偶数的乘积。
# include <stdio.h>
# include <windows.h>
int main()
{
int a[37];
int i=0;
int sum=0,ji=1;
float s=0.0;
char ch;
while ((ch=getchar())!='\n')
{
scanf ("%d",&a[i]);
i++;
}
for (i=0;(a[i])!=0;i++)
{
if ((a[i])/2==0)
{
ji*=(a[i]);
}
else
{
sum+=(a[i]);
s++;
}
}
printf ("您所输入的整数中\n奇数的平均值为:%.4f\n偶数的乘积为 :%d\n",(sum/s),ji);
system ("pause");
return 0;
}

这题里的问题非常多,如下

1、奇偶判断是if(a[i]%2)即为奇数,否则为偶(即if(a[i]%2>0)
2、int a[37];你声明了a数组,但注意此时a数组里的值全是随机数,并不是你以为的0,将会直接导致后面的a[i]!=0这种判断将会没什么意义,正确的写法是 int a[37]={0};
3、你用getchar来读字符,会吃掉首行的第一个数字,比如你输入123,会导致第一个数字变成了23

4、就你这题来说,其实并没有什么必要使用数组,可以简单点的是
#include<stdio.h>
int main() {
int i,ou=1,ji=0,c=0;
double avg=0;
scanf("%d",&i);
while (i) {
if(i%2) { /*奇数*/
ji+=i; /*奇数求和*/
c++; /*奇数个数累加*/
} else
ou*=i;
scanf("%d",&i);
}
if(c) avg=1.0*ji/c; /*加入判断,除止因为没有输入奇数而导致除数为0*/
printf("偶数乘积为%d 奇数平均值为%f",ou,avg);
}
温馨提示:内容为网友见解,仅供参考
第1个回答  2019-10-31
判断是否为偶数应该用 变量名%2 == 0 吧?% 操作符求余数 而不是用 / 操作符本回答被网友采纳

哪个大神,能给我看一下这个代码错在哪了。可以运行,但是结果错了?
2、int a[37];你声明了a数组,但注意此时a数组里的值全是随机数,并不是你以为的0,将会直接导致后面的a[i]!=0这种判断将会没什么意义,正确的写法是 int a[37]={0};3、你用getchar来读字符,会吃掉首行的第一个数字,比如你输入123,会导致第一个数字变成了23 4、就你这题来说,其...

大神帮我看下这个代码,能得出运行结果。但第二行出现的那个英文是怎么回...
那个英文意思是 段错误 意思是你的代码里存在访问非法内存空间的问题。问题就出在第16行,%s是打印字符串的格式符,应该传入指针类型或正确的内存地址,而你传入的b的值为2,2并不是合法的内存地址,所以发生了段错误。修正方法就是,把%s改为%d ...

各位大神看一下这段代码错误在哪?(pb的w_login登录按钮代码)登陆时总...
能运行,语法没有错误 有可能是你的嵌入的SQL语句返回的值出错

请大神看看以下代码有什么问题吗?运行总是出错!
你的Java程序中,Switch(person)和Switch(computer)错了,Switch应该全部小写switch 应该改成switch(person)和switch(computer),就没有错误了.多运行几次会有不同结果

大神看一下这段代码有没有什么问题一直报这个错误java.lang.StackOver...
这个错误是说,堆栈溢出了,一般程序调用过程或者函数,使用堆栈的,也有可能直接使用堆栈,堆栈一般是有大小限制的,所以要控制好,不要让堆栈溢出,

大神看一下这段代码有没有什么问题一直报这个错误java.lang.StackOver...
出现这个问题的原因是递归无限调用了,最后stack举出。

各位大神帮忙看一下下面的代码错在哪里?
不知道你们输出格式具体咋要求的,但是我大概的改了一下。你试试吧。a%10000是指a除以10000留下的余数,int b,然后a\/b才是取整。。。还有,注意下你所有的if的条件都错了。是!=而不是==。include <stdio.h>\/*实验4选作第八题第一小题*\/ void main(){ long a;int b,c,d,e,f,g;sc...

求大神帮忙,看看我这串代码哪里错了。有else了,但运行的时候就是报错...
if後面不要分号 else後面也不要分号 分号是叙述结束, 但是if及else的後面要接一个叙述(指令;)或区块(blcok, {...})语法问题

...程序就瘫了,执行的结果是错的,请问各位大神,问题出在什么地方?_百 ...
因为在代码中有 pause 暂停命令的存在(两处),而误认为程序有问题。处理方法,可以直接将 pause 暂停命令删除或用%注释符号就行了。处理后执行此代码,可以得到如下结果:

求教VBA代码大神,我没学过VBA但是想运行一个代码,看不出哪里有错
错误的地方就是上图,这句话因该是转置某个区域 mat是range 对象 你这句话分了三行写 第一行没写换行符 _ 所以就错误了 需要注意 换行符空格 + _ 别漏了空格 app. _mmult()

相似回答