
C++程序设计
one_2_one
这个作者很懒,什么都没留下…
展开
-
8.1 数组与指针、指针的算术运算
一维数组的指针:(1)数组占据内存中一块连续的存储空间,每个数组元素都有确定的内存地址;可以通过 定义指向数组元素类型的指针变量,间接访问数组中的每个元素。(2)C++语言规定,数组名代表数组的首地址(即数组中第一个元素的地址),它是一个常量指针。举个例子:比如: int a[10] , *p = a ;说明a是一个整型数组,p是一个整型的指针变量,且p指向a数组,其中a为数组...原创 2019-10-22 22:46:43 · 305 阅读 · 0 评论 -
7.2 指针与变量的关系
变量与指针变量:(1)变量有地址,指针变量可以存放变量的地址。(2)当指针变量中存放某个变量的地址后,我们就说该指针变量指向这个变量。使用指针变量的三个基本步骤:(1)定义指针变量:即给指针变量分配内存空间。(2)对指针变量赋值:也就是使指针变量指向某对象,该对象可以是变量、数组、函数或动态分配的一块内存空间等。(3)通过指针变量间接访问所指向的对象。定...原创 2019-10-19 22:36:30 · 373 阅读 · 0 评论 -
14.4 vector容器
vector主要特征:(1)vector实际上就是对动态数组封装。(2)可以像数组一样可以使用下标访问元素,若vector长度为n,则其下标为0~n-1。(3)根据下标访问元素效率高。(4)vector对象的空间随着插入删除操作自动调整。(5)因为空间自动调整比较耗费时间,因此频繁插入删除的情况下,vector效率稍差。(vector中的元素存储空间是连续的)vect...原创 2019-11-28 23:01:13 · 141 阅读 · 0 评论 -
14.3 STL简介
标准模板库(Standard Template Library,简称STL)(1)STL是一个具有工业强度的,高效的C++程序库(2)它实现了诸多在计算机科学领域里常用的基本数据结构和基本算法(3)STL主要包含了 容器、算法、迭代器(4)STL系由Alexander Stepanov和Meng Lee等人创造于惠普实验室(5)STL于1994年2月正式成为ANSI/ISO C...原创 2019-11-26 12:19:16 · 314 阅读 · 0 评论 -
14.2 类模板
从栈说起(1)栈限制在结构的一端进行插入和删除操作(2)允许插入和删除操作的一端称为栈顶,另一端称为栈底问题来了:假定用int数组来存储栈里的数据,能否建立一个“栈”类?建立int型的栈类: 那如果要建立char,double型的栈类呢?换成其他类型可以吗?比如string,比如某种struct都是可以的。建立抽象的类模板:...原创 2019-11-24 22:43:30 · 113 阅读 · 0 评论 -
14.1 函数模板
先思考一个问题:函数重载是最佳方案吗?假如设计一个求两参数最大值的函数,在实践中可能需要定义四个函数,(1)这些函数几乎相同,唯一的区别就是形参类型不同。(2)我们需要事先知道哪些类型会使用这些函数,才能给出所有的重载函数,那么对于未知的类型(比如string类型或者自定义类型),前面定义的函数就不够了,就不能起作用。专家的解决方案:注意:(1)上面的clas...原创 2019-11-19 22:50:23 · 95 阅读 · 0 评论 -
13.3 标准输出流
标准输出流:指流向标准输出设备(显示器)的数据。一般使用cout流对象进行输出操作。例如,用流插入运算符“<<”输出数据,cout<<”a=”<<a<<endl;cout是ostream类的对象,除了”<<”符号(实际上是cout对象的符号重载函数)以外,常用函数如下:(1)put :输出一个字节(2)write...原创 2019-11-11 22:54:49 · 323 阅读 · 0 评论 -
13.2 标准输入流
标准输入流:从标准输入设备(键盘)流向程序的数据。一般而言使用cin流对象进行输入,例如:int a, b;cin >> a >> b; //从键盘输入2个整数“>>”有什么特点:(1)符号重载(属于istream类的符号重载函数)(2)以空格、回车做分隔符(用这个符号无法得到空格)cin是istream类的对象,除了“>...原创 2019-11-11 20:26:38 · 316 阅读 · 0 评论 -
13.1 流的概念和流类的结构
1.什么是流和流库流:指从一个位置向另一个位置传输的一连串数据的集合。注意:(1)这个位置可能是计算机里的一个程序(或者进程),一个文件,也可能是一个设备(如打印机、扫描仪等)。(2)在输入输出过程中,会在内存中为每一个数据流开辟一个内存缓冲区,用来存数据。从而匹配不同工作效率的对象。(举个例子:一边是一个程序,另一边是一个打印机,他们的工作效率是不同的,有的快有的慢,为了匹配不同...原创 2019-11-11 19:56:25 · 436 阅读 · 0 评论 -
8.8 实例讲解(数组元素逆序)
实例讲解:逆置数组元素其中指针所起到的作用:算法原理: (4)输出a数组编程实现:#include<iostream>using namespace std;//自定义函数invert:反序存放各个数组元素void invert(double *x,int n){ double t,*i,*j;...原创 2019-11-10 22:57:30 · 330 阅读 · 0 评论 -
8.7 动态数组
如何定义n个元素的一维数组?因为定义数组时,它的长度值(即上面的[]中的值)不能使用变量,只能是一个常量。动态申请内存new运算符----用于动态申请所需的内存空间1.动态申请单个变量格式:指针变量 = new 类型;注意:可以不给出所申请的变量的名称,只用指针指向它。例如:动态申请一个double型变量,初值为100.0double *p; /...原创 2019-11-07 23:08:36 · 136 阅读 · 0 评论 -
8.6 结构体与指针
结构体变量的指针: &结构体变量名1.定义指向结构体变量的指针:结构体类型 *指针变量名;2.使用结构指针访问结构变量中的成员3.实例:使用结构指针访问日期结构类型变量...原创 2019-11-04 23:04:27 · 123 阅读 · 0 评论 -
8.5 字符指针应用、指针数组
实例:编写在字符串中查找某字符的函数编程实现:#include<iostream>using namespace std;char *strchr(char *str,char c){ while(*str!='\0') { if(*str==c)...原创 2019-11-01 10:16:08 · 123 阅读 · 0 评论 -
8.4 指向一维数组指针(行指针)、字符串指针
指向具有M个元素的一维数组指针注意:指向的是一维数组,而不是之前提到的指向一维数组的某个元素!!!定义格式: 类型名 (*变量名)[M] ;注意:M是一维数组的元素个数,类型名是一维数组的元素类型。用途:通常利用该指针变量,指向二维数组的行地址,其中M表示二维数组的列数。举个例子:利用行指针变量,按照行输出二维数组各个元素值。方法一:方法二:请记...原创 2019-10-30 22:53:13 · 732 阅读 · 0 评论 -
8.3 二维数组与指针
二维数组的指针设二维数组:int a[3][4],i,j;二维数组a中i行j列元素的地址为 &a[i][j]二维数组在内存中映射为一个一维数组,因此可以通过指向元素的指针快速访问二维数组中的每个元素。举个例子:利用指向数组元素类型的指针变量p,寻找数组a中元素的最大值。注意:在for循环中初始化中,p=&a[0][0]和a=a[0]可以,其他格式不行,比如p=...原创 2019-10-28 23:04:41 · 191 阅读 · 0 评论 -
8.2 指针的关系运算、通过指针访问数组元素
指针的关系运算:即两个指针可以比较大小。(将指针看作整数,因为指针就是地址)举个例子:使用指针输出数组各元素值。注意:这里使用指针变量p作循环控制变量,循环条件p<x+5为指针的关系运算,其中x+5表示&x[5],相当于指针与整数的算数运算。数组元素的不同表示形式:a+i是一个常量指针。其中:a[i]称为数组元素的下标法表示 而*(a+...原创 2019-10-27 22:55:40 · 273 阅读 · 0 评论 -
7.6 实例:指针变量作形参
通过函数调用来改变主调函数某些变量的值,可以把指针变量作为函数的形参。举个例子:三个数排序的问题算法与程序结构:自定义函数:编程实现:#include<iostream>using namespace std;void swap(int *px,int *py){ int t=*px; *px=*py...原创 2019-10-22 20:36:06 · 222 阅读 · 0 评论 -
7.5 指向函数的指针
指向函数的指针变量:使用指向函数的指针变量可以存放函数的指针。指向函数的指针变量定义格式如下:注意:(1)在定义函数的指针变量的过程中,形参类型表列可以只给出类型,可以不需要给出形参名,当然给出没事。(2)上述中的两对圆括号不可缺少。举个例子:定义指向返回值为double型函数的指针变量,该函数有一个double型参数注意:函数名就是函数的地址(比如函数s...原创 2019-10-22 11:57:33 · 102 阅读 · 0 评论 -
7.3 指针作为函数的参数
一个函数在编译时被分配一个入口地址,这个入口地址被称为函数的指针。在C++中,函数名代表函数的入口地址。共有三个重点:(1)指针作函数的参数-实现地址传递(2)返回指针的函数(3)利用指向函数的指针调用函数指针作函数的参数,具有以下用途:(1)指针作函数参数,这时形参接受的是实参的地址。函数中通过对指针的间接访问实现参数的按“引用传递”功能。(2)设置多个指针参数...原创 2019-10-21 19:32:27 · 511 阅读 · 0 评论 -
7.4 返回指针的函数
返回指针的函数定义格式如下:其中: 类型 * :为函数的返回值类型,是一个指针类型。举个例子:编写函数,返回字符串中首次出现的非空格字符开始的字符串。注意:返回字符串就是返回该字符串的首地址。字符串首地址就是一个字符型指针类型。编程实现:#include<iostream>using namespace std;//返回字符指针的函数ch...原创 2019-10-21 20:36:51 · 339 阅读 · 0 评论 -
7.1 什么是指针
指针是一种数据类型,指针与内存单元的地址密切相关。内存由内存单元构成。对于内存单元,需关注两个概念:(1)内存单元的地址:即内存单元的编号。注意:系统为方便管理内存空间,给每一个内存单元进行整数编号,将内存单元的编号称为内存单元的地址,用十六进制表示。(2)内存单元的内容:存放在内存单元中的数据。内存单元的直接访问与间接访问:举个例子:用钥...原创 2019-10-17 19:17:55 · 143 阅读 · 0 评论 -
6.5 实例讲解(hanoi塔问题)
程序:Hanoi塔问题解题方法讨论:总结:将要移动的盘分为2组,最下盘和其他盘。先将其他盘移动到辅助桩,再将最下盘移动到目标桩,最后将其他盘移动到目标桩。假设n=3,看看这个解决过程:一般而言,看看这个解决过程:编程实现:#include<iostream>using namespace std;void move(in...原创 2019-10-17 11:20:34 · 220 阅读 · 0 评论 -
6.4 变量的作用域和存储类型
变量的作用域:(1)变量的作用域是指变量的使用范围。(2)根据变量的使用范围不同,C++中的变量被分为局部变量和全局变量。局部变量(1)在一个函数内或者复合语句内定义的变量称为局部变量(函数的形参也属于局部变量)。(2)局部变量只允许在其定义的函数或复合语句中使用,离开所在的函数或复合语句后该局部变量将不能使用。举个例子:(1)主函数中定义的变量不能在其它函数...原创 2019-10-16 22:11:04 · 155 阅读 · 0 评论 -
6.3 函数重载
函数重载:(1)函数重载是指在一个程序中,可以定义多个具有相同函数名,不同参数列表的函数(至少参数的类型或者参数个数或者参数类型的顺序不同)。这样的函数被称为重载函数。(2)当调用一个重载函数时,编译系统将通过检查函数调用中的实参个数、类型和顺序来选择恰当的函数。(3)重载函数通常用于功能类似而所处理的数据类型不同的问题。举个例子:(1)使用函数重载编写求一个整数和一个双...原创 2019-10-16 19:59:21 · 288 阅读 · 0 评论 -
6.2 内联函数
内联函数:程序通过一组函数实现是一种好的设计方法。但是函数调用涉及执行时间的开销。C++提供的内联函数可以减少函数调用的开销。内联函数的定义格式:注意:(1)对用户来说,内联函数的定义和调用与普通函数的使用方法是相似的。(2)作为编译系统,它将程序中调用内联函数的语句(或表达式)用内联函数体中的代码进行替换。这样在执行时就避免了对内联函数的调用,从而减少了因函数调用所增...原创 2019-10-16 16:26:41 · 258 阅读 · 0 评论 -
6.1 递归函数
递归函数:递归函数是直接或间接地调用了自身的函数。利用递归算法可以将一个规模较大的问题转化为规模较小的同类问题来求解。上述问题用数学公式可以这样表示:递归函数应该具有两个特征:(1)定义中包含该函数本身(即递归公式)(比如上式中f(n-1))(2)必须有终止条件 (比如上述中当n>0时函数值等于1)递归调用过程分为两个阶段----递推和回...原创 2019-10-15 22:51:28 · 128 阅读 · 0 评论 -
5.8 结构体变量作为函数的参数
结构体变量作函数参数:(1)实参为结构体类型变量(2)形参为同类型的结构变量(3)传递方式为值传递 在函数调用时,系统首先为形参变量(即结构变量)分配存储空间,接着将实参变量(结构变量)各成员值传递给形参变量的各个成员。对形参成员的修改不会影响实参成员值的变化。举个例子:...原创 2019-10-15 16:58:40 · 482 阅读 · 0 评论 -
5.7 数组名作为函数的参数
----数组元素作实参,对应的形参为变量,一次传递一个元素,采用值传递。----数组名作实参,对应的形参为一个数组,一次传递整个数组。----数组作参数,其参数传递可理解为形参数组与实参数组共用同一数组空间(即共用实参数组空间)。因此,在函数中,使用形参数组就是在使用实参数组,改变形参数组元素的值就是在改变实参数组元素的值,这一点与引用传递非常类似。一维数组的传递:(1)一维...原创 2019-10-15 16:28:41 · 302 阅读 · 0 评论 -
5.6 为形参指定默认值
为形参指定默认值:C++语言允许在函数定义时为形参指定默认参数值。这样,在函数调用时,如果没有提供实参,则形参自动使用其默认值。#include<iostream>#include<cstring>using namespace std;void f(int x=9,int y=3); //函数声明时为形参指定默认参数值int main()...原创 2019-10-13 23:11:18 · 467 阅读 · 0 评论 -
5.5 参数的传递方式
C++中参数有三种传递方式:(1)值传递(2)引用传递(3)指针传递值传递:调用时,将实参的值传递给对应的形参,这就是值传递。注意:由于形参有自己独立的存储空间,又作为函数的局部变量使用,因此在函数中对形参值的任何修改都不会改变实参变量的值好处:减少函数之间的数据依赖,增强了函数自身的独立性验证:值传递时,形参的改变不会影响实参的值...原创 2019-10-13 22:38:07 · 178 阅读 · 0 评论 -
5.4 函数的调用格式
----函数定义后,并不能自动执行,必须通过函数调用来实现函数的功能。----函数调用,即控制执行某个函数----C++中,主函数可以调用其他子函数,而其他函数之间也可以相互调用函数调用的一般格式:其中,函数调用中实参的几种格式:(1)形参为简单类型变量,对应的实参可以是:常量,变量及表达式(2)形参为数组,对应的实参为数组(名)(3)形参为结构...原创 2019-10-13 21:57:03 · 2011 阅读 · 0 评论 -
5.3 函数的声明
函数的声明:(1)在C++中,程序编译的单位是源程序文件(即源文件),一个由多个函数构成的程序可以组织存放在一个或多个源文件中。(2)在源文件中,函数之间的排列顺序没有固定的要求,但要满足“先定义后使用”的原则。(3)对于标准库函数的使用,在程序开头使用 #include 命令将所需的头文件包含进来即可。(4)对于自定义的函数,要么在调用之前定义(道理跟库函数是一样的),要么在调用...原创 2019-10-13 16:58:58 · 217 阅读 · 0 评论 -
5.2 函数的定义
函数定义的一般格式:2. 函数值类型----即函数的返回值类型(1)返回简单类型,如int,long,float,double,char等(2)返回结构类型(3)返回指针类型(4)返回引用类型注意:如果函数没有任何返回值,这时函数的返回值类型应标记为void。void类型称为无类型和空类型。3. 形式参数表(即形参表)有关形参的进一步说明:...原创 2019-10-13 16:29:11 · 218 阅读 · 0 评论 -
4.10 实例:词频统计
实例:词频统计----输入一系列英文单词(单词之间用空格隔开),用“xyz”表示输入结束----统计各单词出现的次数(单词不区分大小写),对单词按字典顺序进行排序后输出单词和词频运行结果:问题分析:【算法描述】 查找算法:【算法描述】 选择排序算法编程实现:#include<iostream>#inclu...原创 2019-10-13 10:27:31 · 301 阅读 · 0 评论 -
4.9 实例:取子字符串
实例:取子字符串----用户输入一个字符串,然后输入起始位置k和长度l----显示从第k个字符开始,长度为l的子字符串----要求字符串输入一次,子串操作可以多次,输入位置和长度均为0时停止问题分析:算法描述:思路扩展:...原创 2019-10-12 21:22:17 · 121 阅读 · 0 评论 -
4.8 实例:矩阵乘法
实例:矩阵乘法问题分析:算法描述:编程:#include<iostream>using namespace std;int main(){ const int M=20,N=20,K=20; double A[M][N],B[N][K],C[M][K]; int M1,N1,N2,K1; //两个矩...原创 2019-10-12 20:01:35 · 623 阅读 · 0 评论 -
2.1 数据类型
1 整数表示的数较小,就用短整型;表示的数较大,就用整型或者长整型;表示的数均是非负数,就用无符号型。注意,关于不同类型的数所占的字节数:(1)C++没有规定不同不同类型的数占的字节数(2)会因计算机系统、编译器的不同而不同(3)sizeof()运算符测试某类型数所占字节数(4)方括号表示可以选择,如unsigned [int],表示使用unsigned in...原创 2019-10-04 16:47:48 · 135 阅读 · 0 评论 -
2.2 常量和变量
1 常量对于符号常量有两种:(1)(2)所以这条语句只是预处理而不是C++语句,因为在编译时已经不存在了。2 变量变量的初始化:在声明变量的同时说明它代表的数据是什么,称为变量的初始化。变量的赋值:变量使用中应该注意的问题:(1)先定义,再使用(2)只能定义一次,不能重复定义(3)先赋值,...原创 2019-10-04 21:55:01 · 224 阅读 · 0 评论 -
2.3 算数运算和自增自减
对于自增自减:算数运算符的优先级:后置指的是++或者—放在数字的后面,前置指的是++或者—放在数字的前面运算的数据类型:复合运算符:...原创 2019-10-04 22:52:48 · 130 阅读 · 0 评论 -
2.5 逻辑运算符
逻辑运算符的优先级:(尽量用圆括号表示优先级)使用逻辑运算符的注意事项:(1)单个变量或常量也可作为条件(2)逻辑表达式的短路求值:如果判断了前面的条件,已经能得到表达式的结果,就不再计算后面的条件。...原创 2019-10-05 11:42:10 · 141 阅读 · 0 评论