C++ 基础二

文章目录

  • 四、流程控制语句
    • 4.1 选择结构
      • 4.1.1 if语句
    • 4.1.2 三目运算符
    • 4.1.3 switch语句
      • 注意事项
    • 4.1.4 if和switch的区别【CHAT】
    • 4.2 循环结构
      • 4.2.1 while循环语句
      • 4.2.2 do...while循环语句
    • 4.2.3 for循环语句
      • 九九乘法表
    • 4.3 跳转语句
      • 4.3.1 break语句
      • 4.3.2 continue语句
      • 4.3.3 goto语句:- `goto`关键字。
  • 五、数组
    • 5.1 一维数组
        • CLion中有错误:cast from ‘int*’ to ‘int’ loses precision [-fpermissive]问题解决
      • 冒泡排序
      • C语言内置的qsort
    • 5.2 二维数组
  • 六、函数
    • 值传递
    • 如果想要改变实参 -- 互换地址的内容:

四、流程控制语句

顺序结构、选择结构、循环结构

4.1 选择结构

4.1.1 if语句

用于执行基于条件的代码块。

if语句的三种形式
单行格式if语句
多行格式if语句
多条件的if语句

(1).单行格式if语句:if(条件){ 条件满足执行的语句 }
if条件表达式后不要加分号
外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

if (sum==100){cout<<"sum=="<<100<<endl;}

( 2 ) .多行格式if语句:

`if(条件){ 条件满足执行的语句 }
else{ 条件不满足执行的语句 };`

( 3 ).多行格式if语句:

`if(条件){ 条件满足执行的语句 }
else{ 条件不满足执行的语句 };`

4.1.2 三目运算符

语法:表达式1 ? 表达式2 :表达式3

	int a = 10;int b = 20;int c = a > b ? a : b;cout << "c = " << c << endl;

4.1.3 switch语句

switch - case

每个case标签之后不会自动执行到下一个case标签,除非使用break语句来显式终止switch块。

switch(表达式){case 结果1:执行语句;break;case 结果2:执行语句;break;...default:执行语句;break;}

举例代码:

#include <iostream>int main() {int choice = 2;switch (choice) {case 1:std::cout << "选项1" << std::endl;case 2:std::cout << "选项2" << std::endl;case 3:std::cout << "选项3" << std::endl;default:std::cout << "默认选项" << std::endl;}return 0;
}

这是因为没有break语句来终止case标签,导致控制流“直通”到后续的case标签。如果您想要避免这种行为,应在每个case块的末尾使用break语句来显式退出switch块。

注意事项

  1. switch语句中的表达式类型通常只能是整型或字符型。这是因为case标签中的常量值需要与表达式的类型匹配。

  2. 如果在case标签中没有使用break语句,程序会继续执行下一个case标签,这就是所谓的“直通”行为。

  3. switch语句在处理多个条件判断时具有结构清晰和执行效率高的优点。它适用于在一系列离散值中选择执行不同的代码块。

  4. 一个switch语句的缺点是它不能直接判断区间,只能针对离散的值进行判断。要处理区间,通常需要使用一系列if语句或其他逻辑结构。

这些特点使switch成为一种适用于某些情况下的有效控制结构,但在其他情况下可能需要使用不同的条件控制方式。

4.1.4 if和switch的区别【CHAT】

`if`更灵活,适用于各种条件逻辑,
`switch`更适用于多个等值条件的情况下,代码更具可读性。
  1. 用法

    • if语句适用于任何条件判断,可以处理各种复杂的条件表达式,包括比较、逻辑运算等。它可以用来实现灵活的条件控制。
    • switch语句通常用于根据一个表达式的不同值来选择执行不同的代码块。它适用于多个等值条件的情况。
  2. 条件

    • if语句可以处理各种条件,包括布尔表达式、比较表达式、逻辑表达式等,可以实现更灵活的条件逻辑。
    • switch语句通常用于处理整数或字符类型的表达式,用于离散的值判断,而不适用于范围或其他类型的条件。
  3. 多条件

    • if语句可以轻松处理多个条件,通过嵌套if语句或使用else if来实现多个条件分支。
    • switch语句通过多个case标签来处理多个等值条件,通常更适用于处理相对简单的多条件情况。
  4. 可读性

    • switch语句通常在处理多个等值条件时更具可读性,因为所有条件都集中在一起。
    • if语句用于处理复杂的条件逻辑时可能需要更多的嵌套,可读性可能较差。
  5. 执行流程

    • if语句是根据条件的真假来决定是否执行某个代码块。
    • switch语句是基于表达式的值来选择执行哪个case块,然后执行该块内的代码,之后需要使用break语句来终止switch块,否则会"直通"到下一个case

