【C/C++笔试练习】内联函数、缺省参数、函数重载、类定义、不要二、字符串转成整数、Fibonacci数列、合法括号序列判断

文章目录

  • C/C++笔试练习
    • 1.内联函数
      • (1)内联函数的使用
      • (2)内联函数的使用
    • 2.缺省参数
      • (3)缺省参数概念理解
    • 3.函数重载
      • (4)函数重载的定义
      • (5)函数重载的定义
    • 4.类定义
      • (6)类定义访问限定符
      • (7)类定义访问限定符
      • (8)类定义访问限定符
    • 5.编程题
      • day6
      • (9)不要二
      • (10)字符串转成整数
      • day7
      • (11)Fibonacci数列
      • (12)合法括号序列判断

C/C++笔试练习

1.内联函数

(1)内联函数的使用

  在()情况下适宜采用 inline 定义内联函数

  A 函数体含有循环语句      B 函数体含有递归语句

  C 函数代码少、频繁调用     D 函数代码多,不常调用

  
  内联函数的概念:

  以inline修饰的函数叫做内联函数,编译时C++编译器会在调用内联函数的地方展开,没有函数调用建立栈帧的开销,内联函数提升程序运行的效率。

  
  内联函数的特性:

  (1)inline是一种以空间换时间的做法,如果编译器将函数当成内联函数处理,在编译阶段,会用函数体替换函数调用,缺陷:可能会使目标文件变大,优势:少了调用开销,提高程序运行效率

  (2)inline对于编译器而言只是一个建议,不同编译器关于inline实现机制可能不同,一般建议:将函数规模较小(即函数不是很长,具体没有准确的说法,取决于编译器内部实现)、不是递归、频繁调用的函数采用inline修饰,否则编译器会忽略inline特性。

  下图为《C++prime》第五版关于inline的建议:

在这里插入图片描述

  (3)inline不建议声明和定义分离,分离会导致链接错误。因为inline被展开,就没有函数地址了,链接就会找不到。

  
  内联函数举例:

#include <iostream>
using namespace std;// 声明内联函数  
inline int Max(int a, int b) {return a > b ? a : b;
}int main() {int x = 5;int y = 10;int max_value = Max(x, y); // 直接调用内联函数  std::cout << "The maximum value is: " << max_value << std::endl;return 0;
}

在这里插入图片描述
  
   所以在编译阶段,会将内联函数展开,将函数直接使用函数体来替换。这样子可以减少调用函数压栈及创建栈帧等开销。一般内联函数没有循环、递归且不是很长。

   答案选:C

  

(2)内联函数的使用

  内联函数在以下场景中最有用的()

  A 当函数代码较长且多层嵌套循环的时候

  B 当函数中有较多的静态变量的时候

  C 当函数代码较小并且被频繁调用的时候

  D 以上都不对

  
  从上面的解释可以得到,内联函数不适合在循环、递归且代码很长的时候使用,且在当函数代码较小并且被频繁调用的时候,内联函数最有用。

   答案选:C

                 

2.缺省参数

(3)缺省参数概念理解

  在 C++ 语言中,对函数参数默认值描述正确的是()

  A 函数带默认值的参数只能有一个

  B 一个函数的参数若有多个,则参数默认值的设定可以不连续

  C 函数参数必须设定默认值

  D 在设定了参数的默认值后,该参数后面定义的所有参数都必须设定默认值

  
  缺省参数概念:

  缺省参数是声明或定义函数时为函数的参数指定一个缺省值。在调用该函数时,如果没有指定实参则采用该形参的缺省值,否则使用指定的实参。

  
  缺省参数分类:

  (1)全缺省参数

void Func(int a = 10, int b = 20, int c = 30)
{cout<<"a = "<<a<<endl;cout<<"b = "<<b<<endl;cout<<"c = "<<c<<endl;
}

  (2)半缺省参数

