c语言程序设计(关于动态内存分配)问题。高手进

这个程序的目的是输入n名学生的成绩,找到最高最低成绩,并计算平均成绩#include<stdio.h>#include<malloc.h>#include<stdlib.... 这个程序的目的是输入n名学生的成绩,找到最高最低成绩,并计算平均成绩

#include<stdio.h>
#include<malloc.h>
#include<stdlib.h>

void main()
{
int n,i,k,m,sum=0,*p,hign_score,low_score; //定义常量
float ave_score;
printf("please input the number of the students:");
scanf("%d",&n);
p=(int*)malloc(n*sizeof(int)); //动态内存分配
if(p==NULL)
{
printf("Insufficient memory avaiable.");
exit(0);
}
printf("please input the scores of the students:");
for(i=0;i<n;i++)
scanf("%d",p+i); //输入学生的分数
for(k=0;k<n;k++) //找最低的成绩
{
if(*p>*(p+k))
{
m=*p;
*p=*(p+k);
*(p+k)=m;
}
}
for(k=0;k<n;k++) //找最高的成绩
{
if(*(p+n)<*(p+k))
{
m=*(p+n);
*(p+n)=*(p+k);
*(p+k)=m;
}
}
for(i=0;i<n;i++)
sum+=*(p+i);
ave_score=sum*1.0/n;
hign_score=*(p+n);
low_score=*p;
free(p);
printf("The average score of the students is %f",ave_score); //输出
printf("The high score of the students is %d",hign_score);
printf("The low score of the students is %d",low_score);
}
展开
 我来答
Geomaticsyr
2011-08-24 · TA获得超过341个赞
知道小有建树答主
回答量:131
采纳率:0%
帮助的人:160万
展开全部

#include<stdio.h>

#include<malloc.h>

#include<stdlib.h>

void main()

{

int n,i,k,m,sum=0,*p,hign_score,low_score;     //定义常量

float ave_score;

printf("please input the number of the students:");

scanf("%d",&n);

p=(int*)malloc(n*sizeof(int));       //动态内存分配

if(p==NULL)

{

printf("Insufficient memory avaiable.");

exit(0);

}

printf("please input the scores of the students:\n");

for(i=0;i<n;i++)

scanf("%d",p+i);   //输入学生的分数

for(k=0;k<n;k++)      //找最低的成绩

{

if(*p>*(p+k)) 

{

m=*p;

*p=*(p+k);

*(p+k)=m;

}

}

for(k=0;k<n;k++)        //找最高的成绩,

{

if(*(p+n-1)<*(p+k))        //这个地方你出错了,有n个学生,它的地址应该是

{                                    //p+n-1,你用的是p+n,指向任何数,出错。

                                                 m=*(p+n-1);

*(p+n-1)=*(p+k);  //同理,都是p+n-1

*(p+k)=m;

}

}

for(i=0;i<n;i++)

sum+=*(p+i);

ave_score=sum*1.0/n;

hign_score=*(p+n-1);    //也应该是p+n-1

low_score=*p;

printf("The average score of the students is %f\n",ave_score);      //输出

printf("The high score of the students is %d\n",hign_score);

printf("The low score of the students is %d\n",low_score);

free(p);

}

PS:指针的题目容易出错,用的什么要小心。如果没有语法错误,出错的话,一般就是指针的地址有问题。

程序是对的,有运行结果。结贴吧

泡泡爱亦菲
2011-08-24 · 超过18用户采纳过TA的回答
知道答主
回答量:46
采纳率:0%
帮助的人:56.2万
展开全部
*(p+n)=*(p+k);
你的n都没初始化怎么能使用来作为地址的索引呢
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
hujing9988
2011-08-23 · TA获得超过236个赞
知道答主
回答量:261
采纳率:0%
帮助的人:202万
展开全部
我照贴过来的 完全可以运行啊。。。
也能显示结果 就是最高分不对
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
手机用户24874
2011-08-25 · TA获得超过708个赞
知道小有建树答主
回答量:670
采纳率:0%
帮助的人:395万
展开全部
是随机的,他只是在当前空闲内存中最前的一个内存的空间
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
皇甫孤蓝
2011-08-24 · 超过10用户采纳过TA的回答
知道答主
回答量:100
采纳率:100%
帮助的人:88万
展开全部
是随机的,他只是在当前空闲内存中最前的一个内存的空间
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
woleiwei
2011-08-23 · 超过28用户采纳过TA的回答
知道答主
回答量:150
采纳率:0%
帮助的人:88万
展开全部
你有什么问题啊?
追问
没有error,但无法运行
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(4)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式