zoukankan      html  css  js  c++  java
  • hdu 2004 成绩转换

    hdu 2004 成绩转换

    link

    题目描述

    Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)
    Total Submission(s): 185104 Accepted Submission(s): 80860

    Problem Description
    输入一个百分制的成绩t,将其转换成对应的等级,具体转换规则如下:
    90~100为A;
    80~89为B;
    70~79为C;
    60~69为D;
    0~59为E;

    Input
    输入数据有多组,每组占一行,由一个整数组成。

    Output
    对于每组输入数据,输出一行。如果输入数据不在0~100范围内,请输出一行:“Score is error!”。

    Sample Input
    56
    67
    100
    123

    Sample Output
    E
    D
    A
    Score is error!

    Author
    lcy

    问题解答

    以下给出自己用的两种代码:
    方法一:(switch语句判断)

    #include <stdio.h>
    
    int main()
    {
        int t;
        while(scanf("%d",&t)!=EOF)
        {
          if(t>100||t<0) printf("Score is error!
    ");
          else
          {
              switch(t/10)
                {
                    case 0 ... 5: printf("E
    ");break;
                    case 6:printf("D
    ");break;
                    case 7:printf("C
    ");break;
                    case 8:printf("B
    ");break;
                    case 9 ... 10: printf("A
    ");break;
                    default:printf("Score is error!
    ");break;
                }
          }
        }
        return 0;
    }
    

    笔记1

    1. 第8行,必须加上这个判断语句if(t>100||t<0) printf(“Score is error! ”);如果单用switch(t/10),会导致-1~-9数据测试失败,结果失真。
    2. 第11行,switch语句常用于断点式判断,但不可能写case 0,case 1,case 2,……,case 100一百多个判断吧。所以用t/10来实现,此处t为整形,那么t/10意味着取整;若t是float型之类的,则t/10就是一般意义上的除法。
    3. switch语句的每个case后面通常来说要加break语句跳出循环(太基础了,书上一般都会有讲解,在这里就不解释了)。此外,case后面跟的多条语句可以不用{花括号}括起来。

    方法二:(if…else if语句判断)

    #include <stdio.h>
    int main()
    {
     int t;
     while(scanf("%d",&t)!=EOF)
     {
      if(t<=100&&t>=90) printf("A
    ");
      else if(t<=89&&t>=80) printf("B
    ");
      else if(t<=79&&t>=70) printf("C
    ");
      else if(t<=69&&t>=60) printf("D
    ");
      else if(t<=59&&t>=0) printf("E
    ");
      else printf("Score is error!
    ");
     }
     return 0;
    }
    

    笔记2

    1. 此道题用这种做法明显更为简便以及可视化程度高。

    PS:悄悄地在最后吐槽一下,这个毒瘤题目耗了我一天的时间QAQ。题目没有看清楚,一直想歪了,幻想着测试文件会给出一个字母或者其他非数字内字符进行测试。然后就想用scanf("%d",&t)==1来判断用户输入的是不是规定的数字,如果不是,就用getchar()吞掉。但问题是必须要同时保证该程序可以输入多组数据,直至测试文件结束,那就意味着我必须要用scanf("%d",&t)!=EOF来判断,即意味着我必须把一个字符输入两遍才能判断,否则会出现漏字符没有判断的情况!更毒瘤的是学长规定必须要用c语言来写,至今没有想到用c语言同时解决两者的办法。如果有大佬的代码调试成功,欢迎来讨论>- . -<

  • 相关阅读:
    Docker 私有仓库搭建
    事务提交与不同数据库的自增方式
    多环境切换&&注解方式&&增删改返回值问题
    查询缓存&&逆向工程
    Mybatis整合Log4j、延迟加载
    关联查询
    MyBatis实现动态SQL
    输出参数resultType
    MyBatis调用存储过程执行CRUD
    两种取值符号的异同
  • 原文地址:https://www.cnblogs.com/yuzilan/p/10626221.html
Copyright © 2011-2022 走看看