1、C++语法基础
1.1 第一个C++程序——输出Hello world
#include <iostream>
using namespace std;
int main()
{
cout << "hello world" << endl; //输出Hello world
system("pause");
return 0;
}
1.2 变量
作用:给一段制定的内存空间起名,方便操作内存
语法:数据类型 变量名=初始值;
eg : int a = 10;
#include<iostream>
using namespace std;
int main()
{
int a = 10; //给一段内存空间起名为a并赋值10.
cout << "a=" << a << endl; //输出a.
system("pause");
return 0;
}
1.3 常量
作用:用于记录程序中不可更改的程序。
C++中定义常量一般有两种方式:
1、#define 宏常量
语法:#define 常量名 常量值
注意:宏常量一般在文件的上方定义。
2、const 修饰的变量
语法:const 数据类型 常量名=常量值;
通常在变量定义前加关键字const,修饰该变量为常量,不可改变。
#include <iostream>
using namespace std;
#define month 12 //宏常量,month为12.
int main()
{
cout << "一年一共有" << month << "个月" << endl; //输出month的值
const int day =7; //const修饰的变量为常量
cout << "一周一共有" << day << "天" << endl; //输出day为7
system("pause");
return 0;
}
注意:常量不可更改,示例代码1如下:
#include <iostream>
using namespace std;
#define month 12
int main()
{
int month = 13; //错误定义,month为常量不可更改。
cout << "一年一共有" << month << "个月" << endl;
system("pause");
return 0;
}
此时运行程序,程序报错如下:month为常数。
示例代码2如下:
#include <iostream>
using namespace std;
int main()
{
const int day =7;
int day = 8; //错误定义,常量day不可改变。
cout << "一周一共有" << day << "天" << endl;
system("pause");
return 0;
}
此时运行代码,代码报错:
1.4 关键字
C++本身已经含有意义的字,命名时不能重复使用,重复使用会产生歧义。
C++关键字如下:
1.5 标识符命名规则
作用:C++规定给标识符(常量、变量)命名时,有一套自己的规则;
1、标识符不能是关键字;
2、标识符必须为字母或下划线、数字组成;
3、第一个字符必须为字母或者下划线;
4、标识符中字母区分大小写;
2、数据类型
C++规定在创建一个变量或者常量时,必须要指定出相应的数据类型,负责无法给变量分配内存。
2.1 整型
作用:整型变量表示的是整型类型的数据。
C++中能够表示整型的数据有以下几种方式。区别在于所占内存空间不同:
2.2 sizeof函数
作用:统计数据类型所占的内存空间
语法:sizeof(数据结构)
代码如下:
#include <iostream>
using namespace std;
int main()
{
short a1 = 10; //短整型数据类型
int a2 = 10; //整型数据类型
long a3 = 10; // 长整型数据类型
long long a4 = 10; // 长长整型数据类型
cout << "num=" << a1 << endl;
cout << "num=" << a2 << endl;
cout << "num=" << a3<< endl;
cout << "num=" << a4 << endl;
cout << "short占用的内存空间为" << sizeof(short) << endl; //sizeof函数
cout << "int占用的内存空间为" << sizeof(int) << endl;
cout << "long占用的内存空间为" << sizeof(long) << endl;
cout << "long long占用的内存空间为" << sizeof(long long ) << endl;
system("pause");
return 0;
}
2.3 实型(浮点型)
作用:用于表示小数。
分类:浮点型变量分为两种:1、单精度 float 2、双精度 double
区别:有效数字范围不同。
举例代码如下:
#include <iostream>
using namespace std;
int main()
{
float a1 = 3.14f; //float定义浮点型数据时,后面f的作用仅仅为了区分作用
double a2 = 3.14;
cout << "a1占多少字节" << sizeof(a1) << endl; //计算a1所占的内存大小
cout << "a2占多少字节" << sizeof(a2) << endl; //计算a2所占的内存大小
cout << "a1=" << a1 << endl;
cout << "a2=" << a2 << endl;
system("pause");
return 0;
}
注意:sizeof()函数括号中不仅可以放数据类型,也可以用于统计变量名和字面值所占的内存大小。
2.4 字符型
作用:字符型变量用于显示单个字符
语法;char 字符变量名='单个字符';
举例代码如下:
#include <iostream>
using namespace std;
int main()
{
char ch = 'a'; //定义字符变量
cout << "ch为:" << ch << endl; //打印字符变量
cout << "ch的数据类型字节为:" << sizeof(char) << endl; //统计字符数据类型所占内存大小
cout << "a的ASCII码为:" << (int)ch << endl; //计算a的ASCII码值
system("pause");
return 0;
}
2.5 转义字符
作用:表示一些不能显示出来的ASCII字符。
举例代码如下:
#include <iostream>
using namespace std;
int main()
{
//转义字符 \n换行 \\代表输出一个\ \t水平制表符
cout << "hello world" << endl;
cout << "hello world\n";
cout << "\\" << endl;
cout << "aa\thello world\n";
cout << "aaaa\thello world\n";
cout << "aaaaaa\thello world\n";
system("pause");
return 0;
}
输出结果如下:
注:水平制表符\t作用是将光标移动到最接近8的倍数的位置,使得后面的输入从此开始。
2.6 字符串型
作用:用于表示一串字符
分类:C语言形式的字符串:char 变量名[ ]="字符串值";
C++形式的字符串:string 变量名="字符串值";
注意:使用C++形式字符串定义形式时,需要在程序前添加字符串型头文件#include<string>
#include <iostream>
using namespace std;
#include <string> //字符串头文件,只有添加它才可以使用string定义字符串
int main()
{
//字符串两种类型 char型C语言型 string型C++类型
char str1[] = "Hello world";
cout << str1 << endl;
string str2 = "hello world";
cout << str2<<endl;
system("pause");
return 0;
}
2.7 布尔类型
作用:布尔数据类型代表真或者假。
语法:bool 布尔类型名称=“true”或者“false”;
bool类型只有两个值:
true表示真()本质为1. false表示假(本质为0)
bool类型仅仅占用1个字节大小。
示例代码如下:
#include<iostream>
using namespace std;
int main()
{
//布尔类型 bool 只有两种结果 真或者假(本质上是1或者0)
bool flag1 = true;
cout << flag1 << endl;
bool flag2 = false;
cout << flag2 << endl;
//查看布尔类型所占的字节大小
cout << sizeof(flag1) << endl;
system("pause");
return 0;
}
运行结果如下:
2.8 数据的输入
作用:用于从键盘上获取数据。
关键字:cin
语法:cin>>变量
示例代码如下:
#include <iostream>
using namespace std;
#include <string>
int main()
{
//整型数据的输入
/*int a = 0;
cout << "请输入整型数据:" << endl;
cin >> a;
cout << a << endl;*/
//浮点型数据的输入
/*float b = 3.14f;
cout << "请输入型浮点型数据:" << endl;
cin >> b;
cout << b << endl;*/
//字符串数据的输入
/*char str[] = "a";
cout << "请给字符型数据赋值:" << endl;
cin >> str;
cout << str << endl;
*/
//字符串型数据类型输入
/*string str = "a";
cout << "请给字符串型数据赋值:" << endl;
cin >> str;
cout << str << endl;
*/
//布尔类型数据输入
bool flag = true;
cout << "请给布尔类型数据赋值:" << endl;
cin >> flag;
cout << flag << endl;
}
3.运算符
作用:用于执行代码中的运算
主要类型如下:
3.1 算术运算符
作用:用于处理四则运算
主要有以下几种:
示例代码1如下:
#include <iostream>
using namespace std;
int main()
{
int a1 = 10;
int a2 = 2;
cout << "a1+a2=" << a1 + a2 << endl; //打印a1+a2的值,结果为12.
cout << "a1-a2=" << a1 - a2 << endl; //打印a1-a2的值,结果为8.
cout << "a1*a2=" << a1 * a2 << endl; //打印a1*a2的值,结果为20.
int b1 = 10;
int b2 = 3;
cout << "b1%b2=" << b1 % b2 << endl; //打印b1除b2的余数,结果为1
system("pause");
return 0;
}
示例代码2如下 :
#include <iostream>
using namespace std;
int main()
{
int a1 = 10;
int a2 = 2;
cout << "a1/a2=" << a1 / a2 << endl; //打印a1/a2的值,结果为5.
int a3 = 10;
int a4 = 3;
cout << "a3/a4=" << a3 / a4 << endl; //打印a3/a4的值,整数除整数得到的值也是整数,所以结果为3.
double a5 = 9.99;
double a6 = 3.1;
cout << "a5/a6=" << a5 / a6 << endl; //小数也可以相除
}
示例代码3如下:
#include <iostream>
using namespace std;
int main()
{
int b1 = 10;
int b2 = 0;
cout << "b1%b2=" << b1 % b2 << endl; //除数为0报错
system("pause");
return 0;
}
此时运行结果如下:
3.2 赋值运算符
作用:用于将表达式中的值赋给变量。
赋值运算符包括以下几种:
示例代码如下:
#include <iostream>
using namespace std;
int main()
{
//+=
int a = 1; //给a赋值1
a += 2; //与a=a+2作用相同
cout << a << endl; //输出3
//-=
a = 3; //重新给变量a赋值为3
a -= 1; //与a=a-1作用相同
cout << a << endl; //输出2
//*=
a = 6; //重新给a赋值6
a *= 3; //与a=a*3作用相同
cout << a << endl; //输出18
///=
a = 6; //重新给a赋值6
a /= 3; //与a=a/3作用相同
cout << a << endl; //输出2
//%=
a = 7; //重新给a赋值7
a %= 3; //与a=a%3作用相同
cout << a << endl; //输出1
}
3.3 比较运算符
作用:用于表达式的比较,并返回一个真值或者假值
比较运算符有以下几种:
示例代码如下:
#include<iostream>
using namespace std;
int main()
{
int a = 3, b = 2;
//==
cout << (a == b) << endl;
//!=
cout << (a != b) << endl;
//<
cout << (a < b) << endl;
//>
cout << (a > b) << endl;
//<=
cout << (a <= b) << endl;
//>=
cout << (a >= b) << endl;
}
3.4 逻辑运算符
作用:用于根据表达式的值返回真值或假值
逻辑运算符有以下几种:
示例代码如下:
#include<iostream>
using namespace std;
int main()
{
int a = 10, b = 20, c = 0;
//!
cout << a << endl;
cout << !a << endl; //逻辑运算中,非0即为1
cout << !!a << endl;
//&&
cout << (a && b) << endl;
cout << (a && c) << endl;
//||
cout << (a || b) << endl;
cout << (a || c) << endl;
}
4.程序流程结构
C和C++支持最基本的三种程序运行结构:顺序结构、选择结构、循环结构。
顺序结构:程序按照顺序执行,不发生跳转。
选择结构:依据条件是否满足,有选择的执行相应功能。
循环结构:依据条件是否满足,循环多次执行某段代码。
4.1 选择结构
4.1.1 if语句
作用:执行满足条件的语句。
if语句的三种形式:单行格式if语句、多行格式if语句、多条件的if语句
1、单行格式if语句:if(条件){条件满足执行的语句}
2、多行格式if语句:if(条件){条件满足执行的语句}else{条件不满足时执行的语句}
示例代码如下:
#include<iostream>
using namespace std;
int main()
{
//用户输入成绩,若成绩大于600则打印成绩
int score = 0;
cout << "请输入你的成绩" << endl;
cin >> score;
if (score > 600)
{
cout << score << endl;
}
//如果成绩大于600,则显示被西邮录取,否则二战
if (score > 600)
{
cout << "被西邮录取" << endl;
}
else
{
cout << "二战" << endl;
}
system("pause");
return 0;
}
3.多条件的if语句:if(条件1){条件1满足执行的语句}elseif(条件2){条件2满足执行的语句}......else{条件不满足时执行的语句}
示例代码如下;
#include<iostream>
using namespace std;
int main()
{
//用户输入成绩
int score = 0;
cout << "请输入你的成绩" << endl;
cin >> score;
//如果成绩大于600,打印被一本录取
if (score > 600)
{
cout << score<<"被一本大学录取" << endl;
}
//如果成绩大于500,打印被二本大学录取
else if (score > 500)
{
cout << score << "被二本大学录取" << endl;
}
//如果成绩大于400,打印被三本大学录取
else if (score > 400)
{
cout << score << "被三本大学录取" << endl;
}
//低于400,二战
else
{
cout << "二战" << endl;
}
system("pause");
return 0;
}
4.嵌套if语句
作用:更清楚的根据条件输出
#include<iostream>
using namespace std;
int main()
{
//用户输入成绩
int score = 0;
cout << "请输入你的成绩" << endl;
cin >> score;
//如果成绩大于600,打印被一本录取
//大于700,清华
//大于650,北大
//其他的被西邮录取
if (score > 600)
{
cout << score<<"被一本大学录取" << endl;
if (score > 700)
{
cout << score << "被清华大学录取" << endl;
}
else if (score > 650)
{
cout << score << "被北大录取" << endl;
}
else
{
cout << score << "被西邮录取" << endl;
}
}
//如果成绩大于500,打印被二本大学录取
else if (score > 500)
{
cout << score << "被二本大学录取" << endl;
}
//如果成绩大于400,打印被三本大学录取
else if (score > 400)
{
cout << score << "被三本大学录取" << endl;
}
//低于400,二战
else
{
cout << "二战" << endl;
}
system("pause");
return 0;
}
5、选择结构案例-三只小猪称重
#include<iostream>
using namespace std;
int main()
{
//输入三只小猪的体重
int fansong = 0, xiaomeng = 0, liwen = 0;
cout << "请输入第一头fansong小猪的体重" << endl;
cin >> fansong;
cout << "请输入第二头小猪xiaomeng的体重" << endl;
cin >> xiaomeng;
cout << "请输入第三头小猪liwen的体重" << endl;
cin >> liwen;
if (fansong > xiaomeng)
{
if (fansong > liwen)
{
if (liwen > xiaomeng)
{
cout << "fansong>liwen>xiaomeng,最重为fansong" << fansong << "斤" << endl;
}
else
{
cout << "fansong>xiaomeng>liwen,最重为fansong" << fansong << "斤" << endl;
}
}
if (liwen > xiaomeng)
{
if (liwen > fansong)
{
if (fansong > xiaomeng)
{
cout << "liwen>fansong>xiaomeng,最重为liwen" << liwen << "斤" << endl;
}
else
{
cout << "liwen>xiaomeng>fansong,最重为liwen" << liwen << "斤" << endl;
}
}
if (xiaomeng > fansong)
{
if (xiaomeng > liwen)
{
if (fansong > liwen)
{
cout << "xiaomeng>fansong>xiaomeng,最重为" << xiaomeng << "斤" << endl;
}
else
{
cout << "xiaomeng>liwen>xiaomeng,最重为" << xiaomeng << "斤" << endl;
}
}
}
}
system("pause");
return 0;
}
}
4.1.2 三目运算符
作用:通过三目运算符进行简单的判断
语法:表达式1?表达式2:表达式3;
解释:如果表达式1为真,执行表达式2,并返回表达式2的结果。
如果表达式1为假,执行表达式3,并返回表达式3的结果。
示例代码如下:
#include <iostream>
using namespace std;
int main()
{
int a = 20, b = 10, c = 0;
c = a > b ? a : b;
cout << c << endl;
(a > b ? a : b) = 100;
cout << a << endl;
cout << b << endl;
system("pause");
return 0;
}
4.1.3 switch语句
语法
示例代码如下:
#include <iostream>
using namespace std;
int main()
{
//输入自己对电影的评分
//10分满意,5-9一般,其他很差
int score = 0;
cout << "请为电影打分" << endl;
cin >> score;
switch (score)
{
case 10:
cout << "您对电影满意" << endl;
case 9:
cout << "您对电影一般" << endl;
case 8:
cout << "您对电影一般" << endl;
case 7:
cout << "您对电影一般" << endl;
case 6:
cout << "您对电影一般" << endl;
case 5:
cout << "您对电影一般" << endl;
case 4:
cout << "您对电影评价很差" <<endl;
case 3:
cout << "您对电影评价很差" << endl;
case 2:
cout << "您对电影评价很差" << endl;
case 1:
cout << "您对电影评价很差" << endl;
}
system("pause");
return 0;
}
4.2 循环语句
4.2.1 while循环语句
作用:满足循环条件,执行循环语句。
语法:while(循环条件){循环语句}
解释:只要循环条件的结果为真,就执行循环语句。
示例代码如下:
#include <iostream>
using namespace std;
int main()
{
int num = 0;
while(num<10) //循环条件
{
cout << num << endl;
num++;
}
system("pause");
return 0;
}
4.2.2 while循环案例-猜数字
#include <iostream>
using namespace std;
//使用系统时间需要加这个头文件
#include<ctime>
int main()
{
//根据系统时间生成一个随机数
srand((unsigned int)time(NULL));
//系统随机生成一个范围在0-100随机数
int num = rand() % 100 + 1;
//cout << num << endl;
//玩家输入的值
cout << "请输入0-100内的一个数字" << endl;
int a = 0;
while (1)
{
cin >> a;
if (a > num)
{
cout << "猜大了" << endl;
}
else if (a < num)
{
cout << "猜小了" << endl;
}
else if(a = num)
{
cout << "猜对了" << endl;
break;
}
}
system("pause");
return 0;
}
4.2.3 do...while循环语句
作用:满足循环条件,执行循环语句
语法:do{循环语句}while(循环条件);
注意:与while的区别在于do...while会先执行一次循环语句,再判断循环条件
示例代码如下:
#include<iostream>
using namespace std;
int main()
{
//使用dowhile循环语句输出0-9数字
int num = 0;
do
{
cout << num << endl;
num++;
}
while (num < 10);
system("pause");
return 0;
}
4.2.4 循环案例
案例名称:水仙花数
案例描述:水仙花数是指一个三位数,它的每个位上的数字的3次幂之和等于它本身
eg:1^3+5^3+3^3=153
请利用do...while语句,求出所有三位数中的水仙花数。
案例分析如下:
示例代码如下:
#include <iostream>
using namespace std;
int main()
{
int num = 100;
do
{
num++;
int a = 0;
int b = 0;
int c = 0;
a = num % 10; //获取num的个位数字
b = num / 10 % 10; //获取num的十位数字
c = num / 100; //获取num的百位数字
if ( a*a* a + b * b * b + c * c * c == num) //判断是否为水鲜花数
cout << num << endl;
}
while (num < 1000);
system("pause");
return 0;
}
4.2.5 for循环语句
作用:满足循环条件,执行循环语句
语法:for(起始表达式;条件表达式;末尾循环体){循环语句;}
示例代码如下:
#include <iostream>
using namespace std;
int main()
{
int i = 0;
for (i = 0; i < 10; i++)
{
cout << i << endl;
}
system("pause");
return 0;
}
4.2.6 循环案例-敲桌子
案例描述:从1开始数到数字100,如果个位含有7,或者数字十位含有7,或者是7的倍数,我们打印敲桌子,其他数字直接打印输出。
案例分析:
示例代码如下:
#include <iostream>
using namespace std;
int main()
{
for (int i = 1; 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.7 嵌套循环
作用:在循环体中嵌套一层循环
示例代码如下:
#include <iostream>
using namespace std;
int main()
{
for (int i = 0; i < 10; i++) //外层循环
{
for (int j = 0; j < 10; j++) //内层循环,外层循环一次,内存循环一周
{
cout << "* ";
}
cout << endl;
}
system("pause");
return 0;
}
4.2.8 嵌套循环案例-打印乘法表
示例代码如下:
#include <iostream>
using namespace std;
int main()
{
for (int i = 1; i < 10; i++)
{
for (int j = 1; j <= i; j++)
{
cout << i << "*" << j << "=" << i * j<<" ";
}
cout << endl;
}
system("pause");
return 0;
}
4.3 跳转语句
4.3.1 break语句
作用:用于跳出选择结构或者循环结构
break语句使用场景:
1、出现在switch条件语句中,作用是终止case并且跳出switch
2、出现在循环语句中,作用是跳出当前的循环语句
3、出现在嵌套循环中,跳出最近的内层循环语句
示例代码1如下:
#include <iostream>
using namespace std;
int main()
{
cout << "请选择冒险难度" << endl;
cout << "1、普通难度" << endl;
cout << "2、中等难度" << endl;
cout << "3、困难难度" << endl;
int num = 0;
cin >> num;
switch (num)
{
case 1:
cout << "你选择的的是普通难度" << endl;
case 2:
cout << "你选择的的是中等难度" << endl;
case 3:
cout << "你选择的的是困难难度" << endl;
}
system("pause");
return 0;
}
预想结果:
当你输入1时,打印出来“您选择的是普通难度”,但是运行结果如下所示:
为啥会出现这种情况呢?因为当你选择1时,switch语句开始执行case 1,执行结束后会按照顺序继续执行case 2和case 3,所以此时我们需要break语句进行退出。
代码如下:
#include <iostream>
using namespace std;
int main()
{
cout << "请选择冒险难度" << endl;
cout << "1、普通难度" << endl;
cout << "2、中等难度" << endl;
cout << "3、困难难度" << endl;
int num = 0;
cin >> num;
switch (num)
{
case 1:
cout << "你选择的的是普通难度" << endl;
break;
case 2:
cout << "你选择的的是中等难度" << endl;
break;
case 3:
cout << "你选择的的是困难难度" << endl;
break;
}
system("pause");
return 0;
}
运行结果如下:
示例代码2如下:
出现在for循环中:
#include <iostream>
using namespace std;
int main()
{
for (int i = 0; i < 10; i++)
{
if (i == 5) //当i=5时,跳出for循环
{
break;
}
cout << i << endl;
}
system("pause");
return 0;
}
示例代码3如下:出现在嵌套循环中:
在打印星图这个案例,实现结果如下:
现在我们想在内循环当大于5时,停止内循环的执行;
示例代码如下:
#include <iostream>
using namespace std;
int main()
{
for (int i = 0; i < 10; i++) //外层循环
{
for (int j = 0; j < 10; j++) //内层循环,外层循环一次,内存循环一周
{
if (j > 5)
{
break;
}
cout << "* ";
}
cout << endl;
}
system("pause");
return 0;
}
实现结果如下:
4.3.2 continue语句
作用:在循环中,跳出本次循环剩余尚未执行的语句,转而执行下次循环;
示例代码如下:
#include <iostream>
using namespace std;
//打印0-100的所有奇数
int main()
{
for (int i = 0; i < 100; i++)
{
if (i % 2 ==0) //如果i为偶数,退出循环;
{
continue;
}
cout << i << endl;
}
system("pause");
return 0;
}
4.3.3 goto语句
作用:可以无条件跳转语句
语法:goto 标记
解释:如果标记的名程存在,执行到Goto语句时,会跳转到标记的位置
示例代码如下:
#include <iostream>
using namespace std;
int main()
{
cout << "1、*****" << endl;
cout << "2、*****" << endl;
goto flag;
cout << "3、*****" << endl;
cout << "4、*****" << endl;
flag:
cout << "5、*****" << endl;
system("pause");
return 0;
}
结果如下: