首页 > 编程语言 >c++教程之三大结构

c++教程之三大结构

时间:2024-08-27 11:53:14浏览次数:9  
标签:教程 cout int 之三 c++ 运算符 循环 C++ 表达式

C++顺序结构教程

在编程的世界里,顺序结构是构建所有程序的基础。无论是简单的脚本还是复杂的应用程序,它们都是由一系列按照特定顺序执行的指令组成的。C++,作为一种高效、灵活的编程语言,同样遵循这一原则。本教程将深入介绍C++中的顺序结构,包括变量与数据类型、运算符与表达式、基本输入输出、控制流(尽管控制流不完全属于顺序结构,但它是理解程序如何按顺序执行的关键部分之一,因此在此提及)以及通过实例展示顺序结构在C++程序中的应用。

一、C++程序的基本结构

在开始学习顺序结构之前,了解C++程序的基本结构是很重要的。每个C++程序都遵循以下基本结构:

#include <iostream> // 包含标准输入输出流库
using namespace std; // 使用标准命名空间,避免在调用库函数时重复std::
int main() {
// 程序体,即顺序执行的指令集合
return 0; // 表示程序正常结束
}

main函数是每个C++程序的入口点。程序执行时,将首先进入main函数,并按照其中定义的顺序执行指令。

二、变量与数据类型

2.1 数据类型

C++提供了丰富的数据类型,包括基本数据类型(如整型、浮点型、字符型、布尔型)和复合数据类型(如数组、结构体、类等)。在顺序结构中,我们主要关注基本数据类型的使用。

  • 整型intshortlonglong long以及它们的无符号版本(通过在类型前加unsigned)。
  • 浮点型floatdoublelong double,用于表示带有小数点的数。
  • 字符型char,用于存储单个字符(如字母、数字或符号)。
  • 布尔型bool,只能存储truefalse两个值。

2.2 变量声明与初始化

在C++中,变量在使用前必须先声明其类型,并可以初始化。变量声明指定了变量的类型和名称,而初始化则是为变量分配一个初始值。

int age = 25; // 声明并初始化整型变量
double pi = 3.14159; // 声明并初始化浮点型变量
char gender = 'M'; // 声明并初始化字符型变量
bool isStudent = true; // 声明并初始化布尔型变量

三、运算符与表达式

C++中的运算符用于对变量或值执行各种操作,如算术运算、关系比较、逻辑判断等。表达式是由运算符和操作数组成的,用于计算并返回一个值。

3.1 算术运算符

  • 加法(+
  • 减法(-
  • 乘法(*
  • 除法(/
  • 取模(%
  • 自增(++
  • 自减(--

3.2 关系运算符

  • 等于(==
  • 不等于(!=
  • 大于(>
  • 小于(<
  • 大于等于(>=
  • 小于等于(<=

3.3 逻辑运算符

  • 逻辑与(&&
  • 逻辑或(||
  • 逻辑非(!

3.4 赋值运算符

  • 简单的赋值(=
  • 复合赋值(如+=-=*=/=

四、基本输入输出

在C++中,输入输出操作通常通过<iostream>库中的cin(用于输入)和cout(用于输出)对象实现。

4.1 输出

使用cout<<运算符向标准输出(通常是屏幕)输出数据。

cout << "Hello, World!" << endl; // 输出字符串并换行

4.2 输入

使用cin>>运算符从标准输入(通常是键盘)读取数据。

int number;
cout << "Enter a number: ";
cin >> number; // 读取用户输入并存储在变量number中

C++分支结构教程

在C++编程中,分支结构是控制程序流程的关键部分,它允许程序根据条件执行不同的代码块。通过分支结构,程序能够做出决策,并根据这些决策执行相应的操作。C++提供了几种基本的分支结构,包括if语句、if-else语句、if-else if-else链以及switch语句。此外,还有一个常用的条件运算符(三元运算符),它也可以实现简单的分支逻辑。下面,我们将逐一详细介绍这些分支结构。

一、if语句

if语句是最基本的分支结构,它根据一个布尔表达式的值来决定是否执行一段代码。如果表达式的值为真(即非零),则执行if语句块中的代码;如果为假(即零),则跳过该代码块。

语法

if (condition) {
// 条件为真时执行的代码
}

示例

#include <iostream>
using namespace std;
int main() {
int number = 5;
if (number > 0) {
cout << "数字是正数。" << endl;
}
return 0;
}

二、if-else语句

if-else语句是if语句的扩展,它在条件不满足时提供了一个额外的代码块来执行。这允许程序在条件不满足时执行另一段逻辑。

语法

if (condition) {
// 条件为真时执行的代码
} else {
// 条件为假时执行的代码
}

示例

#include <iostream>
using namespace std;
int main() {
int number = -5;
if (number > 0) {
cout << "数字是正数。" << endl;
} else {
cout << "数字不是正数。" << endl;
}
return 0;
}

三、if-else if-else

当需要根据多个条件执行不同的代码时,可以使用if-else if-else链。这种结构允许程序检查多个条件,并根据第一个为真的条件执行相应的代码块。

语法

if (condition1) {
// 当condition1为真时执行的代码
} else if (condition2) {
// 当condition1为假且condition2为真时执行的代码
} // 可以有更多的else if...
else {
// 当所有前面的条件都为假时执行的代码
}

示例

#include <iostream>
using namespace std;
int main() {
char grade = 'B';
if (grade == 'A') {
cout << "优秀" << endl;
} else if (grade == 'B' || grade == 'b') {
cout << "良好" << endl;
} else if (grade == 'C' || grade == 'c') {
cout << "中等" << endl;
} else {
cout << "其他" << endl;
}
return 0;
}

四、switch语句

switch语句是一种多路分支结构,它根据表达式的值与各个case标签的匹配情况来执行不同的代码块。switch语句通常用于处理具有多个离散值的情况。

语法

switch (expression) {
case constant1:
// 当expression等于constant1时执行的代码
break;
case constant2:
// 当expression等于constant2时执行的代码
break;
// 可以有更多case...
default:
// 当expression与任何case都不匹配时执行的代码
}

示例

#include <iostream>
using namespace std;
int main() {
int day = 3;
switch (day) {
case 1:
cout << "星期一" << endl;
break;
case 2:
cout << "星期二" << endl;
break;
case 3:
cout << "星期三" << endl;
break;
// ... 可以添加其他case
default:
cout << "无效的日子" << endl;
}
return 0;
}

五、条件运算符(三元运算符)

条件运算符是C++中一种特殊的运算符,因为它接受三个操作数,因此也被称为三元运算符。这个运算符提供了一种非常简洁的方式来根据条件表达式的结果来选择两个值中的一个。它的形式非常紧凑,非常适合在需要简单条件逻辑赋值时使用。

语法

条件运算符的语法如下:

condition ? expression1 : expression2
  • condition 是一个表达式,其结果必须能够被解释为布尔值(即真或假)。
  • expression1 和 expression2 是两个表达式,它们的结果类型应该兼容(或者至少能够被隐式转换为同一类型)。

如果 condition 的结果为真(即非零),则整个条件运算符的结果是 expression1 的值;如果 condition 的结果为假(即零),则结果是 expression2 的值。

示例

#include <iostream>
using namespace std;
int main() {
int a = 10, b = 20;
int max = (a > b) ? a : b; // 如果a大于b,则max为a的值;否则为b的值
cout << "较大的数是: " << max << endl;
int score = 75;
char grade = (score >= 60) ? 'P' : 'F'; // 如果score大于等于60,则grade为'P'(通过);否则为'F'(未通过)
cout << "成绩等级是: " << grade << endl;
return 0;
}

嵌套使用

条件运算符也可以嵌套使用,但请注意这样做可能会降低代码的可读性。在嵌套使用时,应确保使用括号来明确运算符的优先级。

int score = 78;
char grade = (score >= 90) ? 'A' : (score >= 80) ? 'B' : (score >= 60) ? 'C' : 'F';
cout << "成绩等级是: " << grade << endl;

在这个例子中,我们首先检查score是否大于等于90,如果是,则grade为'A'。如果不是,则进一步检查是否大于等于80,依此类推,直到找到匹配的等级或默认为'F'。

注意事项

  • 条件运算符的优先级低于算术运算符、关系运算符和逻辑运算符,但高于赋值运算符。因此,在复杂的表达式中使用时,可能需要使用括号来明确优先级。
  • 尽管条件运算符非常强大且在某些情况下非常有用,但过度使用可能会使代码难以阅读和维护。在可能的情况下,优先考虑使用if-else语句,特别是当条件逻辑较为复杂时。

综上所述,条件运算符是C++中一个非常有用的特性,它提供了一种简洁的方式来根据条件执行简单的赋值操作。然而,在使用时应注意其优先级和可读性,以确保代码的可维护性。

C++循环结构教程

在C++编程中,循环结构是控制程序流程的重要组成部分,它允许我们重复执行一段代码多次,直到满足特定条件为止。循环结构是处理重复任务、遍历数据结构(如数组、向量等)以及实现复杂算法的基础。C++提供了几种基本的循环结构,包括for循环、while循环、do-while循环以及基于范围的for循环(C++11及以后版本)。下面,我们将逐一详细介绍这些循环结构。

一、for循环

for循环是最常用的循环结构之一,它适用于已知循环次数的场景。for循环通过一个初始化表达式、一个条件表达式和一个迭代表达式来控制循环的执行。

语法

for (初始化表达式; 条件表达式; 迭代表达式) {
// 循环体
}
  • 初始化表达式:在循环开始前执行,通常用于初始化循环控制变量。
  • 条件表达式:在每次循环开始前评估。如果条件为真(非零),则执行循环体;如果为假(零),则退出循环。
  • 迭代表达式:在每次循环体执行完毕后执行,通常用于更新循环控制变量的值。

示例

#include <iostream>
using namespace std;
int main() {
for (int i = 0; i < 5; i++) {
cout << "循环次数: " << i << endl;
}
return 0;
}

二、while循环

while循环在条件为真时重复执行一段代码。与for循环不同,while循环的初始化部分和迭代部分需要程序员在循环体外部或内部显式处理。

语法

while (条件表达式) {
// 循环体
// 迭代表达式(通常在循环体内)
}

示例

#include <iostream>
using namespace std;
int main() {
int i = 0;
while (i < 5) {
cout << "循环次数: " << i << endl;
i++; // 迭代表达式
}
return 0;
}

三、do-while循环

do-while循环至少执行一次循环体,然后检查条件表达式。如果条件为真,则继续执行循环体;如果为假,则退出循环。这与while循环的主要区别在于,do-while循环保证了循环体至少被执行一次。

语法

do {
// 循环体
// 迭代表达式(通常在循环体内)
} while (条件表达式);

示例

#include <iostream>
using namespace std;
int main() {
int i = 0;
do {
cout << "循环次数: " << i << endl;
i++; // 迭代表达式
} while (i < 5);
return 0;
}

四、基于范围的for循环(C++11及以后)

从C++11开始,C++引入了基于范围的for循环(也称为范围for循环或增强型for循环),它提供了一种更简洁的方式来遍历容器(如数组、向量等)中的元素。

语法

for (声明类型 变量名 : 容器) {
// 使用变量名来访问容器中的每个元素
}

示例

#include <iostream>
#include <vector>
using namespace std;
int main() {
vector<int> nums = {1, 2, 3, 4, 5};
for (int num : nums) {
cout << num << " ";
}
cout << endl;
return 0;
}

注意事项

1. 嵌套循环

在C++中,循环可以嵌套使用,即一个循环内部包含另一个循环。嵌套循环在处理多维数据结构(如二维数组)或需要多步骤迭代的任务时非常有用。然而,嵌套循环也增加了代码的复杂性,并可能导致性能问题,特别是当内层循环的迭代次数非常高时。因此,在设计嵌套循环时,应仔细考虑是否有更高效的算法或数据结构可用。

2. 循环控制语句

C++提供了几种循环控制语句,如breakcontinuegoto(尽管goto通常不推荐使用),用于在循环中提前退出或跳过某些迭代。

  • break:用于完全退出最内层的循环。
  • continue:用于跳过当前循环的剩余部分,并继续下一次迭代(如果有的话)。
  • goto:虽然可以跳转到程序中的任何标签位置,但过度使用会导致代码难以理解和维护。因此,在大多数情况下,应避免使用goto语句。

3. 循环与变量作用域

在C++中,变量的作用域决定了其可见性和生命周期。在for循环的初始化表达式中声明的变量(C++11及以后)具有块作用域,这意味着它们仅在循环体内部可见。这种作用域限制有助于避免变量名冲突和意外的副作用。

4. 循环优化

在编写循环时,应考虑优化以提高程序的性能。这包括减少不必要的计算、避免在循环内部进行复杂的函数调用、使用更高效的算法和数据结构等。此外,编译器优化(如循环展开、循环不变量外提等)也可以帮助提高循环的性能,但程序员应了解这些优化的基本原理,以便在必要时手动优化代码。

5. 无限循环的避免

无限循环是编程中常见的错误之一,它会导致程序挂起或耗尽系统资源。为了避免无限循环,应确保循环具有明确的终止条件,并在循环体内适当地更新循环控制变量。此外,使用break语句可以在满足特定条件时提前退出循环。

6. 循环与异常处理

在C++中,循环可以与异常处理机制结合使用。如果在循环体内发生异常,并且没有适当的异常处理代码(如try-catch块),则异常将传播到循环外部。因此,在编写可能抛出异常的循环时,应确保有适当的异常处理逻辑来防止程序崩溃或不稳定。

7. 循环与多线程

在多线程编程中,循环的使用需要特别注意线程安全和同步问题。如果多个线程共享循环中的变量或资源,则可能需要使用互斥锁、信号量或其他同步机制来避免数据竞争和死锁等问题。

总之,C++中的循环结构是编程中不可或缺的一部分。通过深入理解循环的工作原理和注意事项,你可以编写出更加高效、健壮和可维护的C++代码。在实际编程中,应根据具体任务的需求和上下文环境选择合适的循环结构和优化策略。

标签:教程,cout,int,之三,c++,运算符,循环,C++,表达式
From: https://blog.csdn.net/hlb20130715/article/details/141575066

相关文章

  • C++笔记9•list•
    容器之list1.list的介绍(1).list是可以在常数范围内在任意位置进行插入和删除的序列式容器,并且该容器可以前后双向迭代。(2).list的底层是双向循环链表结构,双向链表中每个元素存储在互不相关的独立节点中,在节点中通过指针指向其前一个元素和后一个元素。(3).优......
  • C++学习 — 函数
    目录1.概述2.函数的定义3.函数的调用4.值传参5.函数的常见样式6.函数的声明7.函数的分文件编写8.函数默认参数 9.函数占位参数10.函数重载(1)函数重载概述(2)函数重载注意事项1.概述作用:将一段经常使用的代码封装起来,减少重复代码   一个较大的程序,一般......
  • 202009-1 称检测点查询 csp c++组
    a数组记录距离平方值,其最大为2000的平方,不超int。b数组记录3个距离最小的坐标。ans记录下标。每次选出一个坐标后其距离置为最大值。include<bits/stdc++.h>typedeflonglongll;usingnamespacestd;intmain(){intn,x,y,x1,y1,j,minx,b[3],cnt=0,i,ans;inta[210......
  • C/C++开发神器CLion全新发布v2024.2——更适用于嵌入式开发
    CLion是一款专为开发C及C++所设计的跨平台IDE。它是以IntelliJ为基础设计的,包含了许多智能功能来提高开发人员的生产力。这种强大的IDE帮助开发人员在Linux、OSX和Windows上来开发C/C++,同时它还使用智能编辑器来提高代码质量、自动代码重构并且深度整合CMake编译系统,从而提高......
  • C++码表之Unicode
    今日诗词:折花逢驿使,寄与陇头人。江南无所有,聊赠一枝春。                     ——《赠范晔诗》【南北朝】陆凯引言:上一期我们说到了ASCII码表,这是一种现如今不是那么通用的机制,随着计算机的普及,越来越多的人开始学习计算机,深......
  • C++容器之字符串的详解
    每日诗词:我见青山我妩媚,料青山见我应如是。                             ——《贺新郎·甚矣吾衰矣》【宋】辛弃疾目录补漏:vector在分配新内存块后如何进行元素复制正文:字符串变量和常量字符串变量:解析:......
  • 在Windows上搭建自己的Git服务器的图文教程
    一、简介以前,在别家的公司,一般早就把源代码管理工具搭建好了,很少有机会自己搭建一套。最近,公司也许要把现在不少的源码进行管理,于是我打算自己搭建源代码管理服务器。说起源代码管理,当然有很多中解决方案,我个人偏向搭建一个Git服务器。毕竟这个自己用的比较多,也熟悉。而且,现在......
  • 学习C++的阶段总结
    每日诗词:盛气光引炉烟,素草寒生玉佩。应是天仙狂醉,乱把白云揉碎。                        ——《清平乐·画堂晨起》【唐】李白目录月末学习总结展望和感谢通知我的目标是:共同进步下期预告:搞定C++指针;更新时间:待定......
  • LeetCode 算法:爬楼梯 c++
    原题链接......
  • Adobe Lightroom Classic LRC v13.5 下载及安装教程 (图像后期处理软件)
    前言AdobeLightroomClassic为您提供强大的一键式工具和高级控件,使您的照片看起来很棒。轻松整理桌面上的所有照片,并以多种方式共享。使用LightroomClassic,您需要具备所有桌面编辑工具,才能充分发挥照片的作用。增强色彩,使沉闷的镜头充满活力,去除分散注意力的物体,并拉直歪斜的镜......