| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2430 人关注过本帖
标题:指针,有一个班4个学生,5门课程
只看楼主 加入收藏
jakenmj00123
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2017-4-5
结帖率:0
收藏
 问题点数:0 回复次数:4 
指针,有一个班4个学生,5门课程
有一个班4个学生,5门课程。①求第1门课程的平均分;②找出有两门以上课程不及格的学生,输出他们的学号和全部课程成绩及平均成绩;③找出平均成绩在90分以上或全部课程成绩在85分以上的学生。
用float *std_average(float *p),我的值传不出去,这是为什么?

图片附件: 游客没有浏览图片的权限,请 登录注册


#include<stdio.h>
#include<math.h>

int main()
{
    void sub_average(float *p);
    //float *std_average(float *p);
    void std_fail(float (*p)[5]);
    void std_good(float *p);
   
    float a[4][5]={{80,98,98,92,96},{57,76,56,83,82},{72,77,76,87,83},{92,98,97,87,88}};
   
   
    sub_average(a);
    printf("\n");
    //std_average(a);
    //printf("\n");
    std_fail(a);
    printf("\n");
    std_good(a);
   
    return 0;   
}

/*********子函数*********/
float *std_average(float *p)
{
    int i,j;
    float sum,ave[5],*pt;
    for(i=0;i<4;i++)
    {
        sum=0;
        for(j=0;j<5;j++)
        {
            sum=sum+*(p+5*i+j);
        }
        ave[i]=sum/5;
    }
    pt=ave;
    return pt;
}

void sub_average(float *p)
{
    int i,j;
    float sum,ave[5];
    for(j=0;j<5;j++)
    {
        sum=0;
        for(i=0;i<4;i++)
        {
            sum=sum+*(p+5*i+j);
        }
        ave[j]=sum/4;
    }
    for(i=0;i<5;i++)
    {   
        printf("No.%d:",i+1);
        printf("%4.1f\n",ave[i]);
    }
}

void std_fail(float (*p)[5])
{
    int i,j,n=0;
    float *ave;
   
    ave=std_average(p);
   
    for(i=0;i<4;i++)
    {
        for(j=0;j<5;j++)
        {
            if(*(*(p+i)+j)<60)
            {
                n++;
            }
        }

        if(n>=2)
        {
            printf("No.%d student failed,his score is:\n",i+1);
            
            ///sum=0.0;
            for(j=0;j<5;j++)
            {
                printf("%4.1f  ",*(*(p+i)+j));
                //sum=sum+*(*(p+i)+j);
            }
            printf("\n");
            //ave=sum/5;
            printf("No.%d average=%4.1f\n",i+1,*(ave+i));//值传不出去
            n=0;
        }
    }   
}


void std_good(float *p)
{
    int i,j,num;
    float *ave;
    ave=std_average(p);
    for(i=0;i<4;i++)
    {
        num=0;
        for(j=0;j<5;j++)
        {
            if(*(p+5*i+j)>=85)
            {
                num++;
            }
        }
        if(num==5 || *(ave+i)>=90)
        {
            printf("N0.%d student is good,his average score is: %4.1f\n",i+1,*(ave+i));//值传不出去
        }
    }
}
搜索更多相关主题的帖子: include 课程 
2017-04-19 16:21
wp231957
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:神界
等 级:贵宾
威 望:423
帖 子:13688
专家分:53332
注 册:2012-10-18
收藏
得分:0 
float *std_average(float *p)
{
    int i,j;
    float sum,ave[5],*pt;
    for(i=0;i<4;i++)
    {
        sum=0;
        for(j=0;j<5;j++)
        {
            sum=sum+*(p+5*i+j);
        }
        ave[i]=sum/5;
    }
    pt=ave;
    return pt;
}

我不知道你这个函数是计算神马的   但是你的return pt 却是不对的
子函数在返回指针类型时  是不可能把在子函数中申请到的内存传回主函数的
解决这个问题的办法通常是再函数参数中把主函数的地址传进来

比如
float *std_average(float *p,float* t)
return t

