C第六章数组指针与字符串PPT课件

合集下载

c语言数组与字符串PPT课件

c语言数组与字符串PPT课件

j +00+11)52
7 7
9 9
3 5
4 4
6 6
8 8
2 3
if (num[i] >num[ j0])1 2 3 9 7 5 6 8 4
{ tem=num[i];
0123497685 0123459786
num[i]=num[ j];
0123456987 0123456798
num[ j]=tem; 0 1 2 3 4 5 6 7 8 9
• Char st[20]; scanf(“%s”,st); • 注意,st是数组名而非变量名,故不
可用&st • 数组名代表了数组的首地址,整个
数组存放在以首地址开始的一块连 续内存单元中
第20页/共34页
字符串处理函数:
• 头文件是 <string.h>
• puts(str或字串)
在屏幕上显示一个字符串(以‘\0’结束); 将结束标记转为 ‘ \n’; 可含转义字符.
main( ) { int num[10], i;
for (i=0; i<10; i++) num[i]=i+1;
for(i=0; i<10; i++) num[i] *= 10;
for (i=0; i<10; i++) printf("num[%d] = %d \n", i, num[i] );
}
第6页/共34页
main( ) { int num[10], i;
for (i=0; i<10; i++) scanf("%d", &num[i]);

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章 数组指针与字符串PPT课件

第6章 数组指针与字符串PPT课件
默认数组长度为5
8
例:用数组来处理求Fibonacci数列问题
#include<iostream> using namespace std; int main() { int i;
static int f[20]={1,1}; //初始化第0、1个数 for(i=2;i<20;i++) f[i]=f[i-2]+f[i-1]; //求第2~19个数 for(i=0;i<20;i++) //输出,每行5个数// { if(i%5==0) cout<<endl;
** Score 60%
acbad Score 100%
abbda * ** Score 40%
bdcba ***** Score 0%
1313
二维数组的声明及引用
数据类型 标识符[常量表达式1][常量表达式2];
例: int a[5][3]; 表示a为整型二维数组,其中第一维有5个下
标(0~4),第二维有3个下标(0~2),数组 的元素个数为15,可以用于存放5行3列的整 型数据表格。
14
二维数组的声明及引用
▪ 二维数组的声明
类型说明符 数组名[常量表达式][常量表达式]
例如:float a[3][4];

可以理解为:
存储顺序
a
a[0]——a00 a01 a02 a03 a[1]——a10 a11 a12 a13 a[2]——a20 a21 a22 a23
按行存放,上例中数组a的存储顺序为:
▪ 分行给二维数组赋初值
例如:static int a[3][4]={{1,2,3,4},{5,6,7,8},{9,10,11,12}};

6.2.3 字符串与指针数组_C语言程序设计案例教程(第2版)_[共7页]

6.2.3 字符串与指针数组_C语言程序设计案例教程(第2版)_[共7页]

187〖算法描述〗在这个程序中,需要按照顺序执行下列操作。

(1)按照规则构造下三角方阵。

(2)输出下三角方阵。

〖程序代码〗#include <stdio.h>#define NUM 7main(){int a[NUM][NUM];int *ptr, i, j;/*构造下三角方阵 */for (i=0; i<NUM; i++) {ptr = *(a+i); /*ptr 指向第i 行的第1个元素 */for (j=0; j<=NUM; j++)if (i>=j)*(ptr+j) = j+1;/*ptr+j 指向ptr 所指行的下标为j 的元素 */ else*(ptr+j) = 0;}/ *输出下三角方阵 */for (i=0; i<NUM; i++) {ptr = *(a+i);for (j=0; j<NUM; j++)printf(“%3d”, *(ptr+j));printf(“\n”);}}〖运行结果〗运行这个程序后,将显示如上面所示的下三角方阵。

在这个程序中,看到了a +i 的书写形式,这是因为a 与a[0]等价;a +1与a[1]等价,所以可以导出a +i 与a[i ]等价。

又因为a[i]指向第i行的首地址,所以a[i ]+j 就指向第i 行、第j 列元素。

这种指针关系如图6-18所示。

综上所述,数组和指针的运算具有很大的相似性,特别是作为函数参数的数组类型(如:int a[ ])和指针参数(如:int *a )是完全等价的。

从使用者的角度看,数组类型概念简单容易理解,而指针类型效率高且功能强大。

因此,对于一般应用程序可以尽量采用数组类型,以减轻维护的难度;而对于强调性能的应用程序,应尽量采用指针类型。

6.2.3 字符串与指针数组在计算机应用系统中,各种信息系统不可避免地要进行大量的文字处理。

由于文字在计算图6-18 二维数组与指针的关系188 机语言中表现为字符串,字符串处理也就成为程序设计中应用最为广泛的基本功能。

C语言 第六章 数组与字符串.ppt

C语言 第六章 数组与字符串.ppt
下一页
第5章 设备管理
3.用起泡法对n个整数进行排序,不是一定要 进行n-1趟排序后,才可以得到排序结果。如 果在中间某一趟排序过程中,没有发现任何两 个元素违反“轻气泡不能在重气泡之下”原则, 即所有元素均已排列有序,则排序结束。如上 例中,7个关键字,只经过了4趟排序。 (源程序:L06~09.c )
返回本节
第5章 设备管理
例6.2
# include <stdio.h>
main()
{
int i, j;
int a[3][4]={{1,2,3,4},{5,6,7,8},
{9,10,11,12}};
for (i=0; i<3; i++)
{ for (j=0; i<4; i++)
printf(“%4d”,a[i][j]);
因此上面定义的2×3的整型数组a中所有元素在 内 存 中 的 排 列 顺 序 是 : a[0][0],a[0][1], a[0][2],a[1][0],a[1][1],a[1][2]。
下一页
第5章 设备管理
因此,我们可以把二维数组看作是一种特 殊的一维数组,它的每一个元素都是一个一维 数组。
例如,可以把上面定义的数组a看作是一个 一维数组,它有2个元素:a[0]、a[1],每一个 元素又是一个包含3个元素的一维数组。
边。
这样不断进行下去,直到找到满足条件的元素或者 该数组中没有这样的元素为止。
(源程序:L06~07.c )
返回本节
第5章 设备管理
例6.8 用直接选择排序法对5个整数 进行升序排序。
直接选择排序的基本思想是:每一次从待排 序的整数中选出关键字最小的整数,顺序放在 已排好序的那些整数的末尾(即与待排序的整 数中的第一个整数交换位置),直到全部整数 排序完毕。(举例)(源程序:L06~08.c )

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

《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
指向函数的指针变量

第六章 数组指针与字符串(3)PPT课件

第六章 数组指针与字符串(3)PPT课件

7
7
例 动态存储分配举例
class Point { public:
Point ( ) { X =Y = 0; cout <<“Default constructor call.”<<endl ; }
Point (int xx, int yy) { X = xx; Y = yy; cout <<“constructor call.”<<endl ; }
C++语言程序设计
动态内存分配与字符串
C++语言程序1设1.11计.2020
1
1
教学要求: 1. 掌握数组的概念和使用; 2. 掌握指针的概念、运算、指针数组和对象指针; 3. 掌握动态内存分配的应用; 4. 掌握字符串的应用;
教学重点: 1. 数组的声明、存储,数组作为参数和对象数组 2. 指针的声明、运算,处理数组元素,对象指针 3. new运算和 delete运算
Default constructor call. Default constructor call. Destructor call. Destructor call.
C++语言程序1设1.11计.2020
14
14
指向多维数组的指针和指针变量 一、多维数组的地址 例:(二维数组为例)设有一个二维数组a,
Point ( ) { X =Y = 0; cout <<“Default constructor call.”<<endl ; } Point (int xx, int yy) { X = xx; Y = yy;
cout <<“constructor call.”<<endl ; } ~point ( ) {cout<<“Destructor call.”<<endl ; } int GetX( ) { return X; } int GetY( ) { return Y;}

《C程序设计》课件第6章

《C程序设计》课件第6章
2 二维数组的初始化 对二维数组元素赋初值,可以用分行赋值的方法,例 如: int a[3][2]={{1,2},{3,4},{5,6}}; 其中内{ }代表一行元素的初值。经过如此的初始化后, 每个数组元素分别被赋以如下各值: a[0][0]=1,a[0][1]=2,a[1][0]=3, a[1][1]=4,a[2][0]=5,a[2][1]=6 写成行列式形如:
数组是由相同类型的数据组成的有序集合, 集合中的每 一个数据称为数组的元素, 每个数组元素用数组名和下标唯 一标识访问, 在程序中可方便地按下标组织循环来访问数组 元素。 下面用数组来改写例6.1, 请读者体会数组的作用。
#include <stdio.h> void main() {
float s[5]; int i; printf("Enter five scores:"); for(i=1; i<=5; i++)
1 2 3 4 5 6
这种初始化的方式也可以只为数组的部分元素赋值,例 如:
int a[3][2]={{1},{2,3},{4}}; 这样,数组的前几个元素的值为:
a[0][0]=1,a[1][0]=2,a[1][1]=3, a[2][0]=4 而其余元素的初值将自动设为0。 在初始化时,也可将所有数据写在一个花括号内,按数 组的排列顺序对各元素赋初值。如: int a[3][2]={1,2,3,4}; 其结果是:a[0][0]=1,a[0][1]=2,a[1][0] =3,a[1][1]=4,其余元素的值自动设为0。
需要强调指出的是,在程序设计中, C语言的编译系统对 数组下标越界(即引用a[5], a[6],…),并不给出错误提示, 因此用户在编程时应格外注意,以免影响系统的正常运行。

数组指针与字符串

数组指针与字符串
面向对象程序设计(A)
第二讲 数组、指针与字符串
中国地质大学(武汉)计算机学院
1
本章主要内容
1.数组 2.指针 3.动态存储分配* 4.字符串*
2
1.数组
数组的概念 一维数组的声明与引用 二维数组的声明与引用
3
1.1数组的概念

数组是具有一定顺序关系的若干相
同类型变量的集合体,组成数组的变量
都是unsigned long int型。
允许声明指向 void 类型的指针。该指针可以被 赋予任何类型对象的地址。
例: void *general;
18
例2-3 指针的声明、赋值与使用
指 #include<iostream.h>
void main(){

int *i_pointer; //声明int型指针i_pointer
<<"]="
{
<<B[i]<<endl;
A[i]=i*2-1;
}
B[10-i-1]=A[i]; }
}
6
一维数组的存储顺序

数组元素在内存中顺次存放,它们的地址是连
续的。例如:具有10个元素的数组 a,在内存
组 中的存放次序如下:
a a[0] a[1] a[2] a[3] a[4] a[5] a[6] a[7] a[8] a[9]
运行结果:
二维数组的声明及引用

二维数组的声明
类型说明符 数组名[常量表达式][常量表达式]
例如:float a[3][4];

可以理解为:
存储顺序
a
a[0]——a00 a01 a02 a03 a[1]——a10 a11 a12 a13 a[2]——a20 a21 a22 a23
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

• 10个元素,a[0],a[1]……a[ ]
面向对象程序设计
1
第1页/共56页
数组
• 数组的引用
• 引用数组元素:可以出现在简单变量能出现的任何地方,如,赋值、输入、 输出、基本运算
• 格式:
数组名[下标1] [下标2]… 整常数
score[2]
整型变量
score[i]
int a[n]; 下标取值范围为:
cout<<endl;
}
RowSum(
);
for ( i = 0; i <T3a;bil+e+,3)
cout<<"sum of row "<<i<<":"<<Table[i][0]<<endl;
}
面向对象程序设计
10
第10页/共56页
数组
• 对象数组 • 数组元素是同一个类的对象的数组 • 声明 • 类名 数组名[下标表达式] eg: Date dates[7]; • 引用 • 数组名[下标].成员名 eg: dates[2].year; • 初始化 • 调用构造函数对每个元素初始化
0~n-1
整ore[num [2]] 值为整数的函数 score[max(i,j)]
面向对象程序设计
2
第2页/共56页
数组
• 数组的存储 • 一维数组元素在内存中顺序、连续存储 • 数组元素在内存中占据一组连续的存储单元 • 逻辑上相邻的元素在物理地址上也是相邻的 • 数组名是数组首元素的内存首地址
12、如声果明声数明组数时组,时给,每没个指元定素初初始值,则调用形默参认类构型造匹函配数的构造函数 Date d[2]={Date(2010,10,11),}Date(2010,9,20)}
double avrg( int n,int a[)] {
double x=0.0; for(int i=0;i<n;i++)
x+=a[i]; return x/n; }
1、分析程序的运行结果 2、填空
void main() {
int a[3]={2,7,10}, b[5]={3,12,5,6,8}; cout<<avrg(3,a)<<", " <<avrg(5,b)<<endl; }
数组
• 数组的声明
• 格式 数据类型 数组名 [常量表达式 1] [常量表达式2 ]. . .
整型、浮 点型、自 定义类型
数组名:常量, unsigned int
代表数组元素 限定数组元素
在内存中的起 个数 始地址
eg:int a[5][3];
• 有eg:15?in个t元a素[1,0];
9?
a[0][0],a[0][1]……a[?4 ][?3 ]
面向对象程序设计
5
第5页/共56页
数组
• 实例分析
1、分析程序的运行结果 2、填空
#include <iostream> using namespace std; void main() { int A[5],B[5];
for(int i=0;i<5;i++ ) {
A[i]=i*2-1; B[5-i-1]=A[i]; }
面向对象程序设计
7
第7页/共56页
数组
• 数组作为函数参数 • 数组元素和数组名都可作为函数的参数 • 数组元素做实参:值传递 • 数组名做实参:地址传递 • 实参和形参都应该是数组名 • 形参数组和实参数组的首地址重合
面向对象程序设计
8
第8页/共56页
数组
• 实例分析一
#include <iostream> using namespace std;
eg:int a[3] 数组元素为:a[0]、a[1]、a[2]
a[0]
数组在内存的首地址:a 或 ?
a[1]
为数组a分配的连续的存储单元
a[2]
面向对象程序设计
3
第3页/共56页
数组
• 数组的存储 • 二维数组元素在内存按行存放 • 相当于一个两行三列的矩阵 • 先放第一行,再放第二行…… • 每行元素按列下标由小到大顺次存放
for( int i=0;i<5;i++ ) {
cout<<"A["<<i <<"]="<<A[i]; cout<<" B["<<i<<"]="
<<B[i]<<endl; } }
面向对象程序设计
6
第6页/共56页
数组
• 数组作为函数参数 • 函数的参数传递方式 • 值传递:函数调用时,为形参分配单元,并将实参的值复制到形参中;调用结束,形参单元被释 放,实参单元仍保留并维持原值 • 特点:形参与实参占用不同的内存单元; “单向”传递 • 地址传递:函数调用时,将数据的存储地址作为参数传递给形参 • 特点:形参与实参占用同样的存储单元; “双向”传递
eg:int a[2][3] 数组元素为:a[0][0]、a[0][1]、a[0][2]、
a[1][0]、a[1][1]、a[1][2]
a[0][0] a[0][1] a[0][2] a[1][0] a[1][1] a[1][2]
面向对象程序设计
4
第4页/共56页
数组
• 数组的初始化 • 初始化:声明数组时给全部或部分数组元素赋初值 • 基本类型数组:给数组元素赋值 • 对象数组:
面向对象程序设计
9
第9页/共56页
数组
• 实例分析二
#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];
调用构造函数
123、在 给 定定数义义组数数的组组前时时几不对个指数元定组素数中 赋 组的 初全 值 长部 , 度元 其 ,素 而余赋 用元初 花素值 括自 动 号初中始的e化初g:为值in个0t 数a[决5]定=数{1组,2长,3度,7,6};
eg:int ba[]5=]={1{,12,,23,,37},6; }; => int ba[5]={1,2,3,70,60};
} }
1、分析程序的运行结果 2、填空
void main( )
{ int Table[3][4] = {{1,2,3,4},{2,3,4,5},{3,4,5,6}};
for (int i=0; i<3; i++)
{ for (int j=0; j<4; j++)
cout<<Table[i][j]<< " ";
相关文档
最新文档