读书人

请评价一上这段代码并提出需要改进的

发布时间: 2012-08-17 02:08:34 作者: rapoo

请评价一下这段代码,并提出需要改进的地方,谢谢
是一个订购程序

C/C++ code
#include <stdio.h>#define CAOXIAN 1.25#define TIANCAI 0.65#define LUOBO 0.89#define ZHEKOU 0.95char get_choice (void); void count (float caoxian, float tiancai, float luobo);char get_first (void);int get_int (void);int main (void){    char choice;    float caoxian, tiancai, luobo;    caoxian = tiancai = luobo = 0;    printf ("******************************************************\n");    printf ("a) 朝鲜蓟: 1.25美元/磅            b) 甜菜: 0.65美元/磅\n");    printf ("c) 胡萝卜: 0.89美元/磅            q) 结束订购并计算   \n");    printf ("******************************************************\n");    while ((choice = get_choice ()) != 'q')    {            switch (choice)            {            case 'a':                printf ("您需要多少磅朝鲜蓟:  ");                caoxian = get_int ();                printf ("选购其他或输入q计算费用:  ");                break;            case 'b':                printf ("您需要多少磅甜菜:  ");                tiancai = get_int ();                printf ("选购其他或输入q计算费用:  ");                break;            case 'c':                printf ("您需要多少磅胡萝卜:  ");                luobo = get_int ();                printf ("选购其他或输入q计算费用:  ");                break;            default:                printf ("Program error!\n");                break;            }    }    count (caoxian, tiancai, luobo);    system ("pause");    return 0;}char get_choice (void){    char input;        input = get_first ();    while ((input < 'a' || input > 'c') && input != 'q')    {        printf ("输入错误,请重新输入!\n");        input = get_first ();    }    return input;}char get_first (void){    char ch;        while ((ch = getchar ()) == '\n')        continue;    while (getchar () != '\n')        continue;    return ch;}void count (float caoxian, float tiancai, float luobo){        float caoxian_f, tiancai_f, luobo_f, zf, zz, yf, all;    caoxian_f = caoxian * CAOXIAN;    tiancai_f = tiancai * TIANCAI;    luobo_f = luobo * LUOBO;    zf = caoxian_f + tiancai_f + luobo_f;    zz = caoxian + tiancai + luobo;    if (zz <= 5)        yf = 3.5;    else if (zz > 5 && zz <= 20)        yf = 10;    else         yf = 8 + zz * 0.1;    all = yf + zf;    printf ("\n\n您订购了:  朝鲜蓟%6.2f磅   甜菜%6.2f磅   胡萝卜%6.2f磅\n", caoxian, tiancai, luobo);    printf ("朝鲜蓟的费用:  %.2f\n", caoxian_f);    printf ("  甜菜的费用:  %.2f\n", tiancai_f);    printf ("胡萝卜的费用:  %.2f\n", luobo_f);    if (zf >= 100)    {        printf ("因为订单总费用超过100$,您将获得5%%的折扣优惠。\n");        printf ("优惠后的订单总费用为:  %.2f\n", zf * ZHEKOU);    }    else     {        printf ("订单总费用(不含运费):  %.2f\n", zf);    }    printf ("订单总重%.2f磅,运费为:  %.2f\n", zz, yf);    printf ("您总共需要支付:  %.2f\n\n", all);}int get_int (void){    int num;    while (scanf ("%d", &num) != 1)    {        printf ("输入错误,请重新输入:  ");        while (getchar () != '\n')            continue;    }    return num;}    


[解决办法]
作为一个C程序,从coding standard来说,没有一个显示的命名法则,变量名字随意制定不太好。从格式上来看基本完美。从算法上来看也没啥问题。挺好~~
[解决办法]
C/C++ code
#include <stdio.h>#define CAOXIAN 1.25f#define TIANCAI 0.65f#define LUOBO   0.89f#define ZHEKOU  0.95fvoid count(float caoxian, float tiancai, float luobo);int get_int(void);//----------------------------------------int main(void){    char choice;    float caoxian, tiancai, luobo;    caoxian = tiancai = luobo = 0.0f;    printf("**********************\n");    printf("a) 朝鲜蓟: 1.25美元/磅\n");    printf("b)   甜菜: 0.65美元/磅\n");    printf("c) 胡萝卜: 0.89美元/磅\n");    printf("**********************\n");    printf("q) 结束订购并计算\n");    printf("请按键选择:");fflush(stdout);    while (1)    {        rewind(stdin);        choice = getchar();        if ('q'==choice) break;        switch (choice)        {        case 'a':            printf("您需要多少磅朝鲜蓟(1..1000):");fflush(stdout);            caoxian += get_int();            break;        case 'b':            printf("您需要多少磅甜菜(1..1000):");fflush(stdout);            tiancai += get_int();            break;        case 'c':            printf("您需要多少磅胡萝卜(1..1000):");fflush(stdout);            luobo += get_int();            break;        default:            printf("按键错误!请按a,b,c,q选择:");fflush(stdout);            continue;            break;        }        printf("目前已选购a)朝鲜蓟%.2f磅,b)甜菜%.2f磅,c)胡萝卜%.2f磅\n",caoxian, tiancai, luobo);        printf("请继续选购a,b,c或输入q计算总费用:");fflush(stdout);    }    count(caoxian, tiancai, luobo);    system("pause");    return 0;}//----------------------------------------void count(float caoxian, float tiancai, float luobo){    float caoxian_f, tiancai_f, luobo_f, zf, zz, yf, all;    caoxian_f = caoxian * CAOXIAN;    tiancai_f = tiancai * TIANCAI;    luobo_f   = luobo   * LUOBO;    zf = caoxian_f + tiancai_f + luobo_f;    zz = caoxian   + tiancai   + luobo;    if (zz <= 5.0f)                   yf =  3.5f;    else if (5.0f< zz && zz <= 20.0f) yf = 10.0f;    else                              yf =  8.0f + zz * 0.1f;    printf("\n\n您订购了:  朝鲜蓟%6.2f磅,甜菜%6.2f磅,胡萝卜%6.2f磅。\n", caoxian, tiancai, luobo);    printf("朝鲜蓟的费用:  %.2f\n", caoxian_f);    printf("  甜菜的费用:  %.2f\n", tiancai_f);    printf("胡萝卜的费用:  %.2f\n", luobo_f);    if (zf >= 100.0f) {        zf *= ZHEKOU;        printf("因为订单总费用超过100$,您将获得5%%的折扣优惠。\n");        printf("优惠后的订单总费用(不含运费):  %.2f\n", zf);    } else {        printf("订单总费用(不含运费):  %.2f\n", zf);    }    all = yf + zf;    printf("订单总重%.2f磅,运费为:  %.2f\n", zz, yf);    printf("您总共需要支付:  %.2f\n\n", all);}//----------------------------------------int get_int(void){    int num;    while (1) {        rewind(stdin);        if (1==scanf("%d", &num)) {            if (0<num && num <=1000) break;        }        printf("输入错误,请重新输入:");fflush(stdout);    }    return num;} 

读书人网 >C语言

热点推荐