C语言关于指针的一道题。

题目:三个学生,各学四门课,计算总平均分和序号第N的学生的成绩。#include<stdio.h>voidmain(){voidaverage(float*p,intn)... 题目:三个学生,各学四门课,计算总平均分和序号第N的学生的成绩。

#include<stdio.h>
void main()
{ void average(float *p,int n);
void search(float (*p)[4],int n);
float score[3][4]={{65,60,70,67},{80,87,90,81},{90,99,100,98}};
average(*score,12);
search(score,2);
}
void average(float *p,int n)
{
float *p_end;
int sum=0; float aver;
p_end=p+n-1;
for( ;p<=p_end;p++)
sum=sum+(*p);
aver=sum/n;
printf("the average is %5.2f\n",aver);
}

void search(float (*p)[4],int n)
{
int i;
printf("the score of no.%d are:\n",n);
for(i=0;i<4;i++)
printf("%5.2f",*((*p+n)+i));
}

我的运行结果是:

不知道错哪了。求助!!!
展开
 我来答
百度网友9e42a49f1
2013-06-08 · 超过11用户采纳过TA的回答
知道答主
回答量:49
采纳率:0%
帮助的人:28.7万
展开全部
#include<stdio.h>

void search(float (*p)[4], int n) {
if (n < 3) {
int i;
printf("the score of no.%d are:\n", n);
for (i = 0; i < 4; i++) {
printf("%5.2f\t", *(*(p + n) + i));
}
}
}

void average(float *p, int n) {
float *p_end;
float sum = 0;
p_end = p + n - 1;
for (; p <= p_end; p++)
sum = sum + (*p);

float aver = sum / (float) n;// 小数是这样来的,这里有个隐式转换的过程
printf("the sum is %5.2f\n", sum);
printf("the average is %5.2f\n", aver);
}

void main() {

float score[3][4] = {
{65, 60, 70, 67},
{80, 87, 90, 81},
{90, 99, 100, 98}
};

average(*score, 12);

search(score, 1);
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
肆笑红尘
2013-06-08
知道答主
回答量:11
采纳率:0%
帮助的人:10.1万
展开全部
呵呵,这样 你把以下我给你改的程序运行一下。。。。。。

#include<stdio.h>

void main()

{ void average(float *p,int n);

void search(float (*p)[4],int n);

float score[3][4]={{65,60,70,67},{80,87,90,81},{90,99,100,98}};

average(*score,12);

search(score,2);

}

void average(float *p,int n)

{

float *p_end;

float sum=0; float aver;

p_end=p+n-1;

for( ;p<=p_end;p++)

sum=sum+(*p);

aver=sum/n;

printf("the average is %5.2f\n",aver);

}

void search(float (*p)[4],int n)

{

int i;

printf("the score of no.%d are:\n",n);

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

printf("%5.2f",*((*(p+n-1))+i));

}
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
xulinbo1234
2013-06-08 · 超过16用户采纳过TA的回答
知道答主
回答量:72
采纳率:0%
帮助的人:31.4万
展开全部
sum=sum+(*p); 二维数组的指针不是怎么用的吧···直接加个一就相当于指向了第二行的首地址了···
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
nkssnk
2013-06-08 · 超过20用户采纳过TA的回答
知道答主
回答量:154
采纳率:100%
帮助的人:53.4万
展开全部
printf("%5.2f",*((*(p+n-1))+i));
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
幸迎楣0ix
2013-06-08 · 超过14用户采纳过TA的回答
知道答主
回答量:25
采纳率:0%
帮助的人:32.9万
展开全部
void main()
{ void average(float *p,int n);
void search(float (*p)[4],int n);
float score[3][4]={{65,60,70,67},{80,87,90,81},{90,99,100,98}};
average(*score,12);
search(score,2);
}
void average(float *p,int n)
{
float *p_end;
int sum=0; float aver;
p_end=p+n-1;
for( ;p<=p_end;p++)
sum=sum+(*p);
aver=(float)sum/n; //这个位置要做强转,不然sum和n都为int,最后的结果也为int类型,会得不到想要的值
printf("the average is %5.2f\n",aver);
}

void search(float (*p)[4],int n)
{
int i;
printf("the score of no.%d are:\n",n);
for(i=0;i<4;i++)
printf("%5.2f ",*((*p+(n-1)*4)+i)); //这个位置指针的用法需要根据数组的长度做偏移
}
追问
第一个错误我懂了。
第二个地方 N=2,就是要输出第三个人的成绩,就是要输出score[2][0]~score[2][3]的值呗。

printf("%5.2f ",*((*p+(n-1)*4)+i))这样修改没看懂。T.T;
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式