欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

编程初学者入门7_公务员面试现场打分。有7位考官,从键盘输入若干组成绩,每组7个分数(百分制),去掉一个最高分和一个最低分,输出每组的平均成绩。(复习冒泡排序+C、Java中局部变量不赋值不能使用))

程序员文章站 2022-07-16 19:32:05
...

题目描述

公务员面试现场打分。有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()方法排序
编程初学者入门7_公务员面试现场打分。有7位考官,从键盘输入若干组成绩,每组7个分数(百分制),去掉一个最高分和一个最低分,输出每组的平均成绩。(复习冒泡排序+C、Java中局部变量不赋值不能使用))

需要注意的是:

开始我定义的局部变量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;
}