综上所述,选择使用if还是switch取决于您的需求。

4.2 循环结构

4.2.1 while循环语句

语法: while(循环条件){ 循环语句 }
在这里插入图片描述

int num = 0;while (num < 10){cout << "num = " << num << endl;num++;}

执行循环语句时确实必须提供跳出循环的出口,否则可能会陷入死循环,导致程序永远不会停止执行。以下是一些常见的方法来实现循环的退出

4.2.2 do…while循环语句

语法: do{ 循环语句 } while(循环条件);
与while的区别在于do…while会先执行一次循环语句,再判断循环条件
在这里插入图片描述

4.2.3 for循环语句

语法: for(起始表达式;条件表达式;末尾循环体) { 循环语句; }
for循环中的表达式,要用分号进行分隔

九九乘法表

在这里插入图片描述
在这里插入图片描述

4.3 跳转语句

4.3.1 break语句

  1. switch语句中:break语句用于终止当前的case标签块,并跳出switch语句。这可以防止"直通"到下一个case标签。

  2. 在循环语句中(如forwhiledo-while):break语句用于提前跳出当前循环,即使循环条件仍然满足。它用于终止循环的执行,使程序流程进入循环后的下一个语句。

  3. 在嵌套循环中:如果存在多个嵌套循环,break语句通常跳出最近的内层循环,而不是整个外层循环。这允许您有选择性地退出嵌套循环中的一个循环,而不必退出所有嵌套层次。

break语句是控制流的重要工具,用于在满足特定条件时改变程序的执行路径。要注意,滥用break可能会导致代码难以理解和维护,因此应该慎重使用。

4.3.2 continue语句

continue并没有使整个循环终止,而break会跳出循环

4.3.3 goto语句:- goto关键字。

语法: goto 标记;

`goto`语句是一种在编程中用来无条件跳转到程序中的标记(label)处的控制语句。
goto 标记;
  • 标记是在程序中的一个标签,通常是一个带有冒号的标识符,例如 label:

使用goto语句可以使程序跳转到指定标记的位置,继续执行代码。这可以在某些情况下用于实现特定的控制流程,但要小心使用,因为滥用goto可能导致程序难以理解和维护,产生不可预测的行为。

大多数现代编程语言鼓励避免使用goto,并提供更结构化的控制结构,如条件语句和循环,以更清晰和可维护的方式实现控制流程。在实际编程中,通常不需要使用goto,并且可以通过其他方法来实现相同的目标。

五、数组

类型、数组名、数量

(1)数据类型相同: 数组中的每个数据元素都必须是相同的数据类型。这意味着如果您创建一个整数数组,每个元素都必须是整数;如果是字符数组,每个元素都必须是字符,以此类推。

(2)连续内存: 数组的元素在内存中是连续存储的,这意味着数组中的元素在内存中相邻,没有额外的空间分隔它们。这也是数组的一个重要特点,因为它允许通过索引来快速访问元素,索引值可用于计算元素的内存地址。

5.1 一维数组

一维数组定义的三种方式:

  1. 数据类型 数组名[ 数组长度 ];
  2. 数据类型 数组名[ 数组长度 ] = { 值1,值2 ...};
  3. 数据类型 数组名[ ] = { 值1,值2 ...};

(1). 可以统计整个数组在内存中的长度sizeof(arr) / sizeof(arr[0])
(2)可以获取数组在内存中的首地址(int)arr

CLion中有错误:cast from ‘int*’ to ‘int’ loses precision [-fpermissive]问题解决

该这里是因为基于Linux内核的64位系统上指针类型占用8个字节,而int类型占用4个字节,所以会出现loses precision。

