十四天学会C++之第一天(入门和基本语法)

news2024/11/26 9:38:23

在这里插入图片描述

C++的起源和历史

C++诞生于20世纪80年代初,它的创造者是计算机科学家Bjarne Stroustrup。当时,Stroustrup在贝尔实验室工作,他希望为C语言添加一些功能,以便更好地支持系统开发。这个愿望促使他创建了C++。

C++的名字来源于它的基因,其中的"C"代表了C语言,而"++"表示C语言的一个增强版本。这个名字反映了C++的初衷,即在C语言的基础上引入更多的功能和特性。

C++的发展历程非常丰富多彩。1983年,第一个C++编译器问世。1985年,Stroustrup发表了他的博士论文,详细介绍了C++的设计和理念。接着,C++开始逐渐在计算机科学领域广泛传播开来。

C++的主要特点

C++的魅力在于它的多样性和灵活性。以下是C++的主要特点:

  • 面向对象编程(OOP):C++是一门强大的面向对象编程语言。它支持面向对象的核心概念,如封装、继承和多态性。这使得C++成为构建复杂软件系统的理想选择。

  • 封装、继承、多态性:C++鼓励良好的代码组织,通过类和对象实现封装,通过继承创建新的类,通过多态性支持灵活的对象行为。

  • 标准模板库(STL):C++提供了强大的STL,它包括许多容器和算法,可以大大简化数据结构和算法的实现。

  • 高性能:C++的性能一直是其吸引力之一。它允许直接内存操作,使得C++程序可以高效地执行。

  • 跨平台性:C++可以在各种操作系统上运行,这使得它成为跨平台开发的首选语言之一。

C++程序的结构

一个典型的C++程序由多个部分组成,这些部分包括头文件引入、全局声明、main函数、函数定义等。

#include <iostream>  // 引入头文件

// 全局声明

int main() {
    // main函数

    // 代码逻辑

    return 0;  // 返回值
}

// 函数定义

编写一个简单的Hello World程序

#include <iostream>  // 引入头文件

int main() {
    // main函数

    // 使用cout输出Hello World到控制台
    std::cout << "Hello, World!" << std::endl;

    return 0;  // 返回值
}

运行结果:在这里插入图片描述

程序解释

  • #include <iostream>:这是一个头文件引入的示例,它允许我们使用C++标准库中的输入输出功能。在C++中,头文件用于包含预定义的函数和类,以便我们可以使用它们。

  • int main():这是C++程序的入口点,也就是main函数。在这个函数内部,我们编写程序的主要逻辑。main函数的返回值类型是整数(int),通常用于指示程序的执行状态。如果返回0,表示程序正常结束。

  • std::cout << "Hello, World!" << std::endl;:这是一个输出语句,使用std::cout对象将字符串"Hello, World!"输出到控制台。<< 运算符用于将数据插入到输出流中,std::endl表示换行。

这个Hello World程序很简单,它演示了C++程序的基本结构和语法。我们可以在main函数内部编写更多的代码来实现各种功能。

基本数据类型

C++提供了多种基本数据类型,用于存储不同种类的数据。以下是一些常见的基本数据类型:

  1. 整数类型(int):用于存储整数值,如-1、0、1、2等。
  2. 浮点类型(float和double):用于存储带有小数点的数值,如3.14、0.5等。
  3. 字符类型(char):用于存储单个字符,如’A’、'B’等。
  4. 布尔类型(bool):用于存储布尔值,只有两个可能的值,true和false。

声明和初始化变量

在C++中,我们使用变量来存储和操作数据。声明变量意味着我们在内存中为它们分配了存储空间。

int age;            // 声明一个整数变量
float price = 9.99; // 声明并初始化一个浮点数变量
char grade = 'A';   // 声明并初始化一个字符变量
bool isStudent = true; // 声明并初始化一个布尔变量

在上面的示例中,我们声明了四个不同类型的变量:age(整数)、price(浮点数)、grade(字符)和isStudent(布尔)。

变量的命名规则和标识符

在C++中,变量名必须遵循一些命名规则和标识符规定:

  • 变量名可以包含字母、数字和下划线。
  • 变量名必须以字母或下划线开头,不能以数字开头。
  • 变量名区分大小写,这意味着myVarmyvar被视为不同的变量。
  • 避免使用C++关键字作为变量名,如intfloatif等。

有效的变量名示例:myVarageuser_name。良好的命名习惯可以使代码更具可读性和维护性。

