/*
Copyright (c) 2016, 烟台大学计算机学院
All rights reserved.
文件名称:first.cpp
作 者:颜丙齐
完成日期:2017年 1 月 6 日
版 本 号:v1.0
题目描述
歌手大赛计分系统
输入
评委个数和每位评委的打分
输出
选手的平均得分
样例输入
4
1
2
3
4
样例输出
这是歌手大赛的计分系统!!!
制作人:颜丙齐
指导老师:贺利坚老师
程序说明:该程序计算各个选手的得分!!!
计分方式:去掉一个最高分和一个最低分然后取平均值!!!
输入的评委打分为0~10之间的数,请大家一定不要输错哟!!!
请大家开始使用吧!!!
请输入评委的人数;4
请输入第1位评委的给分为:1
请输入第2位评委的给分为:2
请输入第3位评委的给分为:3
请输入第4位评委的给分为:4
减去一个最高分4.00,和一个最低分1.00
该选手的最终得分为:2.50
***************************************SUCCESS**********************************
按N退出,其他键继续:
*/
#include <stdio.h>
#include <stdlib.h>
void view();//输出关于程序的说明
void getscore(double *,int);//将输入数组中的数保存到数组中.两个参数:数组和数组长度。
void set_score_online(double *,int );//将数组利用冒泡排序法,将最大的和最小的数排列。两个参数:数组和数组长度。
void ave_score(double *,int );//将数组中的1——n-1个元素求平均值,并将求的平均值赋值给数组的第n项,去掉第一个和最后一个。两个参数:数组和数组长度。
void calScore(int n);//计算成绩的最终函数,通过调用其他函数实现
int main()
{
system("color 1b");//控制输出面板的颜色
view();
int n;//评委的人数
char button;//控制是否结束
printf("请输入评委的人数:");
scanf("%d",&n);
do
{
calScore(n);
printf("***************************************SUCCESS**********************************");
printf("按N退出,其他键继续:\n");
getchar();
scanf("%c",&button);
}
while(button!='N'&&button!='n');//循环一次是计算的一个选手的分数
return 0;
}
/*************************************************************
功能描述:输出程序的说明
输入参数:无
返 回 值:无
其他说明:输出几句话,解释该程序
*************************************************************/
void view()
{
printf("这是歌手大赛的计分系统!!!\n");
printf("制作人:颜丙齐\n");
printf("指导老师:贺利坚老师\n");
printf("程序说明:该程序计算各个选手的得分!!!\n");
printf("计分方式:去掉一个最高分和一个最低分然后取平均值!!!\n");
printf("输入的评委打分为0~10之间的数,请大家一定不要输错哟!!!\n");
printf("请大家开始使用吧!!!\n");
}
/*************************************************************
功能描述:计算一个选手的分数
输入参数:无
返 回 值:无
其他说明:通过调用其他函数实现其功能
*************************************************************/
void calScore(int n)
{
double score[20];//定义一个一维数组来存放分数
getscore(score,n);
set_score_online(score,n);
ave_score(score,n);
printf("减去一个最高分%.2f,和一个最低分%.2f\n",score[n-1],score[0]);
printf("该选手的最终得分为:%.2f\n",score[n]);
}
/*************************************************************
功能描述:得到各个评委的评分
输入参数:s-一个指针,是传递的一个数组
n-数组的长度
返 回 值:无
其他说明:通过使用指针来给数组赋值
*************************************************************/
void getscore(double *s,int n)
{
int i;
int k;
for(i=0; i<n; i++)
{
k=0;
do
{
if(k>=1)
{
printf("您的输入有误请重新输入!!!\n");
}
printf("请输入第%d位评委的给分为:",i+1);
scanf("%lf",&s[i]);
k++;
}
while(s[i]>10.0);
}
return ;
}
/*************************************************************
功能描述:将数组中的最高分和最低分找出来,分别放在数组的末尾和开头,便于后面操作
输入参数:s-一个指针,是传递的一个数组
n-数组的长度
返 回 值:无
其他说明:使用的是冒泡排序法
*************************************************************/
void set_score_online(double *s,int n)
{
int i,middle;
for(i=0; i<n-1; i++)
{
if(s[i]>s[i+1])
{
middle=s[i];
s[i]=s[i+1];
s[i+1]=middle;
}
}
for(i=n-1; i>0; i--)
{
if(s[i]<s[i-1])
{
middle=s[i];
s[i]=s[i-1];
s[i-1]=middle;
}
}
return;
}
/*************************************************************
功能描述:将数组中的第2~(n-1)个元素加起来,并求平均值
输入参数:s-一个指针,是传递的一个数组
n-数组的长度
返 回 值:无
其他说明:将求得的平均值放在数组的第(n+1)个位上
*************************************************************/
void ave_score(double *s,int n)
{
int i;
double ave=0;
for(i=1; i<n-1; i++)
{
ave=ave+s[i];
}
ave=ave/(n-2);
s[n]=ave;
return;
}
学习心得:这个程序好久就写完了,之前也是用的指针,不过一直有警告,现在也是用的指针,不过没有警告了,有点不理解。这个是完全按要求做的。做之前感觉很难,但是做完之后发现也没多少东西。