好的,既然上次已经发了博客,那就不算萌新了.......

编译环境:VS 2017 (Community)

运行环境: Win 10 × 64

题目

/*   12-2 ---在美国,通常以英里/加仑来计算油耗;在欧洲,以升/100 公里来计算。下面是程序的一部分,提示用户选择计算模式(美制或英制),然后接收数据并计算油耗。*/
//pe12-2b.c
//与 pe12-2a.c 一起编译
#include <stdio.h>
#include "pe12-2a.h"int main(void)
{int mode;printf("Enter 0 for metric mode, 1 for US mode: ");scanf_s("%d", &mode);while (mode >= 0){set_mode(mode);get_info();show_info();printf("Enter 0 for metric mode, 1 for US mode");printf(" (-1 to quit): ");scanf_s("%d", &mode);}printf("Done.\n");return 0;
}

下面是一些输出示例:

Enter 0 for metric mode, 1 for US mode: 0
Enter distance traveled in kilometers: 600
Enter fuel consumed in liters: 78.8
Fuel consumption is 13.13 lirers per 100 km.
Enter 0 for metric mode, 1 for US mode (-1 to quit): 1
Enter distance traveled in miles: 434
Enter fuel consumed in gallons: 12.7
Fuel consumption is 34.2 lirers per gallon.
Enter 0 for metric mode, 1 for US mode (-1 to quit): 3
Invalid mode specified. Mode 1(US) used.
Enter distance traveled in miles: 388
Enter fuel consumed in gallons: 15.3
Fuel consumption is 25.4 lirers per gallon.
Enter 0 for metric mode, 1 for US mode (-1 to quit): -1

Done.

如果用户输入了不正确的模式,程序向用户给出提示消息并使用上一次输入正确的模式。

请提供pe12-2a.h头文件和pe12-2a.c源文件。源代码文件应定义3个具有文件作用域,内部链接的

变量。一个表示模式,一个表示距离,一个表示消耗的燃料。get_info()函数根据用户输入的模

式提示用户输入相应数据,并将其储存到文件作用于变量中。show_info()函数根据设置的模式

计算并显示油耗。可以假设用户输入的都是数值数据。

以上,题目结束!

根据题目做出的3个变量:

  • distance                         汽车行驶的距离
  • double consumption      消耗的燃料
  • int mode                        用户设置的模式

以及3个函数:

  1. void set_mode(int number);                //获取用户输入的模式
  2. void get_info(void);                             //根据用户输入的模式提示用户输入数据
  3. void show_info(void);                          //根据设置的模式计算并显示油耗

以及1个附加的(我附加的):

4. double WrongJudge(double number);//处理非法输入,后期强制int类型转换

下面是分文件给出代码:

pe12-2a.h:

#pragma once//函数原型
void set_mode(int number);          //获取用户输入的模式
void get_info(void);                //根据用户输入的模式提示用户输入数据
void show_info(void);                   //根据设置的模式计算并显示油耗
double WrongJudge(double number);       //处理非法输入,后期强制int类型转换

pe12-2a.c:

//pe12-2a
//与 pe12-2b 一起编译#include <stdio.h>
#include "pe12-2a.h"int distance;                 //汽车行驶的距离
double consumption;             //消耗的燃料
int mode;                   //用户设置的模式//获取用户输入的模式
void set_mode(int number)
{       if (number >= 0 && number <= 1){mode = number;}else if (mode == 0)           //按照先前的选项进行运算{printf("Invalid mode specified. Mode 0(USA) used.\n");}else if (mode == 1){printf("Invalid mode specified. Mode 1(US) used.\n");}
}//根据用户输入的模式提示用户输入数据
void get_info(void)
{if (mode == 0)   {//提示美制的输入  获取行程(千米)printf("Enter distance traveled in kilometers: ");distance = (int)WrongJudge((double) distance);//提示消耗的燃料输入printf("Enter fuel consumed in liters: ");consumption = WrongJudge(consumption);}else if (mode == 1){//提示英制的输入  获取行程(英里)printf("Enter distance traveled in miles: ");distance = (int)WrongJudge((double)distance);//提示消耗的燃料输入printf("Enter fuel consumed in gallons: ");consumption = WrongJudge(consumption);}
}//根据设置的模式计算并显示油耗
void show_info(void)
{if (mode == 0){printf("Fuel consumption is %.2f lirers per 100 km.\n",100 * (consumption / distance));}else if (mode == 1){printf("Fuel consumption is %.1f lirers per gallon.\n",(distance / consumption));}
}//处理非法输入,后期强制int类型转换
double WrongJudge(double number)
{while (scanf_s("%lf", &number) != 1)    //处理非法输入{printf("That's not a value number, try again: ");continue;}return number;
}

pe12-2b.c:

//pe12-2b.c
//与 pe12-2a.c 一起编译
#include <stdio.h>
#include "pe12-2a.h"int main(void)
{int mode;printf("Enter 0 for metric mode, 1 for US mode: ");scanf_s("%d", &mode);while (mode >= 0){set_mode(mode);get_info();show_info();printf("Enter 0 for metric mode, 1 for US mode");printf(" (-1 to quit): ");scanf_s("%d", &mode);}printf("Done.\n");return 0;
}

好了,让我们来看看实际的效果:

看吧,和题目上的一模一样,非常好!

源代码我都已经发出来了,以上

Alex Mercer (boy) 鸣谢!

《C Primer Plus》第六版 第十二章第二题 编程练习相关推荐

  1. c++primer plus第六版第十二章第一题

    //h文件 #pragma once class cow {char name[20];char*hobby;double weight; public:cow();cow(const char*m, ...

  2. C Primer Plus (第六版) 第十四章_编程练习答案

    no1.c //重新编写复习题5,用月份名的拼写代替月份号(别忘了用strcmp()).在一个简单的程序中测试该函数 # include <stdio.h> # include <s ...

  3. C primer plus(第六版)第十一章源代码

    C primer plus(第六版)第十一章源代码 /* 11.1 */ #include<stdio.h> #define MSG "I am a symbolic strin ...

  4. 《汇编语言》王爽(第四版) 第十二章 实验12

    文章目录 前言 一.思路分析 1.安装 2.设置中断向量 3.do0程序 4.测试 5.优化 二.最终成果 1.完整代码 2.效果图 总结 前言 本文是王爽老师<汇编语言>(第四版) 第十 ...

  5. Js高级程序设计第三版学习(十二章)

                                  Js高级程序设计第三版学习(十二章) 第十二章 DOM2和DOM3   1.样式: 访问样式属性 任何支持style特性的HTML元素都有一 ...

  6. 疯狂JAVA讲义---第十二章:Swing编程(五)进度条和滑动条

    http://blog.csdn.net/terryzero/article/details/3797782 疯狂JAVA讲义---第十二章:Swing编程(五)进度条和滑动条 标签: swing编程 ...

  7. C++ Primer Plus习题及答案-第十二章

    习题选自:C++ Primer Plus(第六版) 内容仅供参考,如有错误,欢迎指正 ! c++使用new和delete运算符来动态控制内存. 对于静态成员,要在类声明之外使用单独语句进行初始化,因为 ...

  8. 开发日记-20190915 关键词 汇编语言王爽版 第十二章

    第十二章 内中断 任何一个通用的CPU,比如8086,都具备一种能力,可以在执行完当前正在执行的指令之后,检测到从CPU外部传送过来或内部产生的一种特殊信息,并且可以立即对所接收的信息进行处理.这种特 ...

  9. 【c++ primer】第五版第十四章习题答案

    第十四章 重载运算与类型转换 练习14.1 在什么情况下重载的运算符与内置运算符有所区别?在什么情况下重载的运算符又与内置运算符一样? 解: 不同点: 重载操作符不保证操作数的求值顺序,例如对& ...

最新文章

  1. win2003辅助域服务器相关几个错误日志的解决办法
  2. 摆脱“人肉”审核,从0搭建可视化SQL自动审核平台
  3. Git 常用命令记录
  4. STL源码剖析---STL容器特征总结(含迭代器失效)
  5. kdbchk: the amount of space used is not equal to block size
  6. 前端学习(2384):element介绍
  7. php 伪静态 获取当前页面路径_织梦移动适配PHP获取当前页面URL地址方法
  8. python 深度优先遍历_Python算法-二叉树深度优先遍历
  9. 活性边表算法c语言,《计算机图形学》有序边表填充算法.doc
  10. 售假获刑后他又被淘宝告上法庭,杭州互联网法院当庭宣判
  11. 用python开发文本翻译小软件
  12. linux下录制视频流,Ubuntu Linux 下的PSP视频输出以及录制
  13. 计算机云平台热门吗,哪个云电脑好用又便宜?国内的云游戏平台到底哪个好?
  14. BZOJ 4199 [Noi2015]品酒大会(后缀自动机 + parent树上统计)
  15. 程序员是吃青春饭的吗?
  16. 【csv文件转xml文件】Excel表格数据快速批量生成xml格式文件
  17. eclipse开发安卓android程序环境
  18. HTML入门级学习附教程链接~
  19. mysql 一 、关系模型——主键——外键——索引
  20. 【cpg控制】Hopf振荡器的一种python实现

热门文章

  1. 12、内存空间的申请
  2. List 下的 ArrayList和LinkedList
  3. 【JavaWeb·1】MySQL数据库使用方法
  4. vulkan好处这么多,为什么感觉手游都不感冒
  5. 国家战略性新兴产业规划:促进大数据产业健康快速发展
  6. 面向对象的分析与设计——包图、组件图和部署图
  7. f5 web服务器 位置,简说(地址和服务器池)F5负载均衡的部分配置
  8. rand()函数100000随机数_Excel之数学函数SQRT/MOD/EXP/LN/RAND
  9. 使用HackRF和外部时钟实现GPS欺骗实验
  10. [资料共享] BZOJ所有题 OJ 在线评测 题面 PDF版 非常良心