C Primer Plus (第六版)第七章 编程 练习题 部分 解答

C Primer Plus (第六版)第七章 编程练习题 部分答题代码

最近在学习C Primer Plus ,以下是其中第七章编程题,我写的代码。已测试通过。(IDE :Codeblocks),不妥之处请指正
1.读取输入读到#字符停止,然后报告读取的空格数、换行数和所有其他字符

#include 

int main(void)
{
    char ch;
    unsigned n_space=0;/*空格数*/
    unsigned n_lf=0;/*换行符数*/
    unsigned n_other;/*其他字符数*/
    int inword=0;

    printf("Please enter text to be analyzed(# to terminate):\n");
    while((ch=getchar())!='#')
    {
        inword++; 
        switch(ch)
        {
            case '\n': n_lf++;
                       break;
            case ' ': n_space++;
                      break;
            default : n_other++;
                      break;
        }
    }
    if(inword==0)
        printf("没有字符输入!\n ");
    else
        printf("空格数=%u,换行符数=%u,其他字符=%u\n",n_space,n_lf,n_other);
    printf("Bye!\n");
    return 0;
}

2.读取输入,读到#停止,然后打印每个输入字符以及对应的ASCII码值(十进制)。每行打印8个“字符-ASCII码”组合

/* 读取输入,读到#停止,然后打印每个输入字符以及对应的ASCII码值(十进制)。
每行打印8个“字符-ASCII码”组合*/
#include 
#include //包含strlen()函数
#define COL 8//每行打印组合数
#define SIZE 1024//最大字符限制
#define L '-'//字符与ASCII码中间的破折号
#define LF '&'//使用&代替换行字符打印

