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