用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;