int main(void)
{
    char ch;
    char text[SIZE]={0};
    unsigned index=0;

/* *************读取输入数据并放入数组用于打印******************* */
    printf("Enter text to analyzed:# to terminate.\n ");
    while((ch=getchar())!='#'&&index

3.读取整数,直到用户输入0,输入结束后,报告用户输入的偶数个数,这些偶数的平均值,奇数的个数及其奇数的平均值。

/*读取整数,直到用户输入0,输入结束后,报告用户输入的偶数个数,这些偶数的平均值,奇数的个数及其奇数的平均值。*/
#include 


int main(void)
{
    long data;//用户输入的数值
    long sum_e=0;//偶数和
    long sum_o=0;//奇数和
    unsigned even=0;//偶数个数
    unsigned odd=0;//奇数个数
    unsigned num=0;//用户输入数值个数

/* ****************数值录入及分析************************************ */
    printf("Please enter some interer to anayzed:enter number 0 to terminate.\n");//提示用户输入整数
    while(scanf("%ld",&data)==1&&data!=0)//输入无异常及数值不等于0时循环
    {
        num++;
        if(data%2==0)
        {
            even++;//偶数个数递增
            sum_e+=data;//偶数求和
        }
        else
        {
            odd++;//奇数个数递增
            sum_o+=data;//奇数求和
        }
    }

/* ******************分析结果报告************************************ */
    if(num==0)
        printf("None integer entered!");//未进入循环时,即无有效数值被分析时提示
    else
    {
        printf("The number of even numbers is %u,and the average of even numbers is %ld\n",even,sum_e/even);//偶数分析报告
        printf("The number of odd numbers is %u,and the average of odd numbers is %ld\n",odd,sum_o/odd);//奇数分析报告
    }
    printf("Bye!\n");
    return 0;
}

4.使用if else 语句编写–读取输入,读到#停止,
用感叹号代替句号,用两个感叹号替换原来的感叹号,最后报告进行了多少次替换
5. 使用switch 语句再编写一次
两题代码放在一起了

/* 使用if else 语句编写--读取输入,读到#停止,
用感叹号代替句号,用两个感叹号替换原来的感叹号,最后报告进行了多少次替换*/
/* 使用switch 语句再编写一次*/
#include 

int main(void)
{
    char ch;//用户输入字符
    unsigned num=0;//替换次数

/* **********任务处理循环**********  */
    printf("Please enter text to process.\n");
    printf("Enter # to terminate.\n");
    while((ch=getchar())!='#')
    {
/* **************使用if else语句编写************** */
        /*
        if(ch=='.')
        {
            printf("!");
            num++;
        }
        else if(ch=='!')
        {
            printf("!!");
            num++;
        }

        else
            printf("%c",ch);
        */

/* ***********使用switch 语句编写***************** */
        switch(ch)
        {
            case '.': num++,printf("!");
                      break;
            case '!': num++,printf("!!");
                      break;
            default : putchar(ch);
        }
    }

/* **********结果报告***************************** */
    printf("符号替换了%u次",num);
    printf("Bye!\n");
    return 0;
}

6.读取输入,读到#停止,报告ei出现的次数

#include 

int main(void)
{
    char ch;//当前字符
    char prev='\n';//前一个字符
    unsigned times=0;//ei字符出现次数
    printf("Enter text to analyzed:(# to terminate)\n");
    while((ch=getchar())!='#')
    {
        if(prev=='e'&&ch=='i')
            times++;
        prev=ch;
    }
    printf("The\"ei\" finded %u times\n",times);
    printf("Bye!\n");
    return 0;
}

7.提示用户输入一周工作时数,然后打印工资总额、税金和净收入。
假设如下:
a.基本工资=10.00美元/小时
b.加班(超过40小时)=1.5倍的时间
c.税率: 前300美元为15%
续150美元为20%
余下的为25%
用#define定义符号常量。不用在意是否符合当前税法

/* #############################################################
   #提示用户输入一周工作时数,然后打印工资总额、税金和净收入。 #
   # 假设如下:                                                #
   # a.基本工资=10.00美元/小时                                 #
   # b.加班(超过40小时)=1.5倍的时间                          #
   # c.税率:  前300美元为15%                                  #
   #           续150美元为20%                                  #
   #           余下的为25%                                     #
   # 用#define定义符号常量。不用在意是否符合当前税法           #
   ############################################################# */

#include 
#define HOURLY_WAGE 10.00 //时薪10.00美元/小时
#define WORK_T_W 40.0 //每周工作40小时
#define SALARY_BASE (HOURLY_WAGE*WORK_T_W) // 周基本工资(满勤)
#define TIMES 1.5 //加班计算倍率
#define BREAK1 300.0 //300美元界限
#define BREAK2 450.0 //450美元界限
#define RATE1 0.15 //前300美元税率为15%
#define RATE2 0.2 //续150美元(即300--450美元)税率为20%
#define RATE3 0.25 // 超过450美元部分税率为25%
#define TAX_BASE1 (BREAK1*RATE1) //350美元时的税赋
#define TAX_BASE2 (TAX_BASE1+(BREAK2-BREAK1)*RATE2) //450美元时的税赋
#define MAX 168.0 //周最多工作时间


int main(void)
{
    float work_hrs; //工作时数
    float tax=.0; //税金
    float salary=.0; //工资总额
    float income=.0; //净收入

    printf("Enter your work hours of the last week.\n");
    if((scanf("%f",&work_hrs)==1&&work_hrs>0)&&work_hrs<=MAX)
    {
        if(work_hrs<=WORK_T_W)
            salary=work_hrs*HOURLY_WAGE;
        else
            salary=SALARY_BASE+(work_hrs-WORK_T_W)*TIMES*HOURLY_WAGE;
        if(salary<=BREAK1)
            tax=salary*RATE1;
        else if(salary<=BREAK2)
            tax=TAX_BASE1+(salary-BREAK1)*RATE2;
        else
            tax=TAX_BASE1+TAX_BASE2+(salary-BREAK2)*RATE3;
        income=salary-tax;
        printf("本周工资总额为: %5.2f;税金为: %5.2f;净收入为: %5.2f\n",salary,tax,income);
    }
    else
        printf("您的输入错误或超出周最大或最小工作时间。最大工作时间是168小时,最小为0.");

    printf("Bye!\n");

    return 0;
}

8.修改练习7的假设a,让程序可以给出一个选择工资等级带单。使用switch完成工资等级选择,显示菜单应该类似这样:


Enter the number corresponding to the desired pay rate or action:

  1. $8.75/hr 2) $9.33/hr
  2. $10.00/hr 4) $11.20/hr
  3. quit

