C 语言:有一个班4个学生,5门课程。

题目:有一个班4个学生,5门课程。1、求第一门课程的平均分;2、找出有两门课程以上不及格的学生,输出他们的学号和全部课程成绩及平均成绩;3、找出平均成绩在90分以上或全部课程成绩在85分以上的学生。分别编3个函数实现以上3个要求

在这之前,一直对
int (*pointer)[ num ]
这种用法产生了误解,导致在之前的练习中,多次的不正确使用,程序无法正常的运行。
通过这道题目 应该算是有了个比较清楚的认识了。

当有这么有一个数组时:

int (*p)[4];
int a[3][4] = {{1,3,5,7},{9,11,13,15},{17,19,21,23}},
 p = a;

int (*p)[4]; 表示定义p为一个指针变量,它指向包含4个整型元素的一维数组

p的类型不是int ,而是 int()[4]型 p被定义为指向一维整型数组的指针变量,一维数组有4个元素,因此P的基类型是一维数组 其长度是16字节。

#include<stdio.h>{
void average(int (*p)[5],int n );  //形参为一维整型数组的指针
void fail(int * p);
void excellent(int *p);

int grades[4][5] = {{68,39,98,45,66},{87,89,93,94,80},{75,65,88,74,59},{99,88,77,87,90}};
//int (*pt)[4] = grades;
average(grades, 4);   //  所以这里需要把grades的首地址当实参传给函数
fail(grades,4);
excellent(grades,4);
return 0;
}

void average(int (*p)[5] ,int n){
    int i,sum = 0,aver = 0;
    for(i=0;i<4;i++){
        sum += *(*(p+i)+0);
    }
    aver = sum/4;
    printf("第一门课程的平均分 :%d \n",aver );
    printf("\n");
}

void fail(int (*p)[5],int n){
    int i,j,count=0,num=0,k;
    for(i=0;i<n;i++){
        for(j=0;j<5;j++){
            if(*(*(p+i)+j) < 60){
                count++;
            }

        }
        if(count >= 2){
            int sum=0,aver=0;
            printf("学号 :%d\n",i+1 );
                printf("全部课程的成绩 :");
            for(k=0;k<5;k++){
                printf("%3d ",*(*(p+i)+k) );
                sum += *(*(p+i)+k);
            }
            printf("\n");
            aver = sum/ 5;
            printf("平均分 :%d\n",aver );
            printf("\n");
        }
        count = 0;
    }
}

void excellent(int (*p)[5],int n){
    int i,j,aver=0,sum=0;
    for(i=0;i<4;i++){
        for(j=0;j<5;j++){
            sum += *(*(p+i)+j);
        }
        aver = sum / 5;
        if(aver >90){
            printf("%d\n",i+1 );
            break;
        }
        if(*(*(p+i)+0)>85&&*(*(p+i)+1)>85&&*(*(p+i)+2)>85&&*(*(p+i)+3)>85&&*(*(p+i)+4)>85){
            printf("%d\n",i+1 );
            break;
        }
    }
}
  • 28
    点赞
  • 64
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值