当前位置: 首页 > news >正文

网站域名和空间费用wordpress是是什么技术

网站域名和空间费用,wordpress是是什么技术,软件开发周期,wordpress主题背景C基础入门 1 C初识1.1 创建一个C程序1.1.1 创建项目1.1.2 创建文件1.1.3 编写代码1.1.4 运行程序 1.2 注释1.3 变量1.4 常量1.5 关键字1.6 标识符命名规则 2 数据类型2.1 整型2.2 sizeof关键字2.3 实型#xff08;浮点型#xff09;2.4 字符型2.5 转义字符2.6 字符串型2.7 布… C基础入门 1 C初识1.1 创建一个C程序1.1.1 创建项目1.1.2 创建文件1.1.3 编写代码1.1.4 运行程序 1.2 注释1.3 变量1.4 常量1.5 关键字1.6 标识符命名规则 2 数据类型2.1 整型2.2 sizeof关键字2.3 实型浮点型2.4 字符型2.5 转义字符2.6 字符串型2.7 布尔类型 bool2.8 数据的输入 3 运算符3.1 算术运算符3.2 赋值运算符3.3 比较运算符3.4 逻辑运算符 4 程序流程结构4.1 选择结构4.1.1 if语句4.1.2 三目运算符4.1.3 switch语句 4.2 循环结构4.2.1 while循环语句4.2.2 do...while循环语句4.2.3 for循环语句4.2.4 嵌套循环 4.3 跳转语句4.3.1 break语句4.3.2 continue语句4.3.3 goto语句 5 数组5.1 概述5.2 一维数组5.2.1 一维数组定义方式5.2.2 一维数组数组名5.2.3 冒泡排序 5.3 二维数组5.3.1 二维数组定义方式5.3.2 二维数组数组名5.3.3 二维数组应用案例 6 函数6.1 概述6.2 函数的定义6.3 函数的调用6.4 值传递6.5 函数的常见样式6.6 函数的声明6.7 函数的分文件编写 7 指针7.1 指针的基本概念7.2 指针变量的定义和使用7.3 指针所占内存空间7.4 空指针和野指针7.4.1 空指针7.4.2 野指针 7.5 const修饰指针7.6 指针和数组7.7 指针和函数7.8 指针配合数组和函数使用(封装冒泡排序函数) 8 结构体8.1 结构体基本概念8.2 结构体定义和使用8.3 结构体数组8.4 结构体指针8.5 结构体嵌套结构体8.6 结构体做函数参数8.7 结构体中const使用场景8.8 结构体案例8.8.1 案例18.8.2 案例2 1 C初识 1.1 创建一个C程序 编写一个C程序总共分为4个步骤 创建项目创建文件编写代码运行程序 1.1.1 创建项目 打开Visual Studio 1.1.2 创建文件 右键源文件选择添加-新建项 C文件起个名称然后点击添加。 1.1.3 编写代码 #includeiostream using namespace std;int main() {cout Hello world endl;system(pause);return 0; }1.1.4 运行程序 1.2 注释 作用在代码中加一些说明和解释方便自己或其他程序员程序员阅读代码 两种格式 单行注释// 描述信息 通常放在一行代码的上方或者一条语句的末尾对该行代码说明 多行注释 /* 描述信息 */ 通常放在一段代码的上方对该段代码做整体说明 提示编译器在编译代码时会忽略注释的内容 1.3 变量 作用给一段指定的内存空间起名方便操作这段内存 语法数据类型 变量名 初始值; 示例 #includeiostream using namespace std;int main() {//变量的定义//语法数据类型 变量名 初始值int a 10;cout a a endl;system(pause);return 0; }注意 C在创建变量时必须给变量一个初始值否则会报错 1.4 常量 作用用于记录程序中不可更改的数据 C定义常量两种方式 #define 宏常量 #define 常量名 常量值 通常在文件上方定义表示一个常量 const修饰的变量 const 数据类型 常量名 常量值 通常在变量定义前加关键字const修饰该变量为常量不可修改 示例 //1、宏常量 #define day 7int main() {cout 一周里总共有 day 天 endl;//day 8; //报错宏常量不可以修改//2、const修饰变量const int month 12;cout 一年里总共有 month 个月份 endl;//month 24; //报错常量是不可以修改的system(pause);return 0; }1.5 关键字 作用 关键字是C中预先保留的单词标识符 在定义变量或者常量时候不要用关键字 C关键字如下 asmdoifreturntypedefautodoubleinlineshorttypeidbooldynamic_castintsignedtypenamebreakelselongsizeofunioncaseenummutablestaticunsignedcatchexplicitnamespacestatic_castusingcharexportnewstructvirtualclassexternoperatorswitchvoidconstfalseprivatetemplatevolatileconst_castfloatprotectedthiswchar_tcontinueforpublicthrowwhiledefaultfriendregistertruedeletegotoreinterpret_casttry 提示在给变量或者常量起名称时候不要用C得关键字否则会产生歧义。 1.6 标识符命名规则 作用C规定给标识符变量、常量命名时有一套自己的规则 标识符不能是关键字标识符只能由字母、数字、下划线组成第一个字符必须为字母或下划线标识符中字母区分大小写 建议给标识符命名时争取做到见名知意的效果方便自己和他人的阅读 2 数据类型 C规定在创建一个变量或者常量时必须要指定出相应的数据类型否则无法给变量分配内存 2.1 整型 作用整型变量表示的是整数类型的数据 C中能够表示整型的类型有以下几种方式区别在于所占内存空间不同 数据类型占用空间取值范围short(短整型)2字节(-2^15 ~ 2^15-1)int(整型)4字节(-2^31 ~ 2^31-1)long(长整形)Windows为4字节Linux为4字节(32位)8字节(64位)(-2^31 ~ 2^31-1)long long(长长整形)8字节(-2^63 ~ 2^63-1) 2.2 sizeof关键字 **作用**利用sizeof关键字可以统计数据类型所占内存大小 语法 sizeof( 数据类型 / 变量) 示例 cout short 类型所占内存空间为 sizeof(short) endl; // 2cout int 类型所占内存空间为 sizeof(int) endl; // 4cout long 类型所占内存空间为 sizeof(long) endl; // 4cout long long 类型所占内存空间为 sizeof(long long) endl; // 8整型结论short int long long long 2.3 实型浮点型 作用用于表示小数 浮点型变量分为两种 单精度float双精度double 两者的区别在于表示的有效数字范围不同。 数据类型占用空间有效数字范围float4字节7位有效数字double8字节1516位有效数字 示例 int main() {float f1 3.14f;double d1 3.14;cout f1 endl;cout d1 endl;cout float sizeof sizeof(f1) endl; // 4cout double sizeof sizeof(d1) endl; // 8//科学计数法float f2 3e2; // 3 * 10 ^ 2 cout f2 f2 endl;float f3 3e-2; // 3 * 0.1 ^ 2cout f3 f3 endl;system(pause);return 0; }2.4 字符型 作用 字符型变量用于显示单个字符 语法char ch a; 注意1在显示字符型变量时用单引号将字符括起来不要用双引号 注意2单引号内只能有一个字符不可以是字符串 C和C中字符型变量只占用1个字节。字符型变量并不是把字符本身放到内存中存储而是将对应的ASCII编码放入到存储单元 示例 int main() {char ch a;cout ch endl;cout sizeof(char) endl;//ch abcde; //错误不可以用双引号//ch abcde; //错误单引号内只能引用一个字符cout (int)ch endl; //查看字符a对应的ASCII码ch 97; //可以直接用ASCII给字符型变量赋值cout ch endl;system(pause);return 0; }ASCII码表格 ASCII值控制字符ASCII值字符ASCII值字符ASCII值字符0NUT32(space)6496、1SOH33!65A97a2STX3466B98b3ETX35#67C99c4EOT36$68D100d5ENQ37%69E101e6ACK3870F102f7BEL39,71G103g8BS40(72H104h9HT41)73I105i10LF42*74J106j11VT4375K107k12FF44,76L108l13CR45-77M109m14SO46.78N110n15SI47/79O111o16DLE48080P112p17DCI49181Q113q18DC250282R114r19DC351383S115s20DC452484T116t21NAK53585U117u22SYN54686V118v23TB55787W119w24CAN56888X120x25EM57989Y121y26SUB58:90Z122z27ESC59;91[123{28FS6092/124|29GS6193]125}30RS6294^12631US63?95_127DEL ASCII 码大致由以下两部分组成 ASCII 非打印控制字符 ASCII 表上的数字 0-31 分配给了控制字符用于控制像打印机等一些外围设备。ASCII 打印字符数字 32-126 分配给了能在键盘上找到的字符当查看或打印文档时就会出现。 2.5 转义字符 作用 用于表示一些不能显示出来的ASCII字符 现阶段我们常用的转义字符有 \n \\ \t 转义字符含义ASCII码值十进制\a警报007\b退格(BS) 将当前位置移到前一列008\f换页(FF)将当前位置移到下页开头012\n换行(LF) 将当前位置移到下一行开头010\r回车(CR) 将当前位置移到本行开头013\t水平制表(HT) 跳到下一个TAB位置009\v垂直制表(VT)011\\代表一个反斜线字符092’代表一个单引号撇号字符039代表一个双引号字符034?代表一个问号063\0数字0000\ddd8进制转义字符d范围0~73位8进制\xhh16进制转义字符h范围09afA~F3位16进制 2.6 字符串型 作用用于表示一串字符 两种风格 C风格字符串 char 变量名[] 字符串值 示例 int main() {char str1[] hello world;cout str1 endl;system(pause);return 0; }注意C风格的字符串要用双引号括起来 C风格字符串 string 变量名 字符串值 示例 int main() {string str hello world;cout str endl;system(pause);return 0; }注意C风格字符串需要加入头文件#includestring 2.7 布尔类型 bool 作用 布尔数据类型代表真或假的值 bool类型只有两个值 true — 真本质是1false — 假本质是0 bool类型占1个字节大小 示例 int main() {bool flag true;cout flag endl; // 1flag false;cout flag endl; // 0cout size of bool sizeof(bool) endl; //1system(pause);return 0; }2.8 数据的输入 作用用于从键盘获取数据 关键字 cin 语法 cin 变量 示例 int main(){//整型输入int a 0;cout 请输入整型变量 endl;cin a;cout a endl;//浮点型输入double d 0;cout 请输入浮点型变量 endl;cin d;cout d endl;//字符型输入char ch 0;cout 请输入字符型变量 endl;cin ch;cout ch endl;//字符串型输入string str;cout 请输入字符串型变量 endl;cin str;cout str endl;//布尔类型输入bool flag true;cout 请输入布尔型变量 endl;cin flag;cout flag endl;system(pause);return EXIT_SUCCESS; }3 运算符 **作用**用于执行代码的运算 本章我们主要讲解以下几类运算符 运算符类型作用算术运算符用于处理四则运算赋值运算符用于将表达式的值赋给变量比较运算符用于表达式的比较并返回一个真值或假值逻辑运算符用于根据表达式的值返回真值或假值 3.1 算术运算符 作用用于处理四则运算 算术运算符包括以下符号 运算符术语示例结果正号33-负号-3-3加10 515-减10 - 55*乘10 * 550/除10 / 52%取模(取余)10 % 31前置递增a2; ba;a3; b3;后置递增a2; ba;a3; b2;–前置递减a2; b–a;a1; b1;–后置递减a2; ba–;a1; b2; 示例1 //加减乘除 int main() {int a1 10;int b1 3;cout a1 b1 endl;cout a1 - b1 endl;cout a1 * b1 endl;cout a1 / b1 endl; //两个整数相除结果依然是整数int a2 10;int b2 20;cout a2 / b2 endl; int a3 10;int b3 0;//cout a3 / b3 endl; //报错除数不可以为0//两个小数可以相除double d1 0.5;double d2 0.25;cout d1 / d2 endl;system(pause);return 0; }总结在除法运算中除数不能为0 示例2 //取模 int main() {int a1 10;int b1 3;cout 10 % 3 endl;int a2 10;int b2 20;cout a2 % b2 endl;int a3 10;int b3 0;//cout a3 % b3 endl; //取模运算时除数也不能为0//两个小数不可以取模double d1 3.14;double d2 1.1;//cout d1 % d2 endl;system(pause);return 0; }总结只有整型变量可以进行取模运算 示例3 //递增 int main() {//后置递增int a 10;a; //等价于a a 1cout a endl; // 11//前置递增int b 10;b;cout b endl; // 11//区别//前置递增先对变量进行再计算表达式int a2 10;int b2 a2 * 10;cout b2 endl; // 110//后置递增先计算表达式后对变量进行int a3 10;int b3 a3 * 10;cout b3 endl; // 100system(pause);return 0;}总结前置递增先对变量进行再计算表达式后置递增相反 3.2 赋值运算符 作用 用于将表达式的值赋给变量 赋值运算符包括以下几个符号 运算符术语示例结果赋值a2; b3;a2; b3;加等于a0; a2;a2;-减等于a5; a-3;a2;*乘等于a2; a*2;a4;/除等于a4; a/2;a2;%模等于a3; a%2;a1; 3.3 比较运算符 作用 用于表达式的比较并返回一个真值或假值 比较运算符有以下符号 运算符术语示例结果相等于4 30!不等于4 ! 31小于4 30大于4 31小于等于4 30大于等于4 11 示例 int main() {int a 10;int b 20;cout (a b) endl; // 0 cout (a ! b) endl; // 1cout (a b) endl; // 0cout (a b) endl; // 1cout (a b) endl; // 0cout (a b) endl; // 1system(pause);return 0; }注意C和C 语言的比较运算中 “真”用数字“1”来表示 “假”用数字“0”来表示。 3.4 逻辑运算符 **作用**用于根据表达式的值返回真值或假值 逻辑运算符有以下符号 运算符术语示例结果!非!a如果a为假则!a为真 如果a为真则!a为假。与a b如果a和b都为真则结果为真否则为假。||或a || b如果a和b有一个为真则结果为真二者都为假时结果为假。 4 程序流程结构 C/C支持最基本的三种程序运行结构顺序结构、选择结构、循环结构 顺序结构程序按顺序执行不发生跳转选择结构依据条件是否满足有选择的执行相应功能循环结构依据条件是否满足循环多次执行某段代码 4.1 选择结构 4.1.1 if语句 作用 执行满足条件的语句 if语句的三种形式 单行格式if语句 多行格式if语句 多条件的if语句 单行格式if语句if(条件){ 条件满足执行的语句 } 注意if条件表达式后不要加分号 多行格式if语句if(条件){ 条件满足执行的语句 }else{ 条件不满足执行的语句 }; 示例 int main() {int score 0;cout 请输入考试分数 endl;cin score;if (score 600){cout 我考上了一本大学 endl;}else{cout 我未考上一本大学 endl;}system(pause);return 0; }多条件的if语句if(条件1){ 条件1满足执行的语句 }else if(条件2){条件2满足执行的语句}... else{ 都不满足执行的语句} 示例 int main() {int score 0;cout 请输入考试分数 endl;cin score;if (score 600){cout 我考上了一本大学 endl;}else if (score 500){cout 我考上了二本大学 endl;}else if (score 400){cout 我考上了三本大学 endl;}else{cout 我未考上本科 endl;}system(pause);return 0; }4.1.2 三目运算符 作用 通过三目运算符实现简单的判断 语法表达式1 ? 表达式2 表达式3 解释 如果表达式1的值为真执行表达式2并返回表达式2的结果 如果表达式1的值为假执行表达式3并返回表达式3的结果。 示例 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; }总结和if语句比较三目运算符优点是短小整洁缺点是如果用嵌套结构不清晰 4.1.3 switch语句 **作用**执行多条件分支语句 语法 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; }注意1switch语句中表达式类型只能是整型或者字符型 注意2case里如果没有break那么程序会一直向下执行 总结与if语句比对于多条件判断时switch的结构清晰执行效率高缺点是switch不可以判断区间 4.2 循环结构 4.2.1 while循环语句 **作用**满足循环条件执行循环语句 语法 while(循环条件){ 循环语句 } 解释只要循环条件的结果为真就执行循环语句 示例 int main() {int num 0;while (num 10){cout num num endl;num;}system(pause);return 0; }注意在执行循环语句时候程序必须提供跳出循环的出口否则出现死循环 4.2.2 do…while循环语句 作用 满足循环条件执行循环语句 语法 do{ 循环语句 } while(循环条件); 注意 与while的区别在于do…while会先执行一次循环语句再判断循环条件 示例 int main() {int num 0;do{cout num endl;num;} while (num 10);system(pause);return 0; }总结与while循环区别在于do…while先执行一次循环语句再判断循环条件 4.2.3 for循环语句 作用 满足循环条件执行循环语句 语法 for(起始表达式;条件表达式;末尾循环体) { 循环语句; } 示例 int main() {for (int i 0; i 10; i){cout i endl;}system(pause);return 0; }详解 注意for循环中的表达式要用分号进行分隔 总结while , do…while, for都是开发中常用的循环语句for循环结构比较清晰比较常用 4.2.4 嵌套循环 作用 在循环体中再嵌套一层循环解决一些实际问题 例如我们想在屏幕中打印如下图片就需要利用嵌套循环 示例 int main() {//外层循环执行1次内层循环执行1轮for (int i 0; i 10; i){for (int j 0; j 10; j){cout * ;}cout endl;}system(pause);return 0; }4.3 跳转语句 4.3.1 break语句 作用: 用于跳出选择结构或者循环结构 break使用的时机 出现在switch条件语句中作用是终止case并跳出switch出现在循环语句中作用是跳出当前的循环语句出现在嵌套循环中跳出最近的内层循环语句 示例1 int main() {//1、在switch 语句中使用breakcout 请选择您挑战副本的难度 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 int main() {//2、在循环语句中用breakfor (int i 0; i 10; i){if (i 5){break; //跳出循环语句}cout i endl;}system(pause);return 0; }示例3 int main() {//在嵌套循环语句中使用break退出内层循环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语句 作用 在循环语句中跳过本次循环中余下尚未执行的语句继续执行下一次循环 示例 int main() {for (int i 0; i 100; i){if (i % 2 0){continue;}cout i endl;}system(pause);return 0; }注意continue并没有使整个循环终止而break会跳出循环 4.3.3 goto语句 作用 可以无条件跳转语句 语法 goto 标记; 解释 如果标记的名称存在执行到goto语句时会跳转到标记的位置 示例 int main() {cout 1 endl;goto FLAG;cout 2 endl;cout 3 endl;cout 4 endl;FLAG:cout 5 endl;system(pause);return 0; }注意在程序中不建议使用goto语句以免造成程序流程混乱 5 数组 5.1 概述 所谓数组就是一个集合里面存放了相同类型的数据元素 特点1 数组中的每个数据元素都是相同的数据类型 特点2 数组是由连续的内存位置组成的 5.2 一维数组 5.2.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数组中下标是从0开始索引 5.2.2 一维数组数组名 一维数组名称的用途 可以统计整个数组在内存中的长度可以获取数组在内存中的首地址 示例 int main() {//数组名用途//1、可以获取整个数组占用内存空间大小int arr[10] { 1,2,3,4,5,6,7,8,9,10 };cout 整个数组所占内存空间为 sizeof(arr) endl; // 40cout 每个元素所占内存空间为 sizeof(arr[0]) endl; // 4cout 数组的元素个数为 sizeof(arr) / sizeof(arr[0]) endl; // 10//2、可以通过数组名获取到数组首地址cout 数组首地址为 (int)arr endl;cout 数组中第一个元素地址为 (int)arr[0] endl;cout 数组中第二个元素地址为 (int)arr[1] endl; // 每个数组元素地址连续//arr 100; 错误数组名是常量因此不可以赋值system(pause);return 0; }注意数组名是常量不可以赋值 总结1直接打印数组名可以查看数组所占内存的首地址 总结2对数组名进行sizeof可以获取整个数组占内存空间的大小 5.2.3 冒泡排序 作用 最常用的排序算法对数组内元素进行排序 比较相邻的元素。如果第一个比第二个大就交换他们两个。对每一对相邻元素做同样的工作执行完毕后找到第一个最大值。重复以上的步骤每次比较次数-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; }5.3 二维数组 二维数组就是在一维数组上多加一个维度。 5.3.1 二维数组定义方式 二维数组定义的四种方式 数据类型 数组名[ 行数 ][ 列数 ];数据类型 数组名[ 行数 ][ 列数 ] { {数据1数据2 } {数据3数据4 } };数据类型 数组名[ 行数 ][ 列数 ] { 数据1数据2数据3数据4}; 数据类型 数组名[ ][ 列数 ] { 数据1数据2数据3数据4}; 建议以上4种定义方式利用第二种更加直观提高代码的可读性 示例 int main() {//方式1 //数组类型 数组名 [行数][列数]int arr[2][3];arr[0][0] 1;arr[0][1] 2;arr[0][2] 3;arr[1][0] 4;arr[1][1] 5;arr[1][2] 6;for (int i 0; i 2; i){for (int j 0; j 3; j){cout arr[i][j] ;}cout endl;}//方式2 //数据类型 数组名[行数][列数] { {数据1数据2 } {数据3数据4 } };int arr2[2][3] {{1,2,3},{4,5,6}};//方式3//数据类型 数组名[行数][列数] { 数据1数据2 ,数据3数据4 };int arr3[2][3] { 1,2,3,4,5,6 }; //方式4 //数据类型 数组名[][列数] { 数据1数据2 ,数据3数据4 };int arr4[][3] { 1,2,3,4,5,6 };system(pause);return 0; }总结在定义二维数组时如果初始化了数据可以省略行数 5.3.2 二维数组数组名 查看二维数组所占内存空间获取二维数组首地址 示例 int main() {//二维数组数组名int arr[2][3] {{1,2,3},{4,5,6}};cout 二维数组大小 sizeof(arr) endl; // 24cout 二维数组一行大小 sizeof(arr[0]) endl; // 12cout 二维数组元素大小 sizeof(arr[0][0]) endl; // 4cout 二维数组行数 sizeof(arr) / sizeof(arr[0]) endl; // 2cout 二维数组列数 sizeof(arr[0]) / sizeof(arr[0][0]) endl; // 3//地址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; }总结1二维数组名就是这个数组的首地址 总结2对二维数组名进行sizeof时可以获取整个二维数组占用的内存空间大小 5.3.3 二维数组应用案例 考试成绩统计 案例描述有三名同学张三李四王五在一次考试中的成绩分别如下表请分别输出三名同学的总成绩 语文数学英语张三100100100李四9050100王五607080 参考答案 int main() {int scores[3][3] {{100,100,100},{90,50,100},{60,70,80},};string names[3] { 张三,李四,王五 };for (int i 0; i 3; i){int sum 0;for (int j 0; j 3; j){sum scores[i][j];}cout names[i] 同学总成绩为 sum endl;}system(pause);return 0; }6 函数 6.1 概述 **作用**将一段经常使用的代码封装起来减少重复代码 一个较大的程序一般分为若干个程序块每个模块实现特定的功能。 6.2 函数的定义 函数的定义一般主要有5个步骤 1、返回值类型 2、函数名 3、参数表列 4、函数体语句 5、return 表达式 语法 返回值类型 函数名 参数列表 {函数体语句return表达式}返回值类型 一个函数可以返回一个值。在函数定义中函数名给函数起个名称参数列表使用该函数时传入的数据函数体语句花括号内的代码函数内需要执行的语句return表达式 和返回值类型挂钩函数执行完后返回相应的数据 示例 定义一个加法函数实现两个数相加 //函数定义 int add(int num1, int num2) {int sum num1 num2;return sum; }6.3 函数的调用 功能 使用定义好的函数 语法 函数名参数 示例 //函数定义 int add(int num1, int num2) //定义中的num1,num2称为形式参数简称形参 {int sum num1 num2;return sum; }int main() {int a 10;int b 10;//调用add函数int sum add(a, b);//调用时的ab称为实际参数简称实参cout sum sum endl;a 100;b 100;sum add(a, b);cout sum sum endl;system(pause);return 0; }总结函数定义里小括号内称为形参函数调用时传入的参数称为实参 6.4 值传递 所谓值传递就是函数调用时实参将数值传入给形参值传递时如果形参发生并不会影响实参 示例 void swap(int num1, int num2) {cout 交换前 endl;cout num1 num1 endl;cout num2 num2 endl;int temp num1;num1 num2;num2 temp;cout 交换后 endl;cout num1 num1 endl;cout num2 num2 endl;//return ; 当函数声明时候不需要返回值可以不写return }int main() {int a 10;int b 20;swap(a, b);cout main中的 a a endl;cout main中的 b b endl;system(pause);return 0; }总结 值传递时形参是修饰不了实参的 6.5 函数的常见样式 常见的函数样式有4种 无参无返有参无返无参有返有参有返 #includeiostream using namespace std;//函数常见样式 //1、无参无返 void type1() {cout this is type1 无参无返 endl; }//2、有参无返 void type2(int a) {cout this is type2 有参无返 a a endl; }//3、无参有返 int type3() {cout this is type3 无参有返 endl;return 1000; }//4、有参有返 int type4(int b) {cout this is type4 有参有返 b b endl;return b; }int main() {//无参无返函数调用type1();//有参无返函数调用type2(100);//无参有返函数调用int num1 type3();cout num1 num1 endl;//有参有返函数调用int num2 type4(200);cout num2 num2 endl;system(pause);return 0; }6.6 函数的声明 作用 告诉编译器函数名称及如何调用函数。函数的实际主体可以单独定义。 函数的声明可以多次但是函数的定义只能有一次 示例 //声明可以多次定义只能一次 //声明 int max(int a, int b); int max(int a, int b); //定义 int max(int a, int b) {return a b ? a : b; }int main() {int a 100;int b 200;cout max(a, b) endl;system(pause);return 0; }6.7 函数的分文件编写 作用 让代码结构更加清晰 函数分文件编写一般有4个步骤 创建后缀名为.h的头文件创建后缀名为.cpp的源文件在头文件中写函数的声明在源文件中写函数的定义 示例 .h文件代码 //swap.h文件 #includeiostream using namespace std;//实现两个数字交换的函数声明 void swap(int a, int b);.cpp文件代码 //swap.cpp文件 #include swap.hvoid swap(int a, int b) {int temp a;a b;b temp;cout a a endl;cout b b endl; }主函数代码 //main函数文件 #include swap.h int main() {int a 100;int b 200;swap(a, b);system(pause);return 0; }7 指针 7.1 指针的基本概念 指针的作用 可以通过指针间接访问内存 内存编号是从0开始记录的一般用十六进制数字表示可以利用指针变量保存地址 7.2 指针变量的定义和使用 指针变量定义语法 数据类型 * 变量名 示例 // 1、定义指针int a 10;// 数据类型 * 变量名int * p // 让指针记录变量a的地址p a;cout a的地址为 a endl;cout 指针p为 p endl;// 2、使用指针// 可以通过解引用的方式来找到指针指向的内存// 指针前加 * 代表解引用找到指针指向内存中的数据*p 1000;cout a a endl;cout *p *p endl;7.3 指针所占内存空间 在32(X86)位操作系统下指针是占4个字节空间大小不管是什么数据类型 在64(X64)位操作系统下指针是占8个字节空间大小不管是什么数据类型 示例 int main() {int a 10;int * p;p a; //指针指向数据a的地址cout *p endl; //* 解引用cout sizeof(p) endl;cout sizeof(char *) endl;cout sizeof(float *) endl;cout sizeof(double *) endl;system(pause);return 0; }7.4 空指针和野指针 7.4.1 空指针 空指针指针变量指向内存中编号为0的空间 用途 初始化指针变量 注意 空指针指向的内存是不可以访问的 示例 int main() {// 1、指针变量P指向内存地址编号为0的空间int* p NULL;// 2、访问空指针报错// 0-255之间的内存编号是系统占用的其他程序无权限访问//cout *p endl; # *p 解引用system(pause);return 0; }7.4.2 野指针 野指针是指针指向未申请使用的内存地址(指向非法的内存空间)在使用时会报错 int main() {//指针变量p指向内存地址编号为0x1100的空间int* p (int*)0x1100;// 访问野指针报错//cout *p endl;system(pause);return 0; }总结空指针和野指针都不是我们申请的空间因此不要访问。 7.5 const修饰指针 1常量指针 常量指针允许修改指针的指向但不允许修改常量指针指向的值。常量指针因为变量通过const修饰为了常量不可修改所以常量指针可以修改指针的指向不能修改指向的值。 int a 10;int b 20;const int* p a;*p 30; // 错误常量指针指向的值不允许修改p b; // 正确常量指针允许修改指针的指向2指针常量 指针常量的指向不允许修改但是可以修改指针的值因为此处指针变量通过const修饰代表为常量便无法修改指向。但是声明的变量不是常量所以可以修改指针常量指向的值 int a 10;int b 20;int* const p a;*p 30; // 正确指针常量指向的值允许修改p b; //错误指针常量不可以修改指针的指向3const既修饰变量又修饰指针 变量与指针都经过const修饰后都变成了常量所以无论是指针或者指针指向的值都无法修改。 #includeiostream using namespace std;int main() {int a 10;int b 20;// 常量指针const int* p a;//*p 20; // 报错指针常量不允许修改指针的值只允许修改指针的指向p b;// 指针常量int* const p2 a;*p2 30;// p2 b; //报错常量指针不允许修改指针的指向//const即修饰变量又修饰指针const int* const p3 a;//*p3 30; // 报错//p3 b; // 报错const即修饰变量又修饰指针指向的值与指针的指向都不允许修改system(pause);return 0; }7.6 指针和数组 作用 利用指针访问数组中元素 #includeiostream using namespace std;int main() {// 定义数组int arr[] { 1,2 ,3,4,5,6,7,8,9,10 };// 计算数组长度int arrLength sizeof(arr) / sizeof(arr[0]);cout 数组中元素所占字节 sizeof(arr[0]) endl;// 定义指针指向数组int* p arr;cout 第一个元素 arr[0] endl;cout 指针访问第一个元素 *p endl;for (int i 0; i arrLength; i){cout *p endl;// 整形为4个字节自增1代表指针向后移四个字节p;}system(pause);return 0; }7.7 指针和函数 作用 利用指针作函数参数可以修改实参的值 在函数中利用指针做为函数的参数可以修改实际参数的值如果是值传递在函数中修改传入参数的值不会影响实际传入的参数的值作用仅为函数内部。值传递的时候函数的形参发生改变并不会影响实参。 函数使用值传递的方式在函数运行时会复制一份副本供函数内部使用当传入的参数占用内存空间过大时使用值传递会比较浪费内存空间使用指针作为参数传递的是内存地址可以减小内存的占用。 示例 #includeiostream using namespace std;void swap1(int a, int b) {int temp a;a b;b temp;// cout swap1 a a swap1 b b endl; }void swap2(int* p1, int* p2) {int temp *p1;*p1 *p2;*p2 temp; }int main() {/*指针和函数利用指针做为函数的参数可以修改实际参数的值*/// 1、值传递int a 10;int b 20;swap1(a, b); // 值传递不会影响实际参数的值cout 值传递后a a b b endl;// 2、地址传递swap2(a, b); // 地址传递函数内数值发生改变会影响实际传入的参数cout 地址传递后a a b b endl;system(pause);return 0; }7.8 指针配合数组和函数使用(封装冒泡排序函数) 通过指针作为参数在函数内部更改数组顺序实际修改的是作为实参传入的数组的顺序。同时数组的变量名实际就是内存地址普通变量作为实参传入形参为指针的函数时需要加上 【取址符】 案例描述 封装一个函数利用冒泡排序实现对整型数组的升序排序 #includeiostream using namespace std;// 冒泡排序 arr: 要排序的数组 len 排序的数组的长度 void bubbleSort(int* arr, int len);// 打印数组 arr: 要打印的数组 len打印的数组的长度 void printArray(int* arr, int len);int main() {/*指针配合数组和函数使用通过地址传递的方式使用冒泡排序将数组中的值升序排序然后打印排序后的数组*/// 1、定义要排序的数组int arr[] { 4, 3, 6, 9, 1, 32, 8, 7, 10, 5 };// 2、计算数组的长度int len sizeof(arr) / sizeof(arr[0]);// 3、调用冒泡排序进行排序,因为数组的变量名存放的就是内存地址所以可以直接传递bubbleSort(arr, len);// 4、调用打印函打印printArray(arr, len);system(pause);return 0; }// 冒泡排序 arr: 要排序的数组 len 排序的数组的长度 void bubbleSort(int* arr, int len) // int* arr 也可以写为 int arr[] {// 总共排序轮数为元素个数 - 1for (int i 0; i len - 1; i){// 内层循环对比次数 元素个数 -当前轮数 - 1for (int j 0; j len - i - 1; 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 len - 1; i)//{// for (int j i 1; j len; j)// {// if (arr[i] arr[j])// {// int temp arr[i];// arr[i] arr[j];// arr[j] temp;// }// }//} }// 打印数组arr: 要打印的数组len打印的数组的长度 void printArray(int* arr, int len) // // int* arr 也可以写为 int arr[] {cout [;for (int i 0; i len; i){cout arr[i];if (i len - 1) {cout ,;}}cout ] endl; }8 结构体 8.1 结构体基本概念 结构体属于用户自定义的数据类型允许用户存储不同的数据类型 8.2 结构体定义和使用 语法struct 结构体名 { 结构体成员列表 } 通过结构体创建变量的方式有三种 struct 结构体名 变量名struct 结构体名 变量名 { 成员1值 成员2值…}定义结构体时顺便创建变量 示例 #includeiostreamusing namespace std;// 定义一个学生的结构体 struct Student {// 结构体成员// 姓名string name;// 年龄int age;// 得分int score; } stu3; //结构体变量创建方式3 int main() {/*结构体定义非默认的数据类型本质上是多种数据类型的集合定义是struct不能省略再声明使用时可以省略*/// 使用方式一struct Student stu1;stu1.name 张三;stu1.age 22;stu1.score 90;cout 学生1的姓名 stu1.name 年龄 stu1.age 得分 stu1.score endl;// 使用方式二struct Student stu2 { 李四, 17, 85 };cout 学生2的姓名 stu2.name 年龄 stu2.age 得分 stu2.score endl;// 使用方式三stu3.name 王五;stu3.age 20;stu3.score 100;cout 学生3的姓名 stu3.name 年龄 stu3.age 得分 stu3.score endl;// 创建结构体数组struct Student stuArray[3] {{Tom, 16, 67},{Jerry, 26, 96},{John, 24, 120},};// 给结构体数组中元素赋值stuArray[2].name 小明;stuArray[2].age 32;stuArray[2].score 75;// 遍历结构体数组for (int i 0; i 3; i){cout 姓名 stuArray[i].name 年龄 stuArray[i].age 分数 stuArray[i].score endl;}system(pause);return 0;}总结 1定义结构体时的关键字struct不可省略 2创建结构体变量时关键字struct可以省略 3结构体变量利用操作符“.”访问成员。 8.3 结构体数组 作用 将自定义的结构体放入到数组中方便维护 语法 struct 结构体名 数组名[元素个数] { {} , {} , ... {} } 示例 //结构体定义 struct student {//成员列表string name; //姓名int age; //年龄int score; //分数 }int main() {//结构体数组struct student arr[3]{{张三,18,80 },{李四,19,60 },{王五,20,70 }};for (int i 0; i 3; i){cout 姓名 arr[i].name 年龄 arr[i].age 分数 arr[i].score endl;}system(pause);return 0; }8.4 结构体指针 作用 通过指针访问结构体中的成员 利用操作符 - 可以通过结构体指针访问结构体属性 #includeiostreamusing namespace std;/*定义学生结构体 */ struct student {// 姓名string name;// 年龄int age;// 得分int score; };int main() {// 声明并初始化学生student s { 张三, 20, 100 };//结构体指针的定义与使用student* p s;p-score 95; // 指针通过-操作符可以访问成员// 打印学生信息cout 学生的姓名 p-name;cout \t学生的年龄 p-age;cout \t学生的得分 p-score endl;//总结结构体指针取值使用 - 运算符system(pause);return 0; }8.5 结构体嵌套结构体 作用 结构体中的成员可以是另一个结构体 例如 每个老师辅导一个学员一个老师的结构体中记录一个学生的结构体 示例 #includeiostream using namespace std;/*定义学生结构体 */ struct student {// 姓名string name;// 年龄int age;// 得分int score; };/*定义老师结构体*/ struct teacher {/*编号*/string id;// 姓名string name;// 年龄int age;// 学生struct student stu; };int main() {// 初始化老师的结构体teacher t {10000,王五,50,{张三, 18, 200}};// 打印老师结构体中的成员cout 老师的姓名 t.name endl;cout 老师的编号 t.id endl;cout 老师的年龄 t.age endl;cout 老师带的学生的姓名 t.stu.name endl;cout 老师带的学生的年龄 t.stu.age endl;cout 老师带的学生的得分 t.stu.score endl;system(pause);return 0; }总结 在结构体中可以定义另一个结构体作为成员用来解决实际问题 8.6 结构体做函数参数 作用 将结构体作为参数向函数中传递 传递方式有两种 值传递地址传递 示例 //学生结构体定义 struct student {//成员列表string name; //姓名int age; //年龄int score; //分数 };//值传递 void printStudent(student stu ) {stu.age 28;cout 子函数中 姓名 stu.name 年龄 stu.age 分数 stu.score endl; }//地址传递 void printStudent2(student *stu) {stu-age 28;cout 子函数中 姓名 stu-name 年龄 stu-age 分数 stu-score endl; }int main() {student stu { 张三,18,100};//值传递printStudent(stu);cout 主函数中 姓名 stu.name 年龄 stu.age 分数 stu.score endl;cout endl;//地址传递printStudent2(stu);cout 主函数中 姓名 stu.name 年龄 stu.age 分数 stu.score endl;system(pause);return 0; }总结如果不想修改主函数中的数据用值传递反之用地址传递 8.7 结构体中const使用场景 作用 用const来防止误操作 如果需要保留作为参数传递给函数中修改的值那就要用地址传递 并且地址传递只占4个字节内存空间可以减少内存空间的占用值传递会在函数中复制一分新的副本若参数占用内存较大那么会比较损耗性能。如果想利用指针的同时不修改原本的数据那么可以将形参定义为常量指针 即 const struct 类型名 * 变量名 #includeiostream #includestring using namespace std;// 学生结构体定义 struct student {// 成员变量string name; // 姓名int age; // 年龄int score; // 分数 };// const使用场景 void printStudent01(student s) {s.age 150;cout 姓名 s.name 年龄 s.name 分数 s.scoreendl; }// 将函数中的形参改为指针可以减少内存空间而且不会复制新的副本出来 void printStudent02(const student* s) {//s-age 150 // 操作失败因为加了const修饰防止修改原数据如果不加const原数据发生改变cout 姓名 s-name 年龄 s-name 分数 s-score endl; }int main() {student stu01 { 李四, 17, 85 };printStudent01(stu01);printStudent02(stu01);system(pause);return 0; }8.8 结构体案例 8.8.1 案例1 案例描述 学校正在做毕设项目每名老师带领5个学生总共有3名老师需求如下 设计学生和老师的结构体其中在老师的结构体中有老师姓名和一个存放5名学生的数组作为成员 学生的成员有姓名、考试分数创建数组存放3名老师通过函数给每个老师及所带的学生赋值 最终打印出老师数据以及老师所带的学生数据。 示例 #includeiostream #includestring #includectime using namespace std;// 定义学生结构体 struct Student {string sName;int score; };// 定义老师结构体 struct Teacher {string tName;struct Student stuArray[5];};// 给学生和老师赋值的函数 void allocateSpace(struct Teacher tArray[], int len) {string nameSeed ABCDEF;for (int i 0; i len; i){tArray[i].tName teacher_;tArray[i].tName nameSeed[i];for (int j 0; j 5; j){int random_number rand() % 61 40; // 生成40到100之间的随机整数tArray[i].stuArray[j].sName string(student_) nameSeed[j];tArray[i].stuArray[j].score random_number;}} }// 打印所有信息 void printInfo(struct Teacher tArray[], int len) {for (int i 0; i len; i){cout 老师姓名 tArray[i].tName endl;for (int j 0; j 5; j){cout \t学生姓名 tArray[i].stuArray[j].sName 考试分数 tArray[i].stuArray[j].score endl;}cout endl;} }int main() {srand((unsigned int)time(NULL)); // 初始化随机数种子//1、创建3名老师的结构体数组Teacher tArray[3];//2、通过函数给3名老师的信息赋值并给老师带的学生信息赋值int len sizeof(tArray) / sizeof(tArray[0]);allocateSpace(tArray, len);//3、打印所有老师及所带的学生信息printInfo(tArray, len);system(pause);return 0; }运行效果 8.8.2 案例2 案例描述 设计一个英雄的结构体包括成员姓名年龄性别;创建结构体数组数组中存放5名英雄。 通过冒泡排序的算法将数组中的英雄按照年龄进行升序排序最终打印排序后的结果。 {刘备,23,男}, {关羽,22,男}, {张飞,20,男}, {赵云,21,男}, {貂蝉,19,女},示例 #includeiostream #includestring using namespace std;// 定义英雄结构体 struct Hero {string name;int age;string sex; };// 冒泡排序 void bubleSort(struct Hero arr[], int len) {for ( int i 0; i len - 1; i)for (int j 0; j len - i - 1; j){// 如果j下标元素年龄 大于 j1下标元素年龄交换两个元素if (arr[j].age arr[j1].age){Hero temp arr[j];arr[j] arr[j 1];arr[j 1] temp;}}}// 打印输出信息 void printInfo(struct Hero arr[], int len) {for (int i 0; i len; i){cout 英雄姓名 arr[i].name 年龄 arr[i].age \t性别 arr[i].sexendl;} }int main() {// 1、创建5名英雄的结构体数组Hero hArray[5] { {刘备,23,男},{关羽,22,男},{张飞,20,男},{赵云,21,男},{貂蝉,19,女},};///2、冒泡排序int len sizeof(hArray) / sizeof(hArray[0]);cout 排序前打印信息 endl;for (int i 0; i len; i){cout 英雄姓名 hArray[i].name 年龄 hArray[i].age \t性别 hArray[i].sex endl;}bubleSort(hArray, len);// 3、打印输出年龄排序后的信息cout 排序后打印信息 endl;printInfo(hArray, len);system(pause);return 0; }运行效果
http://www.pierceye.com/news/494465/

