第6章 数组 指针与字符串

合集下载

《C++语言程序设计》第6章 数组 指针与字符串

《C++语言程序设计》第6章 数组  指针与字符串
• 例如:static int a[3][4]={{1,2,3,4},{5,6,7,8},{9,10,11,12}};
• 可以只对部分元素初始化
• 例如:static int a[3][4]={{1},{0,6},{0,0,11}};
• 列出全部初始值时,第1维下标个数可以省略
• 例如:static int a[][4]={1,2,3,4,5,6,7,8,9,10,11,12}; • 或:static int a[][4]={{1,2,3,4},{5,6,7,8},{9,10,11,12}};
其中数组a的存储顺序为:
a00 a01 a02 a03 a10 a11 a12 a13 a20 a21 a22 a23
12
二维数组的初始化
• 将所有初值写在一个{}内,按顺序初始化
• 例如:static int a[3][4]={1,2,3,4,5,6,7,8,9,10,11,12};
• 分行列出二维数组元素的初值
cout << "Moving the point to (" << newX << ", " << newY << ")" << endl; x = newX; y = newY; }
例6-3 对象数组应用举例
//6-3.cpp #include "Point.h" #include <iostream> using namespace std;
int main() {
cout << "Entering main..." << endl;

c++实验报告6

c++实验报告6
指导教师
乐仁昌
学号
120352010054
日期
任务清单
场景
声明一个Employee类,其中包括姓名、街道地址、城市和邮编等属性,以及chang_name()和display()等函数。Display()显示姓名、街道地址和邮编等属性,chang_name()改变对象的姓名属性,实现并测试这个类
实验方法
employee emp[5]=
{
employee("小明","道山路5号","福州","350007",1),
employee("小王","上山路1号","厦门","350009",2),
employee("小李","梧桐路61号","北京","100000",3),
employee("小周","平山路7号","上海","121000",4),
emp.display();
cout<<endl;
emp.chang_name("LiSi");
emp.display();
}
报告书
名称
实验6-2数组、指针与字符串2
姓名
指导教师
学号
日期
任务清单
场景
声明包含5个元素的对象数组,每个元素都是Employee类型的对象
实验方法
使用上一小题中的Employee类声明对象数组emp[5],使用循环语句把数据显示出来。程序名:lab6_2.cpp

第6章C语言

第6章C语言

float
*point;
定义了一个指向浮点型数据的指针变量point,即point是一个 用于存放浮点型变量地址的变量。
6.1.2 指针变量的定义与初始化
在此定义中,基类型声明了该指针变量所指向的 实体的类型。如:一个指向float类型的指针变量,它 的基类型应该为float型;一个指向int类型的指针变 量,它的基类型应该为int型。“*”是一个标识,用 以说明该变量是一个具有指针类型的变量。对于指针 变量的变量名的命名也应该尽量做到“见名知义”。 需要注意的是,指针变量名为“point”,而非 “*point”。
第6章
指针
山东大学电气工程学院
第6章Байду номын сангаас指针

指针是C语言中一个非常重要的概念,它对于变量的引用、数组 的处理、字符串的操作、函数参数的调用及函数间数据的处理、 结构体的应用和文件的操作等等都起着相当重要的作用。正确的 运用指针不仅可以提高程序的执行效率,简化操作过程,而且可 以处理复杂的数据操作,实现动态的数据结构,完成形式多样的 参数传递以及灵活的修改形参与实参的数值。但是需要警惕的是, 因为指针的运用如此的灵活,以至于经常会出现一些意想不到的 错误和结果。甚至在某些情况下,错误的运用指针,会使程序受 到非常严重的破坏。因此可以说,正确的理解和运用指针是衡量 能否成功的编写高质量C程序的标准。
6.1.3 与指针有关的运算符
在C语言中有三个与指针有关的运算符: 1、“&”运算符 此运算符称为取地址运算符。通过取地址运算符“&”可以获得 一个变量的地址。“&”为单目运算符,运算方向为从右向左结合, 直接作用于一个变量前,表示该变量的地址。 例如: int x=10,*p1;

C 语言程序设计实验答案_数组、指针与字符串解析

C  语言程序设计实验答案_数组、指针与字符串解析

实验06 数组、指针与字符串(4学时)(第6章数组、指针与字符串)一、实验目的二、实验任务6_1(习题6-25)编写并测试3×3矩阵转置函数,使用数组保存3×3矩阵。

6_2(习题6-26)使用动态内存分配生成动态数组来重新完成上题(n阶方阵),使用指针实现函数的功能。

6_3 编程实现两字符串的连接。

要求使用字符数组保存字符串,不要使用系统函数。

6_4 使用string类声明字符串对象,重新实现上一小题。

6_5(习题6-27)声明一个Employee类。

其中包括姓名、街道地址、城市和邮编等属性,以及change_name()和display()等函数。

display()显示姓名、街道地址、城市和邮编等属性,change_name()改变对象的姓名属性,实现并测试这个类。

6_6(习题6-27)声明包含5个元素的对象数组,每个元素都是Employee 类型的对象。

6_7 修改实验4中的people(人员)类。

具有的属性如下:姓名char name[11]、编号char number[7]、性别char sex[3]、生日birthday、身份证号char id[16]。

其中“出生日期”声明为一个“日期”类内嵌子对象。

用成员函数实现对人员信息的录入和显示。

要求包括:构造函数和析构函数、拷贝构造函数、内联成员函数、聚集。

在测试程序中声明people类的对象数组,录入数据并显示。

三、实验步骤1.(编程,习题6-25)编写矩阵转置函数,输入参数为3×3整型数组。

使用循环语句实现矩阵元素的行列对调,注意在循环语句中究竟需要对哪些元素进行操作,编写main()函数实现输入输出。

程序名:lab6_1.cpp。

参考运行结果:★程序及运行结果://lab6_1.cpp#include<iostream>using namespace std;void move(int matrix[][3]){int temp;for(int i=0;i<3;i++)for(int j=0;j<i;j++){temp=matrix[i][j];matrix[i][j]=matrix[j][i];matrix[j][i]=temp;}}void main(){int i,j,mat[3][3];cout<<"输入3×3矩阵"<<endl;for(i=0;i<3;i++){cout<<"第"<<i+1<<"行:";for(j=0;j<3;j++) cin>>mat[i][j];}cout<<"\n输入的3×3矩阵为:"<<endl;for(i=0;i<3;i++){for(j=0;j<3;j++)cout<<mat[i][j]<<" ";cout<<endl;}move(mat);cout<<"转置后的矩阵为:"<<endl;for(i=0;i<3;i++){for(j=0;j<3;j++)cout<<*(*(mat+i)+j)<<" ";//指针形式cout<<endl;}}2.(编程,习题6-26)编写n×n阶矩阵转置函数,参数为整型指针。

第06章 指针

第06章 指针
…...
17
高 级 语 言 程 序 设 计 与 应 用 教 程
6.3 指针和地址运算
1、指针变量的加、减运算(移动运算) 将指针变量的原值加上n个
它指向的变量所占用的内存 指针可以参与加法和减法运算,但其加、减的含义绝对 单元字节数。 不同于一般数值的加减运算。如果指针p是这样定义的: ptype *p;,并且p当前的值是ADDR,那么:
第 六 章
指 针
学习指针是学习C语言中最重要的一环, 能否正确理解 和使用指针是我们是否掌握C语言的一个标志,可以说不懂 C语言中的指针就不懂什么是C语言。
2
高 级 语 言 程 序 设 计 与 应 用 教 程
本章学习重点
指针的概念 指针变量的定义、初始化和引用 指针的运算 指针与一维数组 指针与二维数组 指针与字符串 指针作为函数的参数
第 六 章
指 针
3
高 级 语 言 程 序 设 计 与 应 用 教 程
6.1 指针与地址
1、内存地址──内存中存储单元的编号 教学楼
存储地址
内存
存储 单元
0 …... 2000 2001
601 501
602 502
50
2002 注意:内存单元的地址与内存单元中的数据是 401 402 两个完全不同的概念。 2003 存储单元有
指针变量p 2000 指针变量q 2000
第 六 章
…...
指 针
12
高 级 语 言 程 序 设 计 与 应 用 教 程
指针变量赋值的几种错误方法: 例 int *p = &a; int a;
变量a的定义在后,对a的引 用超出了a的作用域
第 六 章
注意:一个指针变量只能指向同类型的变量如果给指针赋 例 int a; 值时,=号右边的指针类型与左边的指针类型不同,则需要 int *pi = &a; pc不能指向非字符型变量 进行类型强制转换。 char *pc = &a; int a; 赋值语句中,被赋值的指针 例 int int *pi; a; 变量p的前面不能再加“*” int *p; 说明符 char *pc; *p = &a; pi = &a; //pi指向a 不允许直接把一个数(或任 pc = (char *)pi; //pc也指向了a,即pi和pc的值都是a的地址 例 int *p; 何其他非地址类型的数据) p = 2000; 赋值给指针变量

C语言程序设计课件 .ppt

C语言程序设计课件 .ppt

定义C为字符数组,包含10个元素。在赋值以后数组的状态 如图所示: c[0] c[1] c[2] c[3] c[4] c[5] c[6] c[7] c[8] c[9]
I
am
happ y
2020/4/12
24
2、字符数组的初始化
与一般数组的初始化方法类似。
例如char c[ ]={‘I’,’ ’,’a’,’m’,’ ’,’a’,’ ’,’s’,’t’,’u’,’d’,’e’, ’n’,’t’}
a[0] ---------------------- a 00 a 01 a 02 a 03
a
a[1] ---------------------- a 10
a 11
a 12
a 13
a[2] ---------------------- a 20 a 21 a 22 a 23
上面定义的二维数组可以理解为定义了3个一维数组,即 相当于 float a[0][4],a[1][4],a[2][4]
85 555 58 444 44 822 22 280 00 008
第第 第 第结 一二三 四 次次 次 次果
2020/4/12
11
根据流程图写出程序(今设n=10),定义数组长度为11, 本例中对a[0]不用,只用 a[1]到a[10],以符合人们的习惯。
流程图如下:
输入n个数给a[1]到a[n] for j=1 to n-1
for (i=1;i<=10-j;i++) if (a[i]>a[i+1]) {t=a[i];a[i]=a[i+1];a[i+1]=t;}
printf(“the sorted numbers :\n”); for (i=1;i<11;i++)

第6章 数组和字符串3.31

9
• 程序举例:
• • • • • Char a[10],b[10]=“copy”; Strcpy(a,b); Printf(“%c %c “,a,b); Printf(“%d %d\n”,strlen(a),strlen(b)); 运行结果为:copy copy 4 4
10
• 函数原型:
• char* strcat(char* dest,const char* src); 1)此函数同上述strcpy函数具有完全相同的参数说明和返回 值类型。 2)函数功能:把第二个参数src所指字符串拷贝到第一个参 数dest所指字符串之后的存储空间中(即把src所指此付出 连接到dest所指字符串之后),该函数返回dest的值。
7
• C系统专门为处理字符串提供了一些预定义函数供编 程者使用,这些函数的原型被保存在string.h头文件中, 在程序文件中使用这些函数时,必须在程序文件开始 使用#include命令把该头文件引入。
• 1.求字符串长度
函数原型:int strlen(const char s[]); 1)保留字const表示该参数的内容在函数体中是不允许改变的, 不影响读取参数的值。 2)该函数对应的实参可以为任何形式的字符串,如:字符串常 量,一个一维字符数组,二维字符数组中只带航下标的但下标 变量。 3)调用该函数,返回实参字符串的长度。 例:strlen(“constant”)返回值为8。
名字一致区别在于下标所以不需要讨论数组的操作运算但对于保存字符串的数组特殊的字符数组有n个元素的字符数组可以存放最多n1个字符的串字符串的结束标志0虽然存放n个字符的串系统并不以为错但良好的编程习惯要求大家遵守通常都是整体串进行的运算而系统没有提供运算符比如
• C中,存储字符串是利用一维字符数组来实现 的,该字符数组的长度要大于等于字符串的长 度加1。 • 把一个字符串存入到数组时,是把每个字符依 次存入到数组中对应元素中。即第一个字符存 入下标为0的元素中,第二个字符存入下标为1 的元素中,最后把一个空字符'\0'存入到下标为 n的元素中(假定字符串的长度为n)。 • 存储每个字符就是存储它的ASCII码或区位码。

