)
一、注释1.单行注释Ctrl/ // 注释2.多行注释ShiftAltA /* 注释 */二、输入输出cin变量; cout变量;三、数据类型作用给变量分配一个合适的内存空间数据类型占用空间取值范围整型short(短整型)2字节int(整型)4字节long(长整型)4字节long long(长长整型)8字节实型浮点型float(单精度)4字节7位有效数字double(双精度)8字节15-16位有效数字字符型char1字节字符串型string①chat 变量名[] ②string 变量名 布尔类型bool1字节true\false四、转义字符转义字符描述\a警报\b退格将当前位置移到前一列\f换页将当前位置移到下一页开头\n换行将当前位置移到下一行开头\r回车将当前位置移到本行开头\t水平制表\v垂直制表\\代表一个反斜线字符\单引号\双引号\问号\00\ddd八进制转义字符\xhh16进制转义字符五、变量作用给一段制定的内存空间起名方便操作这段内存语法数据类型 变量名 变量初始值 int a 10;六、常量作用用于记录程序中不可更改的数据语法方式一#define 宏常量 #define 常量名 常量值 通常在文件上方定义表示一个常量 方式二const 修饰的变量 const 数据类型 变量名 常量值 通常在变量定义前加关键字const修饰该变量为常量不可修改七、关键字注在给变量和常量起名时不要用C的关键字。asmdoifreturntypedefautodoubleinlineshorttypeidbooldynamic_castintsignedtypenamebreakelselongsizeofunioncaseenummutablestaticunsignedcatchexplicitnamespacestatic_castusingcharexportnewstructvirtualclassexternoperatorswitchvoidconstfalseprivatetemplatevolatileconst_castfloatprotectedthiswchar_tcontinueforpublicthrowwhiledefaultfriendregistertruedeletegotoreinterpret_casttry八、标识符变量、常量命名规则标识符不能是关键字标识符只能由字母、数字、下划线组成第一个字符必须为字母或下划线标识符中字母区分大小写九、运算符1.算术运算符/%-*---前置和后置的区别前置递增递减先让变量1(-1)然后再进行表达式运算后置递增递减先进行表达式运算然后再让变量1(-1)。2.赋值运算符*/-%3.比较运算符!4.逻辑运算符运算符术语示例描述非!a如果a为假则为真如果a为真则为假与ab如果a与b都为真则结果为真否则为假||或a||b如果a和b有一个为真则结果为真二者都为假时结果为假十、程序流程结构1.顺序结构2.选择结构1if语句if条件{满足条件执行的语句} if条件{满足条件执行的语句} else {不满足条件执行的语句} if条件1{满足条件1执行的语句} else if 条件2{满足条件2执行的语句} ... else {不满足条件执行的语句} 嵌套if语句2三目运算符ab?a:b返回的是变量可以继续赋值3switch语句switch(表达式){ case 结果1执行语句; break; case 结果2执行语句; break; ... default执行语句; break; }3.循环结构1while循环while(表达式){ 循环语句; }2do...while循环do{ 循环语句; }while(表达式)3for循环for(起始表达式条件表达式末尾循环体){ 循环语句; }4.跳转语句break语句跳出选择结构或循环结构continue语句在循环语句中跳过本次循环中余下尚未执行的语句继续执行下一次循环goto语句可以无条件跳转语句#include iostream using namespace std; int main() { coutshort : sizeof(short)endl; goto FLAG; coutint : sizeof(int)endl; coutlong : sizeof(long)endl; FLAG: coutlong long : sizeof(long long)endl; return 0; } 结果 short : 2 long long : 8十一、数组1.一维数组数组就是一个集合里面存放了相同类型的数据元素。语法数据类型 数据名[数组长度]; 数据类型 数据名[数组长度] {值1值2....}; 数据类型 数据名[] {值1值2....};特点放在一块连续的内存空间中数组中每个元素都是相同数据类型数组元素下标从0开始一维数组名的用途可以统计整个数组在内存中的长度可以获得数组在内存中的首地址int arr[]{1,2,3}; coutsizeof(arr)endl; coutarrendl; cout(long long)arrendl; coutarr[0]endl; cout(long long)arr[0]endl; 结果 0x61fe14 6422036 0x61fe14 6422036冒泡排序算法#include iostream #include math.h using namespace std; int main() { int arr[]{4,2,8,0,5,7,1,3,9}; int nsizeof(arr)/sizeof(arr[0]); for(int i0;in;i){ coutarr[i] ; } coutendl; for(int i0;in/21;i){ for(int j0;jn-i-1;j){ int temp0; if(arr[j]arr[j1]){ temparr[j]; arr[j]arr[j1]; arr[j1]temp; } } } for(int i0;in;i){ coutarr[i] ; } coutendl; return 0; } 结果 4 2 8 0 5 7 1 3 9 0 1 2 3 4 5 7 8 92.二维数组语法数据类型 数据名[行数][列数]; 数据类型 数据名[行数][列数] {{值1值2}{值3值4}}; 数据类型 数据名[行数][列数] {值1值2值3值4}; 数据类型 数据名[][列数] {值1值2值3值4};十二、函数作用将一段经常使用的代码封装起来减少重复代码。语法1.无参无返 返回值类型 函数名{ 函数体语句 } 2.有参无返 void 函数名形式参数列表{ 函数体语句 } 3.无参有返 返回值类型 函数名{ 函数体语句 return 表达式; } 4.有参有返 返回值类型 函数名形式参数列表{ 函数体语句 return 表达式; }函数的调用语法方式一函数在main函数前面定义的调用方式 函数名实际参数 方式二函数在main函数后面定义的调用方式 函数声明返回值类型 函数名 函数名实际参数值传递函数调用时实参将数值传入给形参如果函数的形参发生变化并不会影响实参。#include iostream using namespace std; void swap(int c,int d){ int tempc; cd; dtemp; } int main() { int a2,b6; swap(a,b); coutaendl; coutbendl; } 结果 2 6十三、指针作用可以通过指针间接访问内存内存编号是从0开始记录的一般十六进制数字表示可以利用指针变量保存地址语法数据类型 * 变量名1.定义指针 int a10; int * p; // 方式一 p a; // 方式二 // int * p a; 2.使用指针 *P 5;无论什么数据类型指针都是占8个字节空间大小。空指针指针变量指向内存中编号为0的空间用途初始化指针变量注意空指针是不可以访问的0-255之间的内存编号是系统占用的因此不可以访问int * p NULL;野指针指针变量指向非法的内存空间const修饰指针1const修饰指针——常量指针const int * p a; 特点指针的指向可以修改但是指针的值不可以修改2const修饰常量——指针常量int * const p a;特点指针的指向不可以修改但是指针的值可以修改3const即修饰指针又修饰常量const int * const p a;特点指针的指向不可以修改指针的值也不可以修改指针和数组int arr[5]{1,2,3,4,5}; cout第一个元素为arr[0]endl; int * p arr; cout第一个元素为*pendl; cout第二个元素为*pendl;指针和函数地址传递#include iostream using namespace std; void swap(int *c,int *d){ int temp*c; *c*d; *dtemp; } int main() { int a2,b6; swap(a,b); coutaendl; coutbendl; } 结果 6 2#include iostream #include math.h using namespace std; void bubbleSort(int n,int *arr){ for(int i0;in/21;i){ for(int j0;jn-i-1;j){ int temp0; if(arr[j]arr[j1]){ temparr[j]; arr[j]arr[j1]; arr[j1]temp; } } } } void print(int n,int *arr){ for(int i0;in;i){ coutarr[i] ; } coutendl; } int main() { int arr[]{4,2,8,0,5,7,1,3,9}; int nsizeof(arr)/sizeof(arr[0]); cout排序前; print(n,arr); bubbleSort(n,arr); cout排序后; print(n,arr); return 0; } 结果 排序前4 2 8 0 5 7 1 3 9 排序后0 1 2 3 4 5 7 8 9十四、结构体概念用户自定义的数据类型允许用户存储不同的数据类型语法struct 结构体名 { 结构体成员列表 }通过结构体创建变量的方式有三种struct可以省略struct 结构体名 变量名struct 结构体名 变量名 {成员1值 成员2值...}定义结构体时顺便创建变量#include iostream using namespace std; // 结构体定义 struct Student{ // 成员列表 string name; int age; int score; }s3; int main(){ struct Student s1; s1.name张三; s1.age18; s1.score90; cout姓名s1.name,年龄s1.age,成绩s1.scoreendl; struct Student s2{张三,18,90}; cout姓名s2.name,年龄s2.age,成绩s2.scoreendl; s3.name李四; s3.age18; s3.score90; cout姓名s3.name,年龄s3.age,成绩s3.scoreendl; return 0; }结构体数组作用将自定义的结构体放入到数组中方便维护语法struct 结构体名 数组名[元素个数] {{}{}...{}}#include iostream using namespace std; // 结构体定义 struct Student{ // 成员列表 string name; int age; int score; }; int main(){ struct Student arr[3]{ {张三,18,90}, {李四,18,90}, {王五,18,90}, }; for(int i0;i3;i){ cout姓名arr[i].name,年龄arr[i].age,成绩arr[i].scoreendl; } return 0; }结构体指针作用通过指针访问结构体中的成员利用操作符 - 可以通过结构体指针访问结构体属性#include iostream using namespace std; // 结构体定义 struct Student{ // 成员列表 string name; int age; int score; }; int main(){ struct Student s{张三,18,90}; cout姓名s.name,年龄s.age,成绩s.scoreendl; struct student * p s; cout姓名p-name,年龄p-age,成绩p-scoreendl; return 0; }嵌套结构体作用结构体中的成员可以是另一个结构体例如每个老师辅导一个学员一个老师的结构体中记录一个学生的结构体总结在结构体中可以定义另一个结构体作为成员用来解决实际问题#include iostream using namespace std; // 结构体定义 struct Student{ // 成员列表 string name; int age; int score; }; struct teacher{ int id; string name; int age; struct Student stu; } int main(){ teacher t; t.id 10000; t.name 老王; t.age 50; t.stu.name 小王; t.stu.age 20; t.stu.score 60; cout老师姓名t.name,老师编号t.id,老师年龄t.age学生姓名t.stu.name,学生年龄t.stu.age,学生成绩t.stu.scoreendl; return 0; }结构体做函数参数作用将结构体作为参数向函数中传递传递方式有两种值传递地址传递#include iostream using namespace std; // 结构体定义 struct Student{ // 成员列表 string name; int age; int score; }; // 值传递 void printStudent1(student s){ s.age 28; cout姓名s.name,年龄s.age,成绩s.scoreendl; } // 地址传递 void printStudent2(student * p){ p-age 28; cout姓名p-name,年龄p-age,成绩p-scoreendl; } int main(){ struct Student s{张三,18,90}; printStudent1(s); cout姓名p-name,年龄p-age,成绩p-scoreendl; printStudent2(s); cout姓名p-name,年龄p-age,成绩p-scoreendl; return 0; } 结果 张三,28,90 张三,18,90 张三,28,90 张三,28,90结构体中const使用场景作用用const来防止误操作#include iostream using namespace std; // 结构体定义 struct Student{ // 成员列表 string name; int age; int score; }; void printStudent2(const student * p){ p-age 28; // 加入const之后一旦有修改的操作就会报错可以防止我们误操作 cout姓名p-name,年龄p-age,成绩p-scoreendl; } int main(){ struct Student s{张三,18,90}; printStudent(s); cout姓名p-name,年龄p-age,成绩p-scoreendl; return 0; }实例通讯录管理系统系统需求添加联系人想通讯录中添加新人信息包括姓名、性别、年龄、联系电话、家庭住址最多记录1000人显示联系人显示通讯录中所有联系人信息删除联系人按照姓名进行删除指定联系人查找联系人按照姓名查看指定联系人信息修改联系人按照姓名重新修改指定联系人清空联系人清空通讯录中所有信息退出通讯录退出当前使用的通讯录#include iostream #include string using namespace std; #define NUM 1000 // 通讯录最多人数 // 菜单界面 void showMeun(){ cout1.添加联系人endl; cout2.显示联系人endl; cout3.删除联系人endl; cout4.查找联系人endl; cout5.修改联系人endl; cout6.清空联系人endl; cout0.退出通讯录endl; } struct Person{ string name; int sex; int age; string phone; string address; }; struct Addressbooks{ struct Person p[NUM]; int size; // 当前通讯录人数 }; // 1.添加联系人函数 void addPerson(Addressbooks * abs){ if(abs-sizeNUM){ cout通讯录已满无法添加。endl; } else{ cout请输入姓名endl; string name; cinname; abs-p[abs-size].namename; while(true){ cout请输入性别(1.男 2.女)endl; int sex 0; cinsex; if(sex 1 || sex 2){ abs-p[abs-size].sexsex; break; } cout输入有误请重新输入。endl; } cout请输入年龄endl; int age0; cinage; abs-p[abs-size].ageage; cout请输入手机号endl; string phone; cinphone; abs-p[abs-size].phonephone; cout请输入地址endl; string address; cinaddress; abs-p[abs-size].addressaddress; // 更新通讯录人数 abs-size; cout添加成功endl; // 按任意键继续 system(pause); // 清屏操作 system(cls); } } // 2.显示联系人函数 void showPerson(Addressbooks * abs){ if (abs-size 0){ cout当前记录为空endl; } else{ for(int i0;iabs-size;i){ cout姓名abs-p[i].name\t; cout性别(abs-p[i].sex1?男:女)\t; cout年龄abs-p[i].age\t; cout电话abs-p[i].phone\t; cout地址abs-p[i].addressendl; } } // 按任意键继续 system(pause); // 清屏操作 system(cls); } // 检测联系人是否存在 int isExist(Addressbooks * abs, string name){ for(int i0;iabs-size;i){ if(abs-p[i].namename){ return i; } } return -1; } // 3.删除联系人函数 void deletePerson(Addressbooks * abs){ cout请输入要删除的联系人endl; string name; cinname; int ret isExist(abs,name); if(ret ! -1){ for(int iret;iabs-size;i){ abs-p[i]abs-p[i1]; } abs-size--; cout删除成功endl; } else{ cout查无此人endl; } // 按任意键继续 system(pause); // 清屏操作 system(cls); } // 4.查看联系人函数 void findPerson(Addressbooks * abs){ cout请输入要查看的联系人endl; string name; cinname; int ret isExist(abs,name); if(ret!-1){ cout姓名abs-p[ret].name\t; cout性别abs-p[ret].sex\t; cout年龄abs-p[ret].age\t; cout电话abs-p[ret].phone\t; cout住址abs-p[ret].addressendl; } else{ cout查无此人endl; } // 按任意键继续 system(pause); // 清屏操作 system(cls); } // 5.修改联系人函数 void modifyPerson(Addressbooks * abs){ cout请输入要修改的联系人姓名endl; string name; cinname; int ret isExist(abs,name); if(ret!-1){ string name; cout姓名endl; cinname; abs-p[ret].namename; while(true){ cout性别(1.男 2.女)endl; int sex0; cinsex; if(sex1||sex2){ abs-p[ret].sexsex; break; } else{ cout输入有误请重新输入endl; } } cout年龄endl; int age0; cinage; abs-p[ret].ageage; cout电话endl; string phone; cinphone; abs-p[ret].phonephone; cout住址endl; string address; cinaddress; abs-p[ret].addressaddress; } else{ cout查无此人endl; } // 按任意键继续 system(pause); // 清屏操作 system(cls); } void cleanPerson(Addressbooks * abs){ abs-size0; cout通讯录已经清空endl; // 按任意键继续 system(pause); // 清屏操作 system(cls); } int main(){ Addressbooks abs; abs.size0; int select 0; while(true){ showMeun(); cinselect; switch(select){ case 1: addPerson(abs); break; case 2: showPerson(abs); break; case 3: deletePerson(abs); break; case 4: findPerson(abs); break; case 5: modifyPerson(abs); break; case 6: cleanPerson(abs); break; case 0: cout欢迎下次使用endl; return 0; break; } } return 0; }课程12 通讯录管理系统-清空通讯录哔哩哔哩bilibili