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));
}
我的运行结果是:
不知道错哪了。求助!!! 展开
#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));
}
我的运行结果是:
不知道错哪了。求助!!! 展开
5个回答
展开全部
#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);
}
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);
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
呵呵,这样 你把以下我给你改的程序运行一下。。。。。。
#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));
}
#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));
}
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
sum=sum+(*p); 二维数组的指针不是怎么用的吧···直接加个一就相当于指向了第二行的首地址了···
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
printf("%5.2f",*((*(p+n-1))+i));
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
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)); //这个位置指针的用法需要根据数组的长度做偏移
}
{ 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;
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询