C语言 — 第六章 数组(大学使用教程)

21
数组常用的循环形式
法一 int i,a[100]; for(i=0;i<100;i++) a[i]=i; 法二 int i,a[100]; for(i=0;i<=99;i++) a[i]=i;
C程序中常用的是第一种方法。 程序中常用的是第一种方法。 此法中,循环变量的终值是“小于”而非“等于” 此法中,循环变量的终值是“小于”而非“等于” 数组长度!否则将导致“越界”的发生。 数组长度!否则将导致“越界”的发生。


• 数组是一组有序的同类型数据 。 • 数据称为数组的元素。 数据称为数组的元素。
6
数组的用处
保存大量同类型的相关数据 – 如矩阵运算,表格数据等 如矩阵运算,
数组的特点
快速地随机访问 一旦定义, 一旦定义,不能改变大小
7
§6.1 数组的定义与初始化
数组的定义 : 数组在使用前要进行定义: 名称、类型、维数、 数组在使用前要进行定义 名称、类型、维数、大小 定义格式: 定义格式: 类型标识符 数组名[常量表达式1][常量表达式2]…… 数组名[常量表达式1][常量表达式2] 1][常量表达式2]
如有数组 int a[5]; 其中数据为:2、4、23、6、78 其中数据为: 、 、 、 、 则存放情况如下: 则存放情况如下:
12
数组在内存 中的首地址
2000 2002
2的低位字节 的低位字节 2的高位字节 的高位字节 4的低位字节 的低位字节 4的高位字节 的高位字节
a[0] a[1] a[2] a[3] a[4]
即a=2000
2004 2006 2008
int a[5]={ 2,4, 23,6,78 };

