版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第5章结构化数据5.1指针5.2数组5.3结构体5.4文件了解指针和数组的概念掌握一维数组、二维数组、字符数组了解结构体的概念及定义了解文件的概念和操作5.1指针5.1.1内存的访问方式5.1.3指针的定义5.1.2指针的基本概念5.1.4指针变量运算符5.1.6指针与常量5.1.5指针的赋值5.1.7指针的运算5.1指针5.1.1内存的访问方式计算机的内存储器被划分为一个个存储单元。存储单元按一定的规则编号,这个编号就是存储单元的地址。地址编码的最基本单位是字节,每个字节由8个二进制位组成。计算机就是通过这种地址编号的方式来管理内存数据的读写和定位的。在C/C++程序中存取数据有两种方法:一是通过变量名,二是通过变量地址。程序中声明的变量是要占据一定的内存空间的,例如短整型占2个字节,整型和长整型占4个字节。具有静态生存期的变量在程序开始运行之前就已经被分配了内存空间。在变量获得内存空间的同时,变量名也就成为相应内存空间的符号化名称,在变量的整个生存期内都可以通过变量名访问该内存空间。但是,若使用变量名不方便或者根本没有变量名可用,这时就需要通过地址来访问内存单元。5.1指针5.1.2指针的基本概念指针是一种数据类型,保存指针类型数据的变量称为指针变量。实际上,可以把指针变量看成一种特殊的变量,它用来存放某种类型变量的地址。如果一个指针变量存放了某个简单变量的地址值,则在指针变量和简单变量之间建立了“指向”关系。简单地说,指针就是内存地址,它的值表示被存储的数据所在的地址,而不是被存储的内容。5.1指针5.1.3指针的定义语法格式:数据类型*标识符其中“*”表示这里声明的是一个指针类型的变量。“数据类型”可以是任意类型,指的是指针所指向的变量的类型例如:int*ptr1;double*ptr2;在定义指针变量时要注意以下两点:①变量名前面的“*”表示该变量为指针变量,但“*”不是变量名的一部分。②指针变量只能指向同一类型的变量。如上例中ptr1只能指向整型变量,不能时而指向一个整型变量,时而又指向一个实型变量。5.1指针5.1.4指针变量运算符&取地址运算符。它返回的是变量的存储单元地址。例如,使用&i可以得到变量i的存储单元地址。*指针运算符(或间接访问运算符),表示获取指针变量所指向的变量的值。例如:inti=3,j;int*ptr;ptr=&i;j=*ptr;5.1指针5.1.5指针的赋值#include<iostream>usingnamespacestd;intmain(){inti;//声明int类型变量iint*i_pointer;//声明指向int类型变量的指针i_pointeri_pointer=&i;//取i的地址赋给i_pointeri=10;//int类型变量赋初值
cout<<"inti"<<i<<endl;//输出int类型变量的值
cout<<"*inti_pointer="<<*i_pointer<<endl;//输出i_pointer所指向地址的内容
return0;}5.1指针5.1.6指针与常量略。5.1指针5.1.7指针的运算算术运算
int*p;//p=3000Hp++;//p=3004Hp--;//p=2FFC(p--之前p=3000)。关系运算
if(p1==p2)cout<<"twopointersareequal.\n“;5.2数组5.2.1数组的概念5.2.3二维数组5.2.2一维数组5.2.4字符数组5.2数组5.2.1数组的概念数组是一种重要的构造数据类型。一个数组可以分解为多个数组元素,这些数组元素可以是基本数据类型或构造类型。按数组元素的类型不同,数组可分为数值数组、字符数组、指针数组、结构数组等各种类别;按维数划分,数组又可分为一维数组、二维数组和多维数组。数组是一组同类型存储单元的集合。数组中的存储单元称为数组元素,通常用数组名和下标来唯一地标识数组元素。数组元素的下标从0开始计数,表示数组元素在数组中的位置序号(索引号)。5.2数组5.2.2一维数组定义
格式:数据类型数组名[常量表达式];
说明:(1)数组名的命名规则和变量名相同,遵循标识符命名规则。(2)数组说明符方括号中的常量表达式可以包括常量、常变量和符号常量,表示数组中的存储单元的个数,即数组的长度。存储单元的类型由类型标识符定义。(3)数组中的存储单元称为数组元素。数组元素用数组名和下标来标识。数组元素下标也称索引号,即数组元素在数组中的位置。C/C++规定数组元素的下标从0开始计数,范围为0~常量表达式-1。5.2数组5.2.2一维数组存储结构
定义数组后,该数组在内存中就被分配了一段连续的存储单元,存储单元的个数就是数组的长度,每个存储单元的大小由定义数组时的类型标识符决定。例如:ints[5];5.2数组5.2.2一维数组初始化
(1)数据个数与数组长度相等例如:inta[5]={1,2,3,4,5};等价于:a[0]=1,a[1]=2,a[2]=3,a[3]=4,a[4]=5;(2)数据个数少于数组长度例如:inta[5]={1,2,3};等价于:a[0]=1,a[1]=2,a[2]=3,a[3]=0,a[4]=0;(3)省略常量表达式,则数组长度由数据元素的个数确定例如:inta[]={1,2,3,4,5};等价于:a[0]=1,a[1]=2,a[2]=3,a[3]=4,a[4]=5;5.2数组5.2.2一维数组输入输出
#include<iostream>usingnamespacestd;intmain(){inti,a[10];for(i=0;i<10;i++)cin>>a[i];for(i=0;i<10;i++)cout<<a[i]<<"";return0;}5.2数组5.2.2一维数组顺序查找
#include<iostream>usingnamespacestd;intmain(){inti,k,a[10]={7,1,3,9,4,2,8,10,6,5};cout<<"请输入要查询的数:";
cin>>k;cout<<"要查询的数的下标为:"<<endl;for(i=0;i<10;i++)if(a[i]==k)cout<<i<<endl;return0;}5.2数组5.2.2一维数组折半查找
基本思想:设三个变量low,high和mid分别代表有序表(升序)的表头,表尾及中间元素的下标。查找时,变量的初值分别为:low=0、high=n-1、mid=(low+high)/2。从表的中间元素开始,用k和r[mid]比较:若r[mid]==k,则查找成功若r[mid]>k,则令high=mid-1若r[mid]<k,则令low=mid+1若low>high,则查找失败例如:{
5
,
13
,
19
,
21
,
37
,
56
,
64
,
75
,
80
,
88
,
92
}分别讨论k=21和k=85时的情况5.2数组5.2.2一维数组折半查找
#include<iostream>usingnamespacestd;intmain(){inta[10]={5,13,19,21,37,56,64,75,80,88,92},k=21,low=0,high=9,mid;while(low<=high){mid=(low+high)/2;if(a[mid]==k)break;elseif(a[mid]<k)low=mid+1;elsehigh=mid-1;}if(low<=high)cout<<mid;elsecout<<"SearchFailure!";return0;}5.2数组5.2.2一维数组冒泡排序
比较相邻的两个数组元素,如果存在逆序,即与所要求的排序顺序相反,则交换这两个数组元素,也就是依次比较a[0]和a[1]、a[1]和a[2]、a[2]和a[3]、…、a[n-2]和a[n-1],经过n-1次比较后,最小的数存放在a[n-1]中,上述过程称之为“一趟”排序;接下来,对剩下的n-1个数重复上述过程……经过n-1趟排序后,所有元素都在正确的位置上。5.2数组5.2.3二维数组定义
格式:数据类型数组名[常量表达式1][常量表达式2];
说明:(1)数组名的命名规则和变量名相同,遵循标识符命名规则。(2)常量表达式1和常量表达式2可以是常量、常变量和符号常量,但不能是变量。(3)数组元素有两个下标,第一个下标的范围是0~常量表达式1-1,第二个下标的范围是0~常量表达式2-15.2数组5.2.3二维数组存储结构与一维数组一样,系统也为二维数组在内存中分配了一片连续的存储单元,数组元素按行优先的顺序依次存放。例如:ints[3][4];5.2数组5.2.3二维数组初始化(1)数据个数与数组元素个数相同①数据按行的顺序用花括号“{}”括起来例如:inta[2][3]={{1,4,5},{6,7,8}};等价于:a[0][0]=1,a[0][1]=4,a[0][2]=5,a[1][0]=6,a[1][1]=7,a[1][2]=8;②数据不按行分组,按二维数组在内存中的存储顺序对数组元素进行初始化
例如:inta[2][3]={1,4,5,6,7,8};等价于:a[0][0]=1,a[0][1]=4,a[0][2]=5,a[1][0]=6,a[1][1]=7,a[1][2]=8;5.2数组5.2.3二维数组初始化(2)数据个数少于数组元素个数①数据按行的顺序用花括号“{}”括起来例如:inta[2][3]={{1},{2,5}};等价于:a[0][0]=1,a[0][1]=0,a[0][2]=0,a[1][0]=2,a[1][1]=5,a[1][2]=0;②数据不按行分组,按二维数组在内存中的存储顺序对数组元素进行初始化例如:inta[2][3]={1,2,5};等价于:a[0][0]=1,a[0][1]=2,a[0][2]=5,a[1][0]=0,a[1][1]=0,a[1][2]=0;5.2数组5.2.3二维数组初始化(3)省略第一维(行)的长度①例如:inta[][4]={{1,2,3,4},{5},{0},{0,7}};系统按数据组数确定数组第一维的长度为4②例如:inta[][4]={1,2,3,4,5,6,7,8,9,10,11,12,13,14};系统会根据数据个数和第二维(列)的长度确定第一维(行)的长度5.2数组5.2.3二维数组输入输出#include<iostream>usingnamespacestd;intmain(){inti,j,a[2][3];for(i=0;i<2;i++)for(j=0;j<3;j++)cin>>a[i][j];for(i=0;i<2;i++){for(j=0;j<3;j++)cout<<a[i][j]<<"";cout<<endl;}return0;}5.2数组5.2.3二维数组举例#include<iostream>usingnamespacestd;#defineM20intmain(){inta[M][M],i,j,n;cout<<"请输入杨辉三角形的行数:";cin>>n;
for(i=0;i<n;i++){a[i][0]=1;a[i][i]=1;}for(i=2;i<n;i++)for(j=1;j<i;j++)a[i][j]=a[i-1][j-1]+a[i-1][j];for(i=0;i<n;i++){cout<<"\n";for(j=0;j<=i;j++)cout<<a[i][j]<<"\t";}return0;}5.2数组5.2.4字符数组字符常量和字符串常量普通字符常量就是用单引号标引起来的一个字符,如'a'和'1'就是合法的字符常量。字符数据在内存中占一个字节,以ASCII形式存储。字符串常量是用双引号标引起来的多个字符,如"ncepu"和"teacher"就是合法的字符串常量。为了方便处理,编译系统会在字符串最后自动加一个'\0'作为字符串的结束标志。因此存储在内存中的字符串常量"ncepu"占6个字节。字符串中的每个字符也是以ASCII形式存储的。'\0'是一个转义字符,代表ASCII值为0的字符,它作为字符串的结束标志。5.2数组5.2.4字符数组定义字符数组是指数组元素类型为字符型的数组。也就是说在定义一维和二维数组时,若类型标识符为char,则定义的数组就是字符数组。例如:chara[10],b[3][4];字符型数组在内存中也占一片连续的存储单元,每个存储单元是一个字节,可以存储一个字符。因此可以利用字符数组来存放和处理字符串。5.2数组5.2.4字符数组初始化(1)用字符常量初始化字符数组①数组长度等于字符常量的个数例如:chara[8]={'t','e','a','c','h','e','r','\0'};②数组长度大于字符常量的个数
例如:chara[10]={'t','e','a','c','h','e','r'};等价于:chara[10]={'t','e','a','c','h','e','r','\0','\0','\0'};5.2数组5.2.4字符数组初始化(2)用字符串常量初始化字符数组①数组长度等于字符常量的个数例如:chara[8]={"teacher"};
等价于:chara[]="teacher";②数组长度大于字符常量的个数
例如:chart[10]="teacher";等价于:chart[10]={'t','e','a','c','h','e','r','\0','\0','\0'};5.2数组5.2.4字符数组输入输出(1)逐个字符输入/输出#include<iostream>usingnamespacestd;intmain(){chart[3][5]={{'','','*','',''},{'','*','*','*',''},{'*','*','*','*','*'}};inti,j;for(i=0;i<3;i++){cout<<"\n";for(j=0;j<5;j++)cout<<t[i][j];//输出数组元素t[i][j]的值
}return0;}5.2数组5.2.4字符数组输入输出(2)将整个字符串一次性输入/输出#include<iostream>usingnamespacestd;intmain(){chara[6];cin>>a;cout<<a;return0;}5.2数组5.2.4字符数组字符串处理函数(1)字符串连接函数strcat
#include<iostream>#include<cstring>usingnamespacestd;intmain(){charstr1[20]="Iama";charstr2[]="student";strcat(str1,str2);cout<<str1;return0;}5.2数组5.2.4字符数组字符串处理函数(2)字符串复制函数strcpy#include<iostream>#include<cstring>usingnamespacestd;intmain(){chara[]="student",b[]="asd";strcpy(a,b);cout<<a;return0;}5.2数组5.2.4字符数组字符串处理函数(3)字符串比较函数strcmp#include<iostream>#include<cstring>usingnamespacestd;intmain(){charstr1[]="China",str2[]="China";cout<<strcmp(str1,str2);return0;}5.2数组5.2.4字符数组字符串处理函数(4)字符串长度函数strlen#include<iostream>#include<cstring>usingnamespacestd;intmain(){chars1[10]={'a','\0','B','C','\0','D'};chars2[]="\t\v\\\0will\n";chars3[]="\x69\092\n";cout<<strlen(s1)<<endl;cout<<strlen(s2)<<endl;cout<<strlen(s3)<<endl;return0;}5.2数组5.2.4字符数组字符串处理函数(5)大写字符变小写字符函数strlwr(6)小写字符变大写字符函数strupr#include<iostream>#include<cstring>usingnamespacestd;intmain(){charstr[10]="Ncepu";cout<<strlwr(str)<<endl;cout<<strupr(str)<<endl;return0;}5.3结构体5.3.1概念及定义5.3.3结构体嵌套5.3.2成员访问5.3结构体5.3.1概念及定义结构体是一种根据实际需要自定义的数据类型,可以容纳不同类型的数据。在C语言中的结构体只能自定义数据类型,不允许有函数,而C++中的结构体可以加入成员函数。C++中声明结构体的方式和声明类的方式大致相同,结构体中既可以包含成员函数,也可以定义成员变量;定义了结构体之后,可以用结构体名来创建对象。不同的是,结构体定义中默认情况下的成员是public,而类定义中默认情况下的成员是private。尽管结构体可以包含成员函数,但一般很少这样做。所以,通常情况下结构体声明只会声明成员变量。5.3结构体5.3.1概念及定义定义(1)先定义结构体类型再单独进行变量定义structStudent{intCode;charName[20];charSex;intAge;};StudentStu;StudentStu[10];Student*pStru;5.3结构体5.3.1概念及定义定义(2)紧跟在结构体类型说明之后定义structStudent{intCode;charName[20];charSex;intAge;}Stu,Stu[10],*pStu;5.3结构体5.3.1概念及定义定义(3)在说明一个无名结构体变量的同时直接定义struct{intCode;charName[20];charSex;intAge;}Stu,Stu[10],*pStu;5.3结构体5.3.1概念及定义定义(4)使用typedef说明一个结构体变量之后再用新类名来定义变量typedefstruct{intCode;charName[20];charSex;intAge;}Student;StudentStu,Stu[10],*pStu;5.3结构体5.3.2成员访问“.”:结构运算符“->”:结构指针运算符用于结构体变量成员的访问用于结构体指针变量成员访问5.3结构体5.3.3结构体嵌套structCosts{doublewholesale;doubleretail;};structItem{stringpartNum;stringdescription;Costspricing;};5.4文件5.4.1文件的概念5.4.3文件的打开与关闭5.4.2文件流对象5.4.4对文本文件的操作5.4.6与文件指针有关的成员函数5.4.5对二进制文件的操作5.4.7随机访问二进制数据文件5.4文件5.4.1文件的概念在C/C++中,经常要对数据文件进行处理。根据文件中数据的组织形式,可将其分为文本文件和二进制文件两种。文本文件的每一个字节存放一个ASCII值,代表一个字符。二进制文件是把内存中的数据按其在内存中的存储形式原样输出到硬盘上存放。字符信息在内存中以ASCII值形式存放,因此,无论是用文本文件输出还是用二进制文件输出,其数据形式是一样的。5.4文件5.4.2文件流
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 专业桥架搭建项目2024承包协议版B版
- 专业级电缆采购协议样本(2024年定制版)
- 2025厂房租赁合同补充协议(专业版)4篇
- 专属2024委托经营管理协议样本版B版
- 2025年度茶叶品牌独家代理合作协议书4篇
- 2025年度绿色建筑项目承包合同范本4篇
- 2025年度数据中心场地及设备租赁协议4篇
- 2025年度环保材料销售合同绿色生产与可持续发展4篇
- 2025年厂区配电系统安全运行保障合同4篇
- 二零二五版打桩工程劳务分包协议2篇
- 建筑公司年度工作总结及计划(6篇)
- 2023年昆明贵金属研究所招聘笔试模拟试题及答案解析
- 硫酸装置试生产方案
- 国家重点专科临床护理专业评选标准
- DB11T 1944-2021 市政基础设施工程暗挖施工安全技术规程
- 中国农业核心期刊要目概览
- 好听简单的钢琴谱
- 技术咨询合同书(浙江省科学技术厅监制)
- 《中外资产评估准则》课件第5章 美国评估准则
- 《轴系结构设计》ppt课件
- 应用化学专业英语unit.ppt
评论
0/150
提交评论