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中编译测试:

相关推荐
网域小星球14 分钟前
C 语言从 0 入门(十四)|文件操作:读写文本、保存数据持久化
c语言·开发语言·文件操作·fopen·fprintf
网域小星球17 分钟前
C 语言从 0 入门(七)|字符数组与字符串完整精讲|VS2022 高质量实战
c语言·开发语言·字符串·vs2022·字符数组
Jia ming24 分钟前
C语言实现日期天数计算
c语言·开发语言·算法
浅时光_c2 小时前
12 指针
c语言·开发语言
爱编码的小八嘎2 小时前
C语言完美演绎7-11
c语言
爱编码的小八嘎2 小时前
C语言完美演绎7-9
c语言
范纹杉想快点毕业3 小时前
C语言全能实战教程
c语言·开发语言
ZK_H4 小时前
半导体工艺流程
java·c语言·开发语言·计算机网络·金融
网域小星球4 小时前
C语言从0入门(八)|函数基础:封装、调用与参数传递精讲
c语言·开发语言
网域小星球4 小时前
C语言从0入门(十)|二维数组详解与矩阵实战
c语言·算法·矩阵·二维数组·数组遍历