/* ##########################################################################
   #提示用户输入一周工作时数,然后打印工资总额、税金和净收入。              #
   # 假设如下:                                                             #
   # a.基本工资等级菜单供用户选择                                                     #
   #    *****************************************************************   #
   #    Enter the number corresponding to the desired pay rate or action:   #
   #    1) $8.75/hr                           2) $9.33/hr                   #
   #    3) $10.00/hr                          4) $11.20/hr                  #
   #    5) quit                                                             #
   #    *****************************************************************   #
   # b.加班(超过40小时)=1.5倍的时间                                       #
   # c.税率:  前300美元为15%                                               #
   #           续150美元为20%                                               #
   #           余下的为25%                                                  #
   # 用#define定义符号常量。不用在意是否符合当前税法                        #
   ########################################################################## */

#include 
#define WORK_T_W 40.0 //每周工作40小时
#define TIMES 1.5 //加班计算倍率
#define BREAK1 300.0 //300美元界限
#define BREAK2 450.0 //450美元界限
#define RATE1 0.15 //前300美元税率为15%
#define RATE2 0.2 //续150美元(即300--450美元)税率为20%
#define RATE3 0.25 // 超过450美元部分税率为25%
#define TAX_BASE1 (BREAK1*RATE1) //350美元时的税赋
#define TAX_BASE2 (TAX_BASE1+(BREAK2-BREAK1)*RATE2) //450美元时的税赋
#define MAX 168.0 //周最多工作时间


int main(void)
{
    float hour_wage=.0; //时薪
    float work_hrs=.0; //工作时数
    float tax=.0; //税金
    float salary=.0; //工资总额
    float income=.0; //净收入
    char option='0';
    int status;

    /* ######################### 工资等级菜单显示及选择 ############################# */
    while(option<'1'||option>'5') // 菜单的显示与选择处理
    {
        printf("*****************************************************************\n");
        printf("Enter the number corresponding to the desired pay rate or action:\n");
        printf("1) $8.75/hr\t\t\t\t2) $9.33/hr\n");
        printf("3) $10.00/hr\t\t\t\t4) $11.20/hr\n");
        printf("5) quit\n");
        printf("*****************************************************************\n");
        switch(option=getchar())
        {
            case '1': hour_wage=8.75;
                      break;
            case '2': hour_wage=9.33;
                      break;
            case '3': hour_wage=10.00;
                      break;
            case '4': hour_wage=11.20;
                      break;
            case '5': break;
            default : printf("Enter error!!!\nPlease choose the right option!\n");
                      break;
        }
        while(getchar()!='\n')
            continue; //丢掉缓冲区剩余字符,以免干扰下次程序读取输入
    }

    /* ############################## 工作小时输入处理及工资计算 ################################ */
    if(option!='5') //option是1--4时 程序继续 要求用户输入及计算工资
    {
        printf("You entered the number of option is %2c ,hourly wage is $%.2f/hr.\n",option,hour_wage);
        printf("The maximum working time per week is 168 hours and the minimum is 0 hours.\n");
        printf("Enter your work hours of the week...\n");

        /* ********用户输入工作小时数验证********* */
        while((status=scanf("%f",&work_hrs))!=1||work_hrs<0||work_hrs>MAX)//用户工作小时输入判断,错误时需要重新输入
        {
            while(getchar()!='\n')
                continue;//丢掉缓冲区剩余字符
            printf("The work hours entered error!!! You have to retype!\n");
            printf("The maximum working time per week is 168 hours and the minimum is 0 hours.\n");
            printf("Enter your work hours of the week...\n");
        }
        while(getchar()!='\n')
            continue;//丢掉缓冲区剩余字符,本程序中无此处并无影响

        /* ***********工资及税金计算************* */
        printf("You Entered the work-hour is: %.2f\n",work_hrs);
        if(work_hrs<=WORK_T_W)
            salary=work_hrs*hour_wage; //工作时数小于等于40hr时的薪资计算方式
        else
            salary=(work_hrs+(work_hrs-WORK_T_W)*TIMES)*hour_wage; //工作时数大于40hr时的薪资计算(加班计算为1.5倍)
        if(salary<=BREAK1)
            tax=salary*RATE1; //工资低于300美元时,的税金计算方法
        else if(salary<=BREAK2)
            tax=TAX_BASE1+(salary-BREAK1)*RATE2; //工资在300-450美元之间时的税金计算方法
        else
            tax=TAX_BASE1+TAX_BASE2+(salary-BREAK2)*RATE3; //工资大于450美元时的税金计算方法
        income=salary-tax; //净收入=薪资总额-税金
                printf("The total wage is: $%5.2f;and the tax is: $%5.2f;so the income: $%5.2f\n",salary,tax,income);
    }
    printf("Bye!\n");

    return 0;
}

