C Primer Plus(第6版) 第十二章 编程练习参考答案

本篇博客提供了C Primer Plus第六版第十二章的编程练习参考答案,包括使用不同变量类型的油耗计算程序、随机数排序、动态内存分配及字符串处理等多个练习题的解决方案,适用于Microsoft Visual Studio 2019环境。
摘要由CSDN通过智能技术生成

C Primer Plus(第6版) 第十二章 编程练习参考答案

编译环境:Microsoft Visual Studio 2019
备注:本文留作作者自用,如有错误敬请指出
(针对Microsoft Visual Studio 2019的一些特性对答案进行了修改)

编程练习

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

#include<stdio.h>
#include<stdlib.h>
int main(void)
{
   
	int units = 0;
	printf("How many pounds to a firkin of butter?\n");
	scanf_s("%d", &units);
	while (units != 56)
	{
   
		printf("No luck, my friend. Try again.\n");
		scanf_s("%d",&units);
	}
	printf("You must have looked it up!\n");
	system("pause");
	return 0;
}

2.在美国,通常以英里/加仑来计算油耗:在欧洲,以升/100公里来计算:下面是程序的一部分,提示用户选择计算模式(美制或公制),然后接收数据并计算油耗。
如果用户输入了不正确的模式,程序向用户给出提示消息并使用上一次输入的正确模式。请提供pe12-2a.h头文件和pe12-2a.c源文件。源代码文件应定义3个具有文件作用域、内部链接的变量。一个表示模式、一个表示距离、一个表示消耗的燃料, get _info()函数根据用户输入的模式提示用户输入相应数据,并将其存储到文件作用域变量中。show _info()函数根据设置的模式计算并显示油耗。可以假设用户输入的都是数值数据。

//pe12-2b.c
#include<stdio.h>
#include<stdlib.h>
#include "pe12-2a.h"
int main(void)
{
   
    int mode;

    printf("Enter 0 for metric mode,1 for US mode: ");
    scanf_s("%d", &mode);
    while (mode >= 0)
    {
   
        set_mode(mode);
        get_info();
        show_info();
        printf("\nEnter 0 for metric mode, 1 for US mode");
        printf(" (-1 to quit): ");
        scanf_s("%d", &mode);
    }
    printf("Done.\n");
    system("pause");
    return 0;
}

//pe12-2a.h
extern void set_mode(int num);
extern void get_info(void);
extern void show_info(void);
int mode;
double dis, fuel;
//pe12-2a.c
#include<stdio.h>
void set_mode(int num);
void get_info(void);
void show_info(void);
void set_mode(int num)
{
   
	extern int mode;
	if (num == 0)
		mode = 0;
	else if (num == 1)
		mode = 1;
	else
	{
   
		printf("Invalid mode specified. Mode 1(US) used.\n");
		mode = 1;
	}
}
void get_info(void)
{
   
	extern double dis, fuel;
	extern int mode;
	if (mode == 0)
	{
   
		printf("Enter distance traveled in kilometers:");
		scanf_s("%lf", &dis);
		printf("Enter fuel consumed in liters:");
		scanf_s("%lf", &fuel);
	}
	else
	{
   
		printf("Enter distance traveled in miles:");
		scanf_s("%lf", &dis);
		printf("Enter fuel consumed in gallons:");
		scanf_s("%lf", &fuel);
	}
}
void show_info(void)
{
   
	extern int mode;
	extern double dis, fuel;
	if (mode == 0)
		printf("Fuel consumption is %.2lf liters per 100 km.", fuel / dis * 100);
	else
		printf("Fuel consumption is %.1lf miles per gallon.", dis / fuel);
}

3.重新设计编程练习2,要求只使用自动变量。该程序提供的用户界面不变,即提示用户输入模式等。但是,函数调用要作相应变化。


#include<stdio.h>
#include<stdlib.h>
int set_mode(int num);
void get_info(int,double
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值