法133计算机科学课第13周实践题目及参考解答

简介: 课程主页在:http://blog.csdn.net/sxhelijian/article/details/13705597  【课后练习1】  完成下面“歌手大奖赛计分程序”的设计(至少一项要求):  1、在歌手大奖赛中,有10位评委为参赛的选手打分,分数为0~10分(运行时由人控制)。选手最后得分为去掉一个最高分和一个最低分后的平均值。请编写一个程序实现计分。  2、做一个更通用的计分

课程主页在:http://blog.csdn.net/sxhelijian/article/details/13705597


  【课后练习1】
  完成下面“歌手大奖赛计分程序”的设计(至少一项要求):
  1、在歌手大奖赛中,有10位评委为参赛的选手打分,分数为0~10分(运行时由人控制)。选手最后得分为去掉一个最高分和一个最低分后的平均值。请编写一个程序实现计分。
  2、做一个更通用的计分程序,评委人数n可以在输入成绩之前输入,从而评委人数可以灵活调整。
  3、进一步完善程序。一次运行程序只计算一位选手成绩太麻烦,要求输出当前选手的最后得分后,提示“按任意键继续,退出请选择N:”如果输入的不是N或n,可以为下一位选手计算成绩,从而一次运行程序可以支持多位选手的成绩计算。
  提示1:参考例9.24——输入固定数目的数字、求和;参考例9.23——若干数求和、求最大、求最小。
  提示2:可以按照下面的界面设计。

参考解答:

1、在歌手大奖赛中,有10位评委为参赛的选手打分,分数为0~10分(运行时由人控制)。选手最后得分为去掉一个最高分和一个最低分后的平均值。请编写一个程序实现计分。

#include<stdio.h>
int main( )
{
    int i;
    float ave, score, sum, max, min;
    max=-1;  //这儿有技巧,第1位评委给的成绩一定大于-1,max将变成第1个成绩
    min=11;  //同样和技巧,要学会这样“设圈套”
    sum=0;
    printf("请输入选手的成绩(0-10)\n");
    for(i=1;i<=10;i++)
    {
        printf("第 %d 位评委给分:", i);
        scanf("%f",&score);
        sum+=score;
        if(max<score)
            max=score;
        if(min>score)
            min=score;
    }
    ave = (sum-max-min)/8;
    printf("减去一个最高分: %.2f\n", max);
    printf("减去一个最低分: %.2f\n", min);
    printf("当前选手的最后得分是: %.2f\n", ave);
    return 0;
}

2 、做一个更通用的计分程序,评委人数 n 可以在输入成绩之前输入,从而评委人数可以灵活调整。

#include<stdio.h>
int main( )
{
    int i,n;
    float ave, score, sum, max, min;
    max=-1;  
    min=11; 
    sum=0;
    printf("有几位评委:");
    scanf("%d",&n);
    printf("请输入选手的成绩(0-10)\n");
    for(i=1;i<=n;i++)
    {
        printf("第 %d 位评委给分:", i);
        scanf("%f",&score);
        sum+=score;
        if(max<score)
            max=score;
        if(min>score)
            min=score;
    }
    ave = (sum-max-min)/(n-2);
    printf("减去一个最高分: %.2f\n", max);
    printf("减去一个最低分: %.2f\n", min);
    printf("当前选手的最后得分是: %.2f\n", ave);
    return 0;
}

3 、进一步完善程序。一次运行程序只计算一位选手成绩太麻烦,要求输出当前选手的最后得分后,提示“按任意键计算下一位选手的成绩,退出请选择 N :”如果输入的不是 N n ,可以为下一位选手计算成绩,从而一次运行程序可以支持多位选手的成绩计算。

#include<stdio.h>
int main( )
{
    int i,n;
    float ave, score, sum, max, min;
    char ch ='y';
    printf("有几位评委:");
    scanf("%d",&n);
    while(ch !='n'&&ch !='N')
    {
        max=-1;
        min=11;
        sum=0;
        printf("请输入选手的成绩(0-10)\n");
        for(i=1; i<=n; i++)
        {
            printf("第 %d 位评委给分:", i);
            scanf("%f",&score);
            sum+=score;
            if(max<score)
                max=score;
            if(min>score)
                min=score;
        }
        ave = (sum-max-min)/(n-2);
        printf("减去一个最高分: %.2f\n", max);
        printf("减去一个最低分: %.2f\n", min);
        printf("当前选手的最后得分是: %.2f\n", ave);
        printf("按任意键继续,退出请输入N");
        rewind(stdin);//清空输入缓冲区
        ch=getchar();
    }
    return 0;
}

【课后练习2】 在下面的题目中,至少选择两道利用穷举法完成求解。1、换分币
  用一元人民币兑换成1分、2分和5分硬币,有多少种不同的兑换方法?
  提示:根据题意设i,j,k分别为兑换的1分、2分、5分硬币的枚数,则i,j,k的值应满足:i+j*2+k*5=100,根据取值范围构造循环解题即可。
  参考解答:

#include <stdio.h>
int main()
{
    int i,j,k,count=0;
    for(i=0; i<=100; i++)
        for(j=0; j<=50; j++)
            for(k=0; k<=20; k++)
            {
                if(i+j*2+k*5==100)  //判断是否正好兑换成功
                {
                    count++;
                    printf("第%3d种: 1分钱%d枚,2分钱%d枚,5分钱%d枚\n", count, i, j, k);
                }
            }
    return 0;
}

