C语言编程错误求高手指点,谢谢了
#include<stdlib.h>
#include <stdio.h>
#include <math.h>
void main()
{
int i,l=0,j=1;
char c;
float f;
float *upnum,*downum,*pnum;
float u,s,t,x,p,cha,aver,sp,sum=0;
pnum=(float *)malloc(j*sizeof(float));
upnum=(float *)malloc(j*sizeof(float));
downum=(float *)malloc(j*sizeof(float));
printf("输入断沙数据:\n");
for(i=0;i<j;i++)
scanf("%f",&f,&upnum[i]);
while((c=getchar())!='\n')
{
scanf("%f",&f);
j++;
}
printf("%d\n",j);
/* return 0;
scanf("%f",&upnum[i]);*/
printf(输入实测数据:\n");
for(i=0;i<j;i++)
scanf("%f",&downum[i]);
for(i=0;i<j;i++)
{
pnum[i]=(upnum[i]-downum[i])/downum[i];
printf(" 偏差=%.4f\n",pnum[i]);
}
for(i=0;i<j;i++)
{
pnum[i]=(upnum[i]-downum[i])/downum[i];
sum+=pnum[i];
}
aver=sum/j;
for(i=0;i<j;i++)
{
u=(pnum[i]-aver)*(pnum[i]-aver);
cha=(pnum[i]-aver)*100;
printf(" 差.6f\n ",cha);
p=u*10000;
printf("平方=%.6f\n",p);
x=x+u;
}
u=x/(j-1);
s=sqrt(u);
sp=s/sqrt(j);
t=fabs(aver/sp);
printf(" 偏离sp=%.6f,统计量|t|=%.6f\n",sp,t);
printf("%(ÖøÐÔˮƽ a=0.20)ÔÊÐí£º1.31\n");
if(u<1.31)
printf("%ºÏ¸ñ£¬¿É½ÓÊܼÙÉè\n");
else
printf("%²»ºÏ¸ñ£¬¾Ü¾ø¼ÙÉè\n");
system("PAUSE");
}
为什么是这样的结果?
正确的结果应该是类似这样的 展开
前面的偏差计算数据就不对,先解决这里下面的才能对
#include<stdlib.h>
#include <stdio.h>
#include <math.h>
int main()
{
int i,l=0,j=0;
char c;
float f[12];
float upnum[12],downum[12],pnum[12];
float u,s,t,x,p,cha,aver,sp,sum=0;
/*pnum=(float *)malloc(j*sizeof(float));
upnum=(float *)malloc(j*sizeof(float));
downum=(float *)malloc(j*sizeof(float));*/
printf("输入断沙数据:\n");
for(i=0;i<j;i++)
scanf("%f",&f,&upnum[i]);
while((c=getchar())!='\n')
{
scanf("%f",&f[j]);
j++;
}
printf("%d\n",j);
/* return 0;
scanf("%f",&upnum[i]);*/
printf("输入实测数据:\n"); ///zhe error
for(i=0;i<j;i++)
scanf("%f",&downum[i]);
for(i=0;i<j;i++)
{
pnum[i]=(upnum[i]-downum[i])/downum[i];
printf(" 偏差=%.4f\n",pnum[i]);
}
for(i=0;i<j;i++)
{
pnum[i]=(upnum[i]-downum[i])/downum[i];
sum+=pnum[i];
}
aver=sum/j;
for(i=0;i<j;i++)
{
u=(pnum[i]-aver)*(pnum[i]-aver);
cha=(pnum[i]-aver)*100;
printf(" 差.6f\n ",cha);
p=u*10000;
printf("平方=%.6f\n",p);
x=x+u;
}
u=x/(j-1);
s=sqrt(u);
sp=s/sqrt(j);
t=fabs(aver/sp);
printf(" 偏离sp=%.6f,统计量|t|=%.6f\n",sp,t);
printf("%(著性水平 a=0.20)允许:1.31\n");
if(u<1.31)
printf("合格\n");
else
printf("不合格\n");
//system("PAUSE");
getchar();
}
这个好像没能进行正确的运算啊
2014-11-18
#include<ctype.h>
#include <stdio.h>
#include <math.h>
#define N 100
int main()
{
int i,l=0/*,j=1*/;
char c;
float f;
//float *upnum,*downum,*pnum;
float u,s,t,x=0,p,cha,aver,sp,sum=0;
//pnum=(float *)malloc(j*sizeof(float));/*j的初始值为1,只分配了一个float空间*/
//upnum=(float *)malloc(j*sizeof(float));
//downum=(float *)malloc(j*sizeof(float));
/*如果不知道要输入多少个,你也不想让用户输入要输入的个数,而是要统计用户输入个数
你可以先分配一定空间,当要超过空间时,申请新的空间,然后把原来数据复制到新申请的
空间,释放原来的空间。这样比较麻烦,如果你不是做实用的话,建议用数组。*/
float upnum[N],downum[N],pnum[N];
char s1[80];
printf("输入断沙数据:\n");
// c=getchar(); //getchar()会提取空格和回车
int j=0;
while((c=getchar())!=10)
{
ungetc(c,stdin);
scanf("%s",s1);
upnum[j++]=atof(s1);
}
// for(i=0;i<j;i++)
// scanf("%f",&upnum[i]);// scanf("%f",&f,&upnum[i]);
// while((c=getchar())!='\n') 要一边输入一边统计
// {
// scanf("%f",&f);
// j++;
// }
printf("%d\n",j);
/* return 0;
scanf("%f",&upnum[i]);*/
printf("输入实测数据:\n");
for(i=0;i<j;i++)
scanf("%f",&downum[i]);//scanf("%f",&downum[i]);
for(i=0;i<j;i++)
{
pnum[i]=(upnum[i]-downum[i])/downum[i];
printf(" 偏差=%.4f\n",pnum[i]);
}
for(i=0;i<j;i++)
{
pnum[i]=(upnum[i]-downum[i])/downum[i];
sum+=pnum[i];
}
aver=sum/j;
for(i=0;i<j;i++)
{
u=(pnum[i]-aver)*(pnum[i]-aver);
cha=(pnum[i]-aver)*100;
printf(" 差%.6f\n ",cha);//printf(" 差.6f\n ",cha);
p=u*10000;
printf("平方=%.6f\n",p);
x=x+u;
}
u=x/(j-1);
s=sqrt(u);
sp=s/sqrt((double)j);
t=fabs(aver/sp);
printf(" 偏离sp=%.6f,统计量|t|=%.6f\n",sp,t);
printf("%(著性水平 a=0.20) 允许:1.31\n");
if(u<1.31)
printf("合格\n");
else
printf("不合格,拒绝假设\n");
system("PAUSE");
}
我这边不行啊,如果你的可以正确运行那就直接把cfile文件上传好吗
你把上面的代码用你的编译器编译一下,如果有问题你把编译报错贴出来。如果是计算问题只好你自己检查了。因为我也不知道题。如果格式不对你可以把原理的语句换成下面的
printf("差=%.6f ",cha);printf("平均相对偏移值sp=%.6f,统计量t=%.6f\n",sp,t);
另外,你处理回车的方法有问题,如果你想这样的话,可以考虑用gets输入字符串,然后用sscanf函数自己从字符串中取得输入。
呃,人比较笨能否具体点
建议这样开设数组:
#define N 100 //最多处理100个输入
float pnum[N];
输入时先问一下有几组数据,然后再输入具体数据:
int n,i; printf("请输入数据个数:"); scanf("%d",&n); if ( n>N ) n=N; //保证不超过最大个数
printf("请顺序输入数据:"); for ( i=0;i<n;i++) scanf("%f",&pnum[N]);
其他数据、处理均使用n作为数据个数。
那个无关紧要啊,不用在意
你是先输入要输入的数据个数,然后再输入一组数据的是吗?