《C语言》指针--ppt课件全文


说明: 这种方法可能会破坏系统的正常
工作状态,因为temp是一个指针变量 b 59
但是在函数中并没有给temp一个确定 的地址,这样它所指向的内存单元是 不可预见的,而对*temp的赋值可能 带来危害
swap2 &a p1
&b p2 随机值 temp
5?
ppt课件
11
例 6. 3 ③ #include <stdio.h> void swap3( int *p1, int *p2) { int *p;
p
*p = 12 ; printf (“%d\n” , *p ) ;
对a 重新赋值 等价于 a=12
2. & 与*
p =ห้องสมุดไป่ตู้&a ;
1010 152 a
&*p &(*p) &a *&a *(&a) *p a
ppt课件
6
3. *与 ++ , - -
int a = 2 , b = 5 , c , d , *p ; (1) p = &a ;
② 形参表列: 即指针变量所指向的函数的形参表列 ③ 格式中的小括号不能省略 2. 应用 (1) 让指针变量指向函数 pt = add ; 因为函数名为函数的入口地址, 所以直接将函数名 赋给指针变量即可 (2) 使用指针变量调用函数 格式 : (*指针变量名) ( 实参表列)
ppt课件
17
例 求一维数组中全部元素的和
因此我们可以定义一个指针变量, 让它的值等于 函数的入口地址, 然后可以通过这个指针变量来调用 函数, 该指针变量称为指向函数的指针变量
ppt课件
16
指向函数的指针变量

