C语言的多组输入

用C语言实现多组输入

实现多组输入代码

while(n--){ scanf("");}

代表规定数量

whlie(scanf("%d",&n)!=EOF)

代表不等于空置的连续输入

while(scanf("%d",n),n!=0)

代表连续输入直到输入0为止。

对于多组输入进行实践

题目描述

期末考试快要到了,但是每个同学学的科目太多啦。学校为了给同学们早点放假回家,让同学在自己所学的科目中选 m 门科目进行考试。所选考试的科目的平均分就可以作为该学年的总学习成绩。

对于每一个同学来说,该同学所学的科目数为n,而学校要求只需要该同学在n门科目中选出m门课进行考试,考试科目的平均成绩可以作为该学年的总成绩。

而每一个同学所学的科目中,每个老师对于该同学的喜爱程度不同。期末考试中,任课老师给该同学评分依据老师对该同学的喜爱程度(喜爱程度的数值就是该科目的考试成绩)。

同学们非常苦恼,你能帮同学们算出他们在期末考试里可以获得的最高的总成绩吗?

输入

输入数据第一行为T(1 <= T <= 100),表示你需要帮助的同学个数(测试样例个数)。
每个测试样例为两行。

第一行为两个正整数 n m(1 <=m <= n <= 10),表示该同学在这一学年中总共学习了n门科目,在期末考试中需要选择m门科目进行考试。

第二行为n个正整数表示,ni表示第i门科目的任课老师对该同学的喜爱程度。

输出

每行输出一个小数(保留两位小数)表示该同学在期末考试中可以获得的最高总成绩。

样例输入

3
1 1
100
5 3
100 80 85 90 97
6 2
100 100 100 100 100 100

样例输出

100.00
95.67
100.00

C语言代码

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

int main() {
	int su, n, m, temp;
	int i = 0;
	int j = 0;
	int k = 0;
	scanf("%d", &su);
	while (su--) {
		scanf("%d %d", &n, &m);
			int score[5];
			while (n--) {
				scanf("%d", &score[i]);
				i++;
			}
			n = i;
			for (j = 0; j < n - 1; j++) {
				for (i = 0; i < n - 1 - j; i++) {
					if (score[i] < score[i + 1]) {
						temp = score[i];
						score[i] = score[i + 1];
						score[i + 1] = temp;
					}
				}
			}
			double average;
			double sum = 0;
			for (i = 0; i < m; i++) {
				sum = sum + score[i];
			}
			average = sum / m;
			printf("%.2f\n", average);
			i = 0;
        }

		system("pause");
		return 0;
}

题目解释

逻辑思想
对于输入的数组先进行排序,这里用简单的排序方法,冒泡排序得到新的数组,从大到小取数组中所选的课数求平均值。

核心代码
冒泡排序

for (j = 0; j < n - 1; j++) {
				for (i = 0; i < n - 1 - j; i++) {
					if (score[i] < score[i + 1]) {
						temp = score[i];
						score[i] = score[i + 1];
						score[i + 1] = temp;
					}
				}
			}

适合新手的最基本的排序方法。

求平均值

double average;
			double sum = 0;
			for (i = 0; i < m; i++) {
				sum = sum + score[i];
			}
			average = sum / m;
发布了29 篇原创文章 · 获赞 10 · 访问量 7495

猜你喜欢

转载自blog.csdn.net/qmqm33/article/details/95731868