c语言高手进来帮忙啊~有点纠结~!

2025-02-23 06:57:16
推荐回答(4个)
回答1:

程序我帮你调试好了,而且帮你改成了很方便看的形式,你原来的形式好乱,你把我的代码全部copy,就能看出来我修改了哪里,语法错误比较多:
#include
#include
void main()
{
int cha(float x,float y,float z,float a);
float a[100];
int n,i,j,k,way,z,w=0;//l,way,z,w=0;
z=0;
float f,p,sum,fsum,c,sum2;
f=0;
sum=0;
sum2=0;
fsum=0;
printf("请输入需要处理数据的准则,1为莱特准则,2为肖维纳准则,3为格拉布斯准则");
scanf("%d",&way);
if(way==3)
{
printf("你已经选择了格拉布斯准则,请输入希望处理数据的置信区间,1为95%,2为99%");
scanf("%d",&z);}
printf("请输入数据个数");
scanf("%d",&n);
printf("请依次输入数据");
for(i=0;i<=n-1;i++)
{
scanf("%f",&a[i]);
}
k=1;
//问题补充:while(k==1)
//然后是对n的switch语句,对c赋值,关键是下面
while(k==1)
{
sum=0;
sum2=0;
printf("c=%f",c);
for(i=0;i {
sum=sum+a[i];
sum2=sum2+a[i]*a[i];
}
p=sum/n;
printf("sum=%fp=%f\n",sum,p);
fsum=abs((sum2-n*p*p))/(n-1);
printf("fsum=%f\n",fsum);
f=sqrt(fsum);
printf("f=%f\n",f);
for(i=0;i {
k=cha(a[i],p,f,c);
if(k==1)
{
for(j=i;j {
a[j]=a[j+1];
}
n=n-1;break;
}
}
}
for(i=0;i {
printf("%f\n",a[i]);
}
sum=0;
for(i=0;i sum=sum+a[i];
p=sum/n;
fsum=abs((sum2-n*p*p))/(n-1);
f=sqrt(fsum);
printf("处理后数据的和为%f\n",sum);
printf("处理后数据的均值为%f\n",p);
printf("处理后数据的标准差为%f\n",f);
}
//}
int cha(float x,float y,float z,float a)
{
if(abs(x-y)>a*z)
return(1);
else if(abs(x-y)<=3*z)
return(0);
}
//如果way赋值是2就可以正常运行,但是1和3就进入死循环,都调用的十一个函数,为什么会这样呢?

运行结果如下:
选择1.可以计算,但是计算结束会出现异常退出。
选择2.可以计算,但是计算结束会出现异常退出。
选择3.可以计算,程序可以正常退出。
我的提醒:
程序调试过程中会有10个warning,大部分不用理睬,不过有2个你必须处理,我猜想异常退出的原因就来自这2个重要的warning:
1.cha函数,你仔细看看,不是所有情况都有返回值。
2.while里第3条语句printf("c=%f",c);你的c并没有初始化就使用。
3.float和int转换,数据可能丢失(不是很重要)。

我的建议:
你从这个运行结果出发,结合我的提醒,很快就能找到问题的所在并解决它,很抱歉你的算法我不懂,我就只能帮你指引到这里了,剩下的就靠你自己了!希望能帮上你。

回答2:

有两个比较重要的警告需要处理一下。

warning C4700: local variable 'c' used without having been initialized

warning C4715: 'cha' : not all control paths return a value

回答3:

其实123好像都不能正常运行,你有一个变量c没有赋值。

回答4:

这个程序片段没有为way==2或者1准备的代码呀,请把完整程序拿出来吧!