void Func(int a, int b = 10, int c = 20)
{cout<<"a = "<<a<<endl;cout<<"b = "<<b<<endl;cout<<"c = "<<c<<endl;
}

  
  缺省参数也有很多的注意事项:

  1.半缺省参数必须从右往左依次来给出, 不能间隔着给

  2.缺省参数不能在函数声明和定义中同时出现

  3.缺省值必须是常量或者全局变量

  4.C语言不支持(编译器不支持)

//a.h
void Func(int a = 10);// a.cpp
void Func(int a = 20)
{}// 注意:如果生命与定义位置同时出现,恰巧两个位置提供的值不同,
// 那编译器就无法确定到底该用那个缺省值。

  
   所以根据上面的内容,函数的缺省参数可以没有默认值或者有多个默认值,如果有默认值必须从右往左依次来给,如果参数有默认值,那么这个参数后面定义的所有参数都必须设定默认值。

   答案选:D

                 

3.函数重载

(4)函数重载的定义

  关于重载函数,哪个说明是正确的()

  A 函数名相同,参数类型或个数不同  B 函数名相同,返回值类型不同

  C 函数名相同,函数内部实现不同     D 函数名称不同

  
  函数重载概念:

  函数重载: 是函数的一种特殊情况,C++允许在同一作用域中声明几个功能类似的同名函数这些同名函数的形参列表(参数个数 或 类型 或 类型顺序)不同 ,常用来处理实现功能类似数据类型不同的问题。

  函数重载中三种参数不同的实现方式:

#include<iostream>
using namespace std;// 1、参数类型不同
int Add(int left, int right)
{cout << "int Add(int left, int right)" << endl;return left + right;
}double Add(double left, double right)
{cout << "double Add(double left, double right)" << endl;return left + right;
}// 2、参数个数不同
void f()
{cout << "f()" << endl;
}
void f(int a)
{cout << "f(int a)" << endl;
}// 3、参数类型顺序不同
void f(int a, char b)
{cout << "f(int a,char b)" << endl;
}void f(char b, int a)
{cout << "f(char b, int a)" << endl;
}

  
  函数重载举例:

#include <iostream>  // 函数重载一:无参数  
void display() {  std::cout << "Hello, World!" << std::endl;  
}  // 函数重载二:带一个整数参数  
void display(int num) {  std::cout << "Displaying number: " << num << std::endl;  
}  // 函数重载三:带两个整数参数  
void display(int num1, int num2) {  std::cout << "Displaying numbers: " << num1 << " and " << num2 << std::endl;  
}  int main() {  // 调用无参数的 display 函数  display();  // 调用带一个整数参数的 display 函数  display(5);  // 调用带两个整数参数的 display 函数  display(3, 7);  return 0;  
}

在这里插入图片描述

  
  函数重载是在相同的作用域中,函数的名字相同,参数列表不同实现的,其中参数列表不同有 (1.参数个数不同、2.参数类型不同、3.参数类型次数不同) 与函数的返回值和内部实现都没有关系。

   答案选:A

  

(5)函数重载的定义

  不能作为重载函数的调用的依据是:

  A 参数个数      B 参数类型

  C 函数类型     D 函数名称

  
  和上面的内容一样,函数重载是在相同的作用域中,函数的名字相同,参数列表不同实现的,其中参数列表不同有 (1.参数个数不同、2.参数类型不同、3.参数类型次数不同) 与函数的返回值和内部实现都没有关系。

   答案选:C

                 

4.类定义

(6)类定义访问限定符

  下面关于类定义的说法中,正确的是:

  A 类定义中包括数据成员和函数成员的声明

  B 类成员的缺省访问权限是保护的

  C 数据成员必须被声明为私有的

  D 成员函数只能在类体外进行定义

  

类和对象中类的定义和访问限定符

   类的定义的概念:

   class为定义类的关键字,ClassName为类的名字,{}中为类的主体, 注意类定义结束时后面分号不能省略。类体中内容称为类的成员:类中的变量称为类的属性或成员变量; 类中的函数称为类的方法或者成员函数。

