9.10复习题
-
实际参数和形式参数的区别是什么?
实际参数(actual argument)是指调用函数时传递给形式参数的值,形式参数(formal parameter)是指在函数定义时括号内的值,是本函数私有的局部变量 -
根据下面各函数的描述,分别编写它们的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)
- 根据下面个函数的描述,分别编写它们的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)
- 设计一个函数,返回两整数之和
//返回两整数之和
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);
}
- 下面的函数定义是否正确?
// 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");
}
- 编写一个函数,返回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");
}
}