C语言程序设计教程 清华大学出版社 陈明主编 第4章答案

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

第4章习题解答

一、选择题

1.在C语言中,函数返回值的类型最终取决于

A)函数定义时的函数首部所说明的函数类型B)return语句中表达式值的类型C)调用函数时主调函数所传递的实参类型D)函数定义时形参的类型

解析:函数返回值类型最终取决于定义函数时所定义的函数类型。

答案:A

2.设函数Fun()的定义形式为:

void Fun(char ch, float x){}

则以下对函数Fun()的调用语句中,正确的是。

A)Fun("abc", 3.0); B)t = Fun('D', 16.5);

C)Fun('65', 2.8); D)Fun(32, 32);

解析:选项A中"abc"是字符串,与形参不匹配:由于Fun函数的返回值类型为void,所以选项B中进行了赋值操作是不正确的;在选项C中,'65'是不合法的字符形式,单引号中应该是单个字符。只有选项D才是合法的函数调用形式。

答案:D

3.有以下程序:

/* 文件路径名:ex4_1_3\main.c */

#include /* 标准输入/输出头文件*/

int f1(int x, int y) { return x > y ? x : y; }

int f2(int x, int y) { return x > y ? y : x; }

int main(void) /* 主函数main() */

{

int a = 4, b = 3, c = 5, d = 2, e, f, g; /* 定义变量*/

e = f2(f1(a, b), f1(c, d));

f = f1(f2(a, b), f2(c, d));/* 调用函数*/

g = a + b + c + d - e - f; /* 算术运算*/

printf("%d,%d,%d\n", e, f, g); /* 输出e,f,g */

return 0; /* 返回值0, 返回操作系统*/

}

程序运行后的输出结果是。

A)4,3,7 B)3,4,7 C)5,2,7 D)2,5,7

解析:函数f1用于求两个数中的最大数,而函数f2用于求两个数中的最小数。因此有:e=f2(f1(a,b),f1(c,d))=f2(f1(4,3),f1(5,2))= f2(4,5)=4;

f=f1(f2(a,b),f2(c,d)) =f1(f2(4,3),f2(5,2)) =f1(3,2)=3;

g=a+b+c+d-e-f=4+3+5+2-4-3=7。

答案:A

4.若函数调用时的实参为变量,以下关于函数形参和实参的叙述中正确的是。

A)函数的实参和其对应的形参共占同一存储单元

B)形参只是形式上的存在,不会占用具体存储单元

C)同名的实参和形参占同一存储单元

D)函数的形参和实参分别占用不同的存储单元

解析:在C语言中,函数的形参和实参是分别占用不同的存储单元的,因此,选项D是正确的。

答案:D

5.有以下程序:

/* 文件路径名:e4_1_5\main.c */

#include /* 标准输入/输出头文件*/

int a = 1; /* 全局变量*/

int f(int c) /* 定义函数*/

{

static int a = 2; /* 静态变量*/

c++; /* c自加1 */

return (a++) + c; /* 返回函数值*/

}

int main(void) /* 主函数main() */

{

int i, k = 0; /* 定义变量*/

for (i = 0; i < 2; i++)

{ int a = 3; k += f(a); } /* 循环调用f()函数*/

k += a; /* 将全局变量a的值加到k */

printf("%d\n", k); /* 输出k */

return 0; /* 返回值0, 返回操作系统*/

}

程序的运行结果是。

A)14 B)15 C)16 D)17

解析:题中“static int a=2”定义了一个static局部变量,编译程序为其生成永久存储单元,在调用函数f()时,值一直都保存着,在主函数中,for循环进行两次,第一次循环得f(3)=2+3+1=6,从而k+=f(3)=6,第二次循环由于static局部变量a变成了3,从而f(3)=3+3+1= 7,故k+=f(3)=13,最后执行k+=a时,此时a的值为全局变量,其值为1,所以k的值为14,选项A是正确的。

答案:A

6.有以下程序:

/* 文件路径名:e4_1_6\main.c */

#include /* 标准输入/输出头文件*/

int a = 4; /* 全局变量*/

int f(int n) /* 定义函数*/

{

int t = 0; /* 局部变量*/

static int a = 5; /* 静态变量*/

if (n % 2) {int a = 6; t += a++; }

else { int a = 7; t += a++; }

return t + a++; /* 返回函数值*/

}

int main(void) /* 主函数main() */

{

int s = a, i; /* 定义变量*/

for (i = 0; i < 2; i++) s += f(i); /* 循环调用f()函数*/

printf("%d\n", s); /* 输出s */

return 0; /* 返回值0, 返回操作系统*/

}

程序运行后的输出结果是。

A)24 B)28 C)32 D)36

解析:main()函数在开始时,s=a=4,其中的a为全局变量。

第1次循环时,i=0,f(i)=f(0),将0传递给形参n,首先执行if语句中的条件“n%2”;条件为假,则执行else下的复合语句“{ int a = 7; t += a++; }”,可知t=0+7=7,使用return 返回t=7+(a++)=7+5=12,a运算完后自增1,变为6,这里的a为函数f()内,复合语句之外的a,返回主函数后s=4+12=16。

第2次循环时,当i=1时,f(i)=f(1),将1传递给形参n,首先执行if语句中的条件“n%2”;条件为真,则执行if下的得合语句“{ int a = 6; t += a++; }”,可知t=0+6=6,使用return返回t=6+(a++)=6+6=12,这里的a为函数f()内,复合语句之外的a,返回主函数后s=16+12=28。

答案:B

7.有以下程序:

/* 文件路径名:e4_1_7\main.c */

#include /* 标准输入/输出头文件*/

Fun(int x, int y)

{

static int m = 0, i = 2; /* 静态变量*/

i += m + 1; m = i + x + y; /* 对静态变量作赋值运算*/

return m; /* 返回函数值*/

}

int main(void) /* 主函数main() */

{

int j = 1, m = 1, k; /* 定义变量*/

k = Fun(j, m); /* 调用函数Fun() */

printf("%d,", k); /* 输出k */

k = Fun(j, m); /* 调用函数Fun() */

printf("%d\n", k); /* 输出k */

return 0; /* 返回值0, 返回操作系统*/

}

相关文档
最新文档