C++基础语法入门
对C++有初步了解,能够有基础编程能力。
案例:通讯录管理系统
1.C++初识
1.1注释
单行注释://
多行注释:/*描述信息*/
1.2变量
意义:方便管理内存空间。
语法:
数据类型 变量名 = 变量初始值;
int a = 10;
1.3常量
作用:用于记录程序中不可更改的数据。
C++定义常量的两种方式:
1.#define 宏常量:
**#define 常量名 常量值**
(通常在文件上方定义,表示一个常量。)
2.const修饰的变量
**const 数据类型 常量名 = 常量值**
(通常在变量定义前加关键字const,修饰该变量为常量,不可修改。)
1.4关键字
作用:关键字是C++中预先保留的单词(标识符)
在定义变量或常量时,不要使用关键字。
1.5标识符命名规则
C++规定给标识符(变量、常量)命名时,有一套自己的规则:
- 标识符不能是关键字
- 标识符只能由字母、数字、下划线构成
- 第一个字母必须为字母或下划线
- 标识符中字母区分大小写
2.数据类型
给变量分配合适的内存空空间。
2.1整型
表示整数类型的数据
分类:(所占内存空间不同)
2.2sizeof关键字
利用sizeof关键字可以统计数据类型所占内存大小。
语法:
**sizeof(数据类型/变量)**
2.3实型(浮点型)
用于表示小数
分类:
1.单精度float
2.双精度double
(区别在于表示的有效数字范围不同)
默认情况下,输出一个小数,会显示6位有效数字。
//科学计数法:
2.4字符型
用于显示单个字符。
语法:
char ch = 'a';
注:
1.在显示字符型变量时,用单引号,不要用双引号。
2.单引号内只能由一个字符,不可以是字符串。
- C/C++中字符型变量只占用1个字节
- 字符型变量并不是把字符本身放到内存中储存,而是将对应的ASCII编码放到存储单元中。
2.5转义字符
用于表示一些不能显示出来的ASCII字符
常见:
换行符:\n
反斜杠:\
水平制表符:\t(一共占8个位置)
【可保持对齐】
2.6字符串型
表示一串字符
两种风格:
1.C风格字符串:
**char 变量名[ ]="字符串值"**
- C风格字符串要用双引号括起来
2.C++风格字符串:
**string 变量名 = "字符串值"**
- 需要包含 #include 头文件
2.7布尔类型 Bool
表示真或假的值
语法:
bool 变量名 = true/false
bool类型只有两个值:
- true - 真 (本质是1)
- false - 假 (本质是0)
【输出会为1/0】
注:
1.bool类型占用1个字节大小
2.只要是非0的值都代表真
2.8数据的输入
作用:从键盘获取数据
关键字:cin
语法:
**cin >> 变量**
3.运算符
作用:用于执行代码的运算
本章主要讲以下几类:
算术运算符 用于处理四则运算
赋值运算符 用于将表达式的值赋给变量
比较运算符 用于表达式的比较,并返回一个真值或假值
逻辑运算符 用于根据逻辑表达式的值返回真值或假值
3.1算术运算符
注:
1.除数不能为0
2.两个小数可以相除,且结果可为小数
3.两个小数不可以做取模运算
4.前置递增/减:先让变量+/-1,再进行表达式运算
后置递增/减:先进行表达式运算,后让变量+/-1
3.2赋值运算符
3.3比较运算符
3.4逻辑运算符
注:
1.与:同真为真,其余为假
2.或:同假为假,其余为真
4.程序流程结构
C/C++支持最基本的三种程序运行结构:顺序结构、选择结构、循环结构
顺序结构:程序按顺序执行。不发生跳转
选择结构:依据条件是否满足,有选择的执行相应功能
循环结构:依据条件是否满足,循环多次执行某段代码
4.1选择结构
4.1.1 if语句
三种形式:
1.单行格式if语句:
**if(条件){条件满足执行的语句}**
注:if条件后不要加分号;(会导致代码分离)
2.多行格式if语句:
**if(条件){
条件满足执行的语句}else{
条件不满足执行的语句}**
3.多条件的if语句:
if(条件1){条件1满足执行的语句}else if(条件2){条件2满足执行的语句}...else{都不满足执行的语句}
嵌套if语句:在if语句中,可以嵌套使用if语句,达到更精确的条件判断
4.1.2三目运算符
通过三目运算符实现简单的判断
语法:
**表达式1?表达式2:表达式3**
解释:
如果表达式1的值为真,执行表达式2,并返回表达式2的结果;
如果表达式1的值为假,执行表达式3,并返回表达式3的结果。
注:在C++中三目运算符返回的是变量,可以继续赋值
4.1.3 switch语句
执行多条件分支语句
语法:
switch(表达式)
{
case 结果1:执行语句;break;
case 结果2:执行语句;break;
···
default:执行语句;break;
}
注:
1.switch判断的时候只能是整型或者字符型,不可一世一个区间
2.switch结构清晰,执行效率高
3.case如果没有break,程序会一直向下执行
4.2循环结构
作用:满足循环条件,执行循环结构
4.2.1 while循环语句
语法:
while(循环条件){
循环语句}
解释:只要循环条件的结果为真,就执行循环语句
注:写循环时要避免死循环的出现
案例-猜数字
#include<iostream>
using namespace std;
#include<ctime> //time系统时间头文件包含
int main()
{
//添加随机数种子,利用当前系统时间生成随机数,防止每次随机数都一样
srand((unsigned int)time(NULL));
//1.系统生成随机数
int num = rand() % 100 + 1; //rand()%100+1 生成 0~99+1个随机数
//2.玩家进行猜测
int val = 0;
while (1) //设置成死循环,保证重复输入
{
cin >> val;
//3.判断玩家猜测
//猜对 退出游戏
//猜错 提示结果 返回第2步
if (val > num)
{
cout << "猜测过大" << endl;
}
else if (val < num)
{
cout << "猜测过小" << endl;
}
else
{
cout << "猜对了" << endl;
break; //退出当前死循环
}
}
system("pause");
return 0;
}
4.2.2 do…while循环结构
语法:
do{
循环语句} while(循环条件);
注意:与while的区别在于do…while会先执行一次循环语句,再判断循环条件
案例-水仙花数
/* 案例练习:水仙花数
案例描述:水仙花数是指一个3位数,它的每个位上的数字的3次幂之和等于它本身
eg:1^3+5^3+3^3=153
请利用do...while语句,求出所有3位数中的水仙花数
*/
/* 分析:
1.将所有的三位数进行输出(100~999)
2.找水仙花数
153
获取个位 153%10=3 对数字取模于10 可以获取到个位
获取十位 153/10=15 15%10=5 先整除于10,得到两位数,再取模于10,得到十位
获取百位 153/100=1 直接除于100,获取百位
判断 个位^3+十位^3+百位^3=本身
*/
#include<iostream>
using namespace std;
int main()
{
int num = 100;
do
{
int a = 0;
int b = 0;
int c = 0;
a = num % 10;
b = num / 10 % 10;
c = num / 100;
if (a*a*a+b*b*b+c*c*c==num)
{
cout << num << endl;
}
num++;
} while (num<1000);
system("pause");
return 0;
}
4.2.3 for循环语句
语法:
for(起始表达式;条件表达式;末尾循环体)
{
循环语句;}
注:
1.for循环中的表达式,需要用分号进行分割
2.for循环结构比较清晰,比较常用
案例-敲桌子
#include<iostream>
using namespace std;
int main()
{
for (int i = 0; i <=100; i++)
{
if (i%7==0||i%10==7||i/10==7)
{
cout << "敲桌子" << endl;
}
else
cout << i << endl;
}
system("pause");
return 0;
}
4.2.4 嵌套循环
//外层执行1次,内层执行1周
//外层循环
for(int i = 0; i < 10; i++)
{
//内层循环
for(int j = 0;j < 10;j++)
{
cout << "* ";
}
cout << endl;
}
案例-乘法口诀表
#include<iostream>
using namespace std;
int main()
{
//乘法口诀表
for (int i = 1; i <= 9; i++)
{
//cout << i << endl;
for (int j = 1; j <= i; j++)
{
cout << j << "*" << i << "=" << j * i<<" "; //endl是换行
}
cout << endl;
}
system("pause");
return 0;
}
4.3跳转语句
4.3.1 break语句
用于跳出选择结构或者循环结构
使用时机:
1.出现在switch条件语句中,终止case并跳出switch
2.出现在循环语句中,跳出当前的循环语句
3.出现在嵌套循环中,跳出最近的内层循环语句
4.3.2 continue语句
在循环语句中,跳过本次循环中余下尚未执行的语句,继续执行下一次循环
4.3.3 goto语句
可以无条件跳转语句
语法:
goto 标记;
标记一般用**大写字母:**表示
解释:如果标记的名称存在,执行goto语句时,会跳转到标记的位置
注:在程序中不建议使用goto语句,以免造成程序流程混乱
5.数组
5.1概述
所谓数组,就是一个集合,里面存放了相同类型的数据元素
特点:
1.数组中的每个数据元素都是相同的数据类型
2.数组是由连续的内存位置组成的
5.2一维数组
5.2.1一维数组定义方式
三种方式:
1.数据类型 数组名 [ 数组长度 ];
2.数据类型 数组名 [ 数组长度 ] = { 值1,值2...};
3.数据类型 数组名 [ ] = {值1,值2...};
注:如果在初始化数据时没有填充完,会用0来填补剩余数据
总结:
1.数组名的命名规则与变量名规范一致,不要和变量名重名
2.数组中下标是从0开始索引
5.2.2一维数组数组名
一维数组名称的用法:
1.可以统计整个数组在内存中的长度
(用sizeof(arr))
2.可以获取数组在内存中的首地址
(用cout<<arr<<endl;)
cout<<(int)&arr[0]<<endl;
//(int)表示将16进制转成10进制形式输出
//&表示输出地址,而不是元素
注:
数组名是常量,不可以进行赋值操作
案例-元素逆置
#include<iostream>
usi