【(1+1+2+1+2+3+到1+2+3+到+n)】2023-3-5

news2025/7/20 8:58:40

缘由https://ask.csdn.net/questions/7895988

鉴于初学知识储备不足认识模糊,这篇文章就从最基础的C++知识入手,用详细资料来描述这个程序关联的知识,由于本程序使用一行语句完成运算,因此,将按运算符(自左向右)结合律逐步展开。

1、C++ 函数

函数是一组一起执行一个任务的语句。每个 C++ 程序都至少有一个函数,即主函数 main() ,所有简单的程序都可以定义其他额外的函数。

您可以把代码划分到不同的函数中。如何划分代码到不同的函数中是由您来决定的,但在逻辑上,划分通常是根据每个函数执行一个特定的任务来进行的。

函数声明告诉编译器函数的名称、返回类型和参数。函数定义提供了函数的实际主体。

C++ 标准库提供了大量的程序可以调用的内置函数。例如,函数 strcat() 用来连接两个字符串,函数 memcpy() 用来复制内存到另一个位置。

函数还有很多叫法,比如方法、子例程或程序,等等。

定义函数

C++ 中的函数定义的一般形式如下:

return_type function_name( parameter list ){ body of the function}

在 C++ 中,函数由一个函数头和一个函数主体组成。下面列出一个函数的所有组成部分:

  • 返回类型:一个函数可以返回一个值。return_type 是函数返回的值的数据类型。有些函数执行所需的操作而不返回值,在这种情况下,return_type 是关键字 void

  • 函数名称:这是函数的实际名称。函数名和参数列表一起构成了函数签名。

  • 参数:参数就像是占位符。当函数被调用时,您向参数传递一个值,这个值被称为实际参数。参数列表包括函数参数的类型、顺序、数量。参数是可选的,也就是说,函数可能不包含参数。

  • 函数主体:函数主体包含一组定义函数执行任务的语句。

2、C++ 循环

有的时候,可能需要多次执行同一块代码。一般情况下,语句是顺序执行的:函数中的第一个语句先执行,接着是第二个语句,依此类推。

编程语言提供了允许更为复杂的执行路径的多种控制结构。

循环语句允许我们多次执行一个语句或语句组,下面是大多数编程语言中循环语句的一般形式:

循环类型

C++ 编程语言提供了以下几种循环类型。点击链接查看每个类型的细节。

循环类型

描述

while 循环

当给定条件为真时,重复语句或语句组。它会在执行循环主体之前测试条件。

for 循环

多次执行一个语句序列,简化管理循环变量的代码。

do...while 循环

除了它是在循环主体结尾测试条件外,其他与 while 语句类似。

嵌套循环

您可以在 while、for 或 do..while 循环内使用一个或多个循环。

循环控制语句

循环控制语句更改执行的正常序列。当执行离开一个范围时,所有在该范围中创建的自动对象都会被销毁。

C++ 提供了下列的控制语句。点击链接查看每个语句的细节。

控制语句

描述

break 语句

终止 loopswitch 语句,程序流将继续执行紧接着 loop 或 switch 的下一条语句。

continue 语句

引起循环跳过主体的剩余部分,立即重新开始测试条件。

goto 语句

将控制转移到被标记的语句。但是不建议在程序中使用 goto 语句。

3、C++ 自增自减运算符:

自增运算符 ++ 会把操作数加 1,自减运算符 -- 会把操作数减 1。因此:

x = x+1;

等同于

x++;

同样的:

x = x-1;

等同于

x--;

无论是自增运算符还是自减运算符,都可以放在操作数的前面(前缀)或后面(后缀)。例如:

x = x+1;

可以写成:

++x; // 前缀形式

或者:

x++; // 后缀形式

前缀形式与后缀形式之间有一点不同。如果使用前缀形式,则会在表达式计算之前完成自增或自减,如果使用后缀形式,则会在表达式计算之后完成自增或自减。

