第12章 存储类别、链接和内存管理(题目)

1.不使用全局变量,重写程序清单12.4。
2.在美国,通常以英里/加仑来计算油耗;在欧洲,以升/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”);
print(" ( -1 to quit): “)
scanf(”%d", &mode);
}
print(“Done.\n”)
return 0;
}
下面是一些输出示例:
Enter 0 for metric mode, 1 for us mode: 0
Enter distance traveled in kilometeres: 600
Enter fuel consumed in litters:78.8
Fuel consumption is 13.13 litters per 100 km.
Enter 0 for metric mode, 1 for us mode (-1 to quit):1
Enter distance traveled in miles: 434
Enter 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 (US) used.
Enter distance traveled in miles: 388
Enter fuel consumption 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()函数根据设置的模式计算并显示油耗。可以假设用户输入的都是数值数据。
3.重新设计编程练习2,要求只使用自动变量。该程序提供的用户界面不变,即提示用户输入模式等。但是,函数调用要做相应变化。
4.在一个循环中编写并测试一个函数,该函数返回它被调用的次数。
5.编写一个程序,生成100个1~10范围内的随机数,并以降序排列(可以把第11章的排序算法稍加改动,便可用于整数排序,这里仅对整数排列)。
6.编写一个程序,生成1000个1~10范围内的随机数。不用保存或打印这些数字,仅打印每个数出现的次数。用10给个不同的种子值运行,生成的数字出现的次数是否相同?可以使用本章自定义的函数或ANSI C的rand()和srand()函数,它们格式相同。这是一个测试特定随机数生成器随机性的方法。
7.编写一个程序,按照程序清单12.13输出示例后面讨论的内容,修改该程序。使其输出类似:
Enter the number of sets; enter q to stop:18
How many sides and how many dice? 6 3
Here are 18 sets of 3 6 -sided throws.
12 10 6 9 8 14 8 15 9 14 12 17 11 7 10
13 8 14
How many sets? Enter q to stop: q
8.下面是程序的一部分:
// pe12-8.c
#include <stdio.h
int * make_array (int elem, int val);
void show_array (const int ar [ ],int n);
int main(void)
{
int*pa;
int size
int value

printf (“Enter the number of elements: “);
while (scanf(”%d”, &size)==1 && size >0
{
printf (“Enter the initialization value:”)
scanf (”%d", &value);
pa = make arrary (size, value);
if (pa)
{
show
arrary(pa,size);
free(pa);
}
printf ("Enter the number of elements (<1 to quit): ") ;
}
printf (“Done.\n”);
return 0;
}
提供make_array ()和show_array()函数的定义,完成该程序。make_ array()函数接受两个参数,第一个参数是int 类型的数组的元素个数,第二个参数是要赋予每个元素的值。该函数调用malloc()创建一个大小合适的数组,将其每个元素设置为指定的值,并返回一个指向该数组的指针。show_array()函数显示组数的内容,一行显示8个数。
9.编写一个符合以下描述的函数。首先,询问用户需要输入的单词。然后,接受用户输入的单词,并显示出来,使用malloc()并回答第一个问题(即要输入多少个单词),创建一个动态数组,该数组内含相应的指向cha的指针(注意,由于数字的每个元素都是指向char的指针,所以用于存储malloc()返回值的指针应该是一个指向指针的指针,且它所指向的指针指向char)。在读取字符串时,该程序应该把单词读入一个临时的char数组,使用malloc()分配足够的储存空间来存储单词,并把地址存入该该指针数组(该数组中每个元素都是指向char的指针)。然后,从临时数组中把单词拷贝到动态分配的存储空间中。因此,有一个字符指针数组,每个指针都指向一个对象,该对象的大小正好能容纳被储存的特定单词。下面是该程序的一个运行示例。
How many words do you wish to enter? 5
Enter 5 words now:
I enjoy doing this exercise
Here are your words:
I
enjoyed
doing
this
exercise

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值