当前位置:文档之家› 函数和编译预处理

函数和编译预处理

函数和编译预处理(第五章)一、单项选择题1.关于函数,以下正确的描述是( B)A. 函数的定义可以嵌套,但函数的调用不可以嵌套B. 函数的定义不可以嵌套,但函数的调用可以嵌套C. 函数的定义可以嵌套,函数的调用也可以嵌套D. 函数的定义和函数的调用都不可以嵌套2.关键字inline用于定义内联函数,定义时,是将该关键字( D )A. 取代定义函数的类型标识符B. 取代被定义的函数名C. 加在类型标识符之后D. 加在类型标识符之前3.以下不正确的描述为( B )A. 在函数之外定义的变量称为外部变量,外部变量是全局变量。

B. 在函数之内说明的外部变量是局部变量,仅在本函数中有效。

C. 在函数之外说明的静态变量也是全局变量,其作用域是文件作用域。

D. 文件作用的域范围是一个程序文件,但必须符合“定义在前,使用在后”的规则。

4.以下正确的描述为( C )A. 每个C++程序必须在开头用预处理命令#include <iostream.h>B. 预处理命令必须位于C++源程序的首部C. 在C++中,预处理命令都以#开头D. C++语言的预处理命令只能实现宏定义和条件编译的功能5.在下面的函数原型说明中,存在着语法错误的是( D )A.void BC(int a,int);B.void BD(int , int);C.void BE(int , int=5);D.int BF(int x ; int y);6.下列哪个不是重载函数在调用时选择的依据( C )A. 形参类型B. 形参个数C. 函数返回值类型D. 函数名7.在一个源程序文件中有以下函数定义,其中( D )是重载函数。

A.ABC B. BCDC. ACDD. 全部A) int sum(float x,int y) B) float sum(float x,int y,char z){...} {...}C) float sum(float x,float y) D) int sum(int x,int y,char z){...}{...}8.有一个函数原型abc(float x,float y);该函数的返回值类型为( C )A. voidB. doubleC. intD. float9.在程序中,函数声明语句正确位置是( D )A. 随便任何位置B. 不包含在另一函数中的任何位置。

C. 该函数使用前的任何位置D. 该函数使用前的任何位置,但不包含在另一函数中10.C++构造内联函数的思想是( A )A. 用空间换时间B. 用时间换空间C. 用形参换实参D. 用实参换形参11.在以下存储类型中,( D )是用于定义动态类型的变量。

A. static 和autoB. register 和externC. register和 staticD. auto 和register12.下列各类变量,哪个不是局部变量( B )A. register型变量B. 外部static变量C. auto型变量D. 函数形参13.以下关于调用函数时,形、实参结合的通用规则不正确的描述为(B )A. 实参可以是变量,也可以是常数或者表达式。

B. 实参的个数可以多于形参,也可以少于形参。

C. 系统将为形参分配内存单元。

D. 实参必须与对应的形参类型相兼容。

14.假设有宏定义:#define NUM 15#define DNUM NUM+NUM则表达式DNUM/2+NUM*2的值为( C )A. 45B. 67C. 52D. 9015.对于一个功能不太复杂,并且要求加快执行速度,选用(A )合适。

A. 内联函数B. 重载函数C. 递归调用D. 嵌套调用16.若有以下函数调用语句:fun((a+b,(x,y)),fun(n+k,d),(a,b));其中实参的个数是(A )A.3 B. 4 C. 5 D. 617.以下叙述下不正确的是(D )A. 在函数中,通过return返回函数值。

B.函数中可以有多条return语句。

C.主函数main()也可以带有形参。

D.调用函数,必须在一条独立的语句中完成。

18.设有函数定义:int f1(void){return 100,200;},调用函数f1()时,(C )A. 函数返回值为100B. 函数返回二个值100和200C. 函数返回值为200D. 语句“return 100,200;”语法错,不能调用函数19.调用宏定义和语句:#define M(a,b) a*b; //Eint x=M(3+4,5+6),y; //Fy=M(3,4); //G则(B )A. 编译时,E行有语法错B. 编译时,F行有语法错C. 编译时,G行有语法错D. 编译时,F行和G行有语法错20.在一个源文件中定义的全局变量的作用域为(D )A. 本文件的全部范围B. 本程序的全部范围C. 本函数的全部范围D. 从定义该变量的位置开始至本文件的结束21.对于下面几个函数,(C )是重载函数。

