题目描述
公务员面试现场打分。有7位考官,从键盘输入若干组成绩,每组7个分数(百分制),去掉一个最高分和一个最低分,输出每组的平均成绩。
- 输入描述:
一行,输入7个整数(0~100),代表7个成绩,用空格分隔。 - 输出描述:
一行,输出去掉最高分和最低分的平均成绩,小数点后保留2位,每行输出后换行。
示例1 - 我的解答
首先想到的是直接输入7个值,找到最大值和最小值,然后丢弃最大值、最小值加起来,求平均值
但是 分支两个两个比较又太繁琐,因此想到利用 数组 + 冒泡排序
排序后的数组,丢弃第一个、最后一个元素然后求平均值
# include<bits/stdc++.h>
using namespace std;
# define len 7
int main()
{
int a[len] = {0};
int num;
int temp,sum = 0;
float avg;
for(int i = 0;i<len;i++){
scanf("%d",&num);
a[i] = num;
}
//冒泡
for(int i = 0;i< len -1;i++){
for(int j = 0;j<len - i -1;j++){
if(a[j]>a[j+1]){
temp = a[j];
a[j] = a[j+1];
a[j+1] = temp;
}
}
}
for(int i = 1;i< len -1;i++){
sum = sum + a[i];
}
avg = sum/5.0;
printf("%.2f",avg);
return 0;
}
Java来写
import java.util.Scanner;
import java.util.Arrays;
import java.util.ArrayList;
public class Main{
public static void main(String args[]){
Scanner sc = new Scanner(System.in);
double avg,sum = 0;
int[] arr = new int[7];
for(int i = 0;i<7;i++){
arr[i] = sc.nextInt();
}
Arrays.sort(arr);
for(int j = 1;j<6;j++){
//sum = sum+ arr[j];
sum += arr[j];
}
avg = sum/5.0;
System.out.printf("%.2f",avg);
}
}
这里也是需要注意,局部变量必须初始化然后在使用!
调用Arrays.sort()方法排序
需要注意的是:
开始我定义的局部变量sum 并未初始化赋值,然后 后面 sum = sum + a[i] ;
不通过
原因是局部变量要进行初始化后 再使用 否则出现随机值
- C语言中变量不赋初bai值是不能”使用“的。这个du”使用“是指读取变量的zhi内容。因为,未赋初dao的变量中存储的数据是个随机值,其值不确定。
- 随机值的产生原因:变量都是存储在内存中的。程序运行以后,会在内存中给各个变量安置住处,这些地方以前可能有别的程序用过,里面留有上次使用后的结果数据,但系统不负责分配空间,不会清理内容,需要编程者自己清理。程序退出时也不清理内容,这就造成了后来者进到这个空间,看到一堆垃圾数据。
- 一些编程者,没有”定义变量进行初始化“的编程习惯,或由于疏漏没有给变量赋初值,而直接去使用变量中的数据,这样就会出现随机现象:有的可以,有的不可以。原因就是内存数据刚是否符合调用者的条件造成的,符合的就可以,不符合的就出错。
- 因此,养成”定义变量就初始化“的好习惯,在使用变量”进行运算“前,一定要注意检查变量是否已按自己的要求进行了赋值。
另:C语言全局变量的初始化是系统自动完成的,编程者可以不用单独处理。
- 题解
一般直接思路
#include<iostream>
#include<iomanip> //C++中浮点数保留小数点的有文件要有此文件
using namespace std;
int main()
{
int a[8];
int max=0;
int min=100;
for(int i=0;i<7;++i)
{
cin>>a[i];
if(max<a[i])
max=a[i];//max始终等于最大的那个
if(min>a[i])
min=a[i];//min始终等于最小的那个
}//这个for循环的目的是找出最大值max和最小值min
float result;
result=(float)((a[1]+a[2]+a[3]+a[4]+a[5]+a[6]+a[0]-max-min)*1.0/5);//求出平均值
cout<<fixed<<setprecision(2)<<result<<endl;//设置要保留的小树点点数
}
C++调用排序函数
include
using namespace std;
int main(){
float array[10];
for(int i = 0 ; i < 7; i++) {
cin >> array[i];
}
sort(array, array + 7);
float sum = 0;
for(int i = 1; i < 6; i++) {
sum += array[i];
}
cout << fixed << setprecision(2) << sum / 5 << endl;
return 0;
}