DO IT YOURSELF !
2017-04-19 20:06
磊仔快乐
Rank: 2
等 级:论坛游民
帖 子:15
专家分:34
注 册:2017-3-27
收藏
得分:0 
#include<stdio.h>
#include<math.h>
void sub_average(void);
void std_average(void);
void std_fail(void);
void std_good(void);
float a[4][5]={{80,98,98,92,96},{57,76,56,83,82},{72,77,76,87,83},{90,98,97,87,88}};
int main()
{
    std_average();
    sub_average();
    std_fail();
    std_good();
     
    return 0;   
}
/*********子函数*********/
 void std_average(void)//求第1门课程的平均分
 {
     int j;
     float ave=0.0;
     for(j=0;j<4;j++)
     ave+=a[j][0]/4;
     printf("第1门课程的平均分:\n");
     printf("%f\n\n\n",ave);
 }
void sub_average(void)//求有两门以上课程不及格的学生(含两门)
{
     int i,j,k;
     float ave=0.0;
     for(i=0;i<4;i++)
     {
        k=0;
        for(j=0;j<5;j++)
        {
            if(a[i][j]<60)
                k++;
            if(k>=2)
            {
                printf("有两门以上课程不及格的学生(含两门)是第 %d 个学生.\n",i+1);
                printf("各科成绩分别为:\n");
                for(j=0;j<5;j++)
                {
                    printf("%f\n",a[i][j]);
                    ave+=a[i][j]/5;
                }
                printf("平均成绩为:\n");
                printf("%f\n\n\n",ave);
            }
        }
    }
     if(ave==0.0)
         printf("没有两门以上课程不及格的学生(含两门)得学生.\n\n\n");
}
void std_fail(void)//求平均成绩在90分以上的学生
{
    int i,j,k=0;
    float ave;
    for(i=0;i<4;i++)
    {
        ave=0.0;
        for(j=0;j<5;j++)
        {
            ave+=a[i][j]/5;
            if(ave>=90)
            {
                printf("平均成绩在90分以上是第  %d  学生.\n",i+1);
                k++;

            }
        }
    }
    if(k==0)
        printf("没有平均成绩在90分以上的学生.\n\n\n");
}
void std_good(void)//求全部课程成绩在85分以上的学生
{
     int i,j,k,x=0;
     float ave=0.0;
     for(i=0;i<4;i++)
     {
         k=0;
         for(j=0;j<5;j++)
         {
             if(a[i][j]>=85)
             {
                 k++;
             }
         }
         if(k==5)
         {
             printf("\n\n全部课程成绩在85分以上的是第  %d  名同学.\n",i+1);
             x++;
         }
     }
     if(x==0)
     
        printf("\n\n没有全部课程成绩在85分以上的名同学.\n");
}
2017-04-20 21:21
磊仔快乐
Rank: 2
等 级:论坛游民
帖 子:15
专家分:34
注 册:2017-3-27
收藏
得分:0 
你写的函数看着太费劲了,可以看看我写的这个。
#include<stdio.h>
#include<math.h>
void sub_average(void);
void std_average(void);
void std_fail(void);
void std_good(void);
float a[4][5]={{80,98,98,92,96},{57,76,56,83,82},{72,77,76,87,83},{90,98,97,87,88}};
int main()
{
    std_average();
    sub_average();
    std_fail();
    std_good();
     
    return 0;   
}
/*********子函数*********/
 void std_average(void)//求第1门课程的平均分
 {
     int j;
     float ave=0.0;
     for(j=0;j<4;j++)
     ave+=a[j][0]/4;
     printf("第1门课程的平均分:\n");
     printf("%f\n\n\n",ave);
 }