可以先将int* 转成long类型,long类型可以隐式类型转换到int类型。直接修改为long long即可

cout << "数组首地址为:" << (long long)arr << endl;  
cout << "数组第一个元素地址为:" << (long long)&arr[0] << endl;
cout << "数组第二个地址为:" << (long long)&arr[1] << endl;

冒泡排序

int main() {int arr[9] = { 1,7,5,3,4,8,6,2,3};for (int i = 0; i < 9 - 1; i++){for (int j = 0; j < 9 - 1 - i; j++){if (arr[j] > arr[j + 1]){int temp = arr[j];arr[j] = arr[j + 1];arr[j + 1] = temp;}}}for (int i = 0; i < 9; i++){cout << arr[i] << endl;}system("pause");return 0;
}

C语言内置的qsort

#include <stdio.h>
#include <stdlib.h>// 比较函数,用于告诉qsort如何比较元素
int compare(const void *a, const void *b) {return (*(int *)a - *(int *)b);
}int main() {int arr[] = {5, 2, 9, 1, 5, 6};int length = sizeof(arr) / sizeof(arr[0]);// 使用qsort对整数数组进行升序排序qsort(arr, length, sizeof(int), compare);// 打印排序后的数组printf("排序后的数组:");for (int i = 0; i < length; ++i) {printf("%d ", arr[i]);}printf("\n");return 0;
}

5.2 二维数组

二维数组定义的四种方式:

  1. 数据类型 数组名[ 行数 ][ 列数 ];
  2. 数据类型 数组名[ 行数 ][ 列数 ] = { {数据1,数据2 } ,{数据3,数据4 } };
  3. 数据类型 数组名[ 行数 ][ 列数 ] = { 数据1,数据2,数据3,数据4};
  4. 数据类型 数组名[ ][ 列数 ] = { 数据1,数据2,数据3,数据4};

六、函数

将一段经常使用的代码封装起来,减少重复代码

(cpp中的模块)

返回值类型 函数名 (参数列表)
{函数体语句return表达式}
int add(int num1, int num2)
{//函数体语句int sum = num1 + num2;//return表达式return sum;
}

调用 函数名(参数)

int add(int num1, int num2) //定义中的num1,num2称为形式参数,简称形参(形参列表)
{int sum = num1 + num2;return sum;
}int add(int num1, int num2, int num3) {int sum = num1 + num2 + num3;return sum;
}int main() {int a = 10;int b = 10;//调用add函数int sum = add(a, b);//调用时的a,b称为实际参数,简称实参cout << "sum = " << sum << endl;int sum1 = add(a, b, 10);cout << "sum1 = " << sum1 << endl;a = 100;b = 100;sum = add(a, b);cout << "sum = " << sum << endl;system("pause");return 0;
}

值传递

值传递时,形参是修饰不了实参的

形参无论发生什么变化都不会影响实参

void swap(int num1, int num2)
{cout << "交换前:" << endl;cout << "num1 = " << num1 << endl;cout << "num2 = " << num2 << endl;int temp = num1;num1 = num2;num2 = temp;cout << "交换后:" << endl;cout << "num1 = " << num1 << endl;cout << "num2 = " << num2 << endl;//return ; 当函数声明时候,不需要返回值,可以不写return
}int main() {int a = 10;int b = 20;swap(a, b);cout << "mian中的 a = " << a << endl;cout << "mian中的 b = " << b << endl;system("pause");return 0;
}

在这里插入图片描述

如果想要改变实参 – 互换地址的内容:

void swap(int num1, int num2)
{cout << "交换前:" << endl;cout << "num1 = " << num1 << endl;cout << "num2 = " << num2 << endl;cout << "&num1="<< &num1<<endl;cout << "&num2="<< &num1<<endl;int temp = num1;num1 = num2;num2 = temp;cout << "&temp="<<&temp<<endl;cout << "交换后:" << endl;cout << "num1 = " << num1 << endl;cout << "num2 = " << num2 << endl;cout << "&num1="<< &num1<<endl;cout << "&num2="<< &num1<<endl;//return ; 当函数声明时候,不需要返回值,可以不写return
}int main() {int a = 10;int b = 20;swap(a, b);cout << "mian中的 a = " << a << endl;cout << "mian中的 b = " << b << endl;cout << "&a="<< &a<<endl;cout << "&b="<< &b<<endl;system("pause");return 0;
}

