第3章 函数
单选题
- 若有以下函数调用语句,在此函数调用语句中实参的个数是( A ) 。
fun(a+b,(y=10,y),fun(n,k,d));
A. 3 B. 4 C. 5 D. 6
- 以下函数调用语句中,含有的实参个数是( A ).
func(rec1,rec2 +1,(rec3,rec4));
A. 3 B. 4 C. 5 D. 有语法错误
- 以下程序的运行结果是( A ) 。
#include<iostream.h>
int func(int a,int b);
void main()
{ int k=4,m=1,p;
p=func(k,m);
cout<<p<<endl;
p=func(k,m);
cout<<p<<endl;
}
int func(int a,int b)
{ static int m,i=2;
i+=m+1;
m=i+a+b;
return(m);
}
A. 8,17 B.8,16 C. 8,20 D. 8,8
- 分析如下程序:
#include <iostream.h>
int f(int b[],int n)
{int i,r=1;
for(i=0;i<=n;i++)
r=r*b[i];
return r;
}
void main(){
int x,a[]={2,3,4,5,6,7,8,9};
x=f(a,3);
cout<<x<<endl;
}
上面程序的输出结果是( B ) 。
A. 720 B. 120 C. 24 D. 6
- 下列函数参数默认值定义错误的是( C ) 。
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()已经定义)
- 在C++语言中,对函数参数默认值描述正确的是( D ) 。
A. 函数参数的默认值只能设定一个
B. 一个函数的参数若有多个,则参数默认值的设定可以不连续
C. 函数必须设定默认值
D. 在设定参数的默认值后,该参数后面定义的所有参数都必须设定默认值
- 下列带缺省值参数的函数说明中,正确的说明是( A ) 。
A. int Fun(int x,int y=2,int z=3);
B. int Fun(int x=1,int y,int z=3);
C. int Fun(int x,int y=2,int z);
D. int Fun(int x=1,int y,int z=3);
- 在函数定义前加上关键字“inline”表示该函数被定义为( B ) 。
A. 重载函数 B. 内联函数 C. 成员函数 D. 普通函数
- 一个函数功能不太复杂,但要求被频繁调用,选用( A ) 。
A. 内联函数 B. 重载函数 C. 递归函数 D. 嵌套函数
- 下面有关重载函数的说法中正确的是( C ) 。
A. 重载函数必须具有不同的返回值类型
B. 重载函数形参个数必须不同
C. 重载函数必须有不同的形参列表
D. 重载函数名可以不同
- 考虑函数原型 void test(int a,int b=7,char z='*'),下面的函数调用中,属于不合法调用的是( C )。
A. test(5); B. test(5,8); C. test(6,'#'); D. test(0,0,'*');
- 以下对C++ 函数的有关描述中,正确的是( A ) 。
A. C++调用函数时,传值调用只能把实参的值传给形参,形参的值不能传递给实参
B. C++函数既可以嵌套定义又可以递归调用
C. 函数必须有返回值,否则不能使用函数
D. C++程序中有调用关系的所有函数必须放在同一源程序文件中
- 在C++语言中函数返回值的类型是由( C )决定的。
A. 调用该函数时系统临时
B. return语句中的表达式类型
C. 定义该函数时所指定的函数类型
D. 调用该函数时的主调函数类型
- 以下程序的输出结果是( C ) 。
#include <iostream.h>
int func(int a,int b)
{ return a+b;}
void main()
{ int x=6,y=7,z=8,r;
r=func(func(x,y),z--);
cout<<r<<endl;
}
A. 15 B. 20 C. 21 D. 31
- C++语言中,形参与实参之间的数据传递方式是( C ) 。
A. 只能按值传递
B. 只能按地址传递
C. 既可以按值传递也可以按地址传递
D. 以上说法都不对
- 分析以下程序:
#include <iostream.h>
void fun(int num){cout<<num<<endl;}
void fun(char ch){cout<<(ch+1)<<endl;}
int main(){
fun('A');
return 0;
}
以上程序的输出结果是( B ) 。
A. 65 B. 66 C. A D. B
- 一个函数为void f(int x, char y = ‘a’),另一个函数为void f(int,int),则它们( B ) 。
A. 不能在同一程序块中定义
B. 可以在同一个程序块中定义并可重载
C. 可以在同一个程序块中定义,但不可以重载
D. 以上说法均不正确
- 以下正确的描述是( B )。
A. 函数的定义可以嵌套,函数的调用不可以嵌套
B. 函数的定义不可以嵌套,函数的调用可以嵌套
C. 函数的定义和函数的调用均可以嵌套
D. 函数的定义和函数的调用均不可以嵌套
- 函数定义为Fun(int &i),变量定义n = 100,则下面调用正确的是( C ) 。
A. Fun(20) B. Fun(20 + n) C. Fun(n) D. Fun(&n)
- 当一个函数无返回值时,函数的类型应为( B ) 。
A. 任意 B. void C. int D. char
- 在每个C++程序中都必须包含有这样一个函数,该函数的函数名为 (A)。
A. main B. MAIN C. name D. function
- 下面的哪个保留字不能作为函数的返回类型?( C )。
A. void B. int C. new D. long
- 下面的函数声明中,哪一个是“void BC(int a , int b);”的重载函数?( B )
A. int BC(int a , int b) B. void BC(int a , char b)
C. float BC(int a , int b , int c=0) D. void BC(int a , int b=0)
- int Func(int,int);不可与下列哪个函数构成重载( B )
A.int Func(int,int,int);
B.double Func(int,int);
C.double Func(double,double);
D.double Func(int,double);
- 在下面的函数声明中,存在着语法错误的是( 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)
- 设存在函数int max(int,int)返回两参数中较大值,若求22,59,70三者中最大值,下列表达式不正确的是( C )
A.int m = max(22,max(59,70)); B.int m = max(max(22,59),70);
C.int m = max(22,59,70); D.int m = max(59,max(22,70));
- 在下列关于C++函数的叙述中,正确的是( C )
A.每个函数至少要有一个参数 B.每个函数都必须返回一个值
C.函数在被调用之前必须先声明 D.函数不能自己调用自己
程序阅读题
1、
#include <iostream.h>
void Swap( int &a, int & b);
void main()
{
int x( 10 ), y( 7 );
cout<<"x="<<x<<",y="<<y<<endl;
Swap( x , y );
cout<<"x="<<x<<",y="<<y<<endl;
}
void Swap(int & a, int & b)
{ int temp; temp = a ; a=b ; b=temp ; }
运行结果:
x=10,y=7
x=7,y=10
2、
#include <iostream.h>
int add(int a, int b);
void main()
{
extern int x, y;
cout<<add(x,y)<<endl;
x/=y;
cout<<add(x,y)<<endl;
}
int x(50),y(100);
int add(int a, int b)
{ int s=a+b ; return s; }
运行结果:
150
100
3、
#include <iostream.h>
int func(int a)
{
int b=0;
static int c=4;
b++; c--;
return(a+b+c);
}
void main( )
{
int a=2;
for(int j=0;j<2;j++)
cout<<func(a+j)<< " ";
}
输出结果为:6 6
4、
# include <iostream.h>
void WF(int x , int y) {
x=x+y;
y=x+y;
cout <<"subs:"<<"x,y="<<x<<","<<y<<endl;
}
void main( )
{ int x=8,y=15;
cout <<"main:"<<"x,y="<<x<<","<<y<<endl;
WF(x,y);
x=2*x;
cout <<"main:"<<"x,y="<<x<<","<<y<<endl;
WF(x,y);
cout <<"main:"<<"x,y="<<x<<","<<y<<endl;
}
输出结果为:
main:x,y=8,15
subs:x,y=23,38
main:x,y=16,15
subs:x,y=31,46
main:x,y=16,15
编程题
- 编写程序,采取主函数调用isprime()函数的形式,输出10-100之间的素数。
#include <iostream.h>
bool isprime(int n)
{
int i;
for(i=2;i<n;i++)
{if(n%i==0) return false;
}
return true;
}
void main()
{
for(int i=10;i<=100;i++)
{
if(isprime(i))
cout<<i<<" ";
}
}
2、编写程序求下面表达式的值:
#include <iostream.h>
double multiple(int n)
{
int i;
double p=1;
for(i=1;i<=n;i++)
{
p*=i;
}
return p;
}
void main()
{
int n,m;
double k;
cout<<"输入正整数n=";
cin>>n;
cout<<"输入小于或等于"<<n<<"的正整数m=";
cin>>m;
k=multiple(n)/(multiple(m)*multiple(n-m));
cout<<"k="<<k<<endl;
}