《C Primer Plus》(第6版)编程练习——第12章

第1题

#include <stdio.h>
void critic(int* u);
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;
}

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

// or use a return value:
// units = critic(); 
// and have critic look like this:
/*
int critic(void)
{
	int u;
	printf("No luck, my friend. Try again.\n");
	scanf("%d", &u);
	return u;
}
*/
// or have main() collect the next value for units

第2题

// pe12-2a.h
#pragma once
void set_mode(int m);
void get_info(void);
void show_info(void);

// pe12-2a.c
#include <stdio.h>
static int mod = 0;
static double dis = 0;
static double fue = 0;

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

void get_info(void)
{
   
	if (mod == 0)
	{
   
		printf("Enter distance traveled in kilometers: ");
		scanf("%lf", &dis);
		printf("Enter fuel consumed in liters: ");
		scanf("%lf", &fue);
	}
	else
	{
   
		printf("Enter distance traveled in miles: ");
		scanf("%lf", &dis);
		printf("Enter fuel consumed in gallons: ");
		scanf("%lf", &fue);
	}
}

void show_info(void)
{
   
	printf("Fuel consumption is ");
	if (mod == 0)
		printf("%.2f liters per 100 km.\n", 100 * fue / dis);
	else
		printf("%.1f miles per gallon.\n", dis / fue);

// pe12-2b.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;
}

第3题

// pe12-3a.h
#pragma once
#define METRIC 0
#define US 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值