Java语言程序设计第6章_数组与字符串


6.3.3 正则表达式中的限定符
▪ 在使用正则表达式时,如果需要某一类型的元字符多次输出, 逐个输入就相当麻烦,这时可以使用正则表达式的限定元字 符来重复次数。
例如:
regex=”hello[246]?” 那么”hello”、”hello2”、 ”hello4”、 ”hello6”都是与 regex匹配的字符串。
以上构造方法中,使用最多的是第2个,如:
String s = new String(“Hello World“);
字符数组要转化为字符串可以利用第3个构造方法。例如:
Char[] helloArray={‘h’,’e’,’l’,’l’,’o’}; String s = new String(helloArray);
▪ 二维数组的元素是一维数组,因此,初始化时也可允许各行单 独进行。Java的二维数组允许各行有不同的元素个数。例如:
▪ double score[][]; ▪ score = new double[3][]; ▪ score[0] = new double[3]; ▪ score[1] = new double[2]; ▪ score[2] = new double[4];
▪ public String (String s); //用已有字符串创建新的String。
▪ public String (StringBuffer buf) ; //用StringBuffer对 象的内容初始化新String。
▪ public String (char value[]); //用已有字符数组初始 化新String。
double score [] []={{56.8,42.5,96.8};{100,78},{99,63,78,45}}
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
#include <iostream> using namespace std; int main() { int f[20] = {1,1}; //初始化第0、1个数 for (int i = 2; i < 20; i++) //求第2~19个数 f[i] = f[i - 2] + f[i - 1]; for (i=0;i<20;i++) { //输出,每行5个数 if (i % 5 == 0) cout << endl; cout.width(12); //设置输出宽度为12 cout << f[i]; } return 0; }
={{1,2,3,4},{5,6,7,8},{9,10,11,12}};
▫ 可以对部分元素赋初值
例如:static int a[3][4]={{1},{0,6},{0,0,11}};
C++语言程序设计(第4版),郑莉,清华大学
6.1 数组 —— 6.1.2 数组的存储与初始化
11
例: 数组处理求Fibonacci数列
C++语言程序设计(第4版),郑莉,清华大学
6.1 数组 —— 6.1.2 数组的存储与初始化
12
例 (续)
运行结果: 1 8 89 987 1 13 144 1597 2 21 233 2584 3 34 377 4181 5 55 610 6765
C++语言程序设计(第4版),郑莉,清华大学
6.1 数组 —— 6.1.2 数组的存储与初始化
C++语言程序设计(第4版),郑莉,清华大学
6.1 数组
10
6.1.2 数组的存储与初始化(续)
• 二维数组的初始化
▫ 将所有数据写在一个{}内,按顺序赋值
例如:static int a[3][4]={1,2,3,4,5,6,7,8,9,10,11,12};
▫ 分行给二维数组赋初值
例如:static int a[3][4]
6.1 数组
16
6.1.3 数组作为函数参数
• 数组元素作实参,与单个变量一样。 • 数组名作参数,形、实参数都应是数组名,类型 要一样,传送的是数组首地址。对形参数组的改 变会直接影响到实参数组。
C++语言程序设计(第4版),郑莉,清华大学
6.1 数组 —— 6.1.3 数组作为函数参数
17
例6-2 使用数组名作为函数参数
6.1 数组
21
6.1.4 对象数组
• 声明:
类名 数组名[元素个数];
• 访问方法:
通过下标访问
数组名[下标].成员名
C++语言程序设计(第4版),郑莉,清华大学
6.1 数组 —— 6.1.4 对象数组
22
对象数组初始化
• 数组中每一个元素对象被创建时,系统都会调用 类构造函数初始化该对象。 • 通过初始化列表赋值。
6
例6-1
#include <iostream> using namespace std; int main() { int a[10], b[10]; for(int i = 0; i < 10; i++) a[i] = i * 2 - 1; b[10 - i - 1] = a[i]; } for(int i = 0; i < 10; i++) cout << "a[" << i << "] = cout << "b[" << I << "] = } return 0; }
{
{ " << a[i] << " "; " << b[i] << endl;
C++语言程序设计(第4版),郑莉,清华大学
6.1 数组
7
6.1.2 数组的存储与初始化
• 一维数组的存储
数组元素在内存中顺次存放,它们的地址是连续的。 例如: a
a[0]
a[1]
a[2]
a[3]
a[4]
a[5]
a[6]
主函数中初始化一个矩阵并将每个元素都输出, 然后调用子函数,分别计算每一行的元素之和,将 和直接存放在每行的第一个元素中,返回主函数之 后输出各行元素的和。
C++语言程序设计(第4版),郑莉,清华大学
6.1 数组 —— 6.1.3 数组作为函数参数
18
例6-2 (续)
#include <iostream> using namespace std; void rowSum(int a[][4], int nRow) { for (int i = 0; i < nRow; i++) { for(int j = 1; j < 4; j++) a[i][0] += a[i][j]; } } int main() { //主函数 int table[3][4] = {{1, 2, 3, 4}, {2, 3, 4, 5}, {3, 4, 5, 6}}; //声明并初始化数组
• 二维数组的存储
按行存放
例如: float a[3][4];
可以理解为: a
其中数组a的存储顺序为:
a[0]——a00 a01 a02 a03 a[1]——a10 a11 a12 a13 a[2]——a20 a21 a22 a23
a00 a01 a02 a03 a10 a11 a12 a13 a20 a21 a22 a23
a[7]
a[8]
a[9]
数组名字是数组首元素的内存地址。 数组名是一个常量,不能被赋值。
C++语言程序设计(第4版),郑莉,清华大学
6.1 数组
8
6.1.2 数组的存储与初始化(续)
• 一维数组的初始化
可以在定义数组的同时赋给初值:
▫ 在声明数组时对数组元素赋以初值。
例如:static int a[10]={0,1,2,3,4,5,6,7,8,9};
C++语言程序设计(第4版),郑莉,清华大学
6.1 数组 —— 6.1.4 对象数组
25
例6-3 (续)
//Point.cpp #include <iostream> #include "Point.h" using namespace std; Point::Point() { x = y = 0; cout << "Default Constructor called." << endl; } Point::Point(int x, int y) : x(x), y(y) { cout << "Constructor called." << endl; } Point::~Point() { cout << "Destructor called." << endl; } void Point::move(int newX,int newY) { cout << "Moving the point to (" << newX << ", " << newY << ")" << endl; x = newX; y = newY; }
C++语言程序设计(第4版),郑莉,清华大学

6.1 数组 —— 6.1.2 数组的存储与初始化
15
例 (续)
运行结果:
acbba ** acbad Score 100% 40%
Score
60%
abbda * **
bdcba *****
Score
Score
0%
C++语言程序设计(第4版),郑莉,清华大学
▫ 可以只给一部分元素赋初值。
例如:static int a[10]={0,1,2,3,4};
▫ 在对全部数组元素赋初值时,可以不指定数组长度。
例如:static int a[]={0,1,2,3,4,5,6,7,8,9}
C++语言程序设计(第4版),郑莉,清华大学
6.1 数组
9
6.1.2 数组的存储与初始化(续)
例:Point a[2]={Point(1,2),Point(3,4)};
• 如果没有为数组元素指定显式初始值,数组元素 便使用默认值初始化(调用缺省构造函数)。
C++语言程序设计(第4版),郑莉,清华大学
6.1 数组 —— 6.1.4 对象数组
23
数组元素所属类的构造函数
• 不声明构造函数,则采用缺省构造函数。 • 各元素对象的初值要求为相同的值时,可以声明 具有默认形参值的构造函数。 • 各元素对象的初值要求为不同的值时,需要声明 带形参的构造函数。 • 当数组中每一个对象被删除时,系统都要调用一 次析构函数。
6.1 数组
3
数组的概念
• 数组是具有一定顺序关系的若干相同类型变量的 集合体,组成数组的变量称为该数组的元素。 • 数组属于构造类型。
C++语言程序设计(第4版),郑莉,清华大学
6.1 数组
4
6.1.1 数组的声明与使用
• 数组的声明
类型说明符 数组名[ 常量表达式 ] [ 常量表达式 ]„„ ;
相关文档
最新文档