循环

while循环:

while(循环条件)
{循环操作语句
}


循环三要素:循环变量的初值、循环变量的判断、循环变量的更新

do while循环:

do{循环操作
}while(循环条件);

特点:先执行,在判断


while循环和do-while循环的区别:
执行顺序不同;初始情况不满足循环条件时,while循环一次都不会执行,do-while循环不管任何情况都至少执行一次。

for循环:

for(表达式1;表达式2;表达式3)
{语句;
}

表达式1:通常是为循环变量赋初值,可省略
表达式2:循环条件,是否继续执行循环,可省略
表达式3:更新循环变量的值,可省略

break语句:
作用:跳出循环,执行循环之后的语句

continue语句:
作用:跳过本次循环,继续下一次循环

break和continue的对比:

break continue
使用场合 break可用于switch结构和循环结构中 continue只能用于循环结构中
作用 break终止某个循环,程序跳转到循环块外的下条语句 continue跳出本次循环,进入下一次循环

小练习:
使用for循环打印菱形星号

#include <iostream>using namespace std;
int main()
{for(int i = 0; i < 4; i++){for(int k = 0; k <= 2 - i; k++){cout <<' ';}for(int j = 0; j <= i * 2; j++){cout << '*';}cout << endl;}//下半部分for(int i = 0; i < 3; i++){for(int j = 0; j <= i; j++){cout << ' ';}for(int k = 0; k <= 4 - 2 * i; k++){cout << '*';}cout << endl;}return 0;
}

·

·

·

·

·

·

数组

什么是数组:数组是一个变量,由数据类型相同的一组元素组成(内存中的一串连续的空间)

数组的结构和基本要素:
标识符:数组的名称(只有一个),用于区分不同的数组
数组元素:向数组中存放的数据
元素下标:对数组元素进行编号;元素下标标明了元素在数组中的位置,从0开始;数组中的每个元素都可以通过下标来访问
元素类型:数组元素的数据类型

一维数组的使用

datatype arrayName[size];

在C++ 11中的列表初始化新增了一些功能:

  1. 省略 = 号:int days[]{1,2};
  2. 大括号可为空,所有元素置零:float m[100]{};

数组的排序:

一、冒泡排序:
外层循环控制比较的轮数
内层循环控制每轮的比较和交换