使用cin实现用户输入数据

在C++中,我们使用cin来接收用户输入的数据。cin是C++标准库中的输入流对象,它可以读取用户从键盘输入的信息。

#include <iostream>
using namespace std;

int main() {
    string name;

    cout << "请输入您的姓名: ";
    cin >> name;

    cout << "欢迎您," << name << "!" << endl;

    return 0;
}

运行结果:在这里插入图片描述

在示例中,我们首先声明了一个字符串变量name来存储用户的姓名。然后,我们使用cout输出流对象向用户显示一条提示消息,要求用户输入姓名。接下来,使用cin输入流对象接收用户的输入,并将其存储在name变量中。最后,我们使用cout再次输出欢迎消息,包括用户的姓名。

输入流和输出流的概念

在C++中,cincout分别是输入流和输出流的实例。流是一种数据传输方式,它可以将数据从一个地方传输到另一个地方。输入流用于从外部(例如键盘)读取数据,而输出流用于向外部(例如屏幕)写入数据。

流的概念使我们能够以一种连贯和一致的方式进行输入和输出操作,无论是与用户交互还是与文件进行数据交换。

C++中的运算符

C++提供了多种类型的运算符,用于执行各种操作。以下是一些常见的运算符:

  1. 算术运算符:用于执行基本的数学运算,例如加法、减法、乘法和除法。
int a = 10;
int b = 5;
int sum = a + b; // 加法
int diff = a - b; // 减法
int product = a * b; // 乘法
int quotient = a / b; // 除法
  1. 关系运算符:用于比较两个值之间的关系,返回布尔结果(真或假)。
int x = 10;
int y = 5;
bool isEqual = (x == y); // 等于
bool isNotEqual = (x != y); // 不等于
bool isGreater = (x > y); // 大于
bool isLess = (x < y); // 小于
  1. 逻辑运算符:用于执行逻辑操作,例如逻辑与、逻辑或和逻辑非。
bool condition1 = true;
bool condition2 = false;
bool resultAnd = (condition1 && condition2); // 逻辑与
bool resultOr = (condition1 || condition2); // 逻辑或
bool resultNot = !condition1; // 逻辑非

表达式的构建和求值

在C++中,表达式是由运算符和操作数组成的组合,用于执行特定的计算。表达式可以包含变量、常量和函数调用。

int a = 10;
int b = 5;
int result = (a + b) * 2; // 表达式由运算符和操作数构成

在上面的示例中,表达式(a + b) * 2包含了加法运算符、乘法运算符和操作数a、b、2。

表达式的求值是根据运算符的优先级和结合性来执行的。C++有一套严格的规则来确定表达式中各个运算符的执行顺序。

数学运算示例

简单的数学运算示例来加深对表达式的理解:

#include <iostream>
using namespace std;

int main() {
    int a = 10;
    int b = 5;

    // 加法和乘法表达式
    int sum = a + b;
    int product = a * b;

    // 输出结果
    cout << "Sum: " << sum << endl;
    cout << "Product: " << product << endl;

    return 0;
}

运行结果:在这里插入图片描述

在示例中,我们计算了两个整数的和and积,并使用cout输出流将结果显示在屏幕上。

基本的控制结构(if语句,循环)

条件语句 - if和if-else

条件语句允许根据条件的真假执行不同的代码块。if语句的基本用法:

if (条件) {
    // 如果条件为真,执行这里的代码块
} 

使用if语句来判断一个数字是否为正数:

#include <iostream>
using namespace std;

int main() {
    int number;
    cout << "请输入一个整数:";
    cin >> number;

    if (number > 0) {
        cout << "这是一个正数" << endl;
    }

    return 0;
}

运行结果:在这里插入图片描述

在示例中,如果用户输入的数字大于0,将输出"这是一个正数"。

if-else语句允许我们在条件为假时执行另一段代码块:

if (条件) {
    // 如果条件为真,执行这里的代码块
} else {
    // 如果条件为假,执行这里的代码块
}

下面是一个判断数字奇偶性:

#include <iostream>
using namespace std;

int main() {
    int number;
    cout << "请输入一个整数:";
    cin >> number;

    if (number % 2 == 0) {
        cout << "这是一个偶数" << endl;
    } else {
        cout << "这是一个奇数" << endl;
    }

    return 0;
}

运行结果:在这里插入图片描述

循环结构 - for和while

