有一个班4个学生,5门课程。

①求第1门课程的平均分;
②找出有两门以上课程不及格的学生,输出他们的学号和全部课程成绩及平均成绩;
③找出平均成绩在90分以上或全部课程成绩在85分以上的学生。
分别编3个函数实现以上3个要求。

代码:

#include <stdio.h>
#include <string.h>
#define H 30
#define N 6
int stu;
int main(){
    void average(float score[N][N]);
    void find1(float score[N][N]);
    void find2(float score[N][N]);
    //course数组的行数=score数组列数
    //定义字符二维数组course,每行存一个课程名
    char course[N][H],(*p)[H]=course;
    //定义整型二维数组,每行存一个同学的成绩
    float score[N][N],(*q)[N]=score;
    int i,j;
    //第一行设置为字符串: id
    strcpy(course[0],"NO");
    //输入要统计的课程名
    printf("请输入%d个课程名: ",N-1);
    for(i=1;i<N;i++){
        scanf("%s",p[i]);
    }
    //输入要统计多少个同学的成绩
    printf("请输入要统计的人数: ");
    scanf("%d",&stu);
    //输入学号和成绩
    for(i=0;i<stu;i++){
        for(j=0;j<N;j++){
            if(j==0){
                printf("========================\n");
                printf("请输入第%d个同学的学号:",i+1);
                scanf("%f",q[i]+0);
            }
            else{
                printf("请输入%s的成绩:",p[j]);
                scanf("%f",q[i]+j);
            }
        }
    }
    printf("=============================\n");
    //打印输入的数据
    for(i=0;i<N;i++){
        printf("%s  ",p[i]);
    }
    printf("\n");
    for(i=0;i<stu;i++){
        for(j=0;j<N;j++){
            if(j==0)
            printf("%2.0f ",*(q[i]+j));
            else  printf("%.2f  ",*(q[i]+j));
        }
        printf("\n");
    }
    average(score);
    find1(score);
    find2(score);
    return 0;
}
//求第一门课程的平均成绩
void average(float score[N][N]){
    float num=0;
    float (*p1)[N]=score;
    float aver;
    for(int i=0;i<stu;i++){
        num+=*(*(p1+i)+1);
    }
    aver=num/stu;
    // printf("num=%d\n",num);
    printf("=============================\n");
    printf("第一门课程的平均成绩aver=%.2f\n",aver);
}
//找出两门以上课程成绩不及格的学生
void find1(float score[N][N]){
    float (*p2)[N]=score;
    //定义一维数组num记录每个同学不及格科目数
    int num[N]={
    0}
    ,i,j;
    for(i=0;i<stu;i++){
        for(j=1;j<N;j++){
            if(*(*(p2+i)+j)<60){
                num[i]++;
            }
        }
        //每个同学的不及格科目数
        //  printf("num[%d]=%d\n",i,num[i]);
    }
    printf("=============================\n");
    printf("不及格的学生的学号及成绩如下:\n");
    for(i=0;i<stu;i++){
        if(num[i]>2){
            for(j=0;j<N;j++){
                if(j==0)
                printf("%.0f ",*(*(p2+i)+j));
                else printf("%.2f  ",*(*(p2+i)+j));
            }
        }
    }
    printf("\n");
}
//找出平均成绩在90分以上或者每科都大于85的
void find2(float score[N][N]){
    float (*p3)[N]=score;
    //定义一维数组num1记录每个同学的成绩高于85分以上的科目数
    int num1[N]={
    0}
    ,i,j;
    //定义一维数组num2记录每个同学的平均成绩
    float num2[N]={
    0}
    ;
    for(i=0;i<stu;i++){
        for(j=1;j<N;j++){
            if(*(*(p3+i)+j)>85){
                num1[i]++;
            }
            num2[i]+=*(*(p3+i)+j);
        }
        num2[i]=num2[i]/(N-1);
        //   printf("num1[%d]=%d\n",i,num1[i]);
        //  printf("num2[%d]=%.2f\n",i,num2[i]);
    }
    printf("=============================\n");
    printf("符合要求的学生的学号及成绩如下:\n");
    for(i=0;i<stu;i++){
        if(num1[i]==N-1||num2[i]>90){
            for(j=0;j<N;j++){
                if(j==0)
                printf("%.0f ",*(*(p3+i)+j));
                else printf("%.2f ",*(*(p3+i)+j));
            }
            printf("\n");
        }
    }
}

运行结果:
在这里插入图片描述

  • 1
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值