在程序大奖赛中,有10个评委为参赛的选手打分,分数为1~100分。选手最后得分为:去掉一个最高分和一个最低分后其余8个分数的平均值。

这个是我们程序设计的一个习题,顺便记录一下。我是刚学习C++的小白,如果下面有什么不对或者不合理的地方还请大家在评论区指出。

  • 首先我用rand()函数模拟一位评委给出一个分数
  • 然后用for循环十次表示十个评委进行打分,存储到一个数组,然后求其总分
  • 之后我遍历数组依次比较出最大值和最小值
  • 用总分减去最大值和最小值除以8得到最后的平均分数
  • 我们题目要求把结果存到文件中,因为我对c++存储文件不是特别了解,所以下面用了很多笨办法

下面附上我写的代码:

#include <iostream>
#include <stdlib.h>
#include<iomanip>
#include<fstream>
using namespace std;

int main()
{
	int number;									//定义数字,作为参赛人数
	cout << "请输入参赛选手人数" << endl;		
	cin >> number;								//输入参赛人数
	ofstream ofile;								//定义输出文件
	ofile.open("d:\\Competition_score.txt");				//作为输出文件打开
	ofile << "序号	成绩一	成绩二	成绩三	成绩四	成绩五	成绩六	成绩七	成绩八	成绩九	成绩十	总分	最终成绩" << endl;   //标题写入文件
	for (int n = 0; n < number; n++)			//用for循环来模拟多位参赛选手
	{
        int competitor_grade[10];               //定义一个数组来储存十个成绩
        int sum_judge_ten = 0;                  //定义一个sum_judge_ten来储存十位评委给的总分
        float sum_judge_eight = 0;              //定义一个sum_judge_eight来储存去掉最高分和最低分的总成绩
        ofile << n + 1<<"	";                  //表示序号

		for (int i = 0; i < 10; i++)            //在for循环中用rand()来模拟十位评委给的随机分数
		{
			competitor_grade[i] = rand() % 100+1;     //用数组储存分数,rand()表示随机数,%100表示分数在0~100之间
			ofile <<"  "<< competitor_grade[i]<<"	";  //将每一个分数写入文件
			sum_judge_ten += competitor_grade[i];
		}
		int max = competitor_grade[0], min = competitor_grade[0];
		for (int i = 0; i < 10; i++)                //用for循环比较出最大值和最小值
		{
			if (max < competitor_grade[i])
				max = competitor_grade[i];
			if (min > competitor_grade[i])
				min = competitor_grade[i];
		}
		sum_judge_eight = (sum_judge_ten - min - max) / 8.0;
	
		ofile << sum_judge_ten << "	 "<<sum_judge_eight << endl;
	}
	system("pause");
}

后面附上一张结果:
在这里插入图片描述

  • 6
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
题目描述: 在歌星大奖赛,有10个评委参赛选手打分分数为1~100选手最后分为去掉一个最高分一个最低分后剩余8个评委分数平均值。请编写Java程序实现该计算。 解题思路: 1. 定义一个长度为10的int类型数组,用于存储10个评委打分。 2. 利用for循环和Scanner类,依次从控制台输入10个评委打分。 3. 利用Arrays类的sort()方法,将数组进行升序排序。 4. 去掉数组的第一个元素(即最小值)和最后一个元素(即最大值)。 5. 利用for循环和累加器对剩余的8个分数进行求和。 6. 计算平均并输出。 Java代码实现: ```java import java.util.Arrays; import java.util.Scanner; public class Main { public static void main(String[] args) { int[] scores = new int[10]; // 存储10个评委打分 Scanner sc = new Scanner(System.in); for (int i = 0; i < 10; i++) { System.out.print("请输入第" + (i + 1) + "个评委打分:"); scores[i] = sc.nextInt(); } Arrays.sort(scores); // 对数组进行升序排序 int sum = 0; for (int i = 1; i < 9; i++) { // 去掉最高分最低,对剩余的8个分数进行求和 sum += scores[i]; } double avg = sum / 8.0; // 计算平均 System.out.println("选手最终得分为:" + avg); } } ``` 注意事项: 1. 需要导入java.util.Arrays和java.util.Scanner类。 2. 在计算平均时,需要将分数之和除以8.0,而不是除以8。这是因为除数为整数时,Java会进行整除运算,导致结果精度丢失。 3. 为了简化代码,这里没有进行输入校验,实际开发需要对用户输入进行验证,防止程序崩溃。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值