9.编写一个程序,只接受正整数输入,然后显示所有小于或等于该数的素数

/* 只接受正整数输入,然后显示所有小于或等于该数的素数*/
#include 
#include 

int main(void)
{
    long num;
    long prime;
    long div;
    int flag;

    printf("Enter a unsigned integer.\n");
    printf("q to quit.\n");
    if(scanf("%ld",&num)==1&&num>0)
    {
        if(num<=1)
            printf("%ld不是质数和素数,小于等于该数没有素数。\n",num);
        else if(num==2)
            printf("小于等于%ld的素数如下:\n%-6ld\n",num,num);
        else if(num==3)
            printf("小于等于%ld的素数如下:\n%-6ld%-6ld\n",num,num,num-1);
        else
        {
            printf("小于等于%ld的素数如下:\n",num);
            printf("%-6ld%-6ld",2,3);
            for(prime=4;prime<=num;prime++)
            {
                flag=1;
                for(div=2;div*div<=prime;div++)
                {
                    if(prime%div==0)
                    {
                        flag=0;
                        break;
                    }
                }
                if(flag==1)
                    printf("%-6ld",prime);
            }
            printf("\n");
        }
    }
    printf("Done!\nBye!\n");
    return 0;
}

10.税金计算:
1988年的美国联邦税收计划是近代最简单的税收方案。
它分为4个类别,每个类别有两个等级。
下面是税收计划的摘要(美元数为应征税的收入):
类别 税金
单身 17850美元按15%计,超出部分按28%计
户主 23900美元按15%计,超出部分按28%计
已婚,共有 29750美元按15%计,超出部分按28%计
已婚,离异 14875美元按15%计,超出部分按28%计
例如:一位工资为20000美元的单身纳税人,应缴纳税费 0.15x17850+0.28x(20000-17850)美元。
编写一个程序,让用户指定缴纳税金的种类和应纳税收入,然后计算税金。
程序应通过循环让用户可以多次输入。
(题目太长了,贴个程序运行图片吧,瞎捣鼓)
C Primer Plus (第六版)第七章 编程 练习题 部分 解答_第1张图片

以下是代码

/* 税金计算 */
#include 
#define VERSION "0.0.1"
#define AUTHOR "Chenwei"
#define SOFT_NAME "Tax calculator"
#define MODIFY_DATE "2018/12/17"
#define MODIFY_TIME "17:51"
#define SINGLE 17850.
#define HOST 23900.
#define MARRIED 29750.
#define DIVORCE 14875.
#define RATE1 0.15
#define RATE2 0.28