因此,此程序中的++q就属于前缀式,当程序GOTO循环运行到++q时就会对q的值+1操作。

4、赋值运算符

下表列出了 C++ 支持的赋值运算符:

运算符

描述

实例

=

简单的赋值运算符,把右边操作数的值赋给左边操作数

C = A + B 将把 A + B 的值赋给 C

+=

加且赋值运算符,把右边操作数加上左边操作数的结果赋值给左边操作数

C += A 相当于 C = C + A

-=

减且赋值运算符,把左边操作数减去右边操作数的结果赋值给左边操作数

C -= A 相当于 C = C - A

*=

乘且赋值运算符,把右边操作数乘以左边操作数的结果赋值给左边操作数

C *= A 相当于 C = C * A

/=

除且赋值运算符,把左边操作数除以右边操作数的结果赋值给左边操作数

C /= A 相当于 C = C / A

%=

求模且赋值运算符,求两个操作数的模赋值给左边操作数

C %= A 相当于 C = C % A

<<=

左移且赋值运算符

C <<= 2 等同于 C = C << 2

>>=

右移且赋值运算符

C >>= 2 等同于 C = C >> 2

&=

按位与且赋值运算符

C &= 2 等同于 C = C & 2

^=

按位异或且赋值运算符

C ^= 2 等同于 C = C ^ 2

|=

按位或且赋值运算符

C |= 2 等同于 C = C | 2

具备了以上C++知识,就可以来解读这个函数是如何执行完成既定任务了;执行函数时,自行顺序自上而下逐条执行,首先是变量的声明,定义了4个INT类型的变量,其中n用于输入一个数表示范围,q用于从1到n每次执行自增,h用于每次加上q,l用于每次加上h,从而完成题目中的1+(1+2)+(1+2+3...n)这样功能;

当输入n的值后就进入由GOTO构成的有条件循环,进入循环前判断q是否小于n,若小于则条件符合进入循环内,执行 l += h += ++q语句,按运算符自左向右结合,首先自行++q,因为q初始值为0,因此自增为1,再向左执行h+=赋值也为1,再向左执行l+=赋值也为1,这样这条语句就算执行完毕了,就完成了题目要求运算的第一项1,按程序执行顺序接下来就执行goto语句跳转到标记qh,之后执行下一条判断语句,这样就又回到了goto构成的有条件循环的判断,加入n的值为输入的2,则q这是为1,符合判断条件再次进入循环体内,接下来又执行l += h += ++q语句,这时++q为2,h原先有1再+2这样就完成了题目中的第二项(1+2)l原先有1再加h就完成了题目中的1+(1+2)功能,上面假设我们输入了2,那么这样就完成了题目要求的1到n的运算了即1+(1+2),这时执行goto跳转到qh语句后判断q不小于n了,因此就不会再次进入goto构成的有条件循环体内,也即结束了循环,按程序执行顺序这时执行std::cout << l << "\n"语句输出运算完成的值,这样就完成了题目既定任务了,同样道理若输入为3则执行分析如上述步骤运算后输出运算值,这样就把函数是如何工作的道理讲明了。

void (1+1+2+1+2+3+到1+2+3+到+n)()
{//缘由https://ask.csdn.net/questions/7895988
    int h = 0, q = 0, l = 0, n = 0;
    std::cin >> n;
    qh:if (q < n)
    {
        l += h += ++q;
        goto qh;
    }
   std::cout << l << "\n";
}

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

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

相关文章

每天学一点之网络编程

网络编程 一、软件结构 C/S结构 &#xff1a;全称为Client/Server结构&#xff0c;是指客户端和服务器结构。常见程序有&#xff31;&#xff31;、迅雷&#xff0c;百度网盘。 B/S结构 &#xff1a;全称为Browser/Server结构&#xff0c;是指浏览器和服务器结构。常见浏览器…

go语言踩坑大全

