#define是宏常量相当于全局变量关键字标识符sizeof求关键字所占内存大小字符型转义字符字符串bool数据类型cin变量 数据的输入cout“话” 变量endl; 输出逻辑运算与或非单行if多重if语句多重条件判断嵌套if语句小猪称体重三目运算符swith选择结构语句前面都不满足就default优点是效率更高判断条件更直接。自己练习循环语句结构注意避免死循环出现。。数组的自动内存管理push_back函数指针指针其实是所指元素的地址水仙花数的问题#include iostream using namespace std; int main() { int num 100;//定义一个三位数的开头 do { int a 0;//个位 int b 0;//十位 int c 0;//百位 a num % 10;//个位数 例如153 153%103 b num / 10 % 10;//十位 153/10%105 c num /100;//百位 153/1001 if (a * a * a b * b * b c * c * c num) { cout num endl;//输出 } num;//num递增判断 } while (num 1000);//到1000就停止 }乘法表问题-考察嵌套循环#includeiostream using namespace std; int main() { for (int i 1; i 9; i) { for (int j 1; j i; j) { cout i * j i * j ; } cout endl; } }switch-case算法continue执行到本行代码不再往下执行了。直接进行下一次循环不输出也不干啥。用来输出特殊的数字筛选条件执行到此就不再向下执行直接进行下一次循环。而break是跳出循环。goto语句跳转使用跳来跳去一般不用破坏代码结构。三只小猪称体重考察自己定义一个max值元素逆置#includeiostream using namespace std; int main() { int arry[5] { 10,2,6,5,9 }; int start 0; int end sizeof(arry) / sizeof(arry[0]) - 1;//找到数组元素的最后一个数据的下标 while (startend) {//进行循环 int temp arry[start];//定义一个中间值用来存放start的值 arry[start] arry[end];//交换数据元素进行元素逆置 arry[end] temp; start; end--; } cout 逆置后的元素为 endl; for (int i 0; i 5; i) { cout arry[i] endl; } }冒泡排序排序的总轮数元素个数-1每轮对比数元素个数-排序轮数-1#includeiostream using namespace std; int main() { int arry[6] { 10,4,6,80,3,2 }; for (int i 0; i 6 - 1; i)//排序大轮数总轮数总元素个数-1 { for (int j 0; j 6 - i - 1; j) //内部每一次轮数总元素个数-第几轮即i-1 { if (arry[j] arry[j 1]) { int temp arry[j]; arry[j] arry[j 1]; arry[j 1] temp; } } } cout 排序后为 endl; for (int k 0; k 6; k) { cout arry[k] endl; } }二维数组如何遍历二维数组外层循环打印行数内层循环打印列数数据类型 数组名【行数】【列数】{数据1数据2数据3.....}int scores[3][3] { { 90,100,150 }, { 90,50,100 }, { 60,70,80 } }; string name[3] {kevin,tim,wangwang};二维数组用途查看占用内存空间大小依旧sizeof()根据数据类型和数据量决定。可以看总的行的列的某元素怎么求行数用总长度除以每一行占用内存空间就可以知道行数sizeof(arry)/sizeof(arry[0])怎么求列数知道一行所占的内存空间再除以每一个元素所占的内存空间就可以知道有多少列sizeof(arry[0]/sizeof(arry[0][0]))查看二维数组首地址coutarryendl; //(int)arry是强制转换成int类型首地址第一行数据的地址跟首地址一样 访问具体元素的地址注要加取地址符 cout (int)arry[0][0]endl;考试成绩统计-----二维数组应用实例#includeiostream #includestring//用字符串的时候要记得包含头文件 using namespace std; int main() { int scores[3][3] { { 90,100,150 }, { 90,50,100 }, { 60,70,80 } }; string name[3] {kevin,tim,wangwang};//字符串定义需要注意 for (int i 0; i 3; i)//行 { int sum 0;//sum要定义成局部变量定义在第一层里面不然就会不断累加 for (int j 0; j 3; j)//列 { sum scores[i][j]; } cout name[i] 的成绩为 sum endl;//注意变量位置决定输出语句位置。 } }函数函数调用//先定义一个函数 int add(int sum1,int sum2)//只是一个形式上的参数属于形参。 { int sumnum1num2; return sum; } //调用函数 int main(){ int a10;//实参 int b20;//实参 int cadd(a,b);//函数调用实参值传递给形参。算出结果赋值给c。 } //值传递,形参修饰或改变不了实参。 //首先定义一个函数实现两个数字进行交换的函数不需要返回值如果不需要返回值可以声明的时写成void. void swap(int num1,int num2) { int tempnum1; num1num2; num2temp; return; //不需要返回值直接写个return或啥都不写。 } int main(){ int a10; int b20; swap(a,b); couta; coutb; } //常见的函数样式 1. 无参无返 void test01() { couthello,worldendl; } 2. 有参无返 void test02(int a){ coutaendl; } 3. 无参有返 int test03(){ return 1000; } 4. 有参有返 int test04(int a,int b){ return 200; } //函数的声明 要先声明函数(表明存在)或者先定义函数到底怎么写的定义只能有一次才能放在main()里面执行。 //函数声明怎么写 int max(int a,int b);//不写具体的代码实现只是先声明有这么个东西。 //函数的分文件编写 1. 创建后缀名问.h的头文件 2. 创建后缀名为.cpp的源文件 3. 在头文件中写函数的声明 4. 在源文件中写函数的定义指针1.指针的基本概念 概念指针指向的是数据实类的地址 2. 如何定义一个指针:数据类型 *指针变量名 int a10; int *p;// 指针记录变量的地址 pa; cout“指针p等于 ”p; 3. 如何使用指针 //通过解引用的方式找到指针指向的内存 //指针前面加*代表解引用找到指针指向的内存中的数据 *p1000;//找到p指向的内存中的数据已经修改了解引用操作取地址对应的值 4. 指针很所占的内存空间 32位下占4字节。 int a10; int *p;//int *pa;直接建立关系 pa; coutsizeof(int *)sizeof(p)endl; 5. 空指针和野指针 空指针指针变量指向内存中编号为0的空间 int *pnull; 用途初始化指针变量 注意空指针指向的内存是不可以访问的 野指针避免出现指针变量指向非法的内存空间 int *p(int *)0x1100;//没权利操纵这块内存 6. const修饰指针 6.1 常量指针 int a10; int b10; int *pa; const int * pa;//指针的指向可以修改但是指针指向的值不能修改 6.2 指针常量 int * const pa; //指针的指向不可以改但是指针指向的值可以改 6.3 既修饰指针又修饰常量 const int * const pa;//都不能改//*就是指针const是常量 7. 指针和数组 int arr[5]{1,5,2,6,8}; int * parr;//arr就是数组首地址 p;//指针向后偏移四个字节 cout*pendl;//访问第二个元素 8. 指针和函数 8.1 值传递 略 8.2地址传递 void swap02(int *p1,int *p2){ int temp*p1; *p1*p2; *p2temp; } int main(){ int a10; int b20; swap(a,b); }封装一个函数利用冒泡排序实现对整形数组的升序排列 例如数组 int arr[10]{4,3,6,9,1,2,10,8,7,5}; #includeiostream using namespace std; void paixu(int* arry, int len)//len只需传递参数副本所以不用指针而arry是要该改变数组的值的所以需要使用指针传递 { for (int i 0; i len - 1; i) { for (int j 0; j len - i - 1; j) { if (arry[j] arry[j 1]) { int temp arry[j]; arry[j] arry[j 1]; arry[j 1] temp; } } } } void printarry(int* arry, int len) { for (int i 0; i len; i) { cout 排序后为 arry[i] endl; } } int main() { int arry[6] { 10,8,60,2,4,3 }; int len sizeof(arry) / sizeof(arry[0]); paixu(arry, len); printarry(arry, len); }结构体1. 结构体的基本概念、定义与使用 #includeiostream #includestring using namespace std; //自定义数据类型就是一些类型集合组成的一个类型 //语法 struct 类型名称{成员列表} struct student { string name; int age; int score; }s3;//在创建的时候就顺便搞了一个结构体变量s3。 //在main()函数中创建结构体变量 //1. struct student s1; int main() { struct student s1;//struct创建变量时候struct可以省略 s1.name 张三; s1.age 18; s1.score 80; //2.创建以后就直接赋值 struct student s2 { 李四,19,60 }; //3. 在定义结构体的时候就顺便创建一个结构体变量 struct student { string name; int age;//用点儿. int score; }s3;//在创建的时候就顺便搞了一个结构体变量s3。 }#includeiostream #includestring using namespace std; //结构体数组 //语法 struct 结构体名 数组名[元素个数]{{}{}{}....{}} //例子 //1. 定义结构体 struct MyStruct { string name; int age; int score; }; int main() { //2. 创建结构体数组 struct MyStruct stu[3] { {张三,18,100}, {lisi,28,99}, {wangwu,30,96} }; //3. 给结构体数组中的元素赋值 stu[2].name zhaoliu;//the struct can change. //4. 遍历结构体数组 for (int i 0; i 3; i) { cout 姓名 stu[i].name endl; } }#includeiostream #includestring using namespace std; //结构体指针 struct stud { string name; int age; int score; }; int main() { //1. 创建学生结构体变量 stud stu { lily,18,100 }; //2. 通过指针指向结构体变量 //int* p s; 会报错数据类型不对 stud * p stu; //3. 通过指针访问结构体变量中的数据 cout stuname p-name;//用-访问里面的属性也就是值 }