好文档 - 专业文书写作范文服务资料分享网站

C语言程序设计(第3版)何钦铭-颜-晖-第10章--函数与程序结构

天下 分享 时间: 加入收藏 我要投稿 点赞

第10章 函数与程序结构

【练习10-1】使用递归函数计算1到n之和:若要用递归函数计算 sum=1+2+3+…+n(n为正整数),请写出该递归函数的递归式子及递归出口。试编写相应程序。 解答:

递归式子: sum(i) = sum(i-1) + i; 递归出口: sum(i) = 0;

【练习10-2】 请完成下列宏定义:

① MIN(a,b) 求 a,b 的最小值

② ISLOWER(c) 判断 c 是否为小写字母 ③ ISLEAP(y) 判断 y 是否为闰年 ④ CIRFER(r) 计算半径为 r 的圆周长 解答:

① MIN(a, b):求a,b的最小值。

#define MIN(a,b) (a

② ISLOWER(c):判断c是否为小写字母。

#define ISLOWER(c) (c>='a'&&c<='z') ③ ISLEAP(y):判断y是否为闰年。

#define ISLEAP(y) (y%4==0&&y0!=0)||y@0==0) ④ CIRFER(r):计算半径为r的圆周长。

#define PI 3.14159

#define CIRFER(r) 2*PI*(r)

【练习10-3】分别用函数和带参宏实现从 3 个数中找出最大数,请比较两者在形式上和使用上的区别。 解答:

(1) 函数实现

int max(int x,int y,int z) {

int t;

if(x>=y)

if(x>=z) t=x; else t=z; else

if(y>=z) t=y; else t=z;

return t; }

(2) 宏实现

#define MAX( x, y, z ) x>=y? (x>=z? x:z) : (y>=z? y:z)两者在定义形

式上完全不同。使用上函数是在执行时,从主调函数转到函数 max(),然后再返回到主调函数,函数体始终存在;而宏是在编译预处理时,用条件表达式去替换 MAX(int x, int y, int z ),等程序执行时,执行的是条件表达式,而不再存在 MAX(int x, int y,int z )的式子。 习题10

一、选择题

1.要调用数学函数时,在#include 命令行中应包含 C 。

A.”stdio.h” B.”string.h” C.”math.h” D.”ctype.h”

2.对于以下递归函数 f,调用 f(4),其返回值为 A 。 int f(int n)

{ if (n) return f(n - 1) + n; else return n; }

A.10 B.4 C.0 D.以上均不是

3.执行下列程序:

#define MA(x, y) ( x*y ) i = 5;

i = MA(i, i + 1) – 7; 后变量 i 的值应为 B 。

A.30 B.19 C.23 D.1

4.宏定义“#define DIV(a, b) a/b”,经 DIV(x + 5, y - 5) 引用,替换展开后是 A 。

A.x + 5 / y - 5 B.(x + 5 / y – 5) C.(x + 5) / (y - 5) D.(x + 5) / (y - 5);

5.定义带参数的宏“#define JH(a,b,t) t = a; a = b; b = t”,对两个参数 a、b 的值进行交换,下

列表述中哪个是正确的 C 。

A.不定义参数a和b将导致编译错误 B.不定义参数a、b、t将导致编译错误 C.不定义参数 t 将导致运行错误 D.不需要定义参数 a、b、t 类型

6.执行下面程序,正确的输出是 A 。

0f8vg6ansn79c964hjsm5kaxd91bwp00kw6
领取福利

微信扫码领取福利

微信扫码分享