C++基础入门
1 C++初识
1.1第一个C++程序
代码格式:
#include<iostream>//头文件
using namespace std;//使用标准文库
int main()
{
cout<<"hello world"<<endl;//cout 输出 endl 换行
system("pause");//屏幕暂停
return 0;
}
1.2注释
1.单行注释:// 行代码说明 放在代码上方或一条语句后面
2.多行注释:/* …*/ 段代码说明 放在代码上面
1.3变量
作用:给一段指定空间起名字,方便操作这段内存
语法:数据类型 变量名 =初始值//int a=10;
1.4常量
作用:用于记录程序中不可更改的数据
C++定义常量的两种方式(与c相同)
1.#define 宏常量:#define 常量名 常量值
- 通常在文件上方定义,表示一个常量
2.const修饰的变量 const 数据类型 常量名=常量值
- 通常在变量定义前加
const
,修饰该变量为常量不可修改
示例:
#include<iostream>
using namespace std;
//宏定义不可修改
#define Day 7
int main()
{
//Day为常量修改会报错
cout<<"一周共有:"<<Day<<"天"<<endl;
//const修饰的变量为常量
const int a=10;
cout<<a<<endl;
system ("pause") ;
return 0;
}
1.5关键字
作用:关键字是c++中预先保留的单词(标识符)
- 在定义变量或者常量时,不要用关键字
C++关键字如下:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-SZqGhsoo-1617370508935)(C:\Users\徐老帅哥\AppData\Roaming\Typora\typora-user-images\image-20210301110328008.png)]
1.6标识符命名规则
作用:C++规定给标识符(变量、常量)命名时,有一套自己的规则
- 标识符不能是关键字
- 标识符只能由字母、数字、下划线组成
- 第一个字符必须为下划线或字母
- 标识符中字母区分大小写
建议:给标识符命名时,争取做到见名知章的效果,方便自己和他人阅读(英语基础要扎实)
2 数据类型
C++规定在创建一个变量或者常量时,必须要指出相应的数据类型,否则无法给变量分配内存
2.1整型
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-hz034ccR-1617370508954)(C:\Users\徐老帅哥\AppData\Roaming\Typora\typora-user-images\image-20210301112325673.png)]
短整型的取值范围是(-32768–32767) 超过则数据溢出从头开始
整型大小比较:short<int<=long(windows-4字节;linus-8字节)<=long long
2.2sizeof关键字
作用:利用sizeof关键字可以统计数据类型所占大小
语法:sizeof(整型类型 / 变量)
(/或者)
示例:
#include<iostream>
using namespace std;
int main()
{
cout<<"short占用空间内存为:" <<sizeof(short)<<endl;
cout<<"int占用空间内存为:" <<sizeof(int)<<endl;
long a=10;
cout<<"long占用空间内存为:" <<sizeof(a)<<endl;
cout<<"long long用空间内存为:" <<sizeof(long long)<<endl;
system ("pause") ;
return 0;
}
2.3实型
作用:用于表示小数
浮点型变量分为两类:
1.单精度float
2.双精度double
两者区别在于表示的有效数字不同。默认情况下输出一个小数会显示出6位有效数字
数据类型 | 占用空间 | 有效数字范围 |
---|---|---|
float | 4字节 | 7位有效数字 |
double | 8字节 | 15-16位有效数字 |
float a=3.214f;(最好带f表示float)
科学计数法:3e2= 3* 10*10(10的平方)
2.4字符型
作用:字符型变量用于显示单个字符
;
语法:char ch = 'a';
注意1:在显示字符型变量时,用单引号将字符括起来,不要用单引号
注意2:单引号内只能有一个字符,不可以是字符串
C和C++中的字符型变量只占用一个字节。
字符型变量并不是把字符本身放到内存中存储,而是将对应的ASCII编码放入到存储单元。
char ch=‘a’;(a:97 ; A:65)
cout<<(int)ch<<endl;
output:97
ASCII表
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-XWIeXiOz-1617370508965)(C:\Users\徐老帅哥\AppData\Roaming\Typora\typora-user-images\image-20210301120342895.png)]
2.5转义字符
作用:用于表示一些不能显示出来的**ASCII字符(c语言为/n)
现阶段常用:\n(换行) \ \(代表一个反斜杠\) \t(水平制表(HT)跳到下一个TAB 8个字符位置)
对齐 \t
示例:
#include<iostream>
using namespace std;
int main()
{
cout<<"aaaa\t helloworld"<<endl;
cout<<"aa\t helloworld"<<endl;
cout<<"aaaaaa\t helloworld"<<endl;
return 0;
}
运行结果:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-fK9Fecrj-1617370508979)(C:\Users\徐老帅哥\AppData\Roaming\Typora\typora-user-images\image-20210301141211480.png)]
2.6字符串型
作用:用于表示一串字符
两种风格
1.C版本:char 变量名[ ] = "字符串值"
示例:
int main()
{
char str1[]="hello world";
cout<<str1<<endl;
system("pause");
return 0;
}
注意:C风格的字符串要用双引号括起来
2.C++风格:要加 #include 头文件
string 变量名 = “字符串值”
示例:
string str2="hello world";
2.7布尔类型 bool
作用:布尔数据类型代表真或假的值
bool类型只有两个值:
- true----真 (本质是1)
- false—假(本质是0)
bool类型只占一个字节大小
示例:
int main(){
//1.创建bool数据类型
bool flag = true;//true代表假
cout<<flag<<endl;
flag = false;//false代表假
cout<<flag<<endl;
//2.查看bool类型所占内存
cout<<"bool所占空间大小为 :"<<sizeof(bool)<<endl;
system("pause");
return 0;
}
2.8数据的输入
作用:用于从键盘上获取数据
关键字:cin
语法:cin>> 变量
示例:
int main(){
//1.整型
int a=0;
cout<<"请输入一个整型:"<<endl;
cin>>a;
cout<<"整型 a ="<<a<<endl;
//2.浮点型
float f=0;
cout<<"请输入一个浮点型:"<<endl;
cin>>f;
cout<<"float="<<f<<endl;
//3.字符型
char ch='a';
cout<<"请输入一个字符型:"<<endl;
cin>>ch;
cout<<"char="<<ch<<endl;
//4.字符串型
string str1="as";
cout<<"请输入一个字符串型:"<<endl;
cin>>str1;
cout<<"str1="<<str1<<endl;
//5.bool类型
bool flag=false;
cout<<"请给布尔类型赋值:" <<endl;
cin>>flag;//非0都为真值
cout<<"布尔类型的值为:" <<flag<<endl;
return 0;
}
3 运算符
作用:用于执行代码的运算
运算符类型 | 作用 |
---|---|
算术运算符 | 用于处理四则运算 |
赋值运算符 | 用于将表达式的值赋给变量 |
比较运算符 | 用于表达式比较,并返回一个真值或假值 |
逻辑运算符 | 用于根据表达式的值返回真值或假值 |
3.1算术运算符
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-XvkclO2i-1617370508985)(C:\Users\徐老帅哥\AppData\Roaming\Typora\typora-user-images\image-20210302122921934.png)]
注意:
1.a++:先传递a的值再将a+1
2.两个数相除为0,不能取模 %
3.两个小数不可以做取模运算
4.只有整型变量才可以进行取模运算
3.2赋值运算符
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-YARk3VXU-1617370509095)(C:\Users\徐老帅哥\AppData\Roaming\Typora\typora-user-images\image-20210302124458953.png)]
3.3比较运算符
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-HzQvZev7-1617370509102)(C:\Users\徐老帅哥\AppData\Roaming\Typora\typora-user-images\image-20210302124408833.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-KXNt0zSW-1617370509110)(C:\Users\徐老帅哥\AppData\Roaming\Typora\typora-user-images\image-20210302124329441.png)]
3.4逻辑运算符
作用:用于表达式的值返回真值或假值
逻辑运算有以下符号
运算符 | 术语 | 示例 | 结果 |
---|---|---|---|
! | 非 | !a | 如果a为假,则!a为真;反之相反 |
&& | 与 | a&&b | 如果a,b都为真,则结果为真;否则为假 |
|| | 或 | a||b | a,b其中一个为真,则结果为真 |
C++中除了0都为真;
4 程序流程结构
C/C++支持最基本的三种程序运行结构:顺序结构、选择结构、循环结构
- 顺序结构:程序按顺序进行,不发生跳转
- 选择结构:依据条件是否满足,有选择的执行相应的功能
- 循环结构:依据条件是否满足,循环多次执行某段代码
4.1选择结构
4.1.1 if语句
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-iNf57Idw-1617370509116)(C:\Users\徐老帅哥\AppData\Roaming\Typora\typora-user-images\image-20210302154148717.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-6dhCwO6O-1617370509121)(C:\Users\徐老帅哥\AppData\Roaming\Typora\typora-user-images\image-20210302155704547.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-TqrG8Y1h-1617370509126)(C:\Users\徐老帅哥\AppData\Roaming\Typora\typora-user-images\image-20210302155553534.png)]
int main(){
int score=0;
cout<<"请输入高考分数:"<<endl;
cin>>score;
//注意从大到小判断
if(score>650)
cout<<"恭喜你考上清华"<<endl;
else if(score>500)
cout<<"恭喜你考上一本"<<endl;
else if(score>400)
cout<<"恭喜你考上本科"<<endl;
else
cout<<"继续努力" <<endl;
system("pause");
return 0;
}
if语句可以多层嵌套
练习案例:三只小猪称体重
有三只小猪ABC,请分别输入三只小猪的体重,并且判断哪只小猪最重?
代码示例:
#include<iostream>
using namespace std;
int main(){
int a=0,b=0,c=0;
cout<<"请输入三只小猪的体重"<<endl;
cin>>a;
cin>>b;
cin>>c;
//a和b比 两种情况 最大的和c比两种情况 一共4种情况
if(a>b){
if(a>c)
cout<<"A小猪最重"<<endl;
else
cout<<"C小猪最重"<<endl;
}
else
{
if(b>c)
cout<<"B小猪最重"<<endl;
else
cout<<"C小猪最重"<<endl;
}
system("pause");
return 0;
}
4.1.2 三目运算符
作用:通过三目运算符实现简单的判断
语法: 表达式1 ? 表达式 2 :表达式 3
解释:
如果表达式1为真,执行表达式2,并返回表达式2的结果;
如果表达式1为假,执行表达式3,并返回表达式3的结果;
示例:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Ew3sXN2x-1617370509131)(C:\Users\徐老帅哥\AppData\Roaming\Typora\typora-user-images\image-20210302162455647.png)]
4.1.3 switch语句
作用:执行多条件分支语句
语法:
swith(表达式)
{
case 结果1:执行语句;break;
case 结果2:执行语句;break;
...
default :执行语句;break;
}
if和switch的区别:
switch缺点,判断时候只能是整型或字符型,不可以是一个区间
switch优点,结构清晰,执行效率高
示例:(电影评分)
int main(){
int score=0;
cout<<"请输入电影评分:" <<endl;
cin>>score;
switch(score)
{
case 10 :cout<<"很棒!"<<endl;break;
case 9 :cout<<"很棒!"<<endl;break;
case 8 :cout<<"不错!"<<endl;break;
case 6 :cout<<"还行!"<<endl;break;
case 5 :cout<<"还好!"<<endl;break;
default :cout<<"烂片!"<<endl;break;
}
system("pause");
return 0;
}
4.2 循环结构
4.2.1while循环语句
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-tz1KmMNv-1617370509137)(C:\Users\徐老帅哥\AppData\Roaming\Typora\typora-user-images\image-20210302174109984.png)]
注意:在执行语句时避免死循环 while(1)
练习:猜数字
案例描述:系统会随机生成一个1到100的数字,玩家进行猜测,如果猜错提示玩家数字过大或过小,如果猜对恭喜玩家胜出。
#include<iostream>
#include<cstdlib>//srand头文件
using namespace std;
#include<ctime>
int main(){
// 添加随机数种子 作用利用当前系统时间生成随机数,防止每次随机数一样
srand ((unsigned int)time(NULL));
// 1.系统生成随机数
int num = rand() %100 +1;//rand()%100+1生成1-100的随机数
// 2.玩家进行猜测
int value=0;
// 3.判断玩家猜测
// 猜对 退出游戏
// 猜错 提示猜的结果 过大或过小 重新返回第2步
while(1)
{
cin>>value;
if(value>num)
cout<<"太大了"<<endl;
else if(value<num)
cout<<"太小了"<<endl;
else
{
cout<<"恭喜答对了就是:"<<num<<endl;break;
}
}
system("pause");
return 0;
}
4.2.2do…while语句
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-HDWPb5Dz-1617370509141)(C:\Users\徐老帅哥\AppData\Roaming\Typora\typora-user-images\image-20210302184950231.png)]
练习案例:水仙花数
案例描述:水仙花数是一个3位数,它的每个位上的数字的3次幂之和等于它本身
例如:13+53+3^3=153
请利用do…while语句,求出所有3位数中的水仙花数
int main(){
int num=2;
do{
int a=0;
int b=0;
int c=0;
a=num/100;
b=num%100/10;
c=num%100%10;
if(a*a*a+b*b*b+c*c*c == num)
{
cout<<num<<endl;
}
num