小弟又要麻烦各位了!!!
题目要求:有一个班四个上学生,五门课,第一,求第一门课的平均分;第二、找出有两门以上的课程不及格的学生,并输出期学号和全部的课程成绩和平均成绩;第三、找出平均成绩在90份以上或者全部课程成绩在85分以上的学生。分别编三个函数实现以上的三个要求。以下是我编的程序,调试时老报错,我硬是没查出来,麻烦给为给看看#include<stdio.h>
void main()
{
void average1(float *p,int n);/*函数声明*/
void search(float (*p)[4],int n);/*函数声明*/
void average2(float (*p)[4],int n);/*函数声明*/
float score[4][5]={{65,51,70,60,50},{80,87,90,52,75},{86,87,88,89,86},{91,92,93,94,95}};
average1(score[0],4);/*求四个学生第一门课程的平均分*/
search(score,4);/*查找有两门课不及格的学生*/
average2(score,4);/*函数调用求第三问*/
}
void average(float *p,int n)
{
float *q,sum=0,aver;
q=p;
for(;q<p+5;q++)
sum=sum+(*q);
aver=sum/n;
printf("average=%5.2f\n",aver);
}
void search(float (*p)[4],int n)/*函数定义求两们以上不及格的人并输出*/
{
int i,j,flag,count=0;
for(j=0;j<n;j++)
{
flag=0;
for(i=0;i<5;i++)
if(*(*(p+j)+i)<60)
{
flag=1;
count++;
}
if(flag==1&&count>=2)
{
printf("No.%dfails,his scores are:\n",j+1);/*输出学号*/
for(i=0;i<5;i++)
printf("%5.1f",*(*(p+j)+i));
printf("\n");
}
}
}
void average2(float (*p)[4],int n)
{
float sum,aver[4],*q;
q=*p;
int i,j,t=0,flag=0,h;
for(i=0;i<n;i++)
{
sum=0;
flag=0;
for(j=0;j<=n;j++)
{
sum+=*(*(q+i)+j);/*每个学生的总分*/
if(*(*(q+i)+j)>85)
flag++;/*记录每个学生超过八十五的课程数*/
}
aver[t]=sum/5;/*每个学生的平均分*/
t++;
if(aver[t]>90||flag==5)/*找到并输出满足条件的学生成绩*/
{
float *r;
r=q-4;/*使r指向第i行的开头*/
for(h=i;h<=n;i++)
printf("%d",*r++);
}
}
}
以下是报错信息:--------------------Configuration: 学生成绩 - Win32 Debug--------------------
Compiling...
学生成绩.cpp
F:\c\学生成绩.cpp(9) : error C2664: 'search' : cannot convert parameter 1 from 'float [4][5]' to 'float (*)[4]'
Types pointed to are unrelated; conversion requires reinterpret_cast, C-style cast or function-style cast
F:\c\学生成绩.cpp(10) : error C2664: 'average2' : cannot convert parameter 1 from 'float [4][5]' to 'float (*)[4]'
Types pointed to are unrelated; conversion requires reinterpret_cast, C-style cast or function-style cast
F:\c\学生成绩.cpp(54) : error C2100: illegal indirection
F:\c\学生成绩.cpp(55) : error C2100: illegal indirection
执行 cl.exe 时出错.
学生成绩.obj - 1 error(s), 0 warning(s)
敬请各位帮一下忙