C++刷题——C++函数与程序结构

1、下列函数定义语句正确的是?

(a)

void fun1(int i,int j); 
{ 
	cout<<i+j; 
} 

(b)

void fun1(int i,int j) 
{ 
	void fun2() 
	{ 
		cout<< ”This is fun2.<<endl; 
	} 
	cout<<i+j; 
} 

(c )

void fun1(int i,int j) 
{ 
	cout<<i+j; 
	return 1; 
} 

(d)

void fun1(int i,int j) 
{ 
	cout<<i+j; 
} 

解答:答案: d
a 中多了一个分号;
b 在函数内部定义函数是错误的,函数可以嵌套调用但是不能嵌套定义;
c 定义了 void 型函数有返回值是错误的,如果函数类型定义为 void 型,则该函数没有返回值。

2、下列关于 C++函数的叙述中,正确的是?

(a) 每个函数至少要具有一个参数
(b) 每个函数都必须返回一个值
( c) 函数在被调用之前必须先声明或定义
(d) 函数不能自己调用自己
解答:答案: c
a错误:函数可以有参数,也可以没有参数(无参函数)。
b 错误:函数可以有返回值,也可以没有返回值,当没有返回值时将这个函数定义为 void 型。
d 错误:一个函数自己调用自己称为递归调用,这是允许的。

3、下面的函数声明语句正确的是?

(a) int fun(int var1=1,char* var2= ”Beijing ”,double var3);
==(b) int fun(int,char* = ”Beijing ”,double =3.14159); ==
(c ) int fun(int var1=1,char* var2= ”Beijing ”,double var3=3.14159);
int fun(int,char*,double var3= 12.34);
(d) int fun(int var1=1,char*,double var3=3.14159);

答案: b
函数调用时实参与形参按照从左到右顺序匹配,在对默值进行定义时应该从右向左定义。选项 a 和 d 都没有遵从对默认值定义时应该从右向左定义的原则,即于第一个有默认值的参数而言,它后面还有参数没有定义默认值这是错误的。
在这里插入图片描述

c :对函数中第 3 个参数定义了两次,错误。

4、运行下列程序结果为?

#include <bits/stdc++.h> 
using namespace std;
int f(int[ ],int); 
void main() 
{ 
	int a[]={-1,3,5,-7,9,-11}; 
	cout<<f(a,6)<<endl; 
} 
int f(int a[],int size) 
{ 
	int i,t=1; 
	for(i=0;i<size;i++) 
		if(a[i]>0) t*=a[i]; 
	return t; 
} 

答案: 135
在这里插入图片描述

5、运行下列程序结果为?

#include <bits/stdc++.h> 
using namespace std;

int main()
{
	char str[][10] = { "vb","pascal","c++" }, s[10];
	strcpy_s(s, (strcmp(str[0], str[1]) < 0 ? str[0] : str[1]));
	if (strcmp(str[2], s) < 0) strcpy_s(s, str[2]);
	cout << s << endl;
	return 0;
}

答案: c++
在这里插入图片描述

6、运行下列程序的结果为 ?

#include <bits/stdc++.h> 
using namespace std;

void fun1(const double& i)
{

	cout << i << endl;
}
void fun2(double& j)
{
	cout << j << endl;
}
void fun3(double k)
{
	cout << k << endl;
}
void main()
{
	fun1('a');
	fun2('a');
	fun3('a');
}

(a)97 97 97 (b)97 a 97 ( c)a a a (d) 程序出错,无法运行。

解答:答案: d。
文字量、 常量和需要类型转换的参数都可以传递给 const& 参数, 但不能传递给非 const 的引用参数。 也就是说对非 const 引用参数不允许做类型转换。本题中对于函数 fun1 以及 fun3 在调用时参数都发生了隐形数据类型转换,而对于函数 fun2 它的参数为非 const 的引用参数,不允许作类型转换,所以对 fun2 的调用出错。因此程序出错无法运行。

7、运行下列程序的结果为?

#include <bits/stdc++.h> 
using namespace std;

int findmax(int Iarg[]);
float findmax(float Farg[]);
double findmax(double Darg[]);
int main()
{
	int Iarg[6] = { 15,88,34,12,31,10 };
	float Farg[6] = { 145.5,32.3,363.2,19.3,70.1,35.4 };
	double Darg[6] = { 15.54323,2.47763,63.29876,19.67863,78.34541,35.44009 };
	cout << "largest value in the Iarg is " << (findmax(Iarg)) << "\n";
	cout << "largest value in the Farg is " << (findmax(Farg)) << "\n";
	cout << "largest value in the Darg is " << (findmax(Darg)) << "\n";
	return 0;
}
int findmax(int Iarg[])
{
	int max = 0;
	for (int i = 0; i < 6; i++)
	{
		if (Iarg[i] > max)
		{
			max = Iarg[i];
		}
	}
	return max;
}
float findmax(float Farg[])
{
	float max = 0;
	for (int i = 0; i < 6; i++)
	{
		if (Farg[i] > max)
		{
			max = Farg[i];
		}
	}
	return max;
}
double findmax(double Darg[])
{
	double max = 0;
	for (int i = 0; i < 6; i++)
	{
		if (Darg[i] > max)
		{
			max = Darg[i];
		}
	}
	return max;
}

在这里插入图片描述

解析:
本题主要考查函数重载。本程序用于求解并输出一个整型数组的最大元素、一个浮点型数组的最大元素和一个双精度型数组的最大元素。在主函数中调用三次 findmax() 函数,根据传递实参数组类型不同,自动调用不同的函数完成求解操作,这里 findmax() 函数实现了重载。

8、运行下列程序的结果为?

#include<bits/stdc++.h> 
using namespace std;

int fun(int, int);
void main()
{
	cout << "n=" << fun(0, 0) << endl;
}
int fun(int n, int s)
{
	int s1, n1;
	s1 = s + n * n;
	if (s1 < 100)
	{
		n1 = n + 1;
		fun(n1, s1);
	}
	else
		return n - 1;
}

在这里插入图片描述
压栈情况如下图所示。当调用 f(7,91) 时返回 7-1=6 程序结束。
在这里插入图片描述

  • 2
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

是彦歆呀嘻嘻哈哈

你的鼓励将是我的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值