C Primer Plus(第6版)第九章复习题答案

9.10复习题

  1. 实际参数和形式参数的区别是什么?
    实际参数(actual argument)是指调用函数时传递给形式参数的值,形式参数(formal parameter)是指在函数定义时括号内的值,是本函数私有的局部变量

  2. 根据下面各函数的描述,分别编写它们的ANSI C函数头。
    注意只需要写出函数头,不用写函数体

a. donut()接受一个int类型的参数,打印若干(参数指定数目)个 0
	void donut(int num)
b. gear()接受两个int类型的参数,返回int类型的值
	int gear(int a, int b)
c. guess()不接受参数,返回一个int类型的值
	int guess(void)
d. stuff_it()接受一个double类型的值和double类型变量的地址,把第一个值储存在指定位置
	void stuff_it(double d, double * pd)
  1. 根据下面个函数的描述,分别编写它们的ANSI C函数头。注意,只需写出函数头,不用写函数体。
a. n_to_char()接受一个int类型的参数,返回一个char类型的值
	char n_to_char(int num)
b. digit()接受一个double类型的参数和一个int类型的参数,返回一个int类型的值
	int digit(double d, int i)
c. which接受两个可储存double类型变量的地址,返回一个double类型的地址
	double * which(double * pd1, double * pd2)
d. random()不接受参数,返回一个int类型的值
	int random(void)
  1. 设计一个函数,返回两整数之和
//返回两整数之和
int sum(int a, int b)
{
	return a + b;
}

如果把复习题4改成返回两个double类型的值之和,应如何修改函数?

double sum(double d1, double d2)
{
	return d1 + d2;
}

设计一个名为alter()的函数,接受两个int类型的变量x和y,把它们的值分别改成两个变量之和两变量之差。
注意:此题要使用指针

void change(int *x, int *y)
{
	*x += *y;		//利用数学关系,不用在创建temp来当作中转站了
	*y = *x - 2 *(* y);
}
  1. 下面的函数定义是否正确?
//	ANSI C之前可以这样写
void salami(num)
int num;
{
	int count;

	for (count = 1; count <= num; count++)
		printf("  O salami mio ! \n");
}
// 	ANSI C后上述写法也可以,但是会被废除掉,还是用新的写法
void salami(int num)
{
	int count;

	for (count = 1; count <= num; count++)
		printf("  O salami mio ! \n");
}
  1. 编写一个函数,返回3个整数参数中的最大值
//	使用了嵌套的条件表达式
int max(int a, int b, int c)
{
	return c >= (a >= b ? a : b ) ? c : (a >= b ? a : b );
}
/*
给定下面的输出:
Please choose one of the following:
1) copy files						2) move files
3) remove files						4)quit
Enter the number of your choice:

a. 编写一个函数,显示一个有4个选项的菜单,提示用户进行选择(输出如上所示)。
b. 编写一个函数,接受两个int类型的参数分别表示上限和下限。
	该函数从用户的输入中读取整数 。
	如果超出上下限,函数再次打印菜单(使用a的函数 )提示用户输入,然后获取一个新值。
	如果用户输入的整数在规定范围内,
	该函数则把整数返回给主调函数。如果用户输入一个非整数字符,该函数应该返回 4。
c. 使用本题a 和 b部分的函数编写一个最小型程序。
	最小型的意思是,该函数不需要实现菜单中个选项的 功能,
	只需显示这些选项并获取有效的响应即可。
*/

#include <stdio.h>
#define DOWN 3
#define UP 8
void menue(void);
int get_num(int down, int up);
void test(int num);
int main(void)
{
	int tag;

	menue();
	tag = get_num(DOWN, UP);
	test(tag);

	return 0;
}

void menue(void)
{
	printf("Please choose one of the following: \n");
	printf("1) copy files						2) move files \n");
	printf("3) remove files						4)quit \n");
	printf("Enter the number of your choice: \n");
}

int get_num(int down, int up)
{
	int num;
    int state;

	state = scanf("%d", &num);
	while (state == 1 && (num < down || num > up))
	{
	    menue();
	    printf("Please input the number %d to %d. \n", down, up);
		state = scanf("%d", &num);
	}
	if (state != 1)
        return 4;
}

void test(num)
{
	switch (num)
	{
		case 1 :
			printf("I will copy the file. \n");
			break;
		case 2 :
			printf("I will move the file. \n");
			break;
		case 3 :
			printf("I will remove the file. \n");
			break;
		case 4 :
			printf("That's over now! Bye Bye! \n");
			break;
        default :
            printf("No options you entered ! \n");
	}
}

猜你喜欢

转载自blog.csdn.net/weixin_42912350/article/details/82938283