相关文章:

  • 成都开发网站建设中国建设规划采购网站
  • 企业网站建设应避免数据孤岛深圳东莞网站建设
  • pk10网站怎么做郑州seo费用
  • 菏泽市建设局网站电话网站建设服务咨询
  • 购物网站模版广州外贸网络推广
  • 高碑店网站网站建设手机软件开发的模式
  • 公司网站开发国内外现状网络营销外包团队哪些好
  • 淘客网站怎么建立如何用api做网站
  • 合肥网站建设ahyedawordpress主题安全
  • 网站建设实训室介绍东莞seo广告宣传
  • 公职人员可以做公益网站吗aws网站建设
  • 什么叫高端网站定制广州建筑公司
  • 全新网站如何做百度竞价网站制作现状解决方案
  • 阿里云esc建设网站近三天时政热点
  • 怎样做公司网站介绍仿站网站源码下载
  • 电子商务网站规划与建设摘要软件app定制开发
  • 天水做网站的公司kj6699的seo综合查询
  • 找工程项目信息网站早那么做商城网站
  • 做网站优化销售管理系统排名
  • wordpress导入网站模板wordpress部分图片
  • 无锡做网站365caiyi秘密直播
  • 无锡企业网站制作报价公司做网站需要哪些手续
  • 最好的营销型网站保险购买平台有哪些
  • 网站建设实训的目的网站开发的框架协议
  • 本地郑州网站建设搭建一个网站
  • 如何做网站竞品分析哪个网站可以接任务做兼职
  • 佛山网站关键词网站建设需求分析文档
  • 网站收录地址旅游网站建设的相关报价
  • seo月薪seo优化方法网站快速排名推广渠道
  • 企业网站设计理念如何seo网站