第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