在这里插入图片描述

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

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

相关文章

python趣味编程-5分钟实现一个测验应用程序(含源码、步骤讲解)

Python测验是用 Python 编程语言编写的,这个关于 Python 编程的简单测验是一个简单的项目,用于测试一个人在给定主题考试中的知识能力。 Python 中的 Quiz项目仅包含用户端。用户必须先登录或注册才能开始Python 测验。 此外,还规定了解决问题的时间。用户应在时间结束前解…

计算机网络:网络层ARP协议

在实现IP通信时使用了两个地址&#xff1a;IP地址&#xff08;网络层地址&#xff09;和MAC地址&#xff08;数据链路层地址&#xff09; 问题&#xff1a;已知一个机器&#xff08;主机或路由器&#xff09;的IP地址&#xff0c;如何找到相应的MAC地址&#xff1f; 为了解决…

力扣刷题篇之数与位3

系列文章目录 目录 系列文章目录 前言 数学问题 总结 前言 本系列是个人力扣刷题汇总&#xff0c;本文是数与位。刷题顺序按照[力扣刷题攻略] Re&#xff1a;从零开始的力扣刷题生活 - 力扣&#xff08;LeetCode&#xff09; 数学问题 204. 计数质数 - 力扣&#xff08;Le…

C# chatGPT API调用示例

# C# API现在需要Verify your phone number to create an API key using Newtonsoft.Json; using System.Text;class Program {static readonly HttpClient client new HttpClient();static async Task Main(){try{// 设置 API 密钥string apiKey "your api";clie…

Elasticsearch 8.9 Bulk批量给索引增加数据源码

一、相关API的handler二、RestBulkAction&#xff0c;组装bulkRequest调用TransportBulkAction三、TransportBulkAction 会把数据分发到数据该到的数据节点1、把数据按分片分组&#xff0c;按分片分组数据再发送到指定的数据节点(1) 计算此文档发往哪个分片1)根据索引是否是分区…

【Linux】vscode远程连接ubuntu失败

VSCode远程连接ubuntu服务器 这部分网上有很多&#xff0c;都烂大街了&#xff0c;自己搜吧。给个参考连接&#xff1a;VSCode远程连接ubuntu服务器 注意&#xff0c;这里我提前设置了免密登录。至于怎么设置远程免密登录&#xff0c;可以看其它帖子&#xff0c;比如这个。 …

Ps:锁定图层

使用“图层”面板上的锁定图层 Lock Layer功能可以完全或部分锁定图层以保护其内容。 比如&#xff0c;在完成某个图层后希望它不再被修改&#xff08;包括不透明度和图层样式等&#xff09;&#xff0c;可将其完全锁定。 如果不想更改图像&#xff0c;但对其摆放位置还在犹豫不…

SpringBoot整合Quartz示例

数据表 加不加无所谓,如果需要重启服务器后重新执行所有JOB就把sql加上 如果不加表 将application.properties中的quartz数据库配置去掉 自己执行自己的逻辑来就好,大不了每次启动之后重新加载自己的逻辑 链接&#xff1a;https://pan.baidu.com/s/1KqOPYMfI4eHcEMxt5Bmt…

Unittest框架--自动化

Python中方法的传递 参数化 pip install parameterized -i https://pypi.douban.com/simple需求&#xff1a;验证Tpshop登录 # 断言参数化 import time import unittest from parameterized import parameterized from selenium import webdriver from selenium.webdriver.co…

小程序游戏、App游戏与H5游戏:三种不同的游戏开发与体验方式

在当今数字化的时代&#xff0c;游戏开发者面临着多种选择&#xff0c;以满足不同用户群体的需求。小程序游戏、App游戏和H5游戏是三种流行的游戏开发和发布方式&#xff0c;它们各自具有独特的特点和适用场景。 小程序游戏&#xff1a;轻巧便捷的社交体验 小程序游戏是近年来…

OpenCV快速入门:基本操作

