Board logo

标题: 批处理脚本实现C语言趣味编程百例004:歌星大奖赛评分 [打印本页]

作者: HAT    时间: 2012-3-1 22:22     标题: 批处理脚本实现C语言趣味编程百例004:歌星大奖赛评分

加分:1个技术分或者10个PB

要求用BAT脚本实现:在歌星大奖赛中,有10个评委为参赛的选手打分,分数为1~100分。选手最后得分为:去掉一个最高分和一个最低分后其余8个分数的平均值。

*问题分析与算法设计
这个问题的算法十分简单,但是要注意在程序中判断最大、最小值的变量是如何赋值的。

*程序说明与注释
  1. #include<stdio.h>
  2. int main()
  3. {
  4. int integer,i,max,min,sum;
  5. max=-32768; /*先假设当前的最大值max为C语言整型数的最小值*/
  6. min=32767; /*先假设当前的最小值min为C语言整型数的最大值*/
  7. sum=0; /*将求累加和变量的初值置为0*/
  8. for(i=1;i<=10;i++)
  9. {
  10. printf("Input number %d=",i);
  11. scanf("%d",&integer); /*输入评委的评分*/
  12. sum+=integer; /*计算总分*/
  13. if(integer>max)max=integer; /*通过比较筛选出其中的最高分*/
  14. if(integer<min)min=integer; /*通过比较筛选出其中的最低分*/
  15. }
  16. printf("Canceled max score:%d\nCanceled min score:%d\n",max,min);
  17. printf("Average score:%d\n",(sum-max-min)/8); /*输出结果*/
  18. }
复制代码
*运行结果
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 编辑
  1. @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=
  2. 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!)
  3. echo Canceled max score:!max!&echo Canceled min score:!min!
  4. for /l %%i in (1,1,10) do set /a pj+=!n%%i!
  5. set/a pj=(pj-max-min)/8&echo Average score:!pj!&pause>nul
复制代码

作者: fatcat    时间: 2012-3-3 18:32

  1. @echo off&setlocal enabledelayedexpansion
  2. set /a min=101,max=0,offsMin=10000
  3. for /l %%i in (1,1,10) do (
  4.   set /a n%%i=!random! %% 100 + 1, sum+=n%%i
  5.   if !n%%i! gtr !max! set /a max=!n%%i!,max#=%%i
  6.   if !n%%i! lss !min! set /a min=!n%%i!,min#=%%i
  7.   echo %%i: !n%%i!
  8. )
  9. set /a aver=(sum-min-max)/8
  10. for /l %%i in (1,1,10) do (
  11.   set /a offs=n%%i-aver, offs*=offs
  12.   if !offs! lss !offsMin! set /a offsMin=offs, #=%%i
  13. )
  14. echo 平均分为: !aver!, 最接近平均分的是 !#! 号
  15. set /a offs=aver*2-min-max
  16. (<nul set /p=评分最远离平均分的是 ) & if !offs! lss 0 (echo !max#! 号: !max! 分) else (echo !min#! 号: !min! 分)
  17. pause
复制代码





欢迎光临 批处理之家 (http://bathome.net./) Powered by Discuz! 7.2