




已阅读5页,还剩9页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第4章 习题解答一、选择题1在C语言中,函数返回值的类型最终取决于 A)函数定义时的函数首部所说明的函数类型B)return语句中表达式值的类型C)调用函数时主调函数所传递的实参类型D)函数定义时形参的类型解析:函数返回值类型最终取决于定义函数时所定义的函数类型。答案:A2设函数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才是合法的函数调用形式。答案:D3有以下程序:/* 文件路径名:ex4_1_3main.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,%dn, 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。答案:A4若函数调用时的实参为变量,以下关于函数形参和实参的叙述中正确的是 。A)函数的实参和其对应的形参共占同一存储单元B)形参只是形式上的存在,不会占用具体存储单元C)同名的实参和形参占同一存储单元D)函数的形参和实参分别占用不同的存储单元解析:在C语言中,函数的形参和实参是分别占用不同的存储单元的,因此,选项D是正确的。答案:D5有以下程序:/* 文件路径名:e4_1_5main.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(%dn, 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是正确的。答案:A6有以下程序:/* 文件路径名:e4_1_6main.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(%dn, 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。答案:B7有以下程序:/* 文件路径名:e4_1_7main.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(%dn, k);/* 输出k */return 0; /* 返回值0, 返回操作系统 */执行后的输出结果是 。A)5,5 B)5,11C)11,11 D)11,5解析:在第1次调用Fun()函数时,x=1,y=1,函数Fun()的静态变量i=2+0+1=3,m=3+1+1=5,返回m=5。在第2次调用Fun()函数时,x=1,y=1,函数Fun()的静态变量i=3+5+1=9,m=9+1+1=11,返回m=11。答案:B8在一个C源程序文件中所定义的全局变量,其作用域为 。A)所在文件的全部范围B)所在程序的全部范围C)所在函数的全部范围D)由具体定义位置和extern说明来决定范围解析:全局变量的作用域不但从具体定义位置开始,直到文件结束为止,而且还可用extern声明来扩大作用域围,所以此选项D正确。答案:D9在C语言中,函数的隐含存储类别是 。A)auto B)static C)extern D)无存储类别解析:C语言规定,函数的隐含存储类别为外部类型,即extern类型,允许其他文件中的函数调用。答案:C10有以下程序:/* 文件路径名:ex4_1_10main.c */#include /* 标准输入/输出头文件 */int Fun(int x)if (x = 0 | x = 1) return 3;/* 递归结束 */else return x - Fun(x - 2);/* 递归调用 */int main(void)/* 主函数main() */printf(%dn, Fun(7);/* 输了Fun(7) */return 0; /* 返回值0, 返回操作系统 */执行后的输出结果是 。A)7 B)3 C)2 D)0解析:x=7,通过递归调用Fun()函数后得到Fun(7)= 7-Fun(5)= 7-(5-Fun(3) =2+3-Fun(1)=2。答案:C*11下面选项中不属于面向对象程序设计特征的是 。A)继承性B)多态性C)类比性D)封装性解析:面向对象技术有三个重要特性:封装性、继承性和多态性;而类比性不属于面向对象的特征。答案:C12对于一个正常运行的C程序,以下叙述中正确的是 。A)程序的执行总是从main函数开始,在main函数结束B)程序的执行总是从程序的第一个函数开始,在main函数结束C)程序的执行总是从main函数开始,在程序的最后一个函数中结束D)程序的执行总是从程序的第一个函数开始,在程序的最后一个函数中结束解析:C程序的执行总是从main函数开始,完成对其他函数的调用后返回到main函数,最后由main函数结束整个程序。一个C源程序有且公有一个main函数。答案:A二、填空题1以下程序中,函数Fun()的功能是计算x2-2x+6,主函数中将调用Fun()函数计算:y1 = (x+8)2-2(x+8)+6y2=sin2(x)-2sin(x)+6请填空。/* 文件路径名:e4_2_1main.c */#include /* 标准输入/输出头文件 */#include /* 数学函数首部文件 */double Fun(double x) return x*x - 2 * x + 6; int main(void)/* 主函数main() */double x, y1, y2;/* 定义变量 */printf(输入x:);/* 输入提示 */scanf(%lf, &x);/* 输入x */y1 = Fun( 【1】 );/* 调用函数Fun() */y2 = Fun( 【2】 );/* 调用函数Fun() */printf(y1=%lf, y2=%lfn, y1, y2);/* 输出y1,y2 */return 0; /* 返回值0, 返回操作系统 */解析:函数的一般调用形式为:函数名(实在参数表),在调用时将实参的值赋给形参,实参可以是常量、变量或表达式。答案:【1】x + 8【2】sin(x)2有以下程序:/* 文件路径名:e4_2_2main.c */#include /* 标准输入/输出头文件 */int sub(int n) return n / 10 + n % 10; int main(void)/* 主函数main() */int x, y;/* 定义变量 */scanf(%d, &x);/* 输入x */y = sub(sub(sub(x);/* 调用函数 */printf(%dn, y);/* 输出y */return 0; /* 返回值0, 返回操作系统 */若运行时输入:1234,程序的输出结果是 。解析:1234作为实参传递给形参n, sub(x)值为1234/10+1234%10=123+4=127, sub(sub(x)=sub(127)=127%10+127%10=12+7=19,sub(sub(sub(x)=sub(19)=9/10+19%10=10,所以将输出10。答案:103以下程序运行后的输出结果是 。/* 文件路径名:e4_2_3main.c */#include /* 标准输入/输出头文件 */void swap(int x, int y)int t = x; x = y; y = t;/* 交换x,y */printf(%d %d , x, y);/* 输出x,y */int main(void)/* 主函数main() */int a = 3, b = 4;/* 定义变量 */swap(a, b);/* 调用函数 */printf(%d %dn, a, b);/* 输出a,b */return 0; /* 返回值0, 返回操作系统 */解析:C函数的参数传递都是传值的,因此swap(a,b)调用将a和b的值3和4传递给swap的形参x和y,x和y通过t交换值,printf输出x和y结果是“4 3“。swap函数调用结束后,a和b的值并没有交换,printf输出a和b结果是“3 4”。答案:4 3 3 44以下程序运行后的输出结果是 。/* 文件路径名:e4_1main.c */#include /* 标准输入/输出头文件 */Fun(int a)int b = 0;/* 局部变量 */ static int c = 3;/* 静态变量 */b+; c+;/* b,c自加1 */return a + b + c;/* 返回函数值 */int main(void)/* 主函数main(void) */int i, a = 5;/* 定义变量 */for (i = 0; i 3; i+)printf(%d %d , i, Fun(a);/* 输出i,Fun(a) */printf(n);/* 换行 */return 0; /* 返回值0, 返回操作系统 */解析:第1次调用Fun()函数时,a=5,“b+; c+;”执行后,b=1,c=4,返回5+1+4=10;第2次调用Fun()函数时,a=5,“b+; c+;”执行后,b=1,c=5,返回5+1+5=11;第3次调用Fun()函数时,a=5,“b+; c+;”执行后,b=1,c=6,返回5+1+6=12。答案:0 10 1 11 2 125以下程序运行后的输出结果是 。/* 文件路径名:ex4_2_5main.c */#include /* 标准输入/输出头文件 */int f(int a, int n)if (n = 1) return f(a, n - 1) + an - 1;/* 递归调用 */else return 0;/* 递归结束 */int main(void)/* 主函数main() */int a = 1, 2, 3, 4, 5, s;/* 定义数组与变量 */s = f(a, 5);/* 调用函数f() */printf(%dn, s);/* 输出s */return 0; /* 返回值0, 返回操作系统 */解析:通过递归调用f函数实现了数组各元素之和,即a0+a1+a2+a3+a4=15。答案:15*6在面向对象方法中,类的实例称为 。解析:将属性、操作相似的对象归为类,类是具有共同属性、共同方法的对象的集合。所以,类是对象的抽象,而一个对象则是其对应类的一个实例。答案:对象三、编程题1编写一个函数,其功能是判断输入的三个边是否能组成三角形,要求编写测试程序。参考程序:/* 文件路径名:ex4_3_1main.c */#include /* 包含库函数printf()所需要的信息 */#include /* 包含库函数system()所需要的信息 */int IsTriangle(float a, float b, float c)/* a,b,c能组成三角形,返回1,否则返回0 */if (a 0 & b 0 & c 0 & a + b c & a + c b & b + c a)/* 能组成三角形 */return 1;/* 返回1 */else/* 不能组成三角形 */return 0;/* 返回0 */int main(void)/* 主函数main() */float a, b, c;/* 定义变量 */printf(输入三边长:);/* 输入提示 */scanf(%f%f%f, &a, &b, &c);/* 输入a,b,c */if (IsTriangle(a, b, c)/* 能组成三错角形 */printf(%f, %f, %f能组成三角形n, a, b, c);else/* 不能组成三错角形 */printf(%f, %f, %f不能组成三角形n, a, b, c); system(PAUSE);/* 调用库函数system( ),输出系统提示信息 */return 0; /* 返回值0, 返回操作系统 */2编写一个函数,其功能是输入n个数,返回这些数的最大值,要求编写测试程序。参考程序:/* 文件路径名:ex4_3_2main.c */#include /* 包含库函数printf()所需要的信息 */#include /* 包含库函数system()所需要的信息 */int Max(int n)/* 求输入的n个数的最大值 */int m, i, tem;/* 定义变量 */printf(输入%d个数:, n);/* 输入提示 */scanf(%d, &m);/* 先假设输入的第1个数就是最大值 */for(i = 1; i m) m = tem;/* 比较求最大值 */return m;/* 返回最大值 */int main(void)/* 主函数main() */int n, m;/* 定义变量 */printf(输入个数n:);/* 输入提示 */scanf(%d, &n);/* 输入n */m = Max(n);/* 求输入的n个数的最大值 */printf(输入的%d个数的最大值为%dn, n, m);/* 输出结果 */ system(PAUSE);/* 调用库函数system( ),输出系统提示信息 */return 0; /* 返回值0, 返回操作系统 */3编写一个函数,其功能是输入n个数,返回这些数的最小值,要求编写测试程序。参考程序:/* 文件路径名:ex4_3_3main.c */#include /* 包含库函数printf()所需要的信息 */#include /* 包含库函数system()所需要的信息 */int Min(int n)/* 求输入的n个数的最小值 */int m, i, tem;/* 定义变量 */printf(输入%d个数:, n);/* 输入提示 */scanf(%d, &m);/* 先假设输入的第1个数就是最小值 */for(i = 1; i n; i+)/* 依次输入其它各数,比较求最小值 */scanf(%d, &tem);/* 输入输入其它各数 */if (tem m) m = tem;/* 比较求最小值 */return m;/* 返回最大值 */int main(void)/* 主函数main() */int n, m;/* 定义变量 */printf(输入个数n:);/* 输入提示 */scanf(%d, &n);/* 输入n */m = Min(n);/* 求输入的n个数的最小值 */printf(输入的%d个数的最小值为%dn, n, m);/* 输出结果 */ system(PAUSE);/* 调用库函数system( ),输出系统提示信息 */return 0; /* 返回值0, 返回操作系统 */4编写一个判断素数的函数,在主函数中输入一个整数,输出是否为素数的信息。参考程序:/* 文件路径名:ex4_3_4main.c */#include /* 包含库函数printf()所需要的信息 */#include /* 包含库函数system()所需要的信息 */int IsPrime(int n)/* 如果n是素数,返回1,否则返回0 */int i;/* 定义变量 */ for (i = 2; i n; i+)if (n % i = 0) break;/* 如n能被i整除,则n不是素数,退出循环 */if (n = 1 | i n) return 0;/* 不是素数 */else return 1;/* 是素数 */int main(void)/* 主函数main() */int n;/* 定义整数变量 */printf(输入正整数n:);/* 输入提示 */scanf(%d, &n);/* 输入n */if (IsPrime(n) printf(%d是素数n, n);else printf(%d不是素数n, n);system(PAUSE);/* 调用库函数system( ),输出系统提示信息 */return 0;/* 返回值0, 返回操作系统 */5编写函数判断给定的年份是否为闰年,要求编写测试程序。参考程序:/* 文件路径名:ex4_3_5main.c */#include /* 包含库函数printf()所需要的信息 */#include /* 包含库函数system()所需要的信息 */int IsLeapYear(int year)/* 如果year是闰年,返回1,否则返回0 */if (year % 4 = 0 & year % 100 != 0/* 如果年份能被4整除但不能被100整除 */| year % 400 = 0) return 1;/* 或年份能被400整除,则为闰年 */ else return 0;/* 否则为平年 */int main(void)/* 主函数main() */int year;/* 年份 */printf(输入年份:);/* 输入提示 */scanf(%d, &year);/* 输入year */if (IsLeapYear(year) printf(%d是闰年n, year);else printf(%d不是闰年n, year);system(PAUSE);/* 调用库函数system( ),输出系统提示信息 */return 0;/* 返回值0, 返回操作系统 */*6编写一个函数,其功能是给出年、月和日,计算出该日是该年的第几天,要求编写测试程序。参考程序:/* 文件路径名:ex4_3_6main.c */#include /* 包含库函数printf()所需要的信息 */#include /* 包含库函数system()所需要的信息 */int IsLeapYear(int year)/* 如果year是闰年,返回1,否则返回0 */if (year % 4 = 0 & year % 100 != 0/* 如果年份能被4整除但不能被100整除 */| year % 400 = 0) return 1;/* 或年份能被400整除,则为闰年 */ else return 0;/* 否则为平年 */int Nums(int year, int month, int day)/* 已知日期,返回该日是该年的第几天 */switch (month)case 1:/* 1月份 */return day;break;case 2:/* 2月份 */return 31 + day;break;case 3:/* 3月份 */if (IsLeapYear(year) /* 闰年 */return 31 + 29 + day;else /* 平年 */return 31 + 28 + day;break;case 4:/* 4月份 */if (IsLeapYear(year) /* 闰年 */return 31 + 29 + 31 + day;else /* 平年 */return 31 + 28 + 31 + day;break;case 5:/* 5月份 */if (IsLeapYear(year) /* 闰年 */return 31 + 29 + 31 + 30 + day;else /* 平年 */return 31 + 28 + 31 + 30 + day;break;case 6:/* 6月份 */if (IsLeapYear(year) /* 闰年 */return 31 + 29 + 31 + 30 + 31 + day;else /* 平年 */return 31 + 28 + 31 + 30 + 31 + day;break;case 7:/* 7月份 */if (IsLeapYear(year) /* 闰年 */return 31 + 29 + 31 + 30 + 31 + 30 + day;else /* 平年 */return 31 + 28 + 31 + 30 + 31 + 30 + day;break;case 8:/* 8月份 */if (IsLeapYear(year) /* 闰年 */return 31 + 29 + 31 + 30 + 31 + 30 + 31 + day;else /* 平年 */return 31 + 28 + 31 + 30 + 31 + 30 + 31 + day;break;case 9:/* 9月份 */if (IsLeapYear(year) /* 闰年 */return 31 + 29 + 31 + 30 + 31 + 30 + 31 + 31 + day;else /* 平年 */return 31 + 28 + 31 + 30 + 31 + 30 + 31 + 31 + day;break;case 10:/* 10月份 */if (IsLeapYear(year) /* 闰年 */return 31 + 29 + 31 + 30 + 31 + 30 + 31 + 31 + 30 + day;else /* 平年 */return 31 + 28 + 31 + 30 + 31 + 30 + 31 + 31 + 30 + day;break;case 11:/* 11月份 */if (IsLeapYear(year) /* 闰年 */return 31 + 29 + 31 + 30 + 31 + 30
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年教师招聘之《幼儿教师招聘》题库必背100题附答案详解(综合卷)
- 2025呼伦贝尔农垦集团有限公司社会招聘50人备考含答案详解
- 2025年教师招聘之《幼儿教师招聘》基础试题库含答案详解【基础题】
- 2025内蒙古呼伦贝尔扎兰屯市教育系统“校园引才”27人笔试备考完整参考答案详解
- 教师招聘之《幼儿教师招聘》从业资格考试真题附答案详解【满分必刷】
- 教师招聘之《小学教师招聘》考试综合练习附参考答案详解(基础题)
- 教师招聘之《小学教师招聘》通关检测卷【必刷】附答案详解
- 2025年教师招聘之《小学教师招聘》通关题库及参考答案详解【考试直接用】
- 2025年教师招聘之《小学教师招聘》练习题库(夺分金卷)附答案详解
- 押题宝典教师招聘之《幼儿教师招聘》题库带答案详解(达标题)
- 冷水机组技术要求及质量标准
- 新版教科版科学五年级上册全册课件
- 小学地方课程教案(全面完整版)
- 山西省家庭经济困难学生认定申请表
- 国家职业技能标准——城市轨道交通列车司机(2020版)
- 《社会学概论》全套课件-PPT
- 动力弹塑性分析滞回模型-迈达斯
- 驾驶员实用英语口语
- 小学六年级上册音乐-第1课《我的祖国》--湘教版(12张)ppt课件
- 脐疗-望脐知健康ppt课件
- 完整版陆河客家请神书
评论
0/150
提交评论