| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 565 人关注过本帖
标题:小弟又要麻烦各位了!!!
只看楼主 加入收藏
遮天云
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:农村一小伙
等 级:贵宾
威 望:12
帖 子:1132
专家分:2671
注 册:2010-6-1
结帖率:100%
收藏
 问题点数:0 回复次数:6 
小弟又要麻烦各位了!!!
题目要求:有一个班四个上学生,五门课,第一,求第一门课的平均分;第二、找出有两门以上的课程不及格的学生,并输出期学号和全部的课程成绩和平均成绩;第三、找出平均成绩在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)
敬请各位帮一下忙








搜索更多相关主题的帖子: 麻烦 
2010-06-09 19:04
BlueGuy
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:29
帖 子:4476
专家分:4055
注 册:2009-4-18
收藏
得分:0 
void main()
{
    void average1(float *p,int n);/*函数声明*/
    void search(float (*p)[4],int n);/*函数声明*/
    void average2(float (*p)[4],int n);/*函数声明*/
}
典型的谭式风格, 要坚决抵制 ,/

我就是真命天子,顺我者生,逆我者死!
2010-06-09 19:06
遮天云
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:农村一小伙
等 级:贵宾
威 望:12
帖 子:1132
专家分:2671
注 册:2010-6-1
收藏
得分:0 
回复 2楼 BlueGuy
问什么这么说啊?“典型的谭式分隔,坚决抵制”
2010-06-09 19:09
方廷
Rank: 3Rank: 3
等 级:论坛游侠
威 望:1
帖 子:47
专家分:176
注 册:2010-6-9
收藏
得分:0 
回复 楼主 遮天云
我帮你搞好了,由于时间关系,我不作解释。有空加我QQ443738319。(我也是新手)
修改:
#include<stdio.h>
void main()
{
    void average1(float *p,int n);/*函数声明*/
    void search(float (*p)[5],int n);/*函数声明*/
    void average2(float (*p)[5],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 average1(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)[5],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");
            }
        count=0; /*改*/
    }
}
    void average2(float (*p)[5],int n)
    {
        float sum,aver[4];
        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+=*(*(p+i)+j);/*每个学生的总分*/
                if(*(*(p+i)+j)>85)
                    flag++;/*记录每个学生超过八十五的课程数*/
            }
            aver[t]=sum/5;/*每个学生的平均分*/
            if(aver[t]>90||flag==5)/*找到并输出满足条件的学生成绩*/
            {   
                for(h=0;h<=n;h++)
                    printf("%5.2f ",*(*(p+i)+h));
                printf("\n");
            }
            t++;
        }
    }
2010-06-09 19:56
遮天云
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:农村一小伙
等 级:贵宾
威 望:12
帖 子:1132
专家分:2671
注 册:2010-6-1
收藏
得分:0 
回复 4楼 方廷
谢谢您不过您有空能给解释一下为什么要把(*)[4]的4改成5啊
2010-06-09 20:54
方廷
Rank: 3Rank: 3
等 级:论坛游侠
威 望:1
帖 子:47
专家分:176
注 册:2010-6-9
收藏
得分:0 
回复 4楼 方廷
(*p)[5]是指向一维数组的指针,简单来说就是指向二维数组中的列,不是行。
2010-06-09 23:00
遮天云
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:农村一小伙
等 级:贵宾
威 望:12
帖 子:1132
专家分:2671
注 册:2010-6-1
收藏
得分:0 
不会吧!指向列???我在看看书,我记得书上是说指向行哈!谢谢
2010-06-10 10:10
快速回复:小弟又要麻烦各位了!!!
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.015778 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved