/*#include<iostream>
using namespace std;
int main()
{
cout << "hello world" << endl;//cont的解析:https://blog.csdn.net/weixin_41785349/article/details/112555190*/
//变量:
//变量创建的语法:书库类型 变量名 = 变量初始值
//eg: int(整形变量) a = 10;
/*输出上面a这个变量: cout<<"a ="<< a << endl;*/
//常量:
//用于记录程序中不可更改的数据
//两种定义常量的方法:
//1、#define 常量名(宏常量) 常量值
//define Day 7
//define Day 14(会报错,不可以修改,即不能加这句)
//cout << "一周总共有:" << Day << "天" << endl;(输出这个常量)
//2、const修饰的变量
//const int month = 12;
//month = 24;(会报错,不可以修改,即不能加这句,const修饰的变量也称作为常量)
//cout << "一年总共有:" << month <<"个月份"<< endl;
/* system("pause");//(表示暂停)
return 0;//中间的空格不能省略 u加空格
}*/
//注释:
//单行注释
/*多行注释
用来解释代码含义,或者一些笔记。 星号之间就是多行注释包含的内容*/
//关键字(预先保留的单词,是标识符),eg:在定义变量或者常量的时候,不要用关键字,会产生歧义(是数据类型还是变量名称,产生了矛盾)
//https://www.runoob.com/w3cnote/cpp-keyword-intro.html, 具体含义
//标识符(变量、常量、函数、语句块等命名的泛统称)
//标识符命名规则:(eg:关键字与标识符的区别:关键字是系统自带的 ,标识符是自定义的。关键字是一种特殊意义的标识符,当一般把它当成关键字,如if只能是关键字)
//1、标识符只能由字母 数字 下划线组成
//2、第一个字符必须是字母或者是下划线,不能是数字如int 123就不行
//3、/标识符的字母是区分大小写的,如dk不等于DK
//数据类型(C++规定在创建一个变量或者常量时,必须要指定出相应的书库类型,否则无法给变量分配内存)
//eg:数据类型的存在意义:给变量“合适”的内存空间
//1、整型(即表示整数类型的数据):
// short(短整型) 大小:2字节 取值范围:-2^15~2^15-1 如short num1 = 10; (2^15=32768)
// int(整型) 大小:4字节 取值范围:-2^31~2^31-1 如int num2 = 10;
// long(长整型) 大小:win 4字节 linux 4(32位)8(64位) 取值范围:-2^31~2^31-1
// long long(长长整型) 大小:8字节 取值范围:-2^63~2^63-1 如long long num4=10
//输出:cout << "num1=" << mum1 << endl;
//eg:整形大小比较:/short<int<= longg <= long long
//2、实型(浮点型)
// 作用:用于表示小鼠
// 单精度float 占用空间:4字节 有效数字范围:7位有效数字(3.14,三位有效数字) 如float f1 = 3.14f(这里一般多写个f,因为默认系统是双精度,这里给它精准定位);
// 双精度double 占用空间:8字节 有效数字范围:15~16位有效数字 如double d1=3.14(这里不用加东西)
//输出:cout<<"f1="<<f1<<endl;
//eg:科学计数法:float f2 = 3e2;(如果e的后面是正数,这时候表示3*10^2;如果是负数,就是表示3*0.1^2)
//eg:默认情况下,输出一个小数,会显示出6位有效数字
//3、字符型(字母,用于现实单个字符)
// 语法:char 变量名称 = '单个字符',如'a';(这里记住是单引号,且一定是“单个字符”)
// 大小:C与C++中字符型变量大小为 1 字节
//字符型变量并不是把字符本身放到内存中存储,而是将对应的ASCLL编码放入存储单元,即a这个字符不会被放入内存储存,还是a对应的某个编码比如1,通过二进制等编码放入储存单元
//eg: char ch = 'a'; (这里的是随便写的,可以不是ch)
//打印:cout << (int) ch << endl;(这里在变量名称如ch前加(int)可以查看对应字符的如a的ASCll的编码,小写a是97大写A是65
//4、转义字符:用于表示一些不能显示出来的ASCLL字符(https://blog.csdn.net/a3192048/category_7787322.html), 通常以\n开头
// 一些常用的字符:\n:将当前位置转移到下一行 \n:将当前位置转移到本行当前 \\代表一个反斜杠字符\a响铃\t水平制表如cout<<""aaa\t123456(这里三个a,就占五个位置,目的是为了看着整齐)
//5、字符串型:用于表示一串字符(一些字符组合在一起就是字符串)
// 语法:C风格字符串:char 变量名 [] = "字符串值" (这里语法与字符的区别是多一个[],以及''变成了"")
// 语法:C++风格字符串:string 变量名 = "字符串值 "(eg:在用这个字符串之前要加一个头文件#include<string>,dev vs2019 xcode clion 不需要加)
//6、布尔数据类型 bool:在c++中代表真或假的一个值
// bool类型(大小1字节)只有两个值:
// true 真(本质是1) false 假(本质是0)
// 语法 bool 变量名 = true //除了0以外都是真
//7、数据的输入(输出是cout,对应的就是输出cin)
//列子:inta = 0 (这里用整型做例子,其他数据类型通用)
// cout<<"请给整型变量a赋值;"<<endl;
// cin>> a;
// cout<<"整型变量a ="<<endl;
//sizeof关键字(https://blog.csdn.net/cherrydreamsover/article/details/81057899)
//定义:
// sizeof是C/C++中的关键字,它是一个运算符,其作用是取得一个对象(数据类型或数据对象)的长度(即占用内存的大小,以byte为单位)
// 其中类型包括基本数据类型(不包括void)、用户自定义类型(结构体、类)、函数类型。数据对象是指用前面提到的类型定义的普通变量和指针变量(包含void指针)。
// eg:sizeof是运算符不是函数,是唯一一个以单词形式出现的运算符
//作用:
// 利用sizeof关键字可以统计数据类型所占内存大小
//实例(语法):
// sizeof(数据类型/变量)
//eg: short num1 = 10;
// cout<<"short占用内存空间为: " <<sizeof(short) <<endl;eg:可以把数据类型short换成上面的变量num1
//运算符:用于执行代码的运算
//类型:
// 算术运算符(用于处理四则运算)
// 1、 算术运算符中的加减乘除运算符:+代表加或者表示正数,-代表减或者表示负数,*代表乘,/代表除(两个int整数相除,结果仍然是整数,会将小数去除,如下面换成除打印后是3)
// eg:inta=10 int b=3 cout<<a+b<<endl;
// 2、 算术运算符中的取模(余)运算符:% (本质就是取余数)
// eg:inta=10 int b=3 cout<<a%b<<endl;
// 3、 算术运算符中的递增递减运算符:++代表递增,让变量+1;--代表递减,让变量-1
// eg:前置递增(递减):++(--)写在变量前面,表示先给变量+1(-1),再进行表达式运算,比如 int a =10 int b = ++a*10 那么cout<<“b的值为”<<b<<endl; b就等于110
// eg:后置递增(递减):++(--)写在变量后面,表示先进行表达式运算,再给变量+1(-1),比如 int a =10 int b = a++*10 那么cout<<“b的值为”<<b<<endl; b就等于100 (这里是,先让a赋值为10,再进行运算打印出b=100,最后进行后置赋值a=11)
// 赋值运算符,用于将表达式赋值给变量
// 1、 = int a = 10 a=100 cout<<"a的值为"<<a<<endl; 输出a为100
// 2、+= a =10 a+=2(=表示赋值,这里整句含义是a=a+2,) 输出为12
// =(赋值) +=(加等于) *=(乘等于)/=(除等于) %=(模等于) 类似上行
// 比较运算符,用于表达式的比较,并返回一个真值或假值
// = =(相等于) 4= =3 结果 0 inta=4 b=3 cout<<(4= =3)<<endl;
// ! =(不等于) 4= =3 结果 1
// < (小于) 4= =3 结果 0
// > (大于) 4= =3 结果 1
// <=(小于等于) 4= =3 结果 0
// >=(大于等于) 4= =3 结果 1
// 逻辑运算符,用与根据表达式中的值返回真值或假值
// 1、非:! 实例:!a 含义:如果a为真,则a为假;如果a为假,则a为真
// 2、与:&& 实例:a&&b 含义:若果a和b都为真,则结果为真(1),否则为假(0)
// 3、或:||(键盘中的右斜杠)实例:a||b 含义:如果a和b有一个为真 则结果为真,二者都为假是,结果为假 cout<<(||a)<<endl; 这里和与一样要加括号,但是上面的非!不要加括号
// eg: inta=10;(非0数都为真)
// intb=10;
// cout<<( a&&b )<<encdl;输出结果为 1(真)
// 程序流程结构(顺序结构,选择结构,循环结构)(https://www.bilibili.com/video/BV1et411b73Z?p=24)教学图
// 选择结构
// 1、单行if语句: if(条件){条件满足执行的语句}
// 列子:用户输入分数,如果分数大于600分,视为考上一本大学,在屏幕上输出
// 步骤:
// (1):用户输入分数
// int score = 0 (用一个变量去保存分数)
// cout<<"请输入一个分数:"<<endl;(提示用户输入)
// cin>> score; (从键盘获取分数)
//
// (2):打印用户输入的分数
// cout<<"您输入的分数为"<<score<<endl;
// (3):判断分数是否大于600,如果大于,那么输出
// if(score > 600)(这里语句后面不能加分号;http://bbs.itheima.com/thread-208805-1-1.html)
// {
// cout<<"恭喜你考上了一本大学"<<endl;
// }
// 2、多行格式if(条件){条件满足执行的语句}else{条件不满足执行的语句}
// 列子:用户输入分数,如果分数大于600分,视为考上一本大学,在屏幕上输出;如果没考上一本大学,则打印未考上一本大学
// 步骤:
// (1):用户输入分数
// int score = 0
// cout<<"输入一个分数:"<<endl;
// cin>> score;
//
// (2):提示用户输入的分数
// cout<<"您输入的分数为"<<score<<endl
//
// (3):判断: 如果大于600 则打印考上100 ,否则打印未考上100
// if(score>600)
// {
// cout<<"恭喜你考上一本"<<endl;
//
// }
// (上面跟1单句if条件语句一样,下面是处理,如果没考上一本大学的语句)
// else(不大于600分,执行else后大括号的内容)
// {
// cout<<"未考上一本大学"<<endl;
//
// }
// 3、多条件语句if(条件1){条件1满足的语句}else if(条件2){条件2满足的语句}....else(都不满足执行的语句)
// 列子:输入一个考试分数,如果大于600分,则视为一本大学,在屏幕打印
// 大于500,则视为考上二本大学,屏幕输出
// 大于400。则视为考上三本大学,屏幕输出
// 小于等于400,则视为未考上本科,屏幕上输出
// (1):用户输入分数
// int score = 0
// cout<<"请输入一个分数:"<<endl;
// cin>> score;
//
// (2):提示用户输入的分数
// cout<<"您输入的分数为"<<score<<endl
// (3):判断
// 判断1:(如果大于600,考上一本)
// if(score>600)
// {
// cout<<"恭喜您考上一本"<<endl;
// }
// 判断2:(如果大于500,考上二本)
// else if(score>500)
// {
// cout<<"恭喜您考上二本"<<endl;
// }
//
// 判断3:(如果大于400,则考上300)
// else if (score>400)
// {
// cout<<"恭喜您考上三本"<<endl;
// }
// 判断4:(前三个都不满足,则未考上)
// else
// {
// cout<<"未考上本科,请再接再厉。"<<endl;
// }
// 4、嵌套语句
// 列子:在上述多条件语句if的前提下,分数大于700考入北大,大于650考入清华,大于600考入人大
// 在上面大于600的情况下,再在{}内做一个多条件语句(小于六百跟直接写上述一样就行)
// if(score>600)
// {
// cout << "恭喜您考上一本" << endl;
// if (score > 700)
// {
// cout << "恭喜您考入被打" << endl;
// }
// else if (score > 650)
// {
// cout << "恭喜您考入清华" << endl;
//
// }
// else(score > 600)
// {
// cout << "恭喜您考入人大" << endl;
// }
// }
// 5、三目运算符(如果表达式1的值为真,执行表达式2,并返回表达式2的结果;)
// int main() {
//
//int a = 10;
//int b = 20;
//int c = 0;
//
//c = a > b ? a : b;
//cout << "c = " << c << endl;
//
C++中三目运算符返回的是变量,可以继续赋值
//
//(a > b ? a : b) = 100;
//
//cout << "a = " << a << endl;
//cout << "b = " << b << endl;
//cout << "c = " << c << endl;
//
//system("pause");
//return 0;
//}
//6、switch语句(int main() {
// 表达式:switch
//{
//
//case 结果1:执行语句; break;
//
// case 结果2:执行语句; break;
//
// ...
//
// default:执行语句; break;
//
//}
//例子:
//int main() {
//
// //请给电影评分
// //10 ~ 9 经典
// // 8 ~ 7 非常好
// // 6 ~ 5 一般
// // 5分以下 烂片
//
// int score = 0;
// cout << "请给电影打分" << endl;
// cin >> score;
//
// switch (score)
// {
// case 10:
// case 9:
// cout << "经典" << endl;
// break;
// case 8:
// cout << "非常好" << endl;
// break;
// case 7:
// case 6:
// cout << "一般" << endl;
// break;
// default:
// cout << "烂片" << endl;
// break;
// }
//
// system("pause");
//
// return 0;
//}
//4.2 循环结构while(循环条件) { 循环语句 }
//只要循环条件的结果为真,就执行循环语句
//int main() {
//
// int num = 0;
// while (num < 10)
// {
// cout << "num = " << num << endl;
// num++;
// }
//
// system("pause");
//
// return 0;
//}
//
//
//do…while循环语句
//**注意:**与while的区别在于do…while会先执行一次循环语句,再判断循环条件
//int main() {
//
// int num = 0;
//
// do
// {
// cout << num << endl;
// num++;
//
// } while (num < 10);
//
//
// system("pause");
//
// return 0;
//}
//
//
//for循环语句
//int main() {
//
// for (int i = 0; i < 10; i++)
// {
// cout << i << endl;
// }
//
// system("pause");
//
// return 0;
//}
//跳转语句
//1、break语句
//int main() {
// //1、在switch 语句中使用break
// 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;
//}
//
//
//int main() {
// //2、在循环语句中用break
// for (int i = 0; i < 10; i++)
// {
// if (i == 5)
// {
// break; //跳出循环语句
// }
// cout << i << endl;
// }
//
// system("pause");
//
// return 0;
//}
//
//2、 continue语句
//int main() {
//
// for (int i = 0; i < 100; i++)
// {
// if (i % 2 == 0)
// {
// continue;
// }
// cout << i << endl;
// }
//
// system("pause");
//
// return 0;
//}
//
//
//goto语句(解释:如果标记的名称存在,执行到goto语句时,会跳转到标记的位置)
//
//
//
//数组(所谓数组,就是一个集合,里面存放了相同类型的数据元素)
//eg1:数组中的每个数据元素都是相同的数据类型
//eg2:数组是由连续的内存位置组成的
//1、一维数组:(三种方式)
//数据类型 数组名[数组长度];
//数据类型 数组名[数组长度] = { 值1,值2 ... };
//数据类型 数组名[] = { 值1,值2 ... };
//int main() {
//
// //定义方式1
// //数据类型 数组名[元素个数];
// int score[10];
//
// //利用下标赋值
// score[0] = 100;
// score[1] = 99;
// score[2] = 85;
//
// //利用下标输出
// cout << score[0] << endl;
// cout << score[1] << endl;
// cout << score[2] << endl;
//
//
// //第二种定义方式
// //数据类型 数组名[元素个数] = {值1,值2 ,值3 ...};
// //如果{}内不足10个数据,剩余数据用0补全
// int score2[10] = { 100, 90,80,70,60,50,40,30,20,10 };
//
// //逐个输出
// //cout << score2[0] << endl;
// //cout << score2[1] << endl;
//
// //一个一个输出太麻烦,因此可以利用循环进行输出
// for (int i = 0; i < 10; i++)
// {
// cout << score2[i] << endl;
// }
//
// //定义方式3
// //数据类型 数组名[] = {值1,值2 ,值3 ...};
// int score3[] = { 100,90,80,70,60,50,40,30,20,10 };
//
// for (int i = 0; i < 10; i++)
// {
// cout << score3[i] << endl;
// }
//
// system("pause");
//
// return 0;
//}
//一维数组数组名
//一维数组名称的用途:
//(1)可以统计整个数组在内存中的长度
//(2)可以获取数组在内存中的首地址
//int main() {
//
// //数组名用途
// //1、可以获取整个数组占用内存空间大小
// int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };
//
// cout << "整个数组所占内存空间为: " << sizeof(arr) << endl;
// cout << "每个元素所占内存空间为: " << sizeof(arr[0]) << endl;
// cout << "数组的元素个数为: " << sizeof(arr) / sizeof(arr[0]) << endl;
//
// //2、可以通过数组名获取到数组首地址
// cout << "数组首地址为: " << (int)arr << endl;
// cout << "数组中第一个元素地址为: " << (int)&arr[0] << endl;
// cout << "数组中第二个元素地址为: " << (int)&arr[1] << endl;
//
// //arr = 100; 错误,数组名是常量,因此不可以赋值
//
//
// system("pause");
//
// return 0;
//}
//eg:数组名是常量,不可以赋值
//冒泡排序( 最常用的排序算法,对数组内元素进行排序)
//eg1比较相邻的元素。如果第一个比第二个大,就交换他们两个。
//eg2对每一对相邻元素做同样的工作,执行完毕后,找到第一个最大值。
//eg3重复以上的步骤,每次比较次数 - 1,直到不需要比较
//例子:将数组{ 4,2,8,0,5,7,1,3,9 } 进行升序排序
//int main() {
//
// int arr[9] = { 4,2,8,0,5,7,1,3,9 };
//
// for (int i = 0; i < 9 - 1; i++)
// {
// for (int j = 0; j < 9 - 1 - i; j++)
// {
// if (arr[j] > arr[j + 1])
// {
// int temp = arr[j];
// arr[j] = arr[j + 1];
// arr[j + 1] = temp;
// }
// }
// }
//
// for (int i = 0; i < 9; i++)
// {
// cout << arr[i] << endl;
// }
//
// system("pause");
//
// return 0;
//}
//二维数组(二维数组就是在一维数组上,多加一个维度。)
//二维数组定义的四种方式:
//
//1、数据类型 数组名[行数][列数];
//2、数据类型 数组名[行数][列数] = { {数据1,数据2 } ,{数据3,数据4 } };(直观,提高代码的可读性)
//3、数据类型 数组名[行数][列数] = { 数据1,数据2,数据3,数据4 };
//4、数据类型 数组名[][列数] = { 数据1,数据2,数据3,数据4 };
//
//二维数组数组名(二维数组名就是这个数组的首地址)
//int main() {
//
// //二维数组数组名
// 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;
//
// cout << "二维数组行数: " << sizeof(arr) / sizeof(arr[0]) << endl;
// cout << "二维数组列数: " << sizeof(arr[0]) / sizeof(arr[0][0]) << endl;
//
// //地址
// cout << "二维数组首地址:" << arr << endl;
// cout << "二维数组第一行地址:" << arr[0] << endl;
// cout << "二维数组第二行地址:" << arr[1] << endl;
//
// cout << "二维数组第一个元素地址:" << &arr[0][0] << endl;
// cout << "二维数组第二个元素地址:" << &arr[0][1] << endl;
//
// system("pause");
//
// return 0;
//}
//eg:对二维数组名进行sizeof时,可以获取整个二维数组占用的内存空间大小
|