2、三色球问题
  若一个口袋中放有12个球,其中有3个红球、3个白球和6个黒球。问从中任取8个共有多少种不同的颜色搭配?
  提示:设任取的红球个数为i,白球个数为j,则黒球个数为8-i-j,根据题意红球和白球个数的取值范围是0~3,在红球和白球个数确定的条件下,黒球个数取值应为8-i-j<=6。
  参考解答:

#include <stdio.h>
int main ()
{
    int red,white,black;
    printf("不同的颜色搭配有:\n");
    for(red=0; red<=3; red++)
        for(white=0; white<=3; white++)
        {
            black=8-red-white;
            if(black<=6)
            {
                printf("红球:%d, 白球: %d, 黑球: %d。\n", red, white, black);
            }
        }
    return 0;
}

3、猜数字
  在下面的加法算式中,不同的符号代表不同的数字,相同的符号代表相同的数字。请设计程序求出"都、要、学、C"4个符号分别代表的数字。

  提示:让计算机解奥数题。穷举"都、要、学、C"4个符号分别代表的数字(从0到9),然后进行组合,如果组合起来符合规则(不同的符号代表不同的数字,相同的符号代表相同的数字,且使等式成立),则为正解。
  计算结果为:“都:1  要:4  学:6  C:7”或者“都:1  要:5  学:0  C:2”

  参考解答:

#include <stdio.h>
int main()
{
  int dou,yao,xue,c,s;//变量这样取,比有些题解上用i,j,p,q之类的要清晰得多
  for(dou=1; dou<3; dou++)
    for(yao=0; yao<10; yao++)
    {
      for(xue=0; xue<10; xue++)
        for(c=0; c<10; c++)
          //一个技巧:表示两两不同可以如下表达
          if((dou-yao)*(dou-xue)*(dou-c)*(yao-xue)*(yao-c)*(xue-c)!=0)
          {
            s=4*c+3*xue*10+2*yao*100+dou*1000;
            if(2008==s)
              printf("都:%d  要:%d  学:%d  C:%d\n",dou,yao,xue,c);
          }
    }
  return 0;
}

4、辨别数字
  在一起经济犯罪案件中,有一张可疑发票受到了污损。如下图:

  
  能够辨别数量为※9,单价为※3※.00元,而总金额是83※2.00元,其中※处为1个数字,由于被涂改无法辨认。这难不倒学过编程的法133的同学,请编程找出※表示哪个数字。
  计算结果为:数量:19,单价:438,金额:8322

  参考解答:

#include<stdio.h>
int main()
{
    int a,b,c,d;
    for(a=1; a<=9; a++)
    {
        for(b=1; b<=9; b++)
        {
            for(c=0; c<=9; c++)
            {
                for(d=0; d<=9; d++)
                {
                    if (((a*10+9)*(b*100+30+c))==(8302+d*10))
                    {
                        printf("数量:%d,单价量:%d,金额:%d\n",a*10+9,b*100+30+c,8302+d*10);
                    }
                }
            }
        }
    }
    return 0;
}






目录
相关文章
|
算法
研究生考试.数据结构与算法之十一 图
研究生考试.数据结构与算法之十一 图
51 0
|
存储 前端开发 数据库
【软件设计师-从小白到大牛】下午题基础篇:第一章 数据流图(DFD)
顶层图上的数据流:是系统和外部实体之间的联系。而内部数据流在0层图中能体现,因为系统被细分了。 对于数据流图任意一个加工:都应该有输入和输出,箭头有进也有出;黑洞:只有输入,没有输出;奇迹(白洞):只有输出,没有输入。这两种都不符合客观事实。
199 0
|
算法 定位技术 C++
【思特奇杯·云上蓝桥-算法集训营】第2周----真题汇总+思路分享
【思特奇杯·云上蓝桥-算法集训营】第2周----真题汇总+思路分享
284 0
|
算法
算法学习之路|选择题
批改多选题是比较麻烦的事情,本题就请你写个程序帮助老师批改多选题,并且指出哪道题错的人最多。
1031 0
《Java程序设计习题精析与实验指导》一3.4 练习题
本节书摘来自华章出版社《Java程序设计习题精析与实验指导》一 书中的第3章,第3.4节,作者:施霞萍 王瑾德 史建成 马可幸,更多章节内容可以访问云栖社区“华章计算机”公众号查看。
2109 0
《Java程序设计习题精析与实验指导》一2.4 练习题
本节书摘来自华章出版社《Java程序设计习题精析与实验指导》一 书中的第2章,第2.4节,作者:施霞萍 王瑾德 史建成 马可幸,更多章节内容可以访问云栖社区“华章计算机”公众号查看。
1425 0
|
算法 C++
程序设计课2014年秋第11周学习经验交流和自省
课程主页在http://blog.csdn.net/sxhelijian/article/details/39152703,课程资源在云学堂“贺老师课堂”同步展示,使用的帐号请到课程主页中查看。  发现你在学习中成功的经验,以及有好感觉的时候,做一简短总结 能在一定时间内,写出想要表达的信息通过编写代码 总算找到了一点感觉,现在天天晚自习,希望能在自习中重新找回自己学习的状态,尽快追上去。
1740 0
下一篇
无影云桌面