文章目录1.左大括号 { 不能单独放一行2.未使用的变量3.未使用的 import4.简短声明的变量只能在函数内部使用5.使用简短声明来重复声明变量6.不能使用简短声明来设置字段的值7.覆盖了变量差错8.显式类型的变量无法使用 nil 来初始化9.直接使用值为 nil 的 slice、map10.map 容量…

CFS三层靶机安装与配置

CFS三层靶机安装与配置 环境下载 百度网盘 提取码&#xff1a;Chen 环境安装 下载完成后&#xff0c;有三个文件夹&#xff0c;每个文件夹对应一个靶机 进入三个文件夹&#xff0c;双击打开后缀为.ovf的文件&#xff0c;按提示安装虚拟机 环境配置 网段划分 target1&#…

LCMXO3L-1300E-5MG121C/LCMXO3L-1300E-5MG121I【FPGA】LCMXO3L-1300E-5MG256I嵌入式器件

LCMXO3L-1300E-5MG121C/LCMXO3L-1300E-5MG121I【FPGA】LCMXO3L-1300E-5MG256I嵌入式器件【说明】MachXO3设备系列是一个超低密度系列&#xff0c;支持最先进的可编程桥接和IO扩展。它具有突破性的IO密度和最低的每IO成本。设备IO功能集成了对最新行业标准IO的支持。MachXO3L/LF…

工作订单生命流程

1. Field Service 中最重要的流程是工作订单流程&#xff0c;以下是工作订单流程中重要的节点&#xff0c;如图1-1 图1-1 2. 图1-2 说明了构成工作订单流程的实体、属性和关系&#xff0c;本篇文章将重点围绕此图做示例介绍 图1-2 3. 工作订单流转流程如图1-3所示 图1-3 图1…

RLOAM/RO-LOAM

LOAM框架 LOAM框架包含三个步骤&#xff1a; Scan registration&#xff1a;从原始激光扫描点数据中提取点特征。点特征是角点或者面点。 odometry estimation&#xff1a;在特征提取之后&#xff0c;特征点传递到里程计模块&#xff0c;通过特征匹配和优化步骤计算相对坐标变…

像专业人士一样调试 JavaScript:查找和修复错误的工具和技术

介绍JavaScript 是一种功能强大的编程语言&#xff0c;用于创建交互式网页和动态用户界面。然而&#xff0c;与任何编程语言一样&#xff0c;JavaScript 代码可能包含错误&#xff0c;这些错误可能会导致意外行为、错误或崩溃&#xff0c;最重要的是&#xff0c;它会使您的生活…

Apollo提前加载问题

Apollo大家应该都有在项目中用到&#xff0c;我们项目也不例外&#xff0c;携程开源的非常好用的配置化平台。今天在搭建新服务的时候发现应为Apollo的配置导致服务启动失败&#xff0c;估次排查一下具体的原因顺便记录下来&#xff0c;翻边后面再次遇到可以查阅解决&#xff0…

Golang 中 sync/atomic 包的原子操作

背景 Go中多协程的情况下&#xff0c; 要保证操作的原子性&#xff0c;一般要使用RWMutex或者Mutex&#xff0c; 但是锁使用起来比较复杂&#xff0c;还要考虑lock 和unlock 顺序和成对出现&#xff0c;不注意就容易出错。 于是在sync/atomic包中&#xff0c;把我们常用的一些…

【源码库】跟着 Vue3 学习前端模块化

Vue3为了支持不同的用户群体&#xff0c;提供了多种模块化方案&#xff0c;这样使得我们在使用的Vue的使用可以有很多种方式&#xff1b; 例如我们可以直接在html中使用script标签引入Vue&#xff0c;也可以前端工程化工具&#xff0c;例如webpack、rollup等打包工具&#xff…

2023年湖北一级技师二级技师报名时间、考试时间是什么时候?

2023年湖北一级技师二级技师报名时间、考试时间是什么时候&#xff1f; 技师是属于职业资格证书&#xff0c;是各行业的高级技术人员中设置的技术职务。技师是技能高超的技术人员、能工巧匠&#xff0c;具有丰富的实践经验&#xff0c;能在本工种难度较大的工艺加工、复杂设备、…

数据治理之数据梳理

目录 1.定义 2.用途作用 3.实施方法 3.1自上而下 3.1.1数据域梳理 3.1.2数据主题梳理 3.1.3 数据实体梳理 3.1.4设计数据模型 3.1.5优点 3.1.5缺点 3.2自下而上 3.2.1需求分析 3.2.2展现 3.2.3分析逻辑 3.2.4数据建模 3.2.5优点 3.2.6缺点 1.定义 “数据梳理”即对…

C语言例程:用二维数组实现矩阵转置

用二维数组实现矩阵转置 本实例将输入的 34 矩阵转置为 43 矩阵&#xff0c;并输出结果。通过本实例&#xff0c;可以学习如何使用二 维数组。 实例解析 二维数组的定义 二维数组定义的一般形式为&#xff1a; 第一部分 基础篇 X2277 类型说明符 数组名[常量表达式][常量表…

STM32移植FreeRTOS操作系统

一、FreeRTOS源码下载&#xff08;1&#xff09;移植钱得准备前菜对吧&#xff0c;我们先来去官网瞄一瞄网址&#xff1a;https://freertos.org/zh-cn-cmn-s/ 第一步&#xff1a;点击下载FreeRTOS第二步&#xff1a;选择版本下载&#xff08;我选择稳定版本&#xff09;注&…

git 双因子身份登录遇到的问题及解决方法

git 双因子身份登录描述&#xff1a; 一般我们登录账号和密码的时候都是通过git的账号和密码直接登录即可&#xff0c;但是如果我们用双因子身份进行登录的时候发现用账号和密码登录一直登录不了&#xff0c;&#xff0c;&#xff0c;&#xff0c;有点emo了。。 git 双因子身份…

CentOS8基础篇13:yum与dnf软件包管理器

一、YUM工具的使用 yum可以说是一个管理rpm软件包的前端工具&#xff0c;其基于rpm软件包进行管理&#xff0c;能够从指定服务器自动下载rpm软件包并进行安装&#xff0c;可以自动处理依赖关系&#xff0c;并一次安装所有需要的软件包。在RHEL本地操作系统中设置相应的软件仓库…

SAP smartforms打印图片

注意&#xff1a;SAP只能上传打印bmp格式图片 1.标准程序上传 T-CODE:SE78 2.程序代码上传 DATA: P_FILENAME TYPE RLGRAP-FILENAME,P_NAME TYPE STXBITMAPS-TDNAME,P_TITLE LIKE BAPISIGNAT-PROP_VALUE,P_DOCID TYPE STXBITMAPS-DOCID,P_RESOLUTION TYPE …

案例分析之——理由Mybatis动态SQL实现复用

无复用思想的做法&#xff1a; 在没有复用思想的时候&#xff0c;就只顾着实现功能。比如开发过程中涉及到两个表的更新功能&#xff0c;每需要更新一处&#xff0c;就写一个接口&#xff0c;结果出现了写了11个接口的情况。 这样虽然功能实现了&#xff0c;可是可能自…

express+websocket实现线上聊天

1.webSocket简介 WebSocket是一种通信协议&#xff0c;可在单个TCP连接上进行全双工通信。WebSocket使得客户端和服务器之间的数据交换变得更加简单&#xff0c;允许服务端主动向客户端推送数据。在WebSocket API中&#xff0c;浏览器和服务器只需要完成一次握手&#xff0c;两…

SpringCloud之 Hystrix服务熔断

文章目录一、Hystrix 服务熔断 (已过时)&#x1f349;1.1 服务降级&#x1f349;1.2 服务熔断&#x1f349;1.3 OpenFeign 实现降级二、hystrix-dashboard 监控&#x1f34b;2.1 监控页面部署&#x1f34b;2.2 观察现象提示&#xff1a;以下是本篇文章正文内容&#xff0c;Spri…