循环结构允许我们重复执行一段代码,直到满足特定条件为止。for循环的基本用法:

for (初始化; 条件; 步进) {
    // 循环体
}

使用for循环来打印从1到10的数字:

#include <iostream>
using namespace std;

int main() {
    for (int i = 1; i <= 10; i++) {
        cout << i << " ";
    }
    cout << endl;

    return 0;
}

运行结果:
在这里插入图片描述

while循环的用法:

while (条件) {
    // 循环体
}

使用while循环计算数字的阶乘:

#include <iostream>
using namespace std;

int main() {
    int n;
    cout << "请输入一个正整数:";
    cin >> n;

    int factorial = 1;
    while (n > 0) {
        factorial *= n;
        n--;
    }

    cout << "阶乘结果为:" << factorial << endl;

    return 0;
}

运行结果:
在这里插入图片描述

if语句用于根据条件执行不同的代码块,而循环结构允许我们重复执行代码。

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

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

相关文章

检索qpython文件夹下的.py,将文件复制单独文件夹并给出进度条

基本任务 检索qpython文件夹下的.py&#xff0c;将文件复制单独文件夹并给出进度条详细说明 首先导入了os和shutil模块&#xff0c;它们分别用于进行文件、文件夹操作和复制文件操作。 然后定义了源文件夹路径和目标文件夹路径。源文件夹路径指定了需要遍历的文件夹&#xff…

C语言刷题(Day1)

前言 本章我们带来几个经典得C语言练习题。 不要认为之前学过C语言&#xff0c;刷过这些题就不愿意再做题了。对待技术&#xff0c;我们永远要怀以一种空杯心态。 温故而知新&#xff0c;可以为师矣。 老师说&#xff0c;每道题都要尝试用不同得解法&#xff0c;去思考更多的…

动态规划算法(2)--最大子段和与最长公共子序列

目录 一、最大子段和 1、什么是最大子段和 2、暴力枚举 3、分治法 4、动态规划 二、最长公共子序列 1、什么是最长公共子序列 2、暴力枚举法 3、动态规划法 4、完整代码 一、最大子段和 1、什么是最大子段和 子段和就是数组中任意连续的一段序列的和&#xff0c;而…

Django之模板

一&#xff09;模板&#xff08;T&#xff09; 什么时候会使用模板呢&#xff1f; 仅对于Django这个框架来说&#xff0c;因为其是默认前后端不分离的框架&#xff08;前后端不分离值开发时前后端的代码在一起&#xff0c;不通过接口的方式连接&#xff0c;通过模板渲染的方式…

七大基于比较的排序算法(JAVA)

目录 冒泡排序 优化&#xff1a; 堆排序 插入排序 希尔排序 归并排序 快速排序 优化 选择排序 排序算法的稳定性&#xff1a; 大小相同的元素在排序前后相对位置相同就称其为稳定的排序。 注&#xff1a;一个本身就是稳定的排序 是可以实现为不稳定的排序的 &#x…

JavaSE学习之--抽象类,接口,内部类

&#x1f495;"没有眼泪我们就会迷路&#xff0c;彻底变成石头&#xff0c;我们的心会变成冰凌&#xff0c;吻会变成冰块。"&#x1f495; 作者&#xff1a;Mylvzi 文章主要内容&#xff1a;JavaSE学习之--抽象类&#xff0c;接口&#xff0c;内部类 目录 一.抽象…

【牛客网】OR59 字符串中找出连续最长的数字串

题目 思路 创建两个字符串 temp 和 ret 创建指针i用来遍历字符串通过i遍历字符串,如果遇到数字则将这个数组加到字符串temp中 i,如果遇到字母,则判断temp字符串的长度和ret字符串的长度,如果temp<ret则说明这个字符串不是要的字符串,如果temp>ret则说明此时temp字符串是…

线性表的链式存储结构——链表

一、顺序表优缺点 优点&#xff1a;我们知道顺序表结构简单&#xff0c;便于随机访问表中任一元素&#xff1b; 缺点&#xff1a;顺序存储结构不利于插入和删除&#xff0c;不利于扩充&#xff0c;也容易造成空间浪费。 二、链表的定义 ①&#xff1a;概念&#xff1a; 用一组任…

springmvc-页面跳转表单标签其他标签tomcat控制台中文乱码问题

