题8.15:有一个班4个学生, 5门课程。 ①求第1门课程的平均分; ②找出有两门以上课程不及格的学生, 输出他们的学号和全部课程成绩及平均成绩; ③找出平均成绩在90分以上或全部课程成绩在85分以上

题目

本题是谭浩强《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)
大家只要理解了这个转换方式,然后分别在所编写的函数中使用指针的方式替换数组,这道题就解出来了,求平均分和每科成绩都不难,定义两个辅助变量进行判断即可。

二、代码部分

1.引入库

代码如下(示例):

#include<stdio.h>

2.主函数部分

代码如下(示例):

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("第一门课的平均成绩为:%f\n", 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平均分为:%f\n", 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分以上。
  • 11
    点赞
  • 72
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

立志冲海大

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值