C语言问题 求助!!!
#include<stdio.h>#include<stdlib.h>voidmain(){intm;floataver[10];float*j,*p,*s,*k,*b;...
# include <stdio.h>
# include <stdlib.h>
void main ()
{int m;
float aver[10];
float *j,*p,*s,*k,*b;
j=aver,*p=NULL,*s=NULL;
void pinjun(float *p,float *s,float *j);
p=(float *)malloc(sizeof(float)*10);
s=(float *)malloc(sizeof(float)*10);
k=p,b=s;
for(m=0;m<10;m++)
scanf("%f",p++);
for(m=0;m<10;m++)
scanf("%f",s++);
pinjun(k,b,j);
printf("the aver is %f",aver);
for(m=0;m<10;m++)
printf("%f ",aver[m]);
}
pinjun(float *p,float *s,float *j)
{int i=0;
for(i=0;i<10;i++)
*(j+i)=*(p+i)+*(s+i);
return(i);
}
在TURBO C 环境下 编译后 按ALT+F5 显示scanf:floating point formats not linked
Abnormal program termination
求助求助~~~~~
首先感谢大家的帮助!
对于一楼,我试过在前面加浮点运算,但还是同样显示scanf:floating point formats not linked
Abnormal program termination
但我换成int 后,的确可以运行了。 但是用浮点型如何解决呢???
原题是 已知一个班有10名同学英语考试成绩为{88.5,76,
83.5, 92,96.5,80,62,85.5,74,87.5},平时成绩为
{4.0,3.5,4.5,2.0,3.0,3.5,4.0,2.5,3.5,4.0},主函
数中用C的指针分配函数:malloc()分配两块连续的
存储单元存放以上的考试成绩和平时成绩,用一个函
数计算该班同学的考试平均成绩和各同学的最终成绩
(考试成绩+平均成绩),在主函数中将以上计算结果
打印出来。 展开
# include <stdlib.h>
void main ()
{int m;
float aver[10];
float *j,*p,*s,*k,*b;
j=aver,*p=NULL,*s=NULL;
void pinjun(float *p,float *s,float *j);
p=(float *)malloc(sizeof(float)*10);
s=(float *)malloc(sizeof(float)*10);
k=p,b=s;
for(m=0;m<10;m++)
scanf("%f",p++);
for(m=0;m<10;m++)
scanf("%f",s++);
pinjun(k,b,j);
printf("the aver is %f",aver);
for(m=0;m<10;m++)
printf("%f ",aver[m]);
}
pinjun(float *p,float *s,float *j)
{int i=0;
for(i=0;i<10;i++)
*(j+i)=*(p+i)+*(s+i);
return(i);
}
在TURBO C 环境下 编译后 按ALT+F5 显示scanf:floating point formats not linked
Abnormal program termination
求助求助~~~~~
首先感谢大家的帮助!
对于一楼,我试过在前面加浮点运算,但还是同样显示scanf:floating point formats not linked
Abnormal program termination
但我换成int 后,的确可以运行了。 但是用浮点型如何解决呢???
原题是 已知一个班有10名同学英语考试成绩为{88.5,76,
83.5, 92,96.5,80,62,85.5,74,87.5},平时成绩为
{4.0,3.5,4.5,2.0,3.0,3.5,4.0,2.5,3.5,4.0},主函
数中用C的指针分配函数:malloc()分配两块连续的
存储单元存放以上的考试成绩和平时成绩,用一个函
数计算该班同学的考试平均成绩和各同学的最终成绩
(考试成绩+平均成绩),在主函数中将以上计算结果
打印出来。 展开
6个回答
展开全部
按照楼主的意思重新写了一段代码,并且在我的环境下编译通过并且可以执行。
我把这些原始数据都放到数组里,在创建了连续空间后自动load进去了。
如果楼主需要手工一个一个输入的话,请在for循环里采用注释掉的那段代码。
如果还有问题,敬请追问。
#include "stdio.h"
#include "stdlib.h"
#include "malloc.h"
double get_total_and_average(float *sc_t, float *sc_c, float *sc_all)
{
int i;
float total = 0.0;
for(i=0; i<10; i++)
{
sc_all[i] = sc_t[i] + sc_c[i];
total += sc_all[i];
}
return total / 10.0;
}
void main()
{
float *score_test, *score_common, *score_total;
double average;
int i;
int len = sizeof(float) * 10;
float data_load[2][10]
= {{88.5,76,83.5, 92,96.5,80,62,85.5,74,87.5},
{4.0,3.5,4.5,2.0,3.0,3.5,4.0,2.5,3.5,4.0}};
score_test = (float *)malloc(len);
if(score_test == NULL)
{
printf("memory alloc error.\n");
return;
}
score_common = (float *)malloc(len);
if(score_common == NULL)
{
free(score_test);
printf("memory alloc error.\n");
return;
}
score_total = (float *)malloc(len);
if(score_total == NULL)
{
free(score_test);
free(score_common);
printf("memory alloc error.\n");
return;
}
for(i=0; i<10; i++)
{
/*
* if you want to input the scores from output one by one, please use the codes in this comments
*
printf("please input test-score for student %d : ", i+1);
scanf("%f", score_test + i);
printf("please input common-score for student %d : ", i+1);
scanf("%f", score_common + i);
*/
/* load the data from the arrays automatically */
score_test[i] = data_load[0][i];
score_common[i] = data_load[1][i];
}
average = get_total_and_average(score_test, score_common, score_total);
printf("Average score is %f\n", average);
for(i=0; i<10; i++)
{
printf("Total score of student %d is %f\n", i+1, *(score_total+i));
}
free(score_test);
free(score_common);
free(score_total);
}
我把这些原始数据都放到数组里,在创建了连续空间后自动load进去了。
如果楼主需要手工一个一个输入的话,请在for循环里采用注释掉的那段代码。
如果还有问题,敬请追问。
#include "stdio.h"
#include "stdlib.h"
#include "malloc.h"
double get_total_and_average(float *sc_t, float *sc_c, float *sc_all)
{
int i;
float total = 0.0;
for(i=0; i<10; i++)
{
sc_all[i] = sc_t[i] + sc_c[i];
total += sc_all[i];
}
return total / 10.0;
}
void main()
{
float *score_test, *score_common, *score_total;
double average;
int i;
int len = sizeof(float) * 10;
float data_load[2][10]
= {{88.5,76,83.5, 92,96.5,80,62,85.5,74,87.5},
{4.0,3.5,4.5,2.0,3.0,3.5,4.0,2.5,3.5,4.0}};
score_test = (float *)malloc(len);
if(score_test == NULL)
{
printf("memory alloc error.\n");
return;
}
score_common = (float *)malloc(len);
if(score_common == NULL)
{
free(score_test);
printf("memory alloc error.\n");
return;
}
score_total = (float *)malloc(len);
if(score_total == NULL)
{
free(score_test);
free(score_common);
printf("memory alloc error.\n");
return;
}
for(i=0; i<10; i++)
{
/*
* if you want to input the scores from output one by one, please use the codes in this comments
*
printf("please input test-score for student %d : ", i+1);
scanf("%f", score_test + i);
printf("please input common-score for student %d : ", i+1);
scanf("%f", score_common + i);
*/
/* load the data from the arrays automatically */
score_test[i] = data_load[0][i];
score_common[i] = data_load[1][i];
}
average = get_total_and_average(score_test, score_common, score_total);
printf("Average score is %f\n", average);
for(i=0; i<10; i++)
{
printf("Total score of student %d is %f\n", i+1, *(score_total+i));
}
free(score_test);
free(score_common);
free(score_total);
}
追问
能告诉我 我编写的程序 为啥会出现错误呢 就是显示scanf:floating point formats not linked
Abnormal program termination
追答
答楼主,
我在昨天回答的时候您可能没注意看我一开始的分析
*p=NULL,*s=NULL是不对的。
因为p和s你已经定义成float *就是float型的指针,*p和*s就是这个指针指向的float值。
而你定义了p和s之后并没有赋初始值,就直接使用,并且赋值NULL也就是0。
我觉得应该是p=NULL和s=NULL,而不应该是*p和*s。
展开全部
float *j,*p,*s,*k,*b;
j=aver,*p=NULL,*s=NULL;
很明显对指针变量你p,s你没有赋值,即不知道指向哪儿,就使*p和*s=NULL,是不正确的
应该改成p=NULL;s=NULL;
你的函数声明是void pinjun(float *p,float *s,float *j);而定义时是:
pinjun(float *p,float *s,float *j)
{int i=0;
for(i=0;i<10;i++)
*(j+i)=*(p+i)+*(s+i);
return(i);
}
是不正确的,1.定义时没有函数类型,即返回值类型,但是你声明的是void型,是没有返回值的,所以改成,void pinjun(float *p,float *s,float *j),并去掉return i
你的程序有些混乱
建议好好修改下
j=aver,*p=NULL,*s=NULL;
很明显对指针变量你p,s你没有赋值,即不知道指向哪儿,就使*p和*s=NULL,是不正确的
应该改成p=NULL;s=NULL;
你的函数声明是void pinjun(float *p,float *s,float *j);而定义时是:
pinjun(float *p,float *s,float *j)
{int i=0;
for(i=0;i<10;i++)
*(j+i)=*(p+i)+*(s+i);
return(i);
}
是不正确的,1.定义时没有函数类型,即返回值类型,但是你声明的是void型,是没有返回值的,所以改成,void pinjun(float *p,float *s,float *j),并去掉return i
你的程序有些混乱
建议好好修改下
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
有几个问题。
第一:j=aver,*p=NULL,*s=NULL;应该改为j=aver,p=NULL,s=NULL;
第二:pinjun()这个函数前面少了void,因为系统在默认情况下是int类型。所以return(i);也要去掉。
第三:printf("the aver is %f",aver);数组不能以这种形式输出,应该像你下面的输出方式一样用循环的方式实现。
还有,程序并没有实现平均值的计算。
第一:j=aver,*p=NULL,*s=NULL;应该改为j=aver,p=NULL,s=NULL;
第二:pinjun()这个函数前面少了void,因为系统在默认情况下是int类型。所以return(i);也要去掉。
第三:printf("the aver is %f",aver);数组不能以这种形式输出,应该像你下面的输出方式一样用循环的方式实现。
还有,程序并没有实现平均值的计算。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
TC的浮点数问题。
就是浮点输入的for
不能直接就开始for
scanf("%f")
修改方案:
在程序的前面加一些浮点运算就可以
比如
main()
{
float TempFloat=1.0+1.0;
你的代码
}
我这里没有问题。
代码里面还有一些问题,你也找找吧。
你的编译器版本是多少?
就是浮点输入的for
不能直接就开始for
scanf("%f")
修改方案:
在程序的前面加一些浮点运算就可以
比如
main()
{
float TempFloat=1.0+1.0;
你的代码
}
我这里没有问题。
代码里面还有一些问题,你也找找吧。
你的编译器版本是多少?
追问
TURBOC 3.0
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
2011-03-28
展开全部
# include <stdio.h>
# include <stdlib.h>
void main ()
{
int m;
float aver,sum[10];
float *j,*p,*s,*k,*b;
void pinjun(float* p,float* s,float* j);
aver=0;
j=sum,p=NULL,s=NULL;
p=(float *)malloc(sizeof(float)*10);
s=(float *)malloc(sizeof(float)*10);
k=p,b=s;
for(m=0;m<10;m++)
scanf("%f",p+m);
for(m=0;m<10;m++)
scanf("%f",s+m);
pinjun(k,b,j);
for(m=0;m<10;m++)
aver=aver+sum[m];
aver=aver/10;
printf("the aver is %.2f:\n",aver);
for(m=0;m<10;m++)
printf("%.2f ",sum[m]);
}
void pinjun(float* p,float* s,float* j)
{int i=0;
for(i=0;i<10;i++)
*(j+i)=*(p+i)+*(s+i);
}
# include <stdlib.h>
void main ()
{
int m;
float aver,sum[10];
float *j,*p,*s,*k,*b;
void pinjun(float* p,float* s,float* j);
aver=0;
j=sum,p=NULL,s=NULL;
p=(float *)malloc(sizeof(float)*10);
s=(float *)malloc(sizeof(float)*10);
k=p,b=s;
for(m=0;m<10;m++)
scanf("%f",p+m);
for(m=0;m<10;m++)
scanf("%f",s+m);
pinjun(k,b,j);
for(m=0;m<10;m++)
aver=aver+sum[m];
aver=aver/10;
printf("the aver is %.2f:\n",aver);
for(m=0;m<10;m++)
printf("%.2f ",sum[m]);
}
void pinjun(float* p,float* s,float* j)
{int i=0;
for(i=0;i<10;i++)
*(j+i)=*(p+i)+*(s+i);
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询