本题是谭浩强《C程序设计课后习题》题8.15。
题目:
有一个班4个学生, 5门课程。
①求第1门课程的平均分;
②找出有两门以上课程不及格的学生, 输出他们的学号和全部课程成绩及平均成绩;
③找出平均成绩在90分以上或全部课程成绩在85分以上的学生。
分别编3个函数实现以上3个要求。
以下是本篇文章正文内容,欢迎朋友们进行指正,一起探讨,共同进步。——来自考研路上的lwj
思路:
本题采用二维数组来存放4个学生的5门课程,定义int a[4][5],在编写函数时,我们需要使用指针进行遍历.
大家都了解一维数组转换成指针是这样的:a[4]等价*(a+4)
那么二维数组的转换方式就是a[4][5]等价*(*(a+4)+5)
大家只要理解了这个转换方式,然后分别在所编写的函数中使用指针的方式替换数组,这道题就解出来了,求平均分和每科成绩都不难,定义两个辅助变量进行判断即可。
代码如下(示例):
#include<stdio.h>
代码如下(示例):
int i, j;
void avg1(int a[][5], int n)
{float sum=0;for (i = 0; i < n; i++)for (j = 0; j < 5; j++)sum += *(*(a + i) + 0);printf("第一门课的平均成绩为:%fn", sum / 5.0);
}
void fall(int a[][5], int n)
{for (i = 0; i < n; i++){int fall_count = 0;float sum = 0;for (j = 0; j < 5; j++){if (/*a[i][j]*/*(*(a + i) + j) < 60)fall_count++;}if (fall_count <= 2)continue;printf("学号:%d有两门以上课程不及格,其全部成绩是:n ", i + 1);for (j = 0; j < 5; j++){sum += *(*(a + i) + j) /*a[i][j]*/;printf("%d ", *(*(a + i) + j)/* a[i][j]*/);}printf("n平均分为:%fn", sum / 5.0);}
}
void seek(int a[][5], int n)
{/*找出平均成绩在90分以上或全部课程成绩在85分以上的学生。*/for (i = 0; i < n; i++){int fall_count = 0;float sum = 0;for (j = 0; j < 5; j++){if (/*a[i][j]*/*(*(a + i) + j) >= 85)fall_count++;sum += *(*(a + i) + j)/*a[i][j]*/;}if (fall_count == 5 || sum / 5.0 >= 90.0)printf("学号为%d的学生平均成绩在90分以上或全部课程成绩在85分以上。n", i + 1);}
}
int main()
{int a[4][5];printf("请输入这4名学生的5门成绩:n");for (i = 0; i < 4; i++)for (j = 0; j < 5; j++)scanf("%d",*(a+i)+j /*&a[i][j]*/);avg1(a, 4);fall(a, 4);seek(a, 4);return 0;
}
输出:
请输入这4名学生的5门成绩:
100 89 86 88 87
100 89 86 50 20
100 89 86 88 87
100 89 86 88 60
第一门课的平均成绩为:400.000000
学号为1的学生平均成绩在90分以上或全部课程成绩在85分以上。
学号为3的学生平均成绩在90分以上或全部课程成绩在85分以上。
本文发布于:2024-01-29 18:11:33,感谢您对本站的认可!
本文链接:https://www.4u4v.net/it/170652309717329.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
留言与评论(共有 0 条评论) |