第三章数程序设计初步--控制结构综合项目3-1大奖赛计分拓展

上机内容:(大奖赛计分拓展)在歌星大奖赛计分程序中,成绩在1~100分之间。选手最后得分为:

                      去掉一个最高分和一个最低分后其余8个分数的平均值。要求:    

                     1)输入错误(输入不是在0~100分之间)时要能马上重新输入

                     2)评委人数需要在在程序开始运行时输入

                     3)输出当前选手的最后得分后,提示“退出请选择N或n,按其他键计算下一位选手的成绩:”。
上机目的:控制结构综合
我的程序:
/*  
* 程序的版权和版本声明部分:  
* Copyright (c) 2013, 青岛农业大学理信学院  
* All rights reserved.  
* 文件名称:大奖赛计分拓展.cpp  
* 作    者:幻影行者  
* 完成日期:2013 年 7 月 31 日  
* 版 本 号:v1.0  
* 对任务及求解方法的描述部分: 
* 输入描述:略  
* 问题描述:在歌星大奖赛计分程序中,成绩在1~100分之间。选手最后得分为:
*           去掉一个最高分和一个最低分后其余8个分数的平均值。要求:
*           1)输入错误(输入不是在0~100分之间)时要能马上重新输入
*           2)评委人数需要在在程序开始运行时输入(这比固定10个评委的程序更有适应性)
*			3)输出当前选手的最后得分后,提示“退出请选择N或n,按其他键计算下一位选手的成绩:”。
* 程序输出:略  
* 问题分析:首先,内层用do...while循环(不可用for循环)实现对选手的计分,外层用do...while循环做类似的工作,实现对下一位选手的计分 
* 算法设计:略  
*/ 

#include<iostream>
using namespace std;
int main()
{
	char choice; //choice表示用户的选择,即选择退出或继续
    int i,n;    //i为评委的编号,n为评委的个数,从键盘输入
	cout<<"请输入评委的个数:"<<endl;   //评委的个数由用户输入,更灵活
	cin>>n;
	float score,max_score,min_score,total_score,final_score;//score为评委的打分,max_score,min_score为评委打的最高最低分,
	                                                                 //total_score选手总分,final_score选手最后得分
    do
	{   i=1;
		max_score=-1,min_score=101,total_score=0;   //设置初值
		do   
		{
			cout<<"请输入第"<<i<<"个评委给选手的打分(1~100):"<<endl;
			cin>>score;
			if((score<0)||(score>100))
				continue;         //输入不是在0~100分之间,使用continue退出for循环,不再往下执行,重新开始for循环的执行
			if(max_score<score)   //人为设置max_score初值为-1,通过每次比较,最终找到最高分
				max_score=score;
			if(min_score>score)   //人为设置min_score初值为101,通过每次比较,最终找到最低分
				min_score=score;
			total_score+=score;   //总分
			++i;
		}while(i<=n);

        //此处用for循环不能实现输入错误时重新输入的功能
		/*for(i=1;i<=n;++i)   
		{
			cout<<"请输入第"<<i<<"个评委给选手的打分(1~100):"<<endl;
			cin>>score;
			if((score<0)||(score>100))
				continue;         //输入不是在0~100分之间,使用continue退出for循环,不再往下执行,重新开始for循环的执行
			if(max_score<score)   //人为设置max_score初值为-1,通过每次比较,最终找到最高分
				max_score=score;
			if(min_score>score)   //人为设置min_score初值为101,通过每次比较,最终找到最低分
				min_score=score;
			total_score+=score;   //总分
			
		}*/

		final_score=(total_score-max_score-min_score)/(n-2);  //计算选手最后得分
		cout<<"去掉一个最高分:"<<max_score<<endl;
		cout<<"去掉一个最低分:"<<min_score<<endl;
		cout<<"选手最后得分:"<<final_score<<endl;
        cout<<"退出请选择N或n,按其他键计算下一位选手的成绩:";   //提示用户是否继续
		cin>>choice;
		cout<<endl;
	}while(choice!='N'&&choice!='n');
	return 0;
}


运行结果:


心得体会:

        (1)continue和break用法区别:continue是退出循环,不再往下执行,重新执行循环,如本程序;而break是直接跳出循环,执行循环以后的程序
                   特别注意:continue用在for循环中,只要满足条件,执行continue后,本次循环结束,然后++i,执行下一个循环,这也是在此程序中不能使
                  用for循环实现输入错误时重新输入功能的原因。
        (2)do...while...的用法,本程序恰当好处的使用do...while...循环实现对不同的对象(即不同的选手)执行相同的操作,即计分操作。这类用法值得好好学习。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值