int main(void)
{
    char option='0'; //类别编号
    double over; //超出over部分税率28%
    double tx_income; //应纳税收入
    double tax; // 应缴纳税金

    /* ################################# 版本显示 ################################ */
    printf("┌┈┈┈┈┈┈┈┈┈┬┈┈┈┈┈┈┈┈┈┬┈┈┈┈┈┈┈┈┈┬┈┈┈┈┈┈┈┈┈┬┈┈┈┈┈┈┈┈┈┐\n");
    printf("┊  Software name   ┊      Version     ┊      Author      ┊ Last Modify Date ┊ Last Modify Time ┊\n");
    printf("├┈┈┈┈┈┈┈┈┈┼┈┈┈┈┈┈┈┈┈┼┈┈┈┈┈┈┈┈┈┼┈┈┈┈┈┈┈┈┈┼┈┈┈┈┈┈┈┈┈┤\n");
    printf("┊  %s  ┊       %s      ┊     %s      ┊   %s     ┊      %s       ┊\n",SOFT_NAME,VERSION,AUTHOR,MODIFY_DATE,MODIFY_TIME);
    printf("└┈┈┈┈┈┈┈┈┈┴┈┈┈┈┈┈┈┈┈┴┈┈┈┈┈┈┈┈┈┴┈┈┈┈┈┈┈┈┈┴┈┈┈┈┈┈┈┈┈┘\n");
    printf("Welcome to use this software!\nPress Enter to continue...\n");
    while(getchar()!='\n')
        continue; //按回车键继续,并清空输入缓冲区

    /* ------------------------------------------------------------------------------------ */
    /* ################################任务循环处理部分#################################### */
    /* ------------------------------------------------------------------------------------ */
    while(option!='5')
    {
         /* ################################ 变量初始化 ################################ */
        over=.0,tx_income=.0,tax=.0; //变量初始化

        /* ######################### 菜单表格显示及选择读取 ############################ */
        printf("Follow is the United states Tax plan of 1988.\n");
        printf("────┬──────────┬──────────────────────────\n");
        printf("  序号  │类别                │税金         \n");
        printf("────┼──────────┼──────────────────────────\n");
        printf("    1   │单身                │%.0f美元按照%.0f%%计,超出部分按%.0f%%计\n",SINGLE,RATE1*100,RATE2*100);
        printf("────┼──────────┼──────────────────────────\n");
        printf("    2   │户主                │%.0f美元按照%.0f%%计,超出部分按%.0f%%计\n",HOST,RATE1*100,RATE2*100);
        printf("────┼──────────┼──────────────────────────\n");
        printf("    3   │已婚,共有          │%.0f美元按照%.0f%%计,超出部分按%.0f%%计\n",MARRIED,RATE1*100,RATE2*100);
        printf("────┼──────────┼──────────────────────────\n");
        printf("    4   │已婚,离异          │%.0f美元按照%.0f%%计,超出部分按%.0f%%计\n",DIVORCE,RATE1*100,RATE2*100);
        printf("────┼──────────┼──────────────────────────\n");
        printf("    5   │QUIT                │选择此选项,结束程序\n");
        printf("────┴──────────┴──────────────────────────\n");

        do //菜单选项选择输入处理
        {
            printf("Please enter the serial number of category options  for calculation...\n");
            printf("For example: you can enter 1 or 2 or 3 or....\n");
            option=getchar();
            while(getchar()!='\n')
                continue; //输入缓冲区清理,防止残留字符导致再次读取输入时出错
            if(option<'1'||option>'5')
                printf("Enter error!!!\nYou have to re-select the option!\n\n"); //非法选项报告
        } while(option<'1'||option>'5');//如果为非法选项,就继续要求输入

        /* ######################## 根据菜单选项,进行参数分配 ######################### */
        switch(option)
        {
            case '1' :over=SINGLE;
                      break;
            case '2' :over=HOST;
                      break;
            case '3' :over=MARRIED;
                      break;
            case '4' :over=DIVORCE;
                      break;
            case '5' :break;
        }
        /* ##################### 用户应纳税收入输入处理及税金计算 ###################### */
        if(option!='5')
        {
            printf("The option you entered is: %2c.\n",option);
            printf("The tax plan is: %.0f 美元按照%.0f%%计,超出部分按%.0f%%计。\n",over,RATE1*100,RATE2*100);

            /* *******************用户输入数据处理********************* */
            printf("Please enter the taxable income to calculate...\n");
            while(scanf("%lf",&tx_income)!=1||tx_income<0.) //用户数据输入及非法数处理
            {
                printf("Enter error!!!\nYou have to retype!\n");
                printf("Please enter your taxable income to calculate...\n");
                while(getchar()!='\n')
                    continue; // 缓冲区多余字符清理
            }
            while(getchar()!='\n')
                    continue; // 缓冲区多余字符清理
            printf("You entered the taxable income is: $%6.2f\n",tx_income);

            /* *******************税金计算********************* */
            if(tx_income<=over)
                tax=RATE1*tx_income;
            else
                tax=RATE1*over+RATE2*(tx_income-over);
            printf("The taxes to be paid are: $%6.2f.\n\n",tax);
            printf("Press Enter to continue...\n");
            while(getchar()!='\n')
                continue; // 缓冲区多余字符清理,程序继续
        }
        /* ############################# 程序退出提示 ################################## */
        else
        {
            printf("The option you entered is: %2c.\n",option);
            printf("About to quit ...\n");
        }
    }
    printf("Bye!\n");
    return 0;
}

