《C语言及程序设计》实践参考——大奖赛计分

返回:贺老师课程教学链接  项目要求

【项目4:大奖赛计分】 

(1)基本要求:在歌手大奖赛中,有10个评委为参赛的选手打分,分数为1~10分。选手最后得分为:去掉一个最高分和一个最低分后其余8个分数的平均值。请编写一个程序实现。

#include <stdio.h>
#define n 10
int main( )
{
    int i=1;
    double ave, score, sum, max, min;  //这几个变量涉及成绩,double是合理的
    max=-1;  //这儿有技巧,第1位评委给的成绩一定大于-1,max将变成第1个成绩
    min=11;  //同样和技巧,要学会这样“设圈套”
    sum=0;   //注意:这4个变量在循环内赋初值是必须的,这意味着计算某一选手成绩的开始
    printf("请输入选手的成绩(0-10)\n");
    do  //至少有一位评委,再用do循环
    {
        printf("第 %d 位评委给分:", i);
        scanf("%lf", &score);
        sum+=score;
        if(max<score)
            max=score;  // 联想上一层循环中max的初值,学会技巧
        if(min>score)
            min=score;
        i++;
    }
    while(i<=n);
    //下面开始计算
    ave = (sum-max-min)/(n-2);
    printf("减去一个最高分: %.3f\n", max);
    printf(", 减去一个最低分: %.3f\n", min);
    printf("当前选手的最后得分是:%.3f\n", ave);
    printf("******************* SUCCESS ***********************\n");
    return 0;
}

(2)上面的程序只能处理一位选手的成绩,现拓展为多人版。输出当前选手的最后得分后,提示“按任意键计算下一位选手的成绩,退出请选择N:”如果输入的不是N或n,可以为下一位选手计算成绩。

#include <stdio.h>
#define n 10
int main( )
{
    int i;
    double ave, score, sum, max, min;
    char choice;  //用于接受用户选择,字符型是合适的
    do     //计算选手的成绩,至少1次,用do很自然,别的循环不用想
    {
        i=1;    //i代表评委的编号,其实这个变量名起得不好
        max=-1;
        min=11;
        sum=0;
        printf("请输入选手的成绩(0-10)\n");
        do
        {
            printf("第 %d 位评委给分:", i);
            scanf("%lf", &score);
            sum+=score;
            if(max<score)
                max=score;
            if(min>score)
                min=score;
            i++;
        }while(i<=n);
        //下面开始计算
        ave = (sum-max-min)/(n-2);
        printf("减去一个最高分: %.3f\n", max);
        printf(", 减去一个最低分: %.3f\n", min);
        printf("当前选手的最后得分是:%.3f\n", ave);
        printf("******************* SUCCESS ***********************\n");
        printf("按 N 退出,其他键继续....");
        fflush(stdin);   //将输入缓冲清空,否则getchar()会读入之前录入中的回车等符号
        choice=getchar();
    }while(choice!='N' && choice!='n'); //不管输入大小写,全算数
    return 0;
}
时间: 2024-11-10 05:27:34

《C语言及程序设计》实践参考——大奖赛计分的相关文章

《C语言及程序设计》实践参考——大奖赛计分(续一)

返回:贺老师课程教学链接  项目要求 [项目1:大奖赛计分(续一)]在歌手大奖赛中,有10个评委为参赛的选手打分,分数为1~10分.请在大奖赛计分程序基础上,增加功能,若用户输入不在0-10范围内,则立即要求重输,直到正确. [参考解答] #include <stdio.h> #define n 10 int main( ) { int i; double ave, score, sum, max, min; char choice; do { i=1; max=-1; min=11; sum

2014秋C++第10周项目4参考-大奖赛计分

课程主页在http://blog.csdn.net/sxhelijian/article/details/39152703,课程资源在云学堂"贺老师课堂"同步展示,使用的帐号请到课程主页中查看.   [项目4:大奖赛计分]在歌手大奖赛中,有10个评委为参赛的选手打分,分数为0~10分.选手最后得分为:去掉一个最高分和一个最低分后,取其余8个分数的平均值.请编写一个程序实现这个程序. 参考解答: #include <iostream> using namespace std;

