A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

题目:
// 某个自动加油站有 ‘a’,‘b’,‘c’三种汽油品种,单价分别为 6.92,7.37,7.64(元/公升),也提供了“自己加”或“协助加”两个服务等级,这样用户可以得到5%或10%的优惠,请编程序针对用户输入加油量x,汽油品种y和服务类型z(‘f’—自动加,‘m’—自己加,‘e’—协助加),(注:‘f’—自动加无优惠),计算应付款pay。(请用多分支选择switch语句)。

#include <stdio.h>

int main(int argc, const char * argv[]) {
    // 定义4个变量,一个是选择加油方式,一个是汽油品种,一个是加油量,一个是应付的钱
    float x = 0.0f,pay = 0.0f;
    char z ,y ;
    //提示客户选择加油方式
    printf("请选择加油方式,f 是自动加、m 是自己加、e 是协助加:\n");
    //提示客户选择汽油品种
    printf("请选择汽油品种,a类汽油、b类汽油、c类汽油:\n");
    scanf("%c,%c",&z,&y);
    //提示用户输入加油量
    printf("请输入加油量:");
    scanf("%f",&x);
    switch (y) {
        case 'a':
            switch (z) {
                case 'f':
                    pay = 6.92*x;
                    break;
                case 'm':
                    pay = 6.92*x*0.95;
                    break;
                default:
                    pay = 6.92*x*0.90;
                    break;
            }
            break;
        case 'b':
            switch (z) {
                case 'f':
                    pay = 7.37*x;
                    break;
                case 'm':
                    pay = 7.37*x*0.95;
                    break;
                default:
                    pay = 7.37*x*0.90;
                    break;
            }
            break;
        default:
            switch (z) {
                case 'f':
                    pay = 7.64*x;
                    break;
                case 'm':
                    pay = 7.64*x*0.95;
                    break;
                default:
                    pay = 7.64*x*0.90;
                    break;

            break;
    }
            break;
    }
    printf("应付:%.2f",pay);
    return 0;
}

1 个回复

正序浏览
太长 没细看 有几点建议
1,两个scanf之间没有清除缓冲区的代码,会导致回车被第二格scanf读取
2,不应该嵌套switch,应该第一个switch将一个选择保存为一个变量,以便后面计算
3,不应该将其中一个选择写到default里,因为你没有对输入的数据进行过滤,会导致其他输入直接跳到default里
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马