小白C语言编程实战(16):统计4门课的优秀率和不及格率

这是《小白C语言编程实战》系列的第16篇。
上一篇:小白C语言编程实战(15):演示插入排序


题目

某班有N人,每人上4门课,输入每门课所有同学的成绩,统计每门课的优秀率和不及格率。程序中假设N为10。

要求

输入输出格式示例:

输入

92 78 73 59.5 80 91 89 70 65 68<回车>

93 94 90 89 80 85 78 73 66 62<回车>

87 84 86 78 76 73 65 55 45 42<回车>

90 92 78 74 76 73 65 66 50 58<回车>

输出

1: Excellent=20.00%,Fail=10.00%

2: Excellent=30.00%,Fail=0.00%

3: Excellent=0.00%,Fail=30.00%

4: Excellent=20.00%,Fail=20.00%

提示

定义一个二维数组,用来表示和存放4门课程的所有成绩,程序中假设该班有10个人,可以采用下面方法定义数组:

#define N 10 /* 这里定义一个符号常量N */
float course[4][N+2]={0};

其中,course[k][0] ~ course[k][N-1]存放某门课程的N个成绩,course[k][N]存放该课程的优秀率,course[k][N+1]存放该课程的不及格率,k=0~3依次对应4门课。

另外,要输出%,在格式串中用两个%,即%%即可。

参考代码

#include <stdio.h>
#include <stdlib.h>

#define N 10

// course[k][0] ~ course[k][N-1]存放某门课程的N个成绩,
// course[k][N]存放该课程的优秀率,
// course[k][N+1]存放该课程的不及格率
int main(int argc, char *argv[]) {
	float course[4][N+2]={0};
	
	int i,j;
	//依次处理4门课程 
	for(i=0;i<4;i++) {
		// 优秀人数 
		int excellent = 0;
		// 不及格人数 
		int fail = 0;
		for(j=0;j<N;j++) {
			scanf("%f", &course[i][j]);
			if(course[i][j] >= 90) {
				excellent++;
			} else if(course[i][j] < 60) {
				fail++;
			}
			course[i][N] = 100*excellent/(float)N;
			course[i][N+1] = 100*fail/(float)N;
		}
	}
	
	for(i=0;i<4;i++) {
		printf("%d: Excellent=%.2f%%,Fail=%.2f%%\n", i+1, course[i][N], course[i][N+1]);
	}
	return 0;
}
在Java编程中,你可以通过创建一个数组来存储学生的成绩,并使用循环来计算所需的统计数据。这里是一个简单的示例: ```java public class Main { public static void main(String[] args) { // 创建一个长度为10的学生成绩数组 int[] studentScores = new int[10]; // 假设已经给每个学生分配了成绩,例如手动输入或从文件读取 for (int i = 0; i < studentScores.length; i++) { studentScores[i] = getScoreFromUser(); // 获取用户输入成绩 } // 计算平均分 double averageScore = calculateAverage(studentScores); System.out.println("平均分: " + averageScore); // 统计优秀人数和优秀率成绩>=90) int excellentCount = countExcellent(studentScores); double excellentRate = (double) excellentCount / studentScores.length * 100; System.out.println("优秀人数: " + excellentCount + ", 优秀率: " + excellentRate + "%"); // 统计及格人数和及格率成绩>=60) int passCount = countPass(studentScores); double passRate = (double) passCount / studentScores.length * 100; System.out.println("及格人数: " + passCount + ", 及格率: " + passRate + "%"); } // 辅助方法:获取用户输入成绩 private static int getScoreFromUser() { Scanner scanner = new Scanner(System.in); System.out.print("请输入第" + (scanner.nextInt() + 1) + "名学生的成绩:"); return scanner.nextInt(); } // 辅助方法:计算平均值 private static double calculateAverage(int[] scores) { int sum = 0; for (int score : scores) { sum += score; } return (double) sum / scores.length; } // 辅助方法:统计优秀人数 private static int countExcellent(int[] scores) { int count = 0; for (int score : scores) { if (score >= 90) { count++; } } return count; } // 辅助方法:统计及格人数 private static int countPass(int[] scores) { int count = 0; for (int score : scores) { if (score >= 60) { count++; } } return count; } } ``` 在这个程序中,我们首先初始化了一个包含10个元素的成绩数组,然后通过`getScoreFromUser()`函数获取每个学生的成绩,并分别计算平均分、优秀人数及其比例以及及格人数及其比例。 注意这只是一个基本示例,实际应用中可能需要处理异常情况,如用户输入非法或数据未完全填充等。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值