标题: 批处理脚本实现C语言趣味编程百例004:歌星大奖赛评分 [打印本页]
作者: HAT 时间: 2012-3-1 22:22 标题: 批处理脚本实现C语言趣味编程百例004:歌星大奖赛评分
加分:1个技术分或者10个PB
要求用BAT脚本实现:在歌星大奖赛中,有10个评委为参赛的选手打分,分数为1~100分。选手最后得分为:去掉一个最高分和一个最低分后其余8个分数的平均值。
*问题分析与算法设计
这个问题的算法十分简单,但是要注意在程序中判断最大、最小值的变量是如何赋值的。
*程序说明与注释- #include<stdio.h>
- int main()
- {
- int integer,i,max,min,sum;
- max=-32768; /*先假设当前的最大值max为C语言整型数的最小值*/
- min=32767; /*先假设当前的最小值min为C语言整型数的最大值*/
- sum=0; /*将求累加和变量的初值置为0*/
- for(i=1;i<=10;i++)
- {
- printf("Input number %d=",i);
- scanf("%d",&integer); /*输入评委的评分*/
- sum+=integer; /*计算总分*/
- if(integer>max)max=integer; /*通过比较筛选出其中的最高分*/
- if(integer<min)min=integer; /*通过比较筛选出其中的最低分*/
- }
- printf("Canceled max score:%d\nCanceled min score:%d\n",max,min);
- printf("Average score:%d\n",(sum-max-min)/8); /*输出结果*/
- }
复制代码
*运行结果
Input number1=90
Input number2=91
Input number3=93
Input number4=94
Input number5=90
Input number6=99
Input number7=97
Input number8=92
Input number9=91
Input number10=95
Canceled max score:99
Canceled min score:90
Average score:92
*思考题
题目条件不变,但考虑同时对评委评分进行裁判,即在10个评委中找出最公平(即评分最接返平均分)和最不公平(即与平均分的差距最大)的评委,程序应该怎样实现?
作者: jinzeyu 时间: 2012-3-3 15:10
本帖最后由 jinzeyu 于 2012-3-3 15:27 编辑
- @echo off&setlocal enabledelayedexpansion&set/a min=101,max=-1,pj=0&for /l %%i in (1,1,10) do set/p n%%i=Input number%%i=
- for /l %%j in (1,1,10) do ((if !n%%j! lss !min! set min=!n%%j!)&if !n%%j! gtr !max! set max=!n%%j!)
- echo Canceled max score:!max!&echo Canceled min score:!min!
- for /l %%i in (1,1,10) do set /a pj+=!n%%i!
- set/a pj=(pj-max-min)/8&echo Average score:!pj!&pause>nul
复制代码
作者: fatcat 时间: 2012-3-3 18:32
- @echo off&setlocal enabledelayedexpansion
- set /a min=101,max=0,offsMin=10000
- for /l %%i in (1,1,10) do (
- set /a n%%i=!random! %% 100 + 1, sum+=n%%i
- if !n%%i! gtr !max! set /a max=!n%%i!,max#=%%i
- if !n%%i! lss !min! set /a min=!n%%i!,min#=%%i
- echo %%i: !n%%i!
- )
- set /a aver=(sum-min-max)/8
- for /l %%i in (1,1,10) do (
- set /a offs=n%%i-aver, offs*=offs
- if !offs! lss !offsMin! set /a offsMin=offs, #=%%i
- )
- echo 平均分为: !aver!, 最接近平均分的是 !#! 号
- set /a offs=aver*2-min-max
- (<nul set /p=评分最远离平均分的是 ) & if !offs! lss 0 (echo !max#! 号: !max! 分) else (echo !min#! 号: !min! 分)
- pause
复制代码
欢迎光临 批处理之家 (http://bathome.net./) |
Powered by Discuz! 7.2 |