C primer plus (第六版)第十二章 编程练习第2题

题目:

题目2.在美国,通常以英⾥/加仑来计算油耗;在欧洲,以升/100公⾥来计算。下⾯

是程序的⼀部分,提⽰⽤⼾选择计算模式(美制或公制),然后接收数据并计算油耗。

cpp 复制代码
//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("%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("%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 liters 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 miles 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 miles 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()函数根据设置的模式计算并显⽰油耗。可以假设⽤⼾输⼊的

都是数值数据。

思路:

  • 查看pe12-2b.c 程序文件和题目要求可以知道,需要在pe12-2a.c文件中创建3个函数:

    set_mode(mode);

    get_info();

    show_info();

  • 同时需要注意在pe12-2a.h文件中声明这3个函数;

  • 同时需要注意在pe12-2a.c中编写函数的时候可以创建3个内部链接静态变量,只供这3个函数调用,其中mode的值也是这样,便于在get_info()函数和show_info()函数中用mode值做选择判断;

cpp 复制代码
//pe12-2a.c的程序代码
#include <stdio.h>
static int mode_code;   //内部链接的静态变量
static float distance;  //内部链接的静态变量
static float fuel_consume;  //内部链接的静态变量

void set_mode(int mode)
{
    mode_code = mode;
}

void get_info()
{
    if (mode_code == 0)
    {
        puts("Enter distance traveled in kilometers:");
        while (scanf("%d", &distance) == 1 && distance > 0)
        {
            puts("Enter fuel consumed in liters:");
            if (scanf("%d", &fuel_consume) == 1 && fuel_consume > 0);  
            return ;    //无返回值函数提前结束
        }
    }

    if (mode_code == 1)
    {
        puts("Enter distance traveled in miles:");
        while (scanf("%d", &distance) == 1 && distance > 0)
        {
            puts("Enter fuel consumed in gallons:");
            if (scanf("%d", &fuel_consume) == 1 && fuel_consume > 0);
            return ;    //无返回值函数提前结束
        }
    }    
}

int show_info()
{
    if (mode_code == 0)
    {
        printf("Fuel consumption is %.2f liters per 100 km.\n",fuel_consume/distance);
    }
    if (mode_code == 1)
    {
        printf("Fuel consumption is %.2f miles per gallon.\n",distance/fuel_consume);
    }    
}
cpp 复制代码
//pe12-2a.h的程序代码
void set_mode(int mode);
void get_info(void);
void show_info(void);

在powershell中编译测试:

相关推荐
努力努力再努力wz3 小时前
【Linux网络系列】:JSON+HTTP,用C++手搓一个web计算器服务器!
java·linux·运维·服务器·c语言·数据结构·c++
不忘不弃11 小时前
模拟内存分配器1
c语言
sycmancia17 小时前
C语言学习07——变量的作用域
c语言·学习
海上Bruce17 小时前
C primer plus (第六版)第十二章 编程练习第1题
c语言
bkspiderx19 小时前
RabbitMQ 技术指南(C/C++版)
c语言·c++·rabbitmq
你怎么知道我是队长19 小时前
C语言---命令行参数
c语言·开发语言
leaves falling20 小时前
c语言-动态内存管理
c语言·开发语言
一路往蓝-Anbo20 小时前
第37期:启动流程(二):C Runtime (CRT) 初始化与重定位
c语言·开发语言·网络·stm32·单片机·嵌入式硬件
代码游侠21 小时前
ARM嵌入式开发代码实践——LED灯闪烁(C语言版)
c语言·开发语言·arm开发·笔记·嵌入式硬件·学习