class className
{// 类体:由成员函数和成员变量组成}; // 一定要注意后面的分号

  
  类包含数据成员(变量)和函数成员(方法)。 在类定义中,我们可以声明数据成员和函数成员。类成员的缺省访问权限是按照声明顺序决定的在类体内部声明的成员默认是公有(public)的。

  数据成员的访问权限可以是公有(public)、保护(protected)或私有(private),具体取决于设计需求。通常情况下,为了控制对数据成员的访问,我们可以将数据成员声明为私有(private),然后通过公有(public)的函数成员来访问它们。

  成员函数可以在类体内进行定义,也可以在类体外进行定义。 在类体内部定义的成员函数默认是inline函数,而在类体外部定义的成员函数需要通过作用域限定符来访问。

   答案选:A

  

(7)类定义访问限定符

  类定义的外部,一定可以被访问的成员有( )

  A 所有类成员         B private或protected的类成员

  C public的类成员     D public或private的类成员

  
  在C++中,类的成员有公有(public)、保护(protected)和私有(private)三种访问权限。 公有成员可以在类的外部直接访问,而保护和私有成员只能在类的内部或派生类中访问。类定义的外部,一定可以被访问的成员是public的类成员。在类定义的外部,只有公有成员是可以被直接访问的。

   答案选:C

  

(8)类定义访问限定符

  用class关键字定义的类,其成员默认的访问属性为()

  A private      B protected

  C public       D 无定义

  
  在class中,成员的默认访问属性为private。

   答案选:A

                 

5.编程题

day6

(9)不要二

不要二

  解题思路:

