目录
1、C++程序创建步骤(环境Visual Studio 2019)
前言:学习资料参考自《C++ Primer Plus(第6版)中文版》和B站视频《C++教程从0到1入门编程》黑马程序员匠心之作|C++教程从0到1入门编程,学习编程不再难_哔哩哔哩_bilibili
1、C++程序创建步骤(环境Visual Studio 2019)
- 打开软件
- 创建项目:选择Visual C++空项目
- 创文件:选择.cpp文件
- 编写和运行代码,以下是简单的Hello world程序例子:
#include<iostram>
using namespace std;
int main()
{
cout<<"Hello world!"<<endl;
return 0;
}
2、C++的注释
- 单行注释:使用//(双斜线),双斜线之后的整行内容为注释
- 多行注释:使用/**/组合,星号*中间的内容为注释
- 快捷键:VS2019中,注释Ctrl+K+C,取消注释Ctrl+K+U
int main() { cout<<"你好"<<endl;//双斜线后面的整行为注释 /* 星号*中间的是 多行注释 */ return 0; }
3、变量的作用
- 存在意义:方便管理内存空间
- C++定义变量的语法:数据类型 变量名=初始值;
int a=10;//创建一个int整型变量,并赋初始值 short b=2,c=3;//同时创建多个short整型变量 int d;//创建时可省略初始值 d=10;//赋值
4、常量的作用
- 作用:记录程序中不可更改的数据。当常量被后续代码修改,编译器会报错。
- 定义常量的两种格式
- (1)#define 宏常量 初始值(通常在文件开头定义)
#define day 7//后面不需要分号
- (2)用const修饰变量(通常在写在函数体内部)
const int month=12;
- (1)#define 宏常量 初始值(通常在文件开头定义)
5、C++的关键字
- 概念:关键字是C++预留的单词(标识符),具有特定的功能
- 意义:在定义变量时,不能将它们用作变量名
- 常见的关键字如:if,return,double,int,struct,class,void,case,catch,new,virtual,whlile等
C++的关键字
asm continue extern int volatile nVint; register switch union auto default false long reinterpret_cast template unsigned bool delete float mutable return this using break do for namespace short throw virtual case double friend new signed true void catch else goto operator sizeof try volatile char enum if private static typedef wchar_t class explicit inline protected static_cast typeid while const export int public struct typename
6、C++的标识符命名规则(变量、常量、函数、类取名规则)
- 标识符不能有关键字
- 只能由字母、数字和下划线组成
- 第1个字符只能是字母或下划线,不能用数字开头
- 标识符中字母区分大小写
int a_1;//只能由字母、数字或下划线组成 int a1,A1;//字母区分大小写 int _a1;//开头只能字母或下划线开头
7、常见的数据类型
数据类型的作用:给变量分配合适的内存空间。
1)整型 int,short,long和long long
- 整型 int:4字节,范围:(-2^31)~(2^31-1)
- 短整型 short:2字节,范围:(-2^15)~(2^15-1)
- 长整型 long:
- 系统32位:4字节,范围:(-2^31)~(2^31-1)
- 系统64位:8字节,范围:(-2^63)~(2^63-1)
- 长长整型:8字节,范围:(-2^63)~(2^63-1)
int a1=2147483647; short a2=32767; long a3=2147483647; long long a4=9223372036854780000;
2)实型(浮点型) float和double
- 单精度 float :4字节,7位有效数字(含整数部分)
- 双精度 double:8字节,15~16位有效数字(含整数部分)
- 注意:用cout显示最多能看到6位有效数字。数字后不加f会默认成双精度
float f1=3.14f;//不加f会默认成双精度 double d1=3.14; float f2=3e2;//科学计数法,3*(10^2),300 float f3=3e-2;//科学计数法,3*(10^-2),0.03
3)布尔型 bool
- 作用:代表真或假的值,占1个字节大小
- 布尔值 true:真,本质是1
- 布尔值 false:假,本质是0
#include<iostream> bool flag1=true;//真 bool flag2=false;//假 cout<<flag1<<endl;//显示1 cout<<flag2<<endl;//显示0
4)字符型 char
- 作用:显示单个字符,占1个字节,储存相应的ASCII码(A~z:65~90,a~z:97~122)
- 注意:用单引号,只能放1个字符
#include<iostream> char ch='a'; cout<<(int)ch<<endl;//显示对应的ASCII码97
5)字符串型 cha数组和string
- 作用表示一串字符
- C风格 char数组,用双引号(区别于char字符用单引号)
- C++风格 string,需引入头文件#include<string>
#include<iostream> #include<string>//用于生成string变量 char str1[]="hello world";//char数组 string str2="hello world";//string要引入头文件#include<string> cout<<str1<<endl;//显示hello world cout<<str2<<endl;//显示hello world
6)转义字符
- 作用:表示一些不能显示的字符,如换行、回车、制表符
#include<iostream> cout<<"aaa\thello\tworld"<<endl;//\t显示制表符 aaa hello world
C++的转义字符 字符名称 C++代码 ASCII码(十进制) 换行符 \n 10 水平制表符 \t 9 垂直制表符 \v 11 退格 \b 8 回车 \r 13 振铃(系统响一下) \a 7 反斜杠\ \\ 92 问号 \? 63 单引号 \' 39 双引号 \'' 34
6)查看数据大小 sizeof关键字
- 作用:统计数据类型的大小
#include<iostream> int a=1; cout<<"int类型所占空间大小"<<sizeof(int)<<endl; cout<<"变量a所占空间大小"<<sizeof(a)<<endl;
8、数据的输入输出
- 输入:cin 从键盘获取数据
- 输出:cout 显示数据
- 注意:需要声明头文件#include<iostream>
#include<iostream>//输入输出流的头文件 #include<string> //整型 int a=0; cin>>a;//从键盘获取数据到变量a cout<<a<<endl;//显示变量a //实型 float f=3.14f; cin>>f; cout<<f<<endl; //char字符 char ch='a'; cin>>ch; cout<<ch<<endl; //string字符串 strinig str="hello"; cin>>str; cout<<str<<endl; //布尔型 bool flag=false; cin>>flag; cout<<flag<<endl;
9、运算符
- 作用:用于执行代码的运算
类型 | 作用 | 符号 |
---|---|---|
算术运算符 | 四则运算 | +、-、*、/、%、++、-- |
赋值运算符 | 运算和赋值给变量 | +=、-=、*=、 /=、%= |
比较运算符 | 比较表达式,返回真值或假值 | ==、!=、<、>、<=、>= |
逻辑运算符 | 将表达式逻辑处理,返回真值或假值 | 非 !、与 &&、或 || |
- 算数运算符:加减乘除、前/后置递增、前/后置递减
前置 后置 递增 b=++a:
先让a进行++操作,再赋值给b
b=a++:
先b=a,再让a进行++操作
递减 b=--a:
先让a进行--操作,再赋值给b
b=a--+:
先b=a,再让a进行--+操作
#include<iostream> int a=1,b=2; cout<<a+b<<endl; cout<<a-b<<endl; cout<<a*b<<endl; cout<<a/b<<endl;//整型结果相除,只保留整数 cout<<a%b<<endl;//取模,求余数 //递增 //前后置相同点:运算后变量自身都加一 int a1=10; int b1=10; ++a1;//前置递增 b1++;//后置递增 cout<<a1<<endl; cout<<b1<<endl;//前后置,两者都一样 //前后置不同点:赋值给另一个变量的值不同 //前置:先赋值给另一个变量,自身再加1 //后置:先自身加1,再赋值给另一个变量 int a2=10; int b2=10; int c=++a2;//前置:相当于a2=a2+1,c=a2 int d=b2++;//后置:递增d=b2,b2=b2+1 cout<<c<<endl;//显示11 cout<<d<<endl;//显示10;
- 赋值运算符
int a=10; a+=2;//相当于a=a+2 a-=2;//相当于a=a-2 a*=2;//相当于a=a*2 a/=2;//相当于a=a/2 a%=2;//相当于a=a%2
- 比较运算符
#include<iostream> int a=10; int b=20; cout<<(a==b)<<endl;//显示0 cout<<(a!=b)<<endl;//显示1 cout<<(a>b)<<endl;//显示0 cout<<(a<b)<<endl;//显示1 cout<<(a>=b)<<endl;//显示0 cout<<(a<=b)<<endl;//显示1
- 逻辑运算符
#include<iostream>
int a=10,b=10,c=0;
cout<<!a<<endl;//显示0
cout<<!!a<<endl;//显示1
cout<<(a&&b)<<endl;//显示1
cout<<(a&&c)<<endl;//显示0
cout<<(a||b)<<endl;//显示0
10、数组
数组概念:一个存放相同类型的数据类型的集合。
- 特点1:数组的每个数据元素都相同
- 特点2:数组是由连续的内存位置组成
- 注意:下标从0开始
一维数组的定义方式:
- 方式1.数据类型 数组名[数组长度]
- 方式2.数据类型 数组名[数组长度]={数据1,数据2,数据3,.......}
- 方式3.数据类型 数组名[]={数据1,数据2,数据3,.......}
#include<iostream>
int a[5];//定义方式1
int b[5]={10,20,30,40,50};//定义方式2
int c[]={1,2,3,4,5,6,7,8};//定义方式3
a[4]=10;//赋值
b[4]=60;
c[7]=9;
一维数组名的用法:
- 1.统计整个数组在内存的长度
- 2.获取数组在内存的首地址
#include<iostream> int arr[5]={1,2,3,4,5}; cout<<sizeof(arr)<<endl;//显示数组内存大小 cout<<arr<<endl;//显示数组地址 cout<<sizeof(arr[0])<<endl;//显示1个元素的内存大小 cout<<sizeof(arr)/sizeof(arr[0])<<endl;//显示元素个数
二维数组:
二维数组的特点:在一维数组基础上多一个维度
二维数组格式:
- 方式1.数据类型 数组名[行数][列数]
- 方式2.数据类型 数组名[行][列]={{数据1,数据2,.....},......,{数据n1,数据n2,.....}}
- 方式3.数据类型 数组名[行][列]={数据1,数据2,数据3,数据4,......}
- 方式4.数据类型 数组名[][列]={数据1,数据2,数据3,数据4,......}
//定义方式1 int arr[2][3]; //定义方式2,比较直观 int b[2][3]= { {1,2,3}, {4,5,6} }; //定义方式3 int c[2][3]= { 1,2,3,4,5,6 }; //定义方式4,忽略行数时,系统会根据数据自动定义行数 int d[][3]= { 1,2,3,4,5,6 };
二维数组名用法
- 1.查看占用内存空间大小
- 2.查看二维数组首地址
#include<iostream> int arr[2][3]= { {1,2,3}, {4,5,6} }; cout<<sizeof(arr)<<endl;//查看数组的内存大小 cout<<sizeof(arr[0])<<endl;//查看数组一行的内存大小 cout<<sizeof(arr[0][0])<<endl;//查看1个元素的内存大小 cout<<sizeof(arr)/sizeof(arr[0])<<endl;// 查看行数 cout<<sizeof(arr[0])/sizeof(arr[0][0])<<endl;//查看列数
11、程序的流程结构
一、选择结构
1)if选择:if-elseif-else
格式:
if(条件1){满足条件1时的执行内容}
else if(条件2){满足条件2时的执行内容}
else if(条件3){满足条件3时的执行内容}
else {都不满足前面条件时的执行内容}
#include<iostream>
int main()
{
int a=0;
cin>>a;
//开始if判断
if(a>600)//条件1
{
cout<<">600"<<endl;
}
else if(a>500)//条件2
{
cout<<">500"<<endl;
}
else if(a>400)//条件3
{
cout<<">400"<<endl;
}
else if(a>400)//都不满足的情况下
{
cout<<">400"<<endl;
}
return 0;
}
2)三目运算符 ?:
格式:判断条件?真的返回内容:假的返回内容
int a=0,b=20,c=0;//初始化变量
c=(a>b?a:b);//条件为假,返回b,故C=20
(a<b?a:b)=100;//条件为真,返回a,故a=100
3)多分支选择switch-case
格式:
switch(被判断的对象)
{
case 结果1:满足结果1的执行语句;break;
case 结果2:满足结果2的执行语句;break;
case 结果3:满足结果3的执行语句;break;
default:都不满足时的执行语句;break;
}
注:若每个case不加break,程序会执行之后的所有语句,直到遇到新的break为止。
#include<iostream>
int main()
{
int score=0;
cin>>score;
//开始switch判断
switch(score)
{
case 10: //score=10的情况
cout<<"10"<<endl;
break;//若没有break,会执行余下代码
case 9: //score=9的情况
cout<<"9"<<endl;
break;//若没有break,会执行余下代码
//......
default: //其余情况
cout<<"0"<<endl;
break;
}
二、循环结构
1)while循环
格式:
while(条件)
{
满足条件时的执行内容;
}
#include<iostream>
int a=0;
//开始while循环
while(a<10)
{
cout<<<a<<endl;//满足条件时运行
a++;
}
2)do-while循环
作用:先执行do的内容,再判断while的条件,满足则继续
格式:
do{执行的内容}
while{下一次执行时需要满足的条件}
int a=0;
do
{
cout<<a<<endl;//首先执行的部分
a++;
}
while(a<0);//下一次执行需要满足的条件
3)for循环
格式:
for(定义初始值;执行的条件;初始值的循环时执行内容)
{
满足条件时执行的内容;
}
#include<iostream>
//for的常规写法
for(int i=0;i<10;i++)
{
cout<<i<<endl;
}
//其他写法:省略条件,将判断的部分写在循环执行的内容
int i=0;
for(;;)
{
if(i>=10)
{
break;//推出循环
}
cout<<i<<endl;
i++;
}
三、跳转语句
1)break跳转
使用break的时机:
- Switch语句中,跳出case
- 循环语句中,跳出循环
- 嵌套循环中,跳出最近的内层循环
//break推出switch
int select=0'
cin>>select;
switch(select)
{
case 1:
cout<<"1"<<endl;
break;//退出switch
case 2:
cout<<"2"<<endl;
break;//退出switch
default:
break;//退出switch
}
//break跳出循环/跳出最近的内层循环
for(int i=0;i<10;i++)
{
for(int j=0;j<10;j++)
{
if(j==5)
{
break;//退出内层循环,1行只显示5个*
}
cout<<"*";
}
}
2)continue语句
作用:在循环语句中,跳过本次循环余下未执行的语句,继续开始下一个循环
for (int i=0;i<=200;i++)
{
if(i%2==0)
{
contineu;//遇到偶数就跳过,直接开始下一次执行
}
cout<<i<<endl;
}
3)goto语句
作用:无条件跳转语句
语法:go to 标记
注意:不建议使用,以免造成流程混乱
cout<<"A"<<endl;
cout<<"B"<<endl;
go to FLAG;//跳转到FLAG
cout<<"C"<<endl;
FLAG:
cout<<"C"<<endl;
12、其他
随机数生成的方法
步骤1:添加随机数种子,如时间;
步骤2:使用函数生成随机数;
#include<ctime>//系统时间的头文件
srand((unsigned int)time(NULL));//种子
int num=rand()%100+1;//生成1——100的随机数