1. WEB-INF下页面跳转 容器启动后&#xff0c;如何默认显示web-inf目录下的系统首页。 2. ModelAttribute来注解非请求处理方法 用途&#xff1a;预加载数据&#xff0c;会在每个RequestMapping方法执行之前调用。 特点&#xff1a;无需返回视图&#xff0c;返回类型void 示例…

【计算机网络黑皮书】应用层

【事先声明】 这是对于中科大的计算机网络的网课的学习笔记&#xff0c;感谢郑烇老师的无偿分享 书籍是《计算机网络&#xff08;自顶向下方法 第6版&#xff09;》 需要的可以私信我&#xff0c;无偿分享&#xff0c;课程简介下也有 课程连接 目录 应用层网络应用的原理应用架…

[BJDCTF2020]The mystery of ip

打开环境 点击flag&#xff0c;提示ip&#xff0c;这里确实就比较容易联想到x-forwarded-for 点击hint 这个好像没啥用 使用bp抓包 添加请求头 X-Forwarded-For:1 试一下 发现ip可控 后来查了发现 PHP可能存在Twig模版注入漏洞 参考https://www.cnblogs.com/zzjdbk/p/13…

Scala第十七章节

Scala第十七章节 scala总目录 文档资料下载 章节目标 了解集合的相关概念掌握Traversable集合的用法掌握随机学生序列案例 1. 集合 1.1 概述 但凡了解过编程的人都知道程序 算法 数据结构这句话, 它是由著名的瑞士计算机科学家尼古拉斯沃斯提出来的, 而他也是1984年图灵…

ADO连接Access的前期绑定方法实例(下)

【分享成果&#xff0c;随喜正能量】眾生多悲苦&#xff0c;發願‬菩提心。願今天所有聽見我、看見我、憶念我的眾生&#xff0c;因我心而‬生喜悅&#xff01;除消身心的痛苦&#xff01;種下脫解‬的種子&#xff01;願我等‬身心念力所及之處一切眾切‬生因佛得度&#xff0…

【AI视野·今日CV 计算机视觉论文速览 第258期】Mon, 2 Oct 2023

AI视野今日CS.CV 计算机视觉论文速览 Mon, 2 Oct 2023 (showing first 100 of 112 entries) Totally 100 papers &#x1f449;上期速览✈更多精彩请移步主页 Daily Computer Vision Papers Multi-task View Synthesis with Neural Radiance Fields Authors Shuhong Zheng, Zh…

Vue的模板语法

Vue的模板语法 Vue 使用一种基于 HTML 的模板语法&#xff0c;使我们能够声明式地将其组件实例的数据绑定到呈现的 DOM 上。所有的 Vue 模板都是语法层面合法的 HTML&#xff0c;可以被符合规范的浏览器和 HTML 解析器解析。 测试准备 为了方便测试&#xff0c;先将vue-base项…

【AI视野·今日Robot 机器人论文速览 第四十五期】Mon, 2 Oct 2023

AI视野今日CS.Robotics 机器人学论文速览 Mon, 2 Oct 2023 Totally 42 papers &#x1f449;上期速览✈更多精彩请移步主页 Daily Robotics Papers Learning Decentralized Flocking Controllers with Spatio-Temporal Graph Neural Network Authors Siji Chen, Yanshen Sun, …

守护进程解析

什么是守护进程&#xff1f; - 知乎 什么是守护进程&#xff1a;生存期长的一种进程&#xff0c;没有控制终端。它们常常在系统引导装入时启动&#xff0c;仅在系统关闭时才终止。 进程组 &#xff1a; 每个进程除了有一个进程ID之外&#xff0c;还属于一个进程组进程组是一…

【已解决】opencv 交叉编译 ffmpeg选项始终为NO

一、opencv 交叉编译没有 ffmpeg &#xff0c;会导致视频打不开 在交叉编译时候&#xff0c;发现在 pc 端能用 opencv 打开的视频&#xff0c;但是在 rv1126 上打不开。在网上查了很久&#xff0c;原因可能是 交叉编译过程 ffmpeg 造成的。之前 ffmpeg 是直接用 apt 安装的&am…

LeetCode 周赛上分之旅 #49 再探内向基环树

⭐️ 本文已收录到 AndroidFamily&#xff0c;技术和职场问题&#xff0c;请关注公众号 [彭旭锐] 和 BaguTree Pro 知识星球提问。 学习数据结构与算法的关键在于掌握问题背后的算法思维框架&#xff0c;你的思考越抽象&#xff0c;它能覆盖的问题域就越广&#xff0c;理解难度…