11.计算蔬菜价格:
ABC邮购杂货店出售的洋蓟售价为2.05美元/磅,甜菜售价1.15美元/磅,胡萝卜售价1.05美元/磅。在添加运费之前,100美元的订单有5%的打折优惠。少于或等于5磅的订单收取6.5美元的运费和包装费,5磅-20磅的订单收取14美元,超过20磅的订单在14美元的基础上每续重1磅增加0.5美元。编写一个程序。。。。。。(题目太长,此处省略1万字)
直接代码

/* 第七章编程题 11---计算蔬菜定购费用*/
/*-------------------------------------------------------------------------------------*/
/* 名称           * 版本        * 作者          * 最后修改日期      * 最后修改时间     */
/*-------------------------------------------------------------------------------------*/
/* 定购计算器     * 0.0.1       * Chenwei       * 2018-12-18        * 12:56            */
/*-------------------------------------------------------------------------------------*/
#include 
#include 
#define ARTICHOKE 2.05 //洋蓟单价2.05美元/磅
#define BEET 1.15 //甜菜单价1.15美元/磅
#define CARROT 1.09 //胡萝卜单价1.15美元/磅
#define A_NAME "洋蓟"
#define B_NAME "甜菜"
#define C_NAME "胡萝卜"
#define CLASS1 5 //5磅以下收取6.5美元运费和包装费,5-20磅收取14美元
#define CLASS2 20 //5-20磅收取14美元,超过20磅:每续重1磅增加0.5美元
#define CARRY1 6.5
#define CARRY2 14
#define ADD 0.5 //超过20磅:每续重1磅增加0.5美元
#define FREE_BASE 100 //100美元折扣5美元
#define FREE 5

