C语言 通过指针引用二维数组

有一个班4个学生,5门课程,分别编写3个函数完成以下3个要求,用指向二维数组的指针做函数参数:

  1)求第1门课程的平均分;

  2)找出有两门及以上课程不及格的学生,输出他们的序号和全部课程成绩及平均成绩;

  3)找出平均成绩在90分以上或全部课程成绩在85分及以上的学生。

注:所有成绩输出均采用格式“%5.1f”

运行参考示例:

输入1:

65.5 67 75 82 78.5

71 50.5 63 52 48

92.5 98 82 88 95

85 87 90 86.5 88

输出1:

Average of course 1: 78.5

More than 2 failed courses:

No 2: 71.0 50.5 63.0 52.0 48.0 average: 56.9

Average score >=90 or all courses >=85:

No 3: 92.5 98.0 82.0 88.0 95.0 average: 91.1

No 4: 85.0 87.0 90.0 86.5 88.0 average: 87.3

输入2:

65.5 67 75 82 78.5

71 35.5 63 52 68

92 98 82 88.5 95

95 87 86 86.5 88

输出2:

Average of course 1: 80.9

More than 2 failed courses:

No 2: 71.0 35.5 63.0 52.0 68.0 average: 57.9

Average score >=90 or all courses >=85:

No 3: 92.0 98.0 82.0 88.5 95.0 average: 91.1

No 4: 95.0 87.0 86.0 86.5 88.0 average: 88.5

运行代码如下:

#include<stdio.h>
int main()
{
    void ave(float (*p)[5],int n);
    void findf(float a[4][5],int n);
    void find(float a[4][5],int n);
    int i,j;
    float a[4][5],aver=0;
    for(i=0;i<4;i++)
    {
        for(j=0;j<5;j++)
        {
            scanf("%f",*(a+i)+j);
        }
    }
    ave(a,4);
    findf(a,4);
    find(a,4);
    return 0;
}
 
void ave(float (*p)[5],int n)
{
    float sum=0;
    int i;
    for (i=0;i<n;i++,p++)
    { 
            sum+=(*p)[0];
    }
    
    printf("Average of course 1:%5.1f\n",sum/4.0);
    
}
 
void findf(float a[4][5],int n)
{
    int i,j;
    float sum;
    int count=0;
    for(i=0;i<n;i++)
    {
        count=0;
        sum=0;
        for(j=0;j<5;j++)
        {
            if(*(*(a+i)+j)<60)
            {            
                count++;
            }
        }
        if(count<2)
        
        continue;
        
        printf("More than 2 failed courses:\n");
        printf("No 2:");
        for(j=0;j<5;j++)
        {
            sum+=*(*(a+i)+j);
            printf("%5.1f",*(*(a+i)+j));
        }
        
        printf(" average:%5.1f\n", sum / 5.0);
        
    }
}
 
void find(float a[4][5],int n)
{
    int count=0;
    int i,j;
    float sum=0;
    printf("Average score >=90 or all courses >=85:\n");
    for(i=0;i<n;i++)
    {
        count=0;
        sum=0;
        for(j=0;j<5;j++)
        {
            if(*(*(a+i)+j)>=85)
            count++;
            sum+=*(*(a+i)+j);
        }
        if(count==5||sum/5.0>=90.0)
        {
            printf("No %d:",i+1);
            for(j=0;j<5;j++)
            {
                printf("%5.1f",*(*(a+i)+j));
            }
            printf(" average:%5.1f\n",sum/5.0);
            
        }
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值