void f(int x) { ... } //1int f(int y) { ... } //2int f(int i , int j ) { ... } //3float k(int x ) { ... } //4A. 4个全部B. 1和4C. 2和3D. 3和422.编译系统根据同一个程序中(A )识别重载函数。

A. 形、实参的个数和类型的差别B. 形、实参的个数和函数名的差别C. 形、实参个数,类型和返回值类型的差别D. 形、实参的类型和返回值类型的差别23. 以下正确的说法是(D )A. 用户若需要调用标准库函数,调用前必须重新定义B. 用户可以直接调用所有标准库函数C. 用户可以定义和标准库函数重名的函数,但是在使用时调用的是系统库函数D. 用户可以通过文件包含命令将系统库函数包含到用户源文件中,然后调用系统库函数24. 以下叙述中不正确的是(D )A. 在不同的函数中可以使用相同名字的变量B. 函数中的形式参数是局部变量C. 在一个函数内定义的变量只在本函数范围内有效D. 在一个函数内的复合语句中定义的变量在本函数范围内有效二、填空题1.当在块作用域内的局部变量与全局变量同名时,则局部变量优先。

2.在类型前加关键字inline 定义的函数称为内联函数。

3.有如下宏定义#define X(a) (a)*a,则表达式X(4+5)的值为41 。

4.变量分为全局和局部两种,全局变量没有赋初值时,其缺省值为0。

5.内联函数的实质是在编译时把函数的函数体直接插入到函数调用处。

6.C++在进行宏扩展时,不作做任何语法检查和计算,只对宏名进行简单替换。

7.在函数的递归调用时,若在A函数内调用B函数,而在B函数内调用A函数,称为间接递归。

8.若myheadfile.h为用户自定义的头文件,则在程序开始处包含此头文件的格式为#include”myheadfile.h”。

9.具有块作用域的变量都是局部变量。

10.递归函数在执行过程中,存在二个过程是递归和回推。

11.有如下宏定义#define X(a) a*a,则表达式X(4+5)的值为29 。

12.在for语句中说明的循环控制变量具有的作用域是包含for语句的内层块。

13.静态整数变量有确定的初值,其缺省的初值为 0 。

14.在设计递归方法程序时,为防止进入无穷递归,在递归程序中一定要有递归结束条件。

15.若在程序前定义了#define ring(x,y,z) x*y/z ,且在程序中有语句s=ring(25,6,1.5); 则程序运行时执行的相应语句(宏扩展)为s=25*6/1.5。

16. 在一个函数定义的函数体中又出现直接或间接地调用该函数本身称为函数的递归调用。

17.若要定义只能用于本文件的内部函数时,则在函数的类型标识符前加修饰词static 。

18. 函数原型为abc(float x,char y);该函数的返回值类型为 int 。

19.在C++程序中,当函数调用在前、函数定义在后时,则应在主调函数中,在调用前增加对被调函数的原型说明。

20.在函数的递归调用时,若在A函数内调用A函数,称为直接递归。

21. 若有宏定义:#defin X 2#defin Y(n)((X+1)*n)则执行语句:z=2*(X+Y(X+2));后,z的值是 20 。

三、阅读程序题1.#include <iostream.h>void test(int x, int y=20){cout<<”x=”<<x<<”;y=”<<y<<endl;}void main( ){int x=10;int y=15;test(x,y);test(x);}执行以上程序后,输出的第一行结果:x=10;y=15第二行结果:x=10;y=202.#include<iostream.h>#define ABCvoid main(){float s, x, y, z;s=1;y=z=0;while(s<=10){cin>>x;y+=x;s++;}z=y/10;#ifdef ABCcout<< y<<endl;#endifcout<<z<<endl;}问题1:程序中二个输出语句分别输出什么信息。

问题2:取消或保留语句#define ABC,对程序输出有何影响?(1) y输出10个实数之和z输出10个实数的平均值(2) 取消语句#define ABC,则程序输出为10个实数的平均值。

