c++第05章 补充练习.doc_第1页
c++第05章 补充练习.doc_第2页
c++第05章 补充练习.doc_第3页
c++第05章 补充练习.doc_第4页
c++第05章 补充练习.doc_第5页
已阅读5页,还剩8页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第05章 函数补充练习一、 选择题1当一个函数无返回值时,函数的类型应为 。A 任意 B void C int D char2在函数声明中, 是不必要的。A 函数参数的类型和参数名 B 函数名C 函数的类型 D 函数体3一个函数带有参数说明时,则参数的默认值应该在 中给出。A 函数定义 B 函数声明C 函数定义或声明 D 函数调用4下列叙述中错误的是 。A 一个函数中可以有多条return语句B 调用函数必须在一条独立的语句中完成C 函数中通过return语句传递数值D 主函数名main也可以带参数5在C+语言中函数返回值的类型是由 决定的。A 调用该函数时系统临时B return语句中的表达式类型C 定义该函数时所指定的函数类型D 调用庐函数时的主调函数类型6若有以下函数调用语句:“f(m+n,x+y,f(m+n,z,(x,y);”,在此函数调用语句中实参的个数是 。A 6 B 5 C 4 D 37关于函数返回值类型和返回值表达式的类型的描述中,错误的是 。A 函数返回值类型决定了返回值表达式的类型B 函数返回值的类型是在定义函数时确定的,在函数调用时不能改变C 函数返回值的类型就是返回值表达式的类型D 函数返回值表达式类型与返回值类型不同时,函数表达式类型应转换成函数返回值类型8在C+语言中,main函数默认返回一个 类型的值。A int B float C char D void9在C+语言中,对函数参数默认值描述正确的是 。A 函数参数的默认值只能设定一个B 一个函数的参数若有多个,则参数默认值的设定可以不连续C 函数参数必须设定默认值D 在设定了参数的默认值后,该参数后面定义的所有参数都必须设定默认值10在不同文件的函数中,对全局变量的引用要加上 。A register B auto C static D extern11不能作为函数重载判断依据的是 。A const B 返回类型 C 参数个数 D 参数类型12下列函数参数默认值定义错误的是 。A Fun(int x,int y=0) B Fun(int x=100)C Fun(int x=0,int y) D Fun(int x=f() (假定函数f()已经定义)13对下列程序段的描述正确的是 。#include void Fun(int,int);void main() coutFun(5,50)endl;int Fun(int x,int y) return x*x+y*y;A 该函数定义正确,但函数调用方式错误B 该函数调用方式正确,但函数定义错误C 该函数定义和调用方式都正确D 该函数定义和调用方式都错误14在函数定义前加是关键字“inline”,表示该函数被定义为 。A 重载函数 B 内联函数 C 成员函数 D 普通函数15不能实现函数之间数据传递的是 。A 全局变量 B 局部变量 C 函数接口 D 函数返回值16内部静态变量的作用域是 。A 定义该静态变量的函数外部 B 定义该静态变量的函数内部C 定义该静态变量的文件外部 D 定义该静态变量的文件内部17两个变量定义不能同名,是因为 。A 这两个变量定义在同一文件中 B 这两个变量定义在同一作用域中C 一个定义在main函数中,一个定义在子函数中 D 以上说法均不正确18一个函数为void f(int,char x=a),另一函数为void f(int),则它们 。A 不能在同一程序中定义 B 可以在同一程序中定义并可重载C 可以在同一程序中定义,但不可以重载 D 以上说法均不正确19对下列程序段的描述正确的是 。#include int Fun(int x,int y)return x+y;void main()int i=10;coutFun(i+,i)endl;A 程序输出结果不能确定 B 程序输出结果是20C 程序输出结果是21 D 程序输出结果是2220下列语句 是正确的递归函数A int Fun(int n) if(n1)return 1; else return n*Fun(n+1);B int Fun(int n) if(abs(n)1)return 1; else return n*Fun(n*2);D int Fun(int n) if(n1)return 1; else return n*Fun(n-1);21在一个被调用函数中,关于return语句使用的描述,错误的是 。A 被调用函数中可以不用return语句B 被调用函数中可以使用多个return语句C 被调用函数中,如果有返回值,就一定要有return语句D 被调用函数中,一个return语句可返回多个值给调用函数22C+语言中,函数的隐含存储类型是 。A auto B static C extern D 无存储类别23若要定义一个只允许该源文件中所有函数使用的全局变量,则该变量需要使用的存储类型为 。A extern B register C auto D static24在传值调用中,要求 。A 形参和实参类型任意,个数相等 B 实参和形参类型都完全一致,个数相等C 实参和形参对应的类型一致,个数相等 D 实参和形参对应的类型一致,个数任意25在C+中,关于下列设置参数默认值的描述中,正确的为 。A 不允许设置参数的默认值 B 设置参数默认值只能在定义函数时设置C 设置参数默认值时,应该是先设置右边的再设置左边的 D 设置参数默认值时,应该人武部参数都设置26下列标识符中, 是文件给作用域。A 函数形参 B 外部静态类标识符 C 语句标号 D 自动类标识符27下列存储类标识符中, 的可见性与存在性不一致A 内部静态类 B 外部类 C 自动类 D 寄存器类28要求通过函数来实现一种不太复杂的功能,并且要求加快执行速度,选用 。A 内联函数 B 重载函数 C 递归调用 D 嵌套调用29采用重载函数的目的在于 。A 实现共享 B 减少空间 C 提高速度 D 使用方便,提高可读性30关于C+中函数的使用,下列说法正确的为 。A 可以直接递归调用,也可以间接递归调用B 不可以直接递归调用和间接递归调用C 可以间接递归调用,不可以直接递归调用D 不可以间接递归调用,可以直接递归调用31以下函数定义编译不出错的为 。A double fun(int x,int y)z=x+y; return z; B fun(int x,y)int z=x+y; return z; C fun(int x,int y) int x,y;double z;z=x+y; return z;D double fun(int x,int y)double z=x+y;return z;32以下说法正确的为 。A 定义函数时,形参类型说明可以放在函数体内B return后面的值不能为表达式C 如果函数值的类型与返回值类型不同,则以函数值类型为准D 如果形参与实参的类型不一致,以实参类型为准33简单变量做实参时,它和形参之间的数据传递方式为 。A 地址传递 B 单向值传递C 由实参传给形参,再由形参回传给实参 D 由用户指定传递方式34以下程序有语法错误,有关错误原因正确的说法为 。void main() int g=5,K; void prt_char(); K=prt_char(g); A 语句void prt_char()有错,它是函数调用语句,不能用void说明B 变量名不能使用大写字母C 函数说明和函数调用语句之间矛盾D 函数名不能使用下划线35以下说法正确的为 。A 函数的定义可以嵌套,但函数的调用不可以嵌套B 函数的定义不可以嵌套,但函数的调用可以嵌套C 函数的定义和调用均不可以嵌套D 函数的定义和调用均可以嵌套36以下说法不正确的为 。A 在不同函数中可以使用相同名字的变量B 形参是局部变量C 在函数内定义的变量只在本函数范围内有效D 在函数内的复合语句中定义的变量在本函数范围内有效37以下程序的功能是计算函数F(x,y,z)=(x+y)/(x-y)+(z+y)/(z-y)的值,请完善程序。#include #include void main()float x,y,z,sum;float f(float a,float b);cinxyz;sum=f(x+y,x-y)+f(z+y,z-y);coutsum=sumendl;float f(float m,float n)float va=m/n;return va;(1) A x-y、x+y B z+y、z-y C x+y、x-y D z-y、z+y(2) A x-y、x+y B z+y、z-y C x+y、x-y D z-y、z+y38以下程序的功能是选出能被3整除且至少有一位是5的两位数,打印出所有这样的数及其个数。请完善程序。#include s(int a,int b)int k,t;k=a/10;t=a-k*10;if(a%3=0&t=5)|(a%3=0&k=5)coutat;b+;return b;else return -1;void main()int n=0,k,m;for(k=10;k100;k+)m=s(k,n);if(m!=-1)n=m;coutn=nendl;(1) A a*10 B a%10 C a/10 D a*10%10(2) A k*10 B k C k/10 D k%1039下列程序的运行结果为 。#include void num() extern int x,y;int a=15,b=10;x=a-b;y=a+b;int x,y;void main()int a=7,b=5; num();x+=a+b;y-=a-b;coutxtyendl;A 12 2 B 不确定 C 5 25 D 17 2340下列程序运行结果为 。#include num(int n) int b=0;static int c=3;b+;c+;return (n+b+c); void main()int a=2,i;for(i=0;i3;i+)coutnum(i)t;coutendl;A 5 7 9 B 5 10 13 C 5 9 11 D 5 6 7 41下列程序运行结果为 。#include num(int a,int b) static int m=0,i=2;i+=m+1;m=i+a+b;return m;void main()int k=4,n=1,p;p=num(k,n);coutpt;p=num(k,n);coutpendl;A 8,17 B 8,16 C 8,20 D 8,842下列程序运行结果为 。#include num(int a,int b) static int m,i;i+=m+3;m=i+a+b;return m;void main()int k=4,n=1,p;p=num(k,n);coutpt;p=num(k,n);coutpendl;A 8,20 B 8,16 C 8,19 D 8,843下列程序运行结果为 。#include int w=3;num(int k) if(k=0)return w;return num(k-1)*k;void main()int w=10;coutnum(5)*wendl;A 360 B 3600 C 1080 D 120044下列程序运行结果为 (1) ,函数调用采用 (2) 传递数据。#include num(int a,int b) return a*b;num1(int a,int b)return a-3*b;void main()int x,y,z;x=150,y=50;z=num(x,num1(x,y);coutx*y=zendl;(1) A 0 B 150*50=10725 C 150*50=0 D 程序不正确(2) A 传地址调用 B 传值调用 C 全局变量 D 引用调用45下列程序运行结果为 。#include static int a=5;void p1();void p2();void main()couta=at;p1();p2();void p1()couta*a=a*at;a=8;void p2()couta*a*a=a*a*aendl;A a=5,a*a=25,a*a*a=125 B a=5,a*a=25,a*a*a=512C a=5,a*a=64,a*a*a=512 D a=8,a*a=64,a*a*a=51246以下叙述中不正确的是 。A 预处理命令行都是以#号开始B 程序中凡是以#开始的语句都是预处理命令行C C+程序在执行过程中对预处理命令进行处理D 以下是正确的宏定义:#define IBM_PC47以下叙述中正确的是 。A 在程序一行可以出现多个有效的预处理命令行B 使用带参的宏时,参数的类型应跟宏定义时一致C 宏替换不占用运行时间,只占用编译时间D 以下定义中C R是称为宏名的标识符:#define C R 14548宏定义#define PI 3.1415926中,宏名PI替代一个 。A 常量 B 单精度数 C 双精度数 D 字符串49C+语言编译系统对宏命令的处理为 。A 在程序运行时进行 B 在程序连接时进行C 跟其它语句同时进行编译 D 在对源程序其他语句正式编译前进行的50设有如下宏定义:#define A 3#define B(x) (A+1)*x)对表达式x=3*(A+B(7);正确的说法为 。A 程序错误,不允许嵌套宏定义 B x=93 C x=21 D 程序错误,宏定义不许带参数51“文件包含”预自理语句中,当文件名用双引号括起来时,寻找被包含文件的方式为 。A 直接按系统设定的标准方式搜索目录B 先在源程序所在目录搜索,再按系统设定的标准方式搜索C 仅仅搜索当前目录D 仅仅搜索源程序所在目录52文件包含”预自理语句中,当文件名用号括起来时,寻找被包含文件的方式为 。A 直接按系统设定的标准方式搜索目录B 先在源程序所在目录搜索,再按系统设定的标准方式搜索C 仅仅搜索当前目录D 仅仅搜索源程序所在目录53C+提供的预处理功能包括条件编译,其基本形式为 。#XXX 标识符程序段1#else程序段2#endif这里的XXX可以是 。A define 或 include B ifdef 或 includeC ifdef 或 define或 ifndef D ifdef或if或ifndef54若有宏定义如下,程序段运行的结果为 。#include #define X 5#define Y X+1#define Z Y*X/2void main()int a=Y;coutZt;couta-;coutn;A 7 6 B 12 6 C 12 5 D 7 555以下程序运行结果为 。#include #define M(y) 2.84+y#define PR(a) cout(int)(a)#define PRINT1(a) PR(a);coutn;void main()int x=2;PRINT1(M(5)*x);A 11 B 12 C 13 D 1556以下程序的运行结果为 。#include #define SQR(X) (X)*(X)void main()int a=10,k=2,m=1;a/=SQR(k+m)/SQR(k+m);couta=an;A 10 B 1 C 9 D 0二、 填空题1在C+中, 函数不需要要使用相应的函数原型语句加以说明。2定义一个函数时,若只允许函数体访问形参的值而不允许修改它的值,则应把该形参声明为 (1) ,即在该形参声明的前面加上 (2) 关键字进行修饰。3当调用一个函数时,整个调用过程分为三步进行,第一步是 (1) ,第二步是 (2) ,第三步是 (3) ,即回到函数调用表达式的位置。4函数的调用方式分为三种: (1) , (2) , (3) 。5变量的四种作用域分另是 (1) , (2) , (3) , (4) 。6在一个C+程序中,每个变量都必须遵循 的原则。7在一个函数的定义或声明前加上关键字 时,该函数就声明为内联函数。8具有相同的函数名但具有不同参数表的函数称为 。9在调用一个函数的过程中可以直接或间接地调用该函数,这种调用称为 (1) 调用,该函数称为 (2) 。10在调用f1()函数的过程中,又调用了f1()函数,这种调用称为 (1) 调用,而在调用f1()函数的过程中,调用了f2()函数,又在调用f2()函数的过程中调用了f1()函数,这种调用称为 (2) 调用。11假设有如下函数定义:“void Fun(int x,int y=100);”,则语句Fun(5)与语句 等价。12在函数原型声明中,必须声明函数参数的类型,但可以省略 。13静态整型变量的初始值为 。14在进行函数调用时,将把参数的 (1) 传递给参数,把参数的 (2) 传递给引用参数。15C+语言提供的一元作用域运算符“:”的作用是 。16只有 (1) 和 (2) 才能被定义为寄存器变量,定义寄存器变量的目的为 (3) 。17函数的形参与实参的 (1) 、 (2) 、 (3) 应一致。18函数原型作用域,它是从 (1) ,到 (2) 结束。19C+语言的编译预自理功能主要有 (1) 、 (2) 和条件编译三种。20宏定义命令#define出现在所有函数之外,则定义的宏名的有效范围为 。21设正方形的边长用参数a表示,则求正方形的面积的宏定义为 。22在程序的多文件组织中,用static修饰的函数或变量限于 。23假定n=3,写出下列程序的运行结果为 。#include int Fun(int m);void main()coutn;s=Fun(n);coutsendl;int Fun(int a)int p=1,sum=0;for(int i=1;i=a;i+)p*=i;sum+=p;return sum;24阅读下面程序,如果程序有错,请指出程序中的错误并说明错误原因;如果没有错误,请给出程序运行结果 。#include void Fun()int num=20;coutThe Funs num is numendl;void main()int num=10;coutThe mains num is numendl;Fun();int num=30;coutThe Fields num is numendl;coutThe mains num is numendl;25阅读下面程序,如果程序有错,请指出程序中的错误并说明错误原因;如果没有错误,请给出程序运行结果 。#include int global;static int stable;void main()int num=0;coutThe initial value of global is globalendl;coutThe initial value of stable is stableendl;coutThe initial value of num is numendl;26假定输入的10个字符为“abcdefghij”,写出下列程序运行的结果为 。#include void Fun(int);void main()Fun(10);coutn;void Fun(int a)char ch;if(ach;coutch;Fun(a-1);coutch;27下列程序的运行结果为 。#include void Fun();void main()for(int i=0;i=6;i+)Fun();void Fun()int x=0;x+;static int y=0;y+;coutx=x,y=yendl;28下列程序的运行结果为 。#include int a=100;void Fun()int a=0;a+;:a=200;coutThe a of fun is aendl;cout:a=:aendl;void main()int a=10;Fun();a+;:a+=1;coutThe a of main is aendl;cout:a=:aendl;29阅读下列程序,找出程序中的错误,并说明错误原因。#include int Fun(int x,int y=10)return x+y;int Fun(int a)return a*a;void main()coutFun(10)n;30下列程序的运行结果为 。#include int Fun(int x,int y)x=x+y;y=x+y;coutx=x,y=yendl;return x+y;void main()int x=5,y=8;int z=Fun(x,y);coutx=x,y=y;cout,z=zendl;31下列程序的运行结果为 。#include int Max(int x,int y) return xy?x:y; int Max(int x,int y,int z)int t;t=Max(x,y);return tz?t:z;void main()int x=5,y=8,z=3;coutMax(x,y,z)endl;32下列程序的运行结果为 。#include int Fun(int x)coutx;if(x=0)coutendl;return 0;else return x*x+Fun(x-1);void main()int x=Fun(6);coutxendl;33阅读下面程序,如果程序有错,请指出程序中的错误并说明错误原因;如果没有错误,请给出程序运行结果 。#include void fun(int a=10,int b=20);void main()int x=100;void fun(int a=1000,int b=1000);fun(x);void fun(int a,int b)couta=aendl;coutb=bendl;34执行下列程序后,输出的第一行为 ,第二行为 ,最后一行为 。#include void f(int b,int t)int m;if(bt)m=(b+t)/2;coutmendl;f(b,m-1);f(m+1,t);void main() f(1,6); 35下列程序的运行结果为 。#include int m=10;int f(int x,int y)int m=5;m+=x*y;return m;void main() int a=6,b=7;coutf(a,b)/mendl; 36执行下列程序后,输出的第一行为 ,第二行为 。#include void f(int a)if(a0)cout-;a=-a;coutchar(a%10+0);if(a=a/10)!=0)f(a);void main() int b=-3567;f(b);coutn;b=3456;f(b);coutn;37执行下列程序后,输出的第一行为 ,第二行为 ,第三行为 。#include int i,j=2;void p(void)for(i=0;i4;i+)cout+j;if(i+1)%2=0)coutn;void main()for(i=0;i3;i+)p();coutin;38执行下列程序后,输出的第一行为 ,第二行为 。#include void f(int b)if(b70)f(b+25);coutbendl;void main() f(25); 39下列程序的运行结果为 。#include void swap(int b,int t)int m;if(bt)m=b;b=t;t=m;void main() int x=15,y=12,z=20;if(xy)swap(x,y);if(xz)swap(x,z);if(yz)swap(y,z);coutx,y,zendl;40执行下列程序后,输出的第一行为 ,第二行为 ,第三行为 。#include add(int b,int t)static int z=1;z=b+t+z;return z;void main() int a=1,b=2,x1,x2,x3;x1=add(a,b);x2=add(add(a,b),b);x3=add(a,b);coutx1,x2,x3endl;41下列程序的运行结果为 。#include void fun1(int);void fun2();void main()extern int x; x+=2;coutx;fun1(2);int x=1;void fun1(int x)coutx+;fun2();void fun2(void)coutx;int x=5;coutx;42下列程序的运行结果为 。(所用编译系统传递函数参数的顺序为自右向左)#include f(int b,int t)return b+t;void main() int x=6,y=7,z;z=f(f(x+,y+),f(-x,-y);coutzendl;43执行下列程序后,输出的第一行为 ,第二行为 ,第三行为 。#include int a=2;void main()int b=2,c=3;+a;c+=+b;if(+a|+b|+c)couta,b,cn;int a=3,c;c=b*3;a+=c; couta,b,cn;a+=c;couta,b,cn;44执行下列程序后,输出的第一行为 ,第三行为 。#include fun(int n)static int j=2;return j*=n;void main()for(int k=1;k=4;k+)coutfun(k)n;45执行下列程序后,输出的第一行为 ,第二行为 ,第三行为 。#include void f(int i)if(i0)cout9)f(i/10);else if(i0)if(i=-1)f(i/10);cout(-i)%10;else couti;void main()f(125);coutn;f(-234);coutn;f(0);coutn;46以下程序功能是用二分法求方程2x3-4x2+3x+6=0的根,要求绝对误差不超过0.001,请完善程序。#include #include float f(float x)return (2*x*x*x-4*x*x+3*x-6);void main()float m=-200,n=90,r;r=(m+n)/2;while(f(r)*f(n)!=0)if( )m=r;else n=r;if( )break;r=(m+n)/2;cout方程根为:rn;47已知函数POW,现要求取消变量I后函数POW的功能不变,请完善程序。修改前POW函数pow(int x,int y) int I,j=1; for(I=1;I=y;I+)j*=x; return j;修改后POW函数pow(int x,int y) int j=1; for( ; ; )j*=x; return j;48以下程序的功能是求三个数的最小公倍数,请完善程序。#include #include max(int x,int y,int z)if(xy&xz)return x;else if( )return y; else return z;void main()int x1,x2,x3,k=1,j,x0;coutx1x2x3;x0=max(x1,x2,x3);while(1)j=x0*k;if( )break;k+;coutx1,x2,x3最小公倍数是:jn;49以下程序是用递归算法求数a的平方根,请完善程序。(求平方根的迭代公式为:x1=(x0+a/x0)/2#include #include double mysqrt(dou

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论