int main(void)
{
    char type=0; //蔬菜类型
    char *name; //蔬菜名称 指针类型
    double weight;
    double price;
    double vege[16]={0.}; //各蔬菜的总重量、总价、折扣、运费和包装费。
    /* 0:洋蓟总重量;1:洋蓟总价;2:洋蓟折扣;3:洋蓟的运费和包装费;4:甜菜的总重量;5:甜菜的总价;6:甜菜折扣....*/
    int index; // 用于数组的下标选择

    /* #########循环处理程序############# */
    while(type!='q')
    {
        /* ###############显示菜单选项############# */
        printf("*********************************************************************************\n");
        printf("参照以下选项请选择需要定购的蔬菜:(输入a&b&c&q,一次只可以选择1个)\n");
        printf("a.洋蓟  ----单价%.2f美元/磅。\t\tb.甜菜  ----单价%.2f美元/磅。\n",ARTICHOKE,BEET);
        printf("c.胡萝卜----单价%.2f美元/磅。\t\tq.退出程序。\n",CARROT);
        printf("*********************************************************************************\n");
        do /* ###############菜单选项选择处理############# */
        {
            type=tolower(getchar());
            switch(type)
            {
                case 'a': price=ARTICHOKE;
                          name=A_NAME;
                          index=0;
                          break;
                case 'b': price=BEET;
                          name=B_NAME;
                          index=4;
                          break;
                case 'c': price=CARROT;
                          name=C_NAME;
                          index=8;
                          break;
                case 'q': break;
                default : printf("输入错误!!!请重新输入蔬菜选项!\n");
                          break;
            }
            while(getchar()!='\n')
                continue;
        } while((type>'c'&&type!='q')||type<'a');

        /* ###############重量输入及数据计算############# */
        if(type!='q')
        {
            printf("你选择采购的蔬菜是:%2c.%s\n",type,name);
            printf("请输入需要采购的重量(单位:磅)...\n");
            /* *****重量输入及非法数排除***** */
            while(scanf("%lf",&weight)!=1||weight<.0||weight>50000.0)
            {
                printf("输入错误!!!请重新输入需要定购的%s重量(>=0,<50000.0)\n",name);
                while(getchar()!='\n')
                    continue;
            }
            while(getchar()!='\n')
                continue;
            printf("您输入的%s订购重量是:%.2f磅。\n",name,weight);

            /* *******数据计算******** */
            vege[index]+=weight;//蔬菜总重量累计
            printf("截止现在,您已经累计定购%s :%.2f磅。\n",name,vege[index]);
            vege[index+1]=vege[index]*price; //蔬菜总价
            vege[index+2]=FREE*vege[index+1]/FREE_BASE; //折扣计算
            if(vege[index]<=CLASS1)
                vege[index+3]=CARRY1; //低于CLASS1磅的运费和包装费CARRY1美元
            else if(vege[index]>CLASS1&&vege[index]<=CLASS2)
                vege[index+3]=CARRY2; //CLASS1-CLASS2磅的运费和包装费CARRY2美元
            else
                vege[index+3]=CARRY2+ADD*(vege[index]-CLASS2); //大于CLASS2磅:每增加1磅,运费和包装费增加ADD美元

            /* ###############订购结果报告############# */
            printf("以下是当前订购清单:\n");
            printf("—————————————————————————————————————————————————————————\n");
            printf("名称\t┊售价/磅\t┊重量/磅\t┊总价/美元\t┊折扣/美元\t┊运费和包装费/美元\t┊小计/美元\n");
            printf("—————————————————————————————————————————————————————————\n");
            printf(" %-7s┊%-14.2f┊%-14.2f┊%-14.2f┊%-14.2f┊%-22.2f┊%.2f\n",
                   A_NAME,ARTICHOKE,vege[0],vege[1],vege[2],vege[3],vege[1]-vege[2]+vege[3]);//洋蓟的明细
            printf("—————————————————————————————————————————————————————————\n");
            printf(" %-7s┊%-14.2f┊%-14.2f┊%-14.2f┊%-14.2f┊%-22.2f┊%.2f\n",
                   B_NAME,BEET,vege[4],vege[5],vege[6],vege[7],vege[5]-vege[6]+vege[7]);//甜菜的明细
            printf("—————————————————————————————————————————————————————————\n");
            printf(" %-7s┊%-14.2f┊%-14.2f┊%-14.2f┊%-14.2f┊%-22.2f┊%.2f\n",
                   C_NAME,CARROT,vege[8],vege[9],vege[10],vege[11],vege[9]-vege[10]+vege[11]);//胡萝卜的明细
            printf("—————————————————————————————————————————————————————————\n");
            printf("合计\t┊-----\t\t┊%-14.2f┊%-14.2f┊%-14.2f┊%-22.2f┊%.2f\n",
                   vege[0]+vege[4]+vege[8],vege[1]+vege[5]+vege[9],vege[2]+vege[6]+vege[10],vege[3]+vege[7]+vege[11],
                   vege[1]+vege[5]+vege[9]-vege[2]-vege[6]-vege[10]+vege[3]+vege[7]+vege[11]);//合计费用
            printf("—————————————————————————————————————————————————————————\n");

            printf("请按回车键继续.....\n");
            while(getchar()!='\n')
                continue;
            printf("请继续选择要订购的蔬菜选项....\n");
        }
        else
            printf("您输入的选项是:%c.退出程序。\n即将为您退出程序...\n谢谢使用!\n",type);
    }

    printf("Bye!");
    return 0;
}

C Primer Plus (第六版)第七章 编程 练习题 部分 解答_第2张图片

好了,谢谢查看

你可能感兴趣的:(C语言)