当前位置: 首页 > news >正文

C++基础入门Day1

C++基础入门Day1

1.1 第一个C++程序

编写一个C++程序需要四个步骤

  • 创建项目
  • 创建文件
  • 编写代码
  • 运行程序

1.1.1 创建项目

VS2022

1.1.2 创建文件

main.cpp

1.1.3 编写代码

注意:编写时键盘必须调整成英文

  • 基本框架
#include <iostream>
using namespace std;
int main() {system("pause");return 0;
}
  • 第一个程序-HelloWorld:cout << "hello world" << endl;"
    • 双引号中所写的字符串是可以任意修改:cout << "hello c++" << endl;"
    • cout后跟随的内容可以打印在控制台上

1.2 注释

  • 在代码中添加一些说明和解释,方便自己和其他程序员阅读代码
    • 给程序员自己看的,不是给计算机看的
  • 语法格式
    • 单行注释:// 描述信息(一行)
    • 多行注释:/* 描述信息(多行) */
  • main函数
    • 错误示例:int main1() {}
#include <iostream>
using namespace std;// 1.单行注释/*
2.多行注释多行注释多行注释
*//*main是一个程序的入口每个程序必须有main函数有且仅有一个
*/int main() {// 向控制台输出hello worldcout << "hello world" << endl;system("pause");return 0;
}

1.3 变量

  • 给一段指定的内存空间起名,方便操作这段内存
  • 语法格式:数据类型 变量名 = 初始值;

1.3.1 内存的概念

内存是计算机中用于存储数据和程序的临时存储器件。它在计算机工作过程存储正在运行的程序和数据,以便CPU能够快速地访问和处理这些信息。

1.3.2 内存的表示

  1. 每段内存都有一段属于自己的地址编号,用十六进制的数字来表示
    • 数字10对应编号 0x1234
    • 缺点:100个数字要记录100个地址编号,太麻烦
  2. 用特定的名称表示内存
    • 数字10对应变量a,通过a就可以访问10(按照高中数学里的变量理解即可)
    • 语法格式:数据类型 变量名 = 初始值;
    • int a = 10;
#include <iostream>
using namespace std;
int main() {// 创建变量aint a = 10;cout << "a=" << a << endl;system("pause");return 0;
}

1.3.3* 内存扩展

1. 内存容量的单位

  • 位(Bit):是计算机内存和存储的最基本单位,代表一个二进制数字,0或1。
  • 字节(Byte):常用的内存单位,1字节等于8位。字节是最小的可寻址内存单位。
  • 千字节(KB,Kilobyte):1KB 约等于 1,000 字节(实际上在计算机科学中,经常按照 2 的幂来定义,即 1 K B = 2 10 = 1024 1KB = 2^{10} = 1024 1KB=210=1024 字节)。
  • 兆字节(MB,Megabyte):1MB 约等于 1,000,000 字节或 1,024 KB。
  • 吉字节(GB,Gigabyte):1GB 约等于 1,000,000,000 字节或 1,024 MB。
  • 太字节(TB,Terabyte):1TB 约等于 1,000,000,000,000 字节或 1,024 GB。

2. 地址的十六进制数表示

  • 内存地址:每个存储在内存中的字节都有一个唯一的地址,这些地址用于定位和访问内存中的数据。地址通常以十六进制数表示。具体来说,有以下几个原因:
  1. 简化表示: 十六进制数可以更简洁地表示二进制数。由于计算机的基础是二进制系统,而每四位二进制数(比特)刚好可以用一个十六进制数字来表示,这种对应关系简化了长二进制数串的表示。例如,二进制的1101 1010 1111 0001可以用十六进制的DAF1来表示,大大减少了表示的长度。

  2. 易于转换: 二进制与十六进制之间的转换非常直接,不需要复杂的计算。

  3. 节省空间: 在文档、代码和界面中使用十六进制可以节省空间。例如,用十六进制表示内存地址时,相比二进制需要的空间少得多,这在编程、系统设计文档和教程中尤其有用。

3. 进制转换

数制转换是在不同的进制之间转换数值的过程,常见的进制包括二进制(基数为2)、十进制(基数为10)和十六进制(基数为16)。下面将介绍这三种数制之间的转换方法。

二进制与十进制之间的转换
  • 二进制转十进制:将每个二进制位乘以其对应的2的幂次方值,然后将这些值相加得到十进制数。

    例如,二进制1011转换为十进制:
    1 × 2 3 + 0 × 2 2 + 1 × 2 1 + 1 × 2 0 = 8 + 0 + 2 + 1 = 11 1 \times 2^3 + 0 \times 2^2 + 1 \times 2^1 + 1 \times 2^0 = 8 + 0 + 2 + 1 = 11 1×23+0×22+1×21+1×20=8+0+2+1=11

  • 十进制转二进制:将十进制数不断除以2,记录每次的余数,直到商为0。然后将余数逆序排列得到二进制数。

    例如,十进制13转换为二进制:

    • 13 ÷ 2 = 6 13 \div 2 = 6 13÷2=6 余 1
    • 6 ÷ 2 = 3 6 \div 2 = 3 6÷2=3 余 0
    • 3 ÷ 2 = 1 3 \div 2 = 1 3÷2=1 余 1
    • 1 ÷ 2 = 0 1 \div 2 = 0 1÷2=0 余 1

    所以,13的二进制为1101

二进制与十六进制之间的转换
  • 二进制转十六进制:将二进制数每四位一组(从右向左)转换成对应的十六进制数。如果最左边的组不足四位,则在前面补零。

    例如,二进制11010111转换为十六进制:

    • 分为两组:11010111
    • 1101对应十六进制的D0111对应十六进制的7

    所以,二进制的11010111等于十六进制的D7

  • 十六进制转二进制:将每个十六进制位转换成对应的四位二进制数。

    例如,十六进制1A3转换为二进制:

    • 1对应二进制的0001
    • A(即十进制的10)对应二进制的1010
    • 3对应二进制的0011

    所以,十六进制的1A3等于二进制的000110100011

1.4 常量

  • 用于记录程序中不可更改的数据
    在C++中,定义常量的两种主要方式是使用#define预处理器指令和const关键字。这两种方式各有特点和用

1.4.1 定义常量的两种语法格式

1. #define宏常量
  • #define是一种预处理器指令,用于在编译之前替换文本。它不分配存储空间,仅仅在预处理阶段将所有的标识符替换为定义的值。其语法如下:`#define identifier value

  • identifier是要定义的常量名,value是与之关联的值。例如:#define PI 3.14159

  • 这行代码定义了一个常量PI,其值为3.14159。在程序中,每次使用PI时,预处理器都会将其替换为3.14159。

  • 使用#define定义的常量具有全局作用域,且没有类型,它们仅仅是文本替换,因此不能保证类型安全。

2. const修饰的变量
  • const关键字用于定义常量变量,即值不能被修改的变量。与#define不同,使用const定义的常量具有类型,编译器可以进行类型检查,从而提高程序的安全性。其语法如下:const type identifier = value;

  • type是常量的数据类型,identifier是常量的名称,value是常量的值。例如:const double Pi = 3.14159;

  • 这行代码定义了一个类型为double的常量Pi,其值为3.14159。使用const定义的常量遵循正常的作用域规则,这意味着它们可以是局部的或全局的,依赖于它们定义的位置。

3*.作用域简介

作用域指的是程序中定义的变量和函数可被访问的区域。根据变量或函数定义的位置,作用域决定了哪些部分的程序可以使用这些变量或函数,以及如何使用它们。作用域有助于限制变量生命周期和可见性,从而提高程序的可读性、可维护性和避免命名冲突。

  1. 局部作用域(Local Scope): 局部作用域通常指的是在函数或代码块(如if语句、循环等)内部定义的变量。这些变量只能在它们被定义的那个函数或代码块中被访问和修改,对外部是不可见的。

  2. 全局作用域(Global Scope): 在所有函数之外定义的变量拥有全局作用域,这意味着它们可以在程序的任何地方被访问和修改。全局变量的生命周期从它们被定义开始,直到程序结束。

#include <iostream>
using namespace std;// 使用#define定义常量
#define MAX_SIZE 100int main() {// 使用const定义常量const float PI = 3.14159f;cout << "The maximum size is: " << MAX_SIZE << endl;cout << "The value of Pi is: " << PI << endl;system("pause");return 0;
}

注意:常量一旦被定义以后便不可以修改,否则报错

const float PI = 3.14159f;
PI = 1;

1.5 关键字(标识符)

  • C++中预先保留的单词
  • 在命名变量和常量时,不能使用关键字,不需要记忆,有印象即可

基本关键字

关键字描述
int定义整数类型
float定义单精度浮点数类型
double定义双精度浮点数类型
char定义字符类型
void表示无返回值或空类型
bool定义布尔类型

控制流关键字

关键字描述
if条件语句,用于执行条件为真的代码块
elseif语句条件为假时执行的代码块
switch多分支选择语句
caseswitch语句中标识不同的分支
defaultswitch语句中的默认分支
while循环语句,当条件为真时执行代码块
do循环语句,先执行一次代码块,然后检查条件
for循环语句,用于迭代指定次数的代码块
break中断当前循环或switch语句
continue终止当前循环的迭代并开始下一次迭代
return从函数中返回值

数据类型关键字

关键字描述
struct定义结构体,可以包含不同类型的成员
class定义类,用于面向对象编程
enum定义枚举类型
union定义联合体,所有成员共享相同的内存空间
typedef为数据类型定义新的名称
auto自动推断变量类型
decltype返回表达式的类型

存储类关键字

关键字描述
static使局部变量在多次函数调用之间保持其值
extern声明变量或函数是在其他文件或模块中定义的
const定义只读变量,值不能被修改
volatile声明变量可能在程序的执行中被意外修改
register提示编译器将变量存储在寄存器中
mutable在类中声明的成员可以被const成员函数修改

类型修饰符关键字

关键字描述
const声明常量,值不能被修改
volatile声明变量可能在程序的执行中被意外修改
mutable在类中声明的成员可以被const成员函数修改

类型转换关键字

关键字描述
static_cast执行静态类型转换
dynamic_cast执行动态类型转换,用于运行时检查
const_cast从常量类型转换掉constvolatile
reinterpret_cast执行底层类型的转换
  • 错误示例
#include <iostream>
using namespace std;
int main() {// 不要用关键字给变量起名int double a = 10;system("pause");return 0;
}

1.6 标识符命名规则

在C++中,标识符是用来标识变量、函数、类、对象等程序实体的名称。标识符的命名规则是一套约定俗成的规定,以确保程序的可读性、可维护性和一致性。以下是C++中标识符的命名规则:

  1. 保留字:

    • 不允许使用C++中的保留字(关键字)作为标识符。
    • 例如,不要将关键字intclassif等用作标识符。
  2. 字符集规则:

    • 标识符由字母、数字和下划线组成
    • 标识符的第一个字符必须是字母或下划线
  3. 大小写敏感:

    • C++是大小写敏感的语言,因此myVariableMyVariable被视为两个不同的标识符。
  4. 规范命名风格:

    • 通常推荐使用有意义的名称,以提高代码的可读性。
    • 采用驼峰命名法(Camel Case)或下划线命名法(Snake Case)等命名规范。
      • 驼峰命名法myVariableName, calculateTotalAmount()
      • 下划线命名法my_variable_name, calculate_total_amount()

举例

  1. 保留字:

    // 不要使用关键字作为标识符
    int int = 10;     // 错误,使用了关键字 int
    double class = 3.14;  // 错误,使用了关键字 class
    
  2. 字符集规则:

    // 合法的标识符
    int myVariable;
    float my_float_variable;
    char _firstChar;// 非法的标识符
    int 123number;     // 错误,数字不能作为首字符
    double total@mount; // 错误,含有特殊字符 @
    
  3. 大小写敏感:

    // 大小写敏感
    int myVariable;
    int MyVariable; // 这两个是不同的变量
    
  4. 规范命名风格:

    • 驼峰命名法:

      int numberOfStudents;
      float averageGrade;
      void calculateTotalAmount();
      
    • 下划线命名法:

      int number_of_students;
      float average_grade;
      void calculate_total_amount();
      

相关文章:

C++基础入门Day1

C基础入门Day1 1.1 第一个C程序 编写一个C程序需要四个步骤 创建项目创建文件编写代码运行程序 1.1.1 创建项目 VS2022 1.1.2 创建文件 main.cpp 1.1.3 编写代码 注意&#xff1a;编写时键盘必须调整成英文 基本框架 #include <iostream> using namespace std…...

【高质量精品】2024美赛A题22页word版成品论文+数据+多版本前三问代码及代码讲解+前四问思路模型等(后续会更新)

一定要点击文末的卡片&#xff0c;进入后&#xff0c;即可获取完整资料后续参考论文!! 整体分析:这个题目是一个典型的生态系统建模问题&#xff0c;涉及到动物种群的性比例变化、资源可用性、环境因素、生态系统相互作用等多个方面。这个题目的难点在于如何建立一个合理的数学…...

Spark context stopped while waiting for backend

目录 报错信息 解决办法 解释 报错信息 Spark context stopped while waiting for backend 翻译过来就是 &#xff1a;Spark上下文在等待后端时停止 解决办法 通过在yarn-site.xml中添加如下配置项&#xff0c;并重启yarn&#xff0c;程序在 “–driver-memory 600m --e…...

保研机试算法训练个人记录笔记(三)

目录 基于范围的for循环 push_back return {it->second, i} 基于范围的for循环 for (const string& ageValue : age["Peter"]) 是C中的一种范围基于的for循环&#xff08;也称为基于范围的for循环&#xff09;&#xff0c;它用于遍历容器中的元素。在这个…...

2月6日作业

1.现有无序序列数组为23,24,12,5,33,5347&#xff0c;请使用以下排序实现编程 函数1:请使用冒泡排序实现升序排序 函数2:请使用简单选择排序实现升序排序 函数3:请使用快速排序实现升序排序 函数4:请使用插入排序实现升序排序 #include<stdio.h> #include<string.h&…...

rust给py写拓展如此简单

很久没写rust,主要是写业务逻辑实在用不上这高性能.不过惊奇发现rust和py结合的如此之好,记录下: 搞一个python环境,pip install maturin建立一个项目文件,cd进去 maturin init照着生成模版正常写rust,完毕后maturin develop,注意这个命令包括把拓展包安装到虚拟环境site pack…...

白嫖10款游戏加速器,一年都不用开会员!

过年期间你们是走亲串戚还是窝家玩游戏、追剧&#xff1f;相信很多小伙伴都不会放过这个难得的假期&#xff0c;肯定是会百忙之中来两把的&#xff0c;那么人一多玩游戏肯定就会拥堵&#xff0c;有延迟。解决延迟最好的办法就是用加速器&#xff0c;当你的网络比别人强时&#…...

Kafka SASL_SSL双重认证

文章目录 1. 背景2. 环境3. 操作步骤3.1 生成SSL证书3.2 配置zookeeper认证3.3 配置kafka安全认证3.4 使用kafka客户端进行验证3.5 使用Java端代码进行认证 1. 背景 kafka提供了多种安全认证机制&#xff0c;主要分为SASL和SSL两大类。 SASL&#xff1a; 是一种身份验证机制&…...

css新手教程

css新手教程 课程&#xff1a;14、盒子模型及边框使用_哔哩哔哩_bilibili 一.什么是CSS 1.什么是CSS Cascading Style Sheet 层叠样式表。 CSS&#xff1a;表现&#xff08;美化网页&#xff09; 字体&#xff0c;颜色&#xff0c;边距&#xff0c;高度&#xff0c;宽度&am…...

spring boot(2.4.x之前版本)和spring cloud项目中配置文件的作用

spring 版本以及相关的组件一直在变化&#xff0c;其中一些类或者功能在低版本中有&#xff0c;高版本中去掉了&#xff0c;有的新功能只在高版本有。 为了防止理解问题&#xff0c;pom.xml 版本依赖如下 <parent><groupId>org.springframework.boot</groupId…...

web前后端小坑记录

游戏服务器过年这段时间忙完了&#xff0c;好久没看web了&#xff0c;重温一下。发现竟然没有文章记录这些修BUG的过程&#xff0c;记录一下。 目录 如何处理F5刷新&#xff1f; 如何处理F5刷新&#xff1f; 后端应该发现路由不存在&#xff0c;直接返回打包好的index.html就…...

股票K线简介

股票K线&#xff08;K-Line&#xff09;是用于表示股票价格走势的图形&#xff0c;主要由四个关键价格点组成&#xff1a;开盘价、收盘价、最高价和最低价。K线图广泛应用于股票市场技术分析中&#xff0c;它提供了丰富的信息&#xff0c;帮助分析师和投资者理解市场的行情走势…...

路由器、路由器的构成、交换结构

目录 1 路由器 1.1 路由器的结构 “转发”和“路由选择”的区别 1.1.1 输入端口对线路上收到的分组的处理 1.1.2 输出端口将交换结构传送来的分组发送到线路 2.2 交换结构 2.2.1 通过存储器 2.2.2 通过总线 2.2.3 通过纵横交换结构 (crossbar switch fabric) 1 路由器…...

【Mysql】整理

Mysql整理与总结 整理Mysql的基本内容供回顾。 参考&#xff1a; [1]. 掘金.MySQL三大日志(binlog,redolog,undolog)详解 [2]. Javaguide.MySQL三大日志(binlog、redo log和undo log)详解...

项目02《游戏-08-开发》Unity3D

基于 项目02《游戏-07-开发》Unity3D &#xff0c; 本次任务做物品相互与详情的功能&#xff0c; 首先要做 点击相应&#xff0c; 接下来用接口实现点击相应事件&#xff0c;具体到代码中&#xff0c;我们找到需要响应鼠标事件的对象&#xff0c; 双击PackageCell…...

【数据库原理及应用】简答题归纳总结

第一章 数据库概论 1.人工管理阶段数据管理的特点&#xff1a; &#xff08;1&#xff09;数据不保存在机器中 &#xff08;2&#xff09;无专用的软件对数据进行管理 &#xff08;3&#xff09;只有程序的概念&#xff0c;没有文件的概念 &#xff08;4&#xff09;数据面向程…...

通过无线打通两个路由器

通过无线打通两个路由器 上网向导无线连接 配置比较简单&#xff0c;有些路由器支持有些不支持&#xff0c;支持的大致就是下面的方法&#xff0c;不过不同型号面板不一样&#xff0c;这里主要学习方法&#xff0c;所以不做路由器型号介绍。 重要的事情说三遍&#xff1a;学习要…...

idea 配置文件,中文出现乱码如何解决

在进行 spring 项目开发时&#xff0c;项目中有 application.properties/application.yml 等配置文件&#xff0c;在配置文件中使用中文注解时可能会出现乱码的情况&#xff0c;如下&#xff1a; 这是因为 idea 配置文件的编码和其他文件的不同&#xff0c;我们需要修改配置文件…...

网络协议梳理

1 引言 在计算机网络中要做到有条不紊地交换数据&#xff0c;就必须遵守一些事先约定好的规则。这些规则明确规定了所交换的数据的格式以及有关的同步问题。这里所说的同步不是狭义的&#xff08;即同频或同频同相&#xff09;而是广义的&#xff0c;即在一定的条件下应当发生什…...

14. 【Linux教程】文件压缩与解压

文件压缩与解压 前面小节介绍了如何对文件和目录删除、移动操作&#xff0c;本小节介绍如何使用命令对文件和目录进行压缩与解压操作&#xff0c;常见的压缩包格式有 .bz2、.Z、.gz、.zip、.xz&#xff0c;压缩之后的文件或目录占用更少的空间。 1. tar 命令介绍 下面列举 ta…...

ES6从入门到精通:前言

ES6简介 ES6&#xff08;ECMAScript 2015&#xff09;是JavaScript语言的重大更新&#xff0c;引入了许多新特性&#xff0c;包括语法糖、新数据类型、模块化支持等&#xff0c;显著提升了开发效率和代码可维护性。 核心知识点概览 变量声明 let 和 const 取代 var&#xf…...

利用ngx_stream_return_module构建简易 TCP/UDP 响应网关

一、模块概述 ngx_stream_return_module 提供了一个极简的指令&#xff1a; return <value>;在收到客户端连接后&#xff0c;立即将 <value> 写回并关闭连接。<value> 支持内嵌文本和内置变量&#xff08;如 $time_iso8601、$remote_addr 等&#xff09;&a…...

Rust 开发环境搭建

环境搭建 1、开发工具RustRover 或者vs code 2、Cygwin64 安装 https://cygwin.com/install.html 在工具终端执行&#xff1a; rustup toolchain install stable-x86_64-pc-windows-gnu rustup default stable-x86_64-pc-windows-gnu ​ 2、Hello World fn main() { println…...

嵌入式学习之系统编程(九)OSI模型、TCP/IP模型、UDP协议网络相关编程(6.3)

目录 一、网络编程--OSI模型 二、网络编程--TCP/IP模型 三、网络接口 四、UDP网络相关编程及主要函数 ​编辑​编辑 UDP的特征 socke函数 bind函数 recvfrom函数&#xff08;接收函数&#xff09; sendto函数&#xff08;发送函数&#xff09; 五、网络编程之 UDP 用…...

ZYNQ学习记录FPGA(一)ZYNQ简介

一、知识准备 1.一些术语,缩写和概念&#xff1a; 1&#xff09;ZYNQ全称&#xff1a;ZYNQ7000 All Pgrammable SoC 2&#xff09;SoC:system on chips(片上系统)&#xff0c;对比集成电路的SoB&#xff08;system on board&#xff09; 3&#xff09;ARM&#xff1a;处理器…...

软件工程 期末复习

瀑布模型&#xff1a;计划 螺旋模型&#xff1a;风险低 原型模型: 用户反馈 喷泉模型:代码复用 高内聚 低耦合&#xff1a;模块内部功能紧密 模块之间依赖程度小 高内聚&#xff1a;指的是一个模块内部的功能应该紧密相关。换句话说&#xff0c;一个模块应当只实现单一的功能…...

《信号与系统》第 6 章 信号与系统的时域和频域特性

目录 6.0 引言 6.1 傅里叶变换的模和相位表示 6.2 线性时不变系统频率响应的模和相位表示 6.2.1 线性与非线性相位 6.2.2 群时延 6.2.3 对数模和相位图 6.3 理想频率选择性滤波器的时域特性 6.4 非理想滤波器的时域和频域特性讨论 6.5 一阶与二阶连续时间系统 6.5.1 …...

React核心概念:State是什么?如何用useState管理组件自己的数据?

系列回顾&#xff1a; 在上一篇《React入门第一步》中&#xff0c;我们已经成功创建并运行了第一个React项目。我们学会了用Vite初始化项目&#xff0c;并修改了App.jsx组件&#xff0c;让页面显示出我们想要的文字。但是&#xff0c;那个页面是“死”的&#xff0c;它只是静态…...

深入解析光敏传感技术:嵌入式仿真平台如何重塑电子工程教学

一、光敏传感技术的物理本质与系统级实现挑战 光敏电阻作为经典的光电传感器件&#xff0c;其工作原理根植于半导体材料的光电导效应。当入射光子能量超过材料带隙宽度时&#xff0c;价带电子受激发跃迁至导带&#xff0c;形成电子-空穴对&#xff0c;导致材料电导率显著提升。…...

Yii2项目自动向GitLab上报Bug

Yii2 项目自动上报Bug 原理 yii2在程序报错时, 会执行指定action, 通过重写ErrorAction, 实现Bug自动提交至GitLab的issue 步骤 配置SiteController中的actions方法 public function actions(){return [error > [class > app\helpers\web\ErrorAction,],];}重写Error…...