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

课程主页在: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;
}
时间: 2024-08-30 16:32:44

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

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

课程主页在:http://blog.csdn.net/sxhelijian/article/details/13705597 编程练习1:输出1000以内的所有素数. 参考解答: #include<stdio.h> #include<math.h> int main() { int m,i,k,prime; for(m=2;m<=200;m++) { prime=1; k=sqrt(m); for(i=2; i<=k; i++) //最多循环至-- if(m%i==0)

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

课程主页在:http://blog.csdn.net/sxhelijian/article/details/13705597 Problem A:2447: 求N组数的最大公约数Description计算一组数的最大公约数Input第一行是数据的组数N,从第二行是N组由两个整数(a和b)构成的输入,a和b之间用空格隔开,每组输入单独占一行Output每组的两个整数(a和b)的最大 公约数,每个结果独占一行Sample Input398 7280 3612 144Sample Output2412

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

课程主页在:http://blog.csdn.net/sxhelijian/article/details/13705597 2398:分段函数求值[双分支] Description 编程序,计算下面函数的值并输出: y = x - 1 (当x>=1), y = -x + 1 (当x<1) Input 一个整型数x Output 按公式计算出的y Sample Input 2 Sample Output 1 参考解答: #include <stdio.h> int main() {

计算机科学-第13周 函数 题目及参考解答

<计算机科学>课程主页在:http://blog.csdn.net/sxhelijian/article/details/13705597 1.阅读程序:阅读下面的程序,写出运行结果,上机时运行程序,记录结果,从而能够理解函数的用法(1) #include <stdio.h> void fun(int x, int y) { x=x*10; y=y+x; printf("%d\t%d\n",x,y); } int main() { int a=2, b=3; f

计算机科学-第15周 递归函数 题目及参考解答

<计算机科学>课程主页在:http://blog.csdn.net/sxhelijian/article/details/13705597 1.阅读下面关于递归函数的程序,在草稿纸上画出函数调用"递推-回归"的过程,得出运行结果,并和实际运行结果进行对照(1) #include <stdio.h> int fact(int n); int main(){ long x=0,y=0; x=5; y=fact(x); printf("%ld\n"

计算机科学-第4周 结构 题目及参考解答

<计算机科学>课程主页在:http://blog.csdn.net/sxhelijian/article/details/13705597 例1: 用一个结构表示点,输入点的横纵坐标,输出该点到原点的距离 #include <stdio.h> #include <math.h> struct Point { float x; float y; }; int main() { struct Point p; float d; printf("请输入点的坐标: &

计算机科学-第6周 文件 题目及参考解答

<计算机科学>课程主页在:http://blog.csdn.net/sxhelijian/article/details/13705597 题目:文件salary1.txt是某单位100名员工的工号.基本工资和绩效工资.编程序(1)从文件中读取数据,求出总工资,并在屏幕上显示信息:(2)将完整的工资单保存到文件salary2.txt中.(3)将总工资超过5000元的员工的工号保存到文件rich.txt中.(4)在屏幕上显示工资最高的员工的工资信息提示:(1)定义一个结构体数组保存从文件中读入的

计算机科学-第9周 数组、结构体、指针综合练习 题目及参考解答

<计算机科学>课程主页在:http://blog.csdn.net/sxhelijian/article/details/13705597 发现第9周的题目及参考没有公布,补上. 1.阅读程序阅读下面的程序,写出运行结果,上机时运行程序,记录结果,从而能够理解指针的用法(1) #include<stdio.h> int main(){ char a[]="Hello World",*p; int i; i=8; p=a+i; printf("%s\n&

计算机科学-第3周 排序和查找 题目及参考解答

<计算机科学>课程主页在:http://blog.csdn.net/sxhelijian/article/details/13705597 本周练习需要的数据文件下载自:链接 练习一 salary.txt中是某企业(不超过500)职工的工资,请编程读入数据,给每名职工的工资增加20%后降序排序,并输出排序后的结果.运行程序时,请将salary.txt复制到源文件同一文件夹下.Salary.txt在提供的材料中. 下面是完成应用的部分代码,可以增加定义需要的变量,但不建议改动已有的代码: #in