zoukankan      html  css  js  c++  java
  • CCF NOI1014 写评语

    问题链接CCF NOI1014 写评语




    时间限制: 1000 ms  空间限制: 262144 KB

    题目描述

      输入某学生成绩score,根据成绩好坏输出相应评语。如果成绩在大于等于90,输出“Excellent”;如果成绩在大于等于80分且小于90分,输出“Good”;如果成绩大于等于60分且小于80分,输出“Pass”;成绩小于60分,输出“Fail”。

    输入

      输入一个整数score,表示学生的成绩。

    输出

      输出对应的评语。

    样例输入

    65

    样例输出

    Pass

    数据范围限制

      0<=score<=100



    问题分析

      这是一个把百分制成绩转换为等级成绩的问题。

      这个问题有三种解法:

      一是根据输入的成绩直接进行范围判定,输出结果。这是一种最差的做法。

      二是先将输入成绩除以10,再进行判定。这种方法大幅简化了判定逻辑。

      三是查表法,先计算后差表。这种做法逻辑简洁,程序通用性强。问题要求改变时不需要修改程序逻辑,只需要修改表(程序中可能用数组存储)。

    程序说明

      这里给出了2种程序。后一种是用查表法实现的,是2次查表,表格从一定意义上来说实现了一种映射。

    要点详解
    • 一个复杂的计算,不是直接处理,而是分步进行处理,每一步的逻辑都变得简单,整体的处理逻辑也简化了。
    • 查表法是一种值得推荐的方法,优点多多。
    • 程序中,出现了指针数组,需要理解和掌握。



    100分通过的C语言程序之一:

    #include <stdio.h>
    
    int main(void)
    {
        int score;
    
        scanf("%d", &score);
    
        switch(score / 10) {
        case 10:
        case 9:
            printf("Excellent
    ");
            break;
        case 8:
            printf("Good
    ");
            break;
        case 7:
        case 6:
            printf("Pass
    ");
            break;
        default:
            printf("Fail
    ");
        }
    
        return 0;
    }


    100分通过的C语言程序之二:

    #include <stdio.h>
    
    int main(void)
    {
        char *ans[] = {
             "Excellent"
            , "Good"
            , "Pass"
            , "Fail"
        };
        int level[] = {3, 3, 3, 3, 3, 3, 2, 2, 1, 0, 0};
        
        int score;
                      
        scanf("%d", &score);
        
        printf("%s
    ", ans[level[score / 10]]);
        
        return 0;
    }



  • 相关阅读:
    Unity中的欧拉旋转
    Unity-Rigidbody碰撞穿透
    C#实现单例模式的几种方法
    C#OO初级思想
    C#虚方法virtual
    数据库查询
    DNS 域名服务器搭建
    iptables 基本操作
    通过adb 操作手机
    linux 调整逻辑卷空间大小
  • 原文地址:https://www.cnblogs.com/tigerisland/p/7563930.html
Copyright © 2011-2022 走看看