新手问题,看看哪里出错了

来源:百度知道 编辑:UC知道 时间:2024/06/15 21:28:21
定义了数组a[10]={6,3,14,1,2,2,7,1,1,1};求在数组里含有因数3或者7的数的平均数
main()
{int a[10]={6,3,14,1,2,2,7,1,1,1},i,s=0,n=0;
float p;
for(i=0;i<10;i++)
{
while(a[i]%3==0||a[i]%7==0)
{
s+=a[i];
n++;
}
}
p=(float)s/n;
printf("平均数=%f\n",p);
}

输出时没有显示任何数据,按任何键也没反应,大家 看看哪里出错了

呵呵,

while(a[i]%3==0||a[i]%7==0)
改为:
if(a[i]%3==0||a[i]%7==0)

由于你在while(a[i]%3==0||a[i]%7==0)的循环体内只进行了s数值的处理和计数的++,并没有进行跳出处理,也没有进行i值得改变,
所以就会一直进行while的循环,变成死循环了

你的意思,应该是用if处理,估计是疏忽了:)

改过以后的程序,已经运行确认了:
#include<stdio.h>

void main()
{
int a[10]={6,3,14,1,2,2,7,1,1,1},i,s=0,n=0;
float p;
for(i=0;i<10;i++)
{
//while(a[i]%3==0||a[i]%7==0)
if(a[i]%3==0||a[i]%7==0)
{
s+=a[i];
n++;
}
}
p=(float)s/n;
printf("平均数=%f\n",p);
}

while(a[i]%3==0||a[i]%7==0) //改成if(a[i]%3==0||a[i]%7==0)
{
s+=a[i];
n++;
}
这里循环跳不出来。。把While改成if就可以了。。

while(a[i]%3==0||a[i]%7==0)
改为:if(a[i]%3==0||a[i]%7==0)
朋友.

while(a[i]%3==0||a[i]%7==0)
你走一遍思路就出来了:
当while表达式
(a[i]%3==0||a[i]%7==0)为真,执行while内的东西,但是执行完后i还是原来的i,导致while永远为真.
就是说一旦碰到含3或7因子的数,就死循环了