《C++语言基础》实践参考—— 链表类

返回:贺老师课程教学链接  项目要求 [项目 - 链表类]动态链表也是程序设计中的一种非常有用的数据结构.可以说,是否能够理解有关操作的原理,决定了你是否有资格称为"科班"出身.在后续的专业基础课中,相关的内容还会从不同的角度,反复地认识,反复地实践.不过,在现阶段多些体验,也是很有必要的了.(1)阅读下面的程序,回顾一下动态链表,阅读程序过程中,请用笔画一画形成链表的过程中指针值的变化. #include <iostream> using namespace std; s

《C++语言基础》实践参考——旱冰场造价

返回:贺老师课程教学链接 [项目1 - 旱冰场造价] 有一个圆形的旱冰场地,场地内抹水泥,造价为每平方米M元,围栏用木条围成,每米造价N元,输入旱冰场半径,用程序计算出其造价. 一级提示: 先定义类,确定其数据成员和成员函数.在这里要定义的旱冰场类,实际我们只关心其面积和周长,根据面积计算场地内抹水泥的造价,根据周长计算围栏的造价.有了类的定义,在main函数中定义该类对象,调用成员函数即可以完成求解.二级提示: 实际上,对于旱冰场,我们只关心它就是一个圆.这就是设计中抓住了本质.于是,设计一个

《C++语言基础》实践参考——指向学生类的指针

返回:贺老师课程教学链接 [项目4-指向学生类的指针] 设计一个学生类Student,数据成员包括学号(num)和成绩(score),成员函数根据需要自行设计(建议配备需要的set.get函数,以及必要的输入或输出,给出的代码中也可以找到需要成员函数的线索).在main函数中,要做到: 建立一个对象数组,通过初始化,设置5个学生的数据,要求: 用指针指向数组首元素,输出第1.3.5个学生的信息: 设计一个函数int max(Student *arr);,用指向对象的指针作函数参数,在max函数中

《C++语言基础》实践参考——复数模板类

返回:贺老师课程教学链接 [项目6-复数模板类]    阅读教材例10.1.该例实现了一个复数类,但是美中不足的是,复数类的实部和虚部都固定只能是double型的.可以通过模板类的技术手段,设计Complex,使实部和虚部的类型为定义对象时指定的实际类型.    (1)要求类成员函数在类外定义.    (2)在此基础上,再实现减法.乘法和除法    你可以使用的main()函数如下. int main( ) { Complex<int> c1(3,4),c2(5,-10),c3; //实部和虚

《C++语言基础》实践参考——Josephus(约瑟夫环)问题

返回:贺老师课程教学链接  项目要求 [项目-Josephus(约瑟夫环)问题]n个小孩子围成一圈,从第一个小孩子开始顺时针方向数数字,到第m个小孩子离开,这样反反复复,最终只剩下一个小孩子,求第几个小孩子留下?    提示:约瑟夫环即是一个首尾相连的链表,在建立好这个环以后,从头结点开始,每次间隔m孩子删除一个结点,直至只余下一个结点(删除了n-1个).     参考下面的代码,也可以自行设计类. //链表结点kid,其中number为这个人的编号 struct kid { int numbe

《C++语言基础》实践参考——友元类

返回:贺老师课程教学链接 [项目5-友元类]定义下面两个类的成员函数(为体验友元类,实际上本例并不一定是一个好的设计,将两个类的合并为一个DateTime,日期.时间都处理更好) class Date; //对Date类的提前引用声明 class Time { public: Time(int,int,int); void add_a_second(Date &); //增加1秒,1秒后可能会到了下一天,乃到下一月.下一年 void display(Date &); //显示时间,格式:月

《C++语言基础》实践参考——分数类中的运算符重载

返回:贺老师课程教学链接 [项目3-分数类中的运算符重载] (1)实现分数类中的运算符重载,在分数类中可以完成分数的加减乘除(运算后再化简).比较(6种关系)的运算.可以在第4周分数类代码的基础上开始工作. class CFraction { private: int nume; // 分子 int deno; // 分母 public: //构造函数及运算符重载的函数声明 }; //重载函数的实现及用于测试的main()函数 [参考解答] #include <iostream> #inclu