const int N = 5;
int temp;//中间变量
int nums[N] = {1, 2, 3, 4, 5};
for(int i = 0; i < 5; i++)
{for(int j = 0; j < N - i - 1; j++){if(nums[i] < nums[i + 1]{temp = nums[j];nums[j] = nums[j + 1];nums[j + 1] = temp;}}
}

二、选择排序

 const int N = 5;int nums[]{1, 2, 3, 4, 5};int temp;//中间变量int min = nums[0];//假设最小值是数组的第一个元素int minIndex = 0;//最小值的初始下标设置为0for(int i = 0; i < N; i++){min = nums[i];//假设第i个元素是最小值minIndex = i;for(int j = i + 1; j < N - 1; j++){if(nums[j] < min){min = nums[j];minIndex = j;}}//交换if(minIndex > i){temp = nums[minIndex];nums[minIndex] = nums[i];nums[i] = temp;}}cout << "排序后:" << endl;for(int i = 0; i < N; i++){cout << nums[i] << endl;}//逆序for(int i = 0; i < N / 2; i++){temp = nums[i];nums[i] = nums[N - i - 1];nums[N - i - 1] = temp;}

数组元素的插入和删除

#include <iostream>using namespace std;int main()
{//const int N= 5;int nums[]{5, 4, 1, 3, 2};int temp;//中间变量int numsCount = sizeof(nums) / sizeof(nums[0]);int insertNum;//要插入的数字int insertIndex = 0;//默认插入到第一个元数的位置for(int i = 0; i < numsCount; i++){for(int j = 0; j < numsCount - i - 1; j++){if(nums[j] < nums[j + 1]){temp = nums[j];nums[j] = nums[j + 1];nums[j + 1] = temp;}}}cout << "排序后:" << endl;for(int i = 0; i < numsCount; i++){cout << nums[i] << endl;}cout << "请输入要插入的数字:";cin >> insertNum;insertIndex = numsCount;//1、找到第一个插入数字大的位置insertIndexfor(int i = 0; i < numsCount; i++){if(insertNum > nums[i]){insertIndex = i;break;}}//2、从最后一个元素开始,将数字赋值到后面一个元素中for(int i = numsCount - 1; i >= insertIndex; i--){nums[i + 1] = nums[i];}//3、将要插入的数组赋值给下标为inserIndex的元素nums[insertIndex] = insertNum;//4、将数组的总长度+1numsCount++;cout << "插入后:" << endl;for(int i = 0; i < numsCount; i++){cout << nums[i] << endl;}//删除//1.找到要删除的元素的下标double deleteNum;int deleteIndex = -1;cout << "请输入要删除的数字:";cin >> deleteNum;for(int i = 0; i < numsCount; i++){if(deleteNum == nums[i]){deleteIndex = i;break;}}if(deleteIndex == -1){cout << "没有找到要删除的元素,删除失败!" << endl;}else{//2.从找到的下标开始,后面一个元素赋值给前面一个元素for(int i = deleteIndex; i < numsCount - 1; i++){nums[i] = nums[i + 1];}//3.总长度 - 1numsCount--;}cout << "删除后:" << endl;for(int i = 0; i < numsCount; i++){cout << nums[i] << endl;}return 0;
}

二维数组
动态赋值:

#include <iostream>using namespace std;int main()
{//使用二维数组string stu_names[]{"刘备", "关羽", "张飞"};string course_names[]{"语文", "数学", "英语"};const int ROW = 3;const int COL = 3;double scores[ROW][COL];for(int i = 0; i < ROW; i++){for(int j = 0; j < COL; j++){cout << stu_names[i] << "的" << course_names[j] << "成绩:";cin >> scores[i][j];}}cout << '\t';for(int i = 0; i < COL; i++){cout << course_names[i] << '\t';}cout << "\n";for(int i = 0; i < ROW; i++){cout << stu_names[i] << '\t';for(int j = 0; j < COL; j++){cout << scores[i][j] << "\t";}cout << "\n";}return 0;
}

数组的替代品

向量容器vector:是一个快速的动态分配内存的数组,其大小可以动态扩展

特点:

  • 动态数组,可以在运行阶段设置长度
  • 具有数组的快速索引方式
  • 可以插入和删除元素

定义和初始化

vector<double> vec1;//只能有double型的元素
vector<string> vec2(5);//默认分配5个空间
vector<int> vec3(20,998);//设定20个元素,每个元素都是998

常用的操作(函数)

使用场景:

  1. 开始就知道元素的数量
  2. 对数据的索引和随机访问频繁
  3. 插入和删除大多数在尾端
#include <iostream>
#include <vector>
#include <algorithm>//算法头文件
using namespace std;int main()
{vector<double> vecDouble = {88.2, 23.4, 32.1, 34.5};//向向量中插入数字vecDouble.push_back(100.8);//在数组的尾部插入一个数字//遍历cout << "插入后:" << endl;for(int i = 0; i < vecDouble.size(); i++)//size:返回容器中元素的个数{cout << vecDouble[i] << endl;}cout << "********************" << endl;//集合的通用遍历方法:使用迭代器 iterator//以下是迭代器的基本用法vector<double>::iterator it;//得到迭代器对象-实际上是一个指针对象//从第一个元素开始迭代/*//遍历for(it = vecDouble.begin(); it != vecDouble.end(); ++it){cout << *it << endl;}*///排序cout << "排序后:" << endl;sort(vecDouble.begin(), vecDouble.end());for(it = vecDouble.begin(); it != vecDouble.end(); ++it){cout << *it << endl;}cout << "********************" << endl;//逆序cout << "逆序:" << endl;reverse(vecDouble.begin(), vecDouble.end());for(it = vecDouble.begin(); it != vecDouble.end(); ++it){cout << *it << endl;}return 0;
}

老九学堂 学习 C++ 第四天相关推荐

  1. 老九学堂 学习 C++ 第七、八天

    7.1 内联函数 内联(inline)函数:是C++为提高程序运行速度所做的一项改进:与常规函数的区别不在于编写方式,而在于被调用时的运行机制不同:编译使用函数代码替换 函数调用. 使用建议:如果执行 ...

  2. 老九学堂 学习C++ 第十天

    10继承 10.1 概念: 所谓 "继承(inheritance)" 就是在一个已经存在的类基础上,再建立一个新类 从已有的类派生出新的类,派生类就继承了原有类(基类)的特征,包括 ...

  3. 老九学堂 学习C++ 第六天

    函数 自定义函数的完整写法: 注: 函数原型与函数定义的头部类似,最后以分号结尾 函数原型中的参数名称可以省略,只写参数类型 C++中返回值类型不能是数组,但可以是其他任何类型(可以将数组作为结构或对 ...

  4. 老九学堂之分布式设计教材

    老九学堂之分布式设计教材 作者:老九-技术大黍 原文:分布式系统设计教材 社交:知乎 公众号:老九学堂(新人有惊喜) 特别声明:原创不易,未经授权不得转载或抄袭,如需转载可联系笔者授权 前言 本文由老 ...

  5. 【老九学堂】【初识C语言】C语言保留字(关键字)详解

    保留字(reserved word) 保留字又称关键字. 指在高级语言中已经定义过的字,使用者不能再将这些字作为变量名或过程名使用. 每种程序设计语言都规定了自己的一套保留字. 例如:BASIC语言规 ...

  6. 【老九学堂】【初识C语言】二维数组

    一维数组只有一个下标,称为一维数组,其数组元素也称为单下标变量.在实际问题中有很多量是二维的或多维的,因此C语言允许构造多维数组.多维数组元素有多个下标,以标识它在数组中的位置,所以也称为多下标变量. ...

  7. 【老九学堂】【C++】数组与指针

    不知道在通过前面的内容学习后,是否有很多小伙伴都会认为数组和指针是等价的,数组名表示数组的首地址呢?不幸的是,这是一种非常危险的想法,并不完全正确,前面我们将数组和指针等价起来是为了方便大家理解(在大 ...

  8. 【老九学堂】【C++】位运算符

    位运算是指按二进制进行的运算.在系统软件中,常常需要处理二进制位的问题.C语言提供了6个位操作运算符.这些运算符只能用于整型操作数,即只能用于带符号或无符号的char,short,int与long类型 ...

  9. 【老九学堂】【C++】C++的发展史

    为了让小伙伴们在学习过程中,能收获更多的知识,达到真正的零基础入门和深入了解C++,老九君特地收集了有关C++发展相关的一些资料供大家查阅和学习: C++语言发展大概可以分为三个阶段: 第一阶段从80 ...

  10. 【老九学堂】【C++】复合类型之vector和array模板

    今天我们就给小伙伴们简单的介绍一下数组的替代品,vector和array,模板类vector类似于string类,也是一种动态数组 .您可以在运行阶段的设置vector对象的长度,可在末尾附加新数据, ...

最新文章

  1. armel、armhf、arm64、armv7l 系统架构区别与联系(AArch64)
  2. 《Pyflink》Flink集群安装,Python+Flink调研
  3. 函数sigsuspend
  4. qt c语言socket,c – Qt双向客户端服务器使用QTcpSocket和QTcpServer
  5. DistCp迁移Hive数据过程中源集群增加删除文件等场景测试
  6. 两台电脑usb直连传数据_如何通过一根USB数据线把手机/平板充当电脑的第二个显示器...
  7. 【原创】php+mysql下,对网站架构方面的一些认识(以我维护的站点为例)
  8. STM32F103串口1 printf函数的实现
  9. 类的自动转换和强制类型转换
  10. AutoCAD2012从入门到精通中文视频教程 第46课 三维实体及创建实体命令1(个人收藏)
  11. UEFI学习——事件函数WaitForEvent和CreateEvent/CreateEventEx
  12. 二维码图像编码原理(字符编码:ASCII、UTF-8)
  13. 多重盒子嵌套下,子盒子撑开父盒子,父盒子宽度随子盒子内容自适应
  14. 介绍几个常用的免费的Web前端开发工具
  15. php 上传图片方法
  16. VisionMaster 4.0.0 的Modbus通信
  17. 解决Win10系统msconfig配置错误后无法启动的问题
  18. 一个骚操作,公众号粉丝破10万!
  19. STM32入门——基于RobotMaster——1.准备工作
  20. 蒙特卡洛方法求解强化学习任务——蒙特卡洛方法介绍

热门文章

  1. 计算机内部进水会不会燃烧,发动机进水后内部变化惊人!“内脏”爆裂而亡
  2. 手机怎么设置腾达路由器后显示远端服务器,怎么用手机设置腾达(Tenda)路由器wifi密码?...
  3. 第十六届中国酒店“金枕头”奖获奖名单揭晓
  4. Android带动画进度条简单实现
  5. java.lang.null_java.lang.nullpointerexception 怎么解决
  6. Android平台音视频RTMP推送|GB28181对接之动态水印设计
  7. 含泪整理最优质鲜肉VRay材质球素材,你想要的这里都有
  8. 什么是Rootkit病毒
  9. python 网页游戏 渲染_python 结合selenium+PhantomJS爬取王者荣耀官网游戏壁纸
  10. Element is missing end tag