void sub_average(void)//求有两门以上课程不及格的学生(含两门)
{
     int i,j,k;
     float ave=0.0;
     for(i=0;i<4;i++)
     {
        k=0;
        for(j=0;j<5;j++)
        {
            if(a[i][j]<60)
                k++;
            if(k>=2)
            {
                printf("有两门以上课程不及格的学生(含两门)是第 %d 个学生.\n",i+1);
                printf("各科成绩分别为:\n");
                for(j=0;j<5;j++)
                {
                    printf("%f\n",a[i][j]);
                    ave+=a[i][j]/5;
                }
                printf("平均成绩为:\n");
                printf("%f\n\n\n",ave);
            }
        }
    }
     if(ave==0.0)
         printf("没有两门以上课程不及格的学生(含两门)得学生.\n\n\n");
}
void std_fail(void)//求平均成绩在90分以上的学生
{
    int i,j,k=0;
    float ave;
    for(i=0;i<4;i++)
    {
        ave=0.0;
        for(j=0;j<5;j++)
        {
            ave+=a[i][j]/5;
            if(ave>=90)
            {
                printf("平均成绩在90分以上是第  %d  学生.\n",i+1);
                k++;

            }
        }
    }
    if(k==0)
        printf("没有平均成绩在90分以上的学生.\n\n\n");
}
void std_good(void)//求全部课程成绩在85分以上的学生
{
     int i,j,k,x=0;
     float ave=0.0;
     for(i=0;i<4;i++)
     {
         k=0;
         for(j=0;j<5;j++)
         {
             if(a[i][j]>=85)
             {
                 k++;
             }
         }
         if(k==5)
         {
             printf("\n\n全部课程成绩在85分以上的是第  %d  名同学.\n",i+1);
             x++;
         }
     }
     if(x==0)
     
        printf("\n\n没有全部课程成绩在85分以上的名同学.\n");
}
2017-04-20 21:25
磊仔快乐
Rank: 2
等 级:论坛游民
帖 子:15
专家分:34
注 册:2017-3-27
收藏
得分:0 
你写的函数看着太费劲了,可以看看我写的这个。
#include<stdio.h>
#include<math.h>
void sub_average(void);
void std_average(void);
void std_fail(void);
void std_good(void);
float a[4][5]={{80,98,98,92,96},{57,76,56,83,82},{72,77,76,87,83},{90,98,97,87,88}};
int main()
{
    std_average();
    sub_average();
    std_fail();
    std_good();
     
    return 0;   
}
/*********子函数*********/
 void std_average(void)//求第1门课程的平均分
 {
     int j;
     float ave=0.0;
     for(j=0;j<4;j++)
     ave+=a[j][0]/4;
     printf("第1门课程的平均分:\n");
     printf("%f\n\n\n",ave);
 }
void sub_average(void)//求有两门以上课程不及格的学生(含两门)
{
     int i,j,k;
     float ave=0.0;
     for(i=0;i<4;i++)
     {
        k=0;
        for(j=0;j<5;j++)
        {
            if(a[i][j]<60)
                k++;
            if(k>=2)
            {
                printf("有两门以上课程不及格的学生(含两门)是第 %d 个学生.\n",i+1);
                printf("各科成绩分别为:\n");
                for(j=0;j<5;j++)
                {
                    printf("%f\n",a[i][j]);
                    ave+=a[i][j]/5;
                }
                printf("平均成绩为:\n");
                printf("%f\n\n\n",ave);
            }
        }
    }
     if(ave==0.0)
         printf("没有两门以上课程不及格的学生(含两门)得学生.\n\n\n");
}
void std_fail(void)//求平均成绩在90分以上的学生
{
    int i,j,k=0;
    float ave;
    for(i=0;i<4;i++)
    {
        ave=0.0;
        for(j=0;j<5;j++)
        {
            ave+=a[i][j]/5;
            if(ave>=90)
            {
                printf("平均成绩在90分以上是第  %d  学生.\n",i+1);
                k++;

            }
        }
    }
    if(k==0)
        printf("没有平均成绩在90分以上的学生.\n\n\n");
}
void std_good(void)//求全部课程成绩在85分以上的学生
{
     int i,j,k,x=0;
     float ave=0.0;
     for(i=0;i<4;i++)
     {
         k=0;
         for(j=0;j<5;j++)
         {
             if(a[i][j]>=85)
             {
                 k++;
             }
         }
         if(k==5)
         {
             printf("\n\n全部课程成绩在85分以上的是第  %d  名同学.\n",i+1);
             x++;
         }
     }
     if(x==0)
     
        printf("\n\n没有全部课程成绩在85分以上的名同学.\n");
}
2017-04-20 21:25
快速回复:指针,有一个班4个学生,5门课程
数据加载中...
 
   



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

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