C语言编程错误求高手指点,谢谢了

题是输入两组数据然后对它们进行计算#include<stdlib.h>#include<stdio.h>#include<math.h>voidmain(){inti,l... 题是输入两组数据然后对它们进行计算
#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");
}
为什么是这样的结果?
正确的结果应该是类似这样的
展开
 我来答
oowood
2014-11-18 · TA获得超过1781个赞
知道大有可为答主
回答量:2196
采纳率:81%
帮助的人:1214万
展开全部

前面的偏差计算数据就不对,先解决这里下面的才能对


#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();

}


更多追问追答
追问
这个好像没能进行正确的运算啊
追答
多了不让贴:
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;
   
  printf("输入断沙数据:\n");

    do
    {
        scanf("%f",&f[j]);
        j++;
    }
while((c=getchar())!='\n');
    for(int k=0;k<10;k++)
     printf("%.4f",f[k]);
    
   printf("%d\n",j);

 

匿名用户
2014-11-18
展开全部
#include<stdlib.h>
#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);
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
cdyzxy
2014-11-18 · TA获得超过2.1万个赞
知道大有可为答主
回答量:1.4万
采纳率:84%
帮助的人:3582万
展开全部
你开始申请了数组是长度为1的,但后面随着输入增加j++但数组却没有重新申请,数据存储会发生混乱,请考虑这点,另外scanf会处理\n的情况,你再判断的话会有问题。
另外,你处理回车的方法有问题,如果你想这样的话,可以考虑用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作为数据个数。
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
不愿相离
2014-11-18 · TA获得超过440个赞
知道小有建树答主
回答量:529
采纳率:0%
帮助的人:484万
展开全部
上面printf语句中的乱码是什么情况?
更多追问追答
追问
那个无关紧要啊,不用在意
追答
你是先输入要输入的数据个数,然后再输入一组数据的是吗?
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式