C Primer Plus 第6版 编程练习 chapter 12

1. 第1题

1.1 题目描述

不使用全局变量,重写程序清单12.4

1.2 编程源码

#include<stdio.h>

void critic(int *n){
   
   
	printf("No luck, my friend. Try again.\n");
	scanf("%d",n);
}

int main(void){
   
   
	int units;
	
	printf("How many pounds to a firkin of butter?\n");
	scanf("%d", &units);
	while(units != 56) critic(&units);
	printf("You must have looked it up!\n");
	
	return 0;
}

1.3 结果显示

结果显示


2. 第2题

2.1 题目描述

在美国,通常以英里/加仑来计算油耗;在欧洲,以升/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("%d", &mode);
	while(mode>=0){
   
   
		set_mode(mode);
		get_info();
		show_info();
		printf("Enter 0 for metric mode, 1 for US mode(-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 100km.
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函数根据设置的模式计算并显示油耗。可以假设用户输入的都是数值数据。

2.2 编程源码

2.2.1 pe12-2a.h源码

#ifndef PE12_2A_H_
#define PE12_2A_H_

void set_mode(int mode);
void get_info(void);
void show_info(void);

int mod;
double dis;
double fule;

#endif

2.2.2 pe12-2a.c源码

#include<stdio.h>
#include "pe12-2a.h"

void set_mode(int m){
   
   	
	if((m !=0) && (m != 1)){
   
   
		mod = 1;
		printf("Invalid mode specified. Mode 1(US) used.");
	}else{
   
   
		mod = m;
	}
}

void get_info(){
   
   
	if(mod == 1){
   
   
		printf("Enter distance travelde in miles:");
		scanf("%lf", &dis);
		while(getchar()!= '\n') continue;
		printf("Enter fuel consumed in gallons:");
		scanf("%lf", &fule);
		while(getchar()!= '\n') continue;
	}else{
   
   		
		printf("Enter distance travelde in kilometers:");
		scanf("%lf", &dis);
		while(getchar()!= '\n') continue;
		printf("Enter fuel consumed in liters:");
		scanf("%lf", &fule);
		while(getchar()!= '\n') continue;
	}
}

void show_info(){
   
   
	double n = 0;
	if(mod == 1){
   
   
		n = dis/fule;
		
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值