  使用vector<vector>定义一个二维数组,resize开空间并初始化,每个位置初始化为1,表示当蛋糕,a[i][j]位置放蛋糕,则可以标记处a[i][j+2]和a[i+1][j]位置不能放蛋糕,遍历一遍二维数组,标记处不能放蛋糕的位置,统计也就统计出了当蛋糕的位置数。

#include<iostream>
#include<vector>
using namespace std;int main()
{int w,h,res = 0;cin >> w >> h;vector<vector<int>> a;a.resize(w);for(auto& e : a)e.resize(h, 1);for(int i=0;i<w;i++){for(int j=0;j<h;j++){if(a[i][j]==1){res++;// 标记不能放蛋糕的位置if((i+2)<w)a[i+2][j] = 0;if((j+2)<h)a[i][j+2] = 0;}}}cout << res;return 0;
}

  

(10)字符串转成整数

字符串转成整数

   解题思路:

   就是上次计算的结果*10,相当于10进制进位,然后加当前位的值。但是要注意:空字符串、正负号处理、数字串中存在非法字符。

class Solution {
public:
int StrToInt(string str){if(str.empty())return 0;int symbol = 1;if(str[0] == '-') //处理负号{symbol = -1;str[0] = '0'; //这里是字符'0',不是0}else if(str[0] == '+') //处理正号{symbol = 1;str[0] = '0';}int sum = 0;for(int i=0;i<str.size();++i){if(str[i] < '0' || str[i] > '9'){sum = 0;break;}sum = sum *10 + str[i] - '0';}return symbol * sum;}
};

                 

day7

(11)Fibonacci数列

Fibonacci数列

   解题思路:

   本题可以通过先找到距离N最近的两个Fibonacci数,这两个数分别取自距离N的最近的左边一个数L和右边一个数R,然后通过min(N - L, R - N)找到最小步数。

#include <iostream>
using namespace std;
int main()
{int N, f, l = 0,r = 0,f0 = 0,f1 = 1;cin >> N;while(1){f = f0 + f1;f0 = f1;f1 = f;//找到比N小且距离N最近的数,求出距离if(f < N)l = N-f;else{//找到比N大且距离N最近的数,求出距离r = f - N;break;}}//取最小距离cout << min(l,r) << endl;return 0;
}

  

(12)合法括号序列判断

合法括号序列判断

   解题思路:

   用栈结构实现,栈中存放左括号,当遇到右括号之后,检查栈中是否有左括号,如果有则出栈,如果没有,则说明不匹配。

class Parenthesis {
public:
bool chkParenthesis(string A, int n) {stack<char> sc;for (auto ele : A) {switch (ele) {case '(':sc.push(ele);break;case ')':{if (sc.empty() || sc.top() != '(')return false;elsesc.pop();}break;default:return false;}}return true;}
};

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/109366.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

python+selenium自动化测试环境搭建步骤(selenium环境搭建)

一、自动化简介 1.自动化测试概念&#xff1a; 是把以人为驱动的测试转化为机器执行的一种过程&#xff0c;它是一种以程序测试程序的过程 2.自动化测试分类&#xff1a; 一般IT上所说的自动化测试是指功能自动化测试&#xff0c;通过编码的方式用一段程序来测试一个软件的…

【C++11】智能指针的使用以及模拟实现(shared_ptr,unique_ptr,auto_ptr,weak_ptr)

&#x1f30f;博客主页&#xff1a; 主页 &#x1f516;系列专栏&#xff1a; C ❤️感谢大家点赞&#x1f44d;收藏⭐评论✍️ &#x1f60d;期待与大家一起进步&#xff01; 文章目录 一、 RAII概念一、auto_ptr1.基本使用2.模拟实现 二、unique_ptr1.基本使用2.模拟实现…

网络层哪些事?

在本文讲解的网络层中&#xff0c;注意了解一下&#xff1a;IP协议&#xff01; 地址管理&#xff1a;每个网络上的设备&#xff0c;要能分配一个地址&#xff08;唯一&#xff09;路由选择&#xff1a;A给B发消息&#xff0c;具体走哪条路线&#xff1f;&#xff1f; IP地址&…

Linux/Ubuntu 安装 Java运行环境

linux下安装Java运行环境 1、下载安装包 .tar.gz 先在官网下载 JDK 点击这里 在这里要选择对应的 JDK 版本&#xff0c;一般我们目前选择JDK8 点击这里 2、在 /usr/local/ 目录下创建Java文件夹 cd /usr/local/ mkdir java3、将下载的文件通过FTP程序上传到刚刚创建的Java文…

服务器往浏览器推消息(SSE)应用

1&#xff0c;SSE 和 WebSocket 对比 SSE&#xff08;服务器发送事件&#xff09; SSE是一种基于HTTP的单向通信机制&#xff0c;用于服务器向客户端推送数据。它的工作原理如下&#xff1a; 建立连接&#xff1a;客户端通过发送HTTP请求与服务器建立连接。在请求中&#xff…

git学习——第4节 时光机穿梭

我们已经成功地添加并提交了一个readme.txt文件&#xff0c;现在&#xff0c;是时候继续工作了&#xff0c;于是&#xff0c;我们继续修改readme.txt文件&#xff0c;改成如下内容&#xff1a; Git is a distributed version control system. Git is free software. 现在&…

游戏中的随机——“动态平衡概率”算法

前言 众所周知计算机模拟的随机是伪随机&#xff0c;但在结果看来依然和现实中的随机差别不大。 例如掷硬币&#xff0c;连续掷很多很多次之后&#xff0c;总有连续七八十来次同一个面朝上的情况出现&#xff0c;计算机中一般的随机函数也能很好模拟这一点。 但在游戏中&…

Android Studio gradle手动下载配置

项目同步时&#xff0c;有时候会遇到Android Studio第一步下载gradle就是连接失败的问题。 这种情况&#xff0c;我们可以手动去gradle官网下载好gradle文件&#xff0c;放置在Android Studio的缓存目录下&#xff0c;这样AS在同步代码时就会自动解压下载好的文件。 步骤如下&…

6.SNMP报错-Error opening specified endpoint “udp6:[::1]:161“处理

启动SNMP服务 /etc/init.d/snmpd start 出现以下报错信息 [....] Starting snmpd (via systemctl): snmpd.serviceJob for snmpd.service failed because the control process exited with error code. See "systemctl status snmpd.service" and "journalctl…

有什么手机软件能分离人声和音乐?

很多人在制作混剪视频&#xff0c;需要二次创作的时候&#xff0c;就经常会把人声分离、背景音乐伴奏提取出来&#xff0c;然后重新加入自己的创意跟想法。下面就一起来看看如何用手机软件分离人声和音乐的吧&#xff01; 音分轨 一款可以分离人声和背景音乐的手机软件&#x…

eNSP笔记①

关闭范文信息&#xff1a;undo terminal monitor VRP三种试图 "<>"表示用户视图&#xff0c;系统默认的状态。主要用于查询设备基础信息或者状态等&#xff0c;也可以执行保存(save)。 “[]” 表示系统视图&#xff0c;在用户视图下输入system-view进入状态…

R语言进度条:txtProgressBar功能使用方法

R语言进度条使用攻略 在数据处理、建模或其他计算密集型任务中&#xff0c;我们常常会执行一些可能需要很长时间的操作。 在这些情况下&#xff0c;展示一个进度条可以帮助我们了解当前任务的进度&#xff0c;以及大约还需要多长时间来完成&#xff0c;R语言提供了几种简单且灵…

Excel提高工作效率常用功能

定位快捷键使用 CtrlG或者F5 根据不同类别插入空行 例&#xff1a;以下表&#xff0c;以部门为单位&#xff0c;每个部门后插入空白行 部门姓名出勤基本工资岗位津贴公体加班绩效基数工龄应发合计财务部姓名73115002101710财务部姓名11116006003401502363财务部姓名5271000…

maven 编译.../maven-metadata.xml 报错

文章目录 问题解决 问题 突然编译报错: 解决 打开maven的里离线工作模式,感觉就是下载包到本地. 一个是在maven设置里面 或者直接在maven编译的窗口:

游戏设计模式专栏(十二):在Cocos游戏开发中运用代理模式

点击上方亿元程序员关注和★星标 引言 大家好&#xff0c;我是亿元程序员&#xff0c;一位有着8年游戏行业经验的主程。 本系列是《和8年游戏主程一起学习设计模式》&#xff0c;让糟糕的代码在潜移默化中升华&#xff0c;欢迎大家关注分享收藏订阅。 代理模式&#xff08…

HTML 表格及练习

表格 概述 表格是一种二维结构&#xff0c;横行纵列。 由单元格组成。 表格是一种非常“强” 的结构&#xff1a; 每一行有相同的列数&#xff08;单元格&#xff09;&#xff0c;每一列有相同的行数&#xff08;单元格&#xff09; 同一列的单元格&#xff0c;宽度&#…

2023 年值得关注的软件测试趋势(3)

16.云性能工程对业务连续性的影响 检查和改进基于云的应用程序和服务的性能是云性能工程的主要目标&#xff0c;是各种软件测试趋势中云计算的重要组成部分。云提供了无与伦比的可扩展性、灵活性和成本节约&#xff0c;但如果没有适当的性能工程&#xff0c;组织将面临应用程序…

太好上手了!10款常用的可视化工具你一定要知道!

当谈到可视化工具时&#xff0c;有许多常用的工具可供选择。这些工具可以帮助我们将数据转化为易于理解和具有视觉吸引力的图表、图形和仪表板。 以下是10款常用的可视化工具&#xff0c;它们在不同领域和用途中广泛使用。 1. Datainside&#xff1a; Datainside是一款功能强…

Win+L不能锁屏

1、运行WINR&#xff0c;输入REGEDIT&#xff0c;运行注册表&#xff1a; 2、CTRLF&#xff0c;输入查找DisableLockWorkstation 3、双击这个&#xff0c;点十进制&#xff0c;输入0点确认即可。

Confluence 自定义博文列表

1. 概述 Confluence 自有博文列表无法实现列表自定义功能&#xff0c;实现该需求可采用页面中引用博文宏标签控制的方式 2. 实现方式 功能入口&#xff1a; Confluence →指定空间→创建页面 功能说明&#xff1a; &#xff08;1&#xff09;页面引用博文宏 &#xff08;…