文章目录 1. 像素操作1.1 像素统计1.2 两个图像之间的操作1.2.1 图像加法操作1.2.3 图像加权混合 1.3 二值化1.4 LUT&#xff08;查找表&#xff09;1.4.1 查找表原理1.4.2 代码演示 2 图像变换2.1 旋转操作2.1.1 旋转的基本原理2.1.2 代码实现 2.2 缩放操作2.3 平移操作2.3.1 …

第四代智能井盖传感器:万宾科技智能井盖位移监测方式一览

现在城市化水平不断提高&#xff0c;每个城市的井盖遍布在城市的街道上&#xff0c;是否能够实现常态化和系统化的管理&#xff0c;反映了一个城市治理现代化水平。而且近些年来住建部曾多次要求全国各个城市加强相关的井盖管理工作&#xff0c;作为基础设施重要的一个组成部分…

TP-LINK联洲面试题

文章目录 1.说一下微服务架构?2.微服务优缺点3.负载均衡的实现算法4.Redis集群部署方式?5.MySQL主从复制?5.1 配置流程5.2 优缺点分析6.口头手撕快排7.队列实现栈和栈实现队列7.1 队列实现栈7.2 栈实现队列8.进程有几种状态?9.Spring Boot Actuator?10.外键、主键和索引?…

python科研绘图:面积图

目录 1、面积图 2、堆积面积图 1、面积图 面积图是一种数据可视化图表&#xff0c;用于展示数据随时间或其他有序类别的变化趋势。它与折线图相似&#xff0c;但在展示数据变化的同时&#xff0c;面积图还强调了各个数据点之间的累积关系。这种图表通常通过在折线下方填充颜…

2023最新最全【虚幻4引擎】下载安装零基础教程

1、创建Epic Games账户 我们先打开浏览器&#xff0c;输入以下网址&#xff1a;unrealengine.com 随后点击【立即开始】 选择许可证类型&#xff0c;此处提供三种选项&#xff0c;分别是【游戏】、【非游戏】以及【私人定制】 第一类许可证适用于游戏和商业互动产品&#xff…

STM32笔记—USART

课外知识插入&#xff1a;STM32单片机extern全局变量_stm32全局变量-CSDN博客 如果你把temple定义在A中&#xff0c;然后让A.h和B.h包含在includes.h中&#xff0c;然后把includes.h放在A.c和B.c中单个编译是没有问题的&#xff0c;但是链接的时候会出现问题&#xff0c; “S…

【DevOps】Git 图文详解(一):简介及基础概念

Git 图文详解&#xff08;一&#xff09;&#xff1a;简介及基础概念 1.简介&#xff1a;认识 Git2.基础概念&#xff1a;Git 是干什么的&#xff1f;2.1 概念汇总2.2 工作区 / 暂存区 / 仓库2.3 Git 基本流程2.4 Git 状态 1.简介&#xff1a;认识 Git Git 是当前最先进、最主…

iApp祁天社区UI成品源码 功能齐全的社区应用

iApp祁天社区UI成品源码是一个非常实用的资源&#xff0c;提供了完整的源代码&#xff0c;可以帮助您快速搭建一个功能齐全的社区应用。 这个源码具有丰富的UI设计&#xff0c;经过精心调整和优化&#xff0c;确保用户体验流畅而舒适。它不仅具备基本的社区功能&#xff0c;如…

jQuery【事件处理器、鼠标事件、表单事件、键盘事件、浏览器事件、事件对象、jQuery遍历】(三)-全面详解(学习总结---从入门到深化)

目录 事件之绑定事件处理器 事件之鼠标事件 事件之表单事件 事件之键盘事件 事件之浏览器事件 事件对象 jQuery遍历 事件之绑定事件处理器 1、 .on() 在选定的元素上绑定一个或多个事件处理函数 $("#button").on("click", function(event){console…

《QT从基础到进阶·三十一》事件循环QCoreApplication,QGuiApplication,QApplication

QCoreApplication&#xff1a;为非界面类项目提供一个事件监听循环。 QGuiApplication&#xff1a;以QtGui模块基础开发的界面项目需要应用环境。 QApplication&#xff1a;以QWidget模块基础开发的界面项目需要应用环境。 可以简单总结为&#xff0c;如果是非界面项目开发&am…