保留语句#define ABC,则程序输出为10个实数之和及10个实数的平均值。

3.# include <iostream.h># define AREA(a,b) a*b# define PREIMETER(a,b) 2*(a+b)void main(void){ cout<<"Area="<<AREA(1+2,3+4)<<endl;cout<<"Preimete="<<PREIMETER(5,6)<<endl;}以上程序段执行后,输出是:Area=11Preimete=224.#include <iostream.h>int i=2,j=3;int f(int a,int b){ int c=0; static int d=3;d++;if(a>b) c=1;else if (a==b) c=0;else c=-1;i=j+1;return (c+d);}void main(){ int p;p=f(i,j);cout<<i<<’,’<<j<<’,’<<p<<endl;i=i+1; p=f(i,j);cout<<i<<’,’<<j<<’,’<<p<<endl;i=i+1; p=f(i,j);cout<<i<<’,’<<j<<’,’<<p<<endl;}执行以上程序后,第一行输出:4,3,3第二行输出:4,3,6第三行输出:4,3,75.# include <iostream.h>int a=5;void main() {int a=10,b=20;cout <<a<<'\t'<<b<<endl;{ int a=0,b=0;for (int i=1; i<6; i++) {a+=i; b+=a;}cout <<a<<'\t'<<b<<'\t'<<::a<<endl;}cout <<a<<'\t'<<b<<endl;}执行以上程序后,第一行输出:10,20第二行输出:15,35,5第三行输出:10,206.#include <iostream.h>void fun( );void main( ){int i;for(i=0;i<5;i++)fun();}void fun( ){static int m=0;cout<<++m;}执行以上程序时,输出结果是:123457.#include <iostream.h>void main(void){ int i;void add1(void);void add2(void);for (i=0;i<3;i++){ add1();add2();cout<<endl;}}void add1(void){ int x=0;x++;cout<<x<<'\t';}void add2(void){ static int x=0;x++;cout<<x<<'\t';}执行以上程序时,输出结果是: 1 11 21 38.#include <iostream.h>int fac(){int b=0;static int c=3;b++;c++;return b+c;}void main( ){for(int j=0;j<3;j++) cout<<fac()<<’\t’; }执行如上程序后,输出结果是:5 6 79.#include <iostream.h>int fun(double a,double b);void main( ){cout<<fun(2.5,3.5)<<endl;}int fun(double a,double b){return a*b;}执行以上程序时,输出结果是:810.#include<iostream.h>void fun(int n){cout<<n%10;if(n<10) return;else fun(n/10);}void main(){int n;cin>>n;fun(n);cout<<endl;}执行以上程序时输入:469257,输出结果是:752964 11.#include <iostream.h>void change(int x,int y){x+=10;y+=10;cout<<”x=”<<x<<”;y=”<<y<<endl;}void main( ){int x=10;int y=15;cout<<”x=”<<x<<”;y=”<<y<<endl;change(x,y);cout<<”x=”<<x<<”;y=”<<y<<endl;}上面的程序编译并运行,程序的输出结果有三行,请写出程序运行的第一行结果:x=10;y=15第二行结果:x=20;y=25第三行结果:x=10;y=1512.#include<iostream.h>int f(int x){ static int u=1;x+=x;return u*=x;}void main(void){ int x=10;cout<<f(x)<<'\n';cout<<f(x)<<'\n';}程序输出的第一行是:20程序输出的第二行是:40013.#include <iostream.h>#define M 20#define N 10#define L(r) r*rvoid main( ){cout<<L(M)<<endl;cout<<L(N+N)<<endl;}以上程序段执行后,输出是 40012014.#include <iostream.h>int i=1;int fac(int n){ static int f=1;f=f*n;return(f);}void main(){ int i,p=0;for(i=1;i<=3;i++)p=fac(i);cout<<p<<endl;p=0;for(i=1;i<=3;i++)p=p+::i++;cout<<p<<',';p=1;for(i=1;i<=3;i++)p=p*--::i;cout<<p<<endl;}程序输出的第一行是:6程序输出的第二行是:6, 6程序中的::i是指:全局变量i15.//文件名:cppfile_1.cpp#include <iostream.h>int x=1,y=2;static int z=3;extern void add(void);void main( ){ add();cout<<"x="<<x<<'\t'<<"y="<<y <<'\t'<<"z="<<z<<endl;}//文件名:cppfile_2.cpp#include <iostream.h>extern int x,y;void add(void){ x+=3;y+=4;cout<<"x="<<x<<'\t'<<"y="<<y<<endl;}执行以上程序时,输出结果是:x=4 y=6x=4 y=6 z=316.#include <iostream.h>int f(int a,int b){ if(a>b)return b+a; else b*f(++a,--b);return a*f(a,b);}如果主函数中有语句 cout<<f(1,3)<<'\n';输出是:24如果主函数中有语句 cout<<f(3,1)<<'\n';输出是:417.#include <iostream.h>int i=2,j=3;int f(int a,int b){ int c=0;static int d=3;d++;if(a>b) c=1;else if (a==b) c=0;else c=-1;i=j+1;return (c+d);}void main(){ int p;p=f(i,j);cout<<i<<’,’<<j<<’,’<<p<<endl;i=i+1; p=f(i,j);cout<<i<<’,’<<j<<’,’<<p<<endl;i=i+1; p=f(i,j);cout<<i<<’,’<<j<<’,’<<p<<endl;}执行该程序的第一行输出是:4,3,3第二行输出是:4,3,6第三行输出是:4,3,718. #include<iostream.h>fun3(int x){static int a=3;a=x;return(a);}void main(){int k=2,m=1,n;n=fun3(k); n=fun3(m+n);cout<<n<<endl;}程序输出是:319. #include <iostream.h>int i=2,j=3;int f(int a,int b){ int c=0, d=3;d++;if(a>b) c=1;else if (a==b) c=0;else c=-1;i=j+1;return (c+d);}void main(){ int p;p=f(i,j);cout<<i<<’,’<<j<<’,’<<p<<endl;i=i+1; p=f(i,j);cout<<i<<’,’<<j<<’,’<<p<<endl;i=i+1; p=f(i,j);cout<<i<<’,’<<j<<’,’<<p<<endl;}执行该程序的第一行输出是:4,3,3第二行输出是:4,3,5第三行输出是:4,3,520. 若有宏定义如下:#define X 5#define Y X+1#define Z Y*X+2则执行以下语句后,int a; a=Y;cout<<Z;cout<<--a<<endl;输出结果是:12521. #include <iostream.h>int fac(int n){ int z;if (n>0)z=n*fac(n-2);elsez=1;return z;}void main(void){ int x=7,y;y=fac(x);cout<<y<<endl;}执行以上程序时,输出结果是:10522. #include <iostream.h>void fun( );int n=5;void main( ){int n=10;cout<<++n<<endl;fun();}void fun( ){cout<<n++<<endl;}执行以上程序时,输出结果是:11 523. # include <iostream.h>void SB(char ch) {switch(ch){case 'A': case 'a':cout <<"well!"; break;case 'B': case 'b':cout <<"good!"; break;case 'C': case 'c':cout <<"pass!"; break;default:cout <<"bad!"; break;}}void main() {char a1='b',a2='C',a3='f';SB(a1);SB(a2);SB(a3);SB('A');cout <<endl;}执行以上程序时,输出结果是:good! pass! bad! well!24. 设有宏定义如下:#define MIN(x,y) (x)>(y)?(x):(y)#define T(x,y,r) x*r*y/4则执行以下语句后,int a=1,b=3,c=5,s1,s2;s1=MIN(a=b,b-a);s2=T(a++,a*++b,a+b+c);s1的值为:3s2的值为:2725. #include <iostream.h>int add(int x,int y=8);void main( ){int a=4;cout<<add(a)<<endl;c out<<add(a,add(a))<<endl;}int add(int x,int y){return x+y;}执行以上程序时,输出结果是:12 1626. #include <iostream.h>fun(int x){ static int a=3; a=x; return(a); }void main(){ int k=2,m=1,n; n=fun(k); n=fun(m+n); cout<<n<<endl; } 执行以上程序时,输出结果是:3四、完善程序题1.此程序为打印如下图形,请将程序补充完整。

相关主题