第7章 一维数组
C_C++语言程序设计基础-7-1一维数组
a[0]=5,a[1]=4,a[2]=0, a[3]=0, a[4]=0
(3)对全部元素赋初值时,可以不指定数组长度,系统自 动根据初值个数来决定数组长度。例如:
int a[ ]={0,1,2,3,4};等价 int a[5]={0,1,2,3,4};
今天教大家一个新的数据类型: 一个变量名称可以代表成百上千个 同种类型的数据,即数组。
源程序:从键盘输入3个整数,顺序(反序)输出。
#include<stdio.h> main() { int x1,x2,x3;
scanf("%d%d%d",&x1,&x2,&x3); pprriinnttff((""%%dd %%dd %%dd \\nn"",,xx13,,xx22,,xx31));; }
但不能省略[] int a={0,1,2,3,4}; 是错误的 (4)对数组进行初始化时,不允许初始化的元素个数超过 数组的长度,如: int a[5]={0,1,2,3,4,5}; 是错误的
数组课堂练习2:
14.若有定义语句:int m[5]={5,4,3,2,1},i=4;,则下面对m数组元素
long num[N]; short w[2*N]; 5. inintt ppeerrssoonn((1100));; 错误 6. int n=10, a[n]; 错误 7. float a[10.5]; 错误
7.1.2 一维数组元素的引用
数组必须先定义再引用
int a[5];
数组元素引用形式为: 数组名 [下标];
3/50
《C语言程序设计基础与实训教程》第7章:数组
/webnew/
7.1.4 一维数组的应用举例
例7.5 将数组中的数按颠倒的顺序重新存放。要求,在操 作时只能借助一个临时存储单元而不能另外开辟数组。 分析:题目要求是按颠倒的顺序重新存放数据,而不是按 逆序输出。 可以使用两个变量i和j,i和j的初值分别为0和9,将a[i] 与a[j]对调,然后i++,j--,接着再将a[i]与a[j]对调。如些 重复操作,直到i>=j时,对调完成。 程序
分析:该数组元素的值是有规律的序列, ( 从 开始算起 开始算起) 分析 : 该数组元素的值是有规律的序列 , 第 i(i从0开始算起) 个 元素的值为: 元素的值为:10+2*i。 。 输出该数组时,由于该数组有30个元素,在一行中输出不太美观, 输出该数组时,由于该数组有 个元素,在一行中输出不太美观, 个元素 所以,这里我们选择每行输出6个元素。 所以,这里我们选择每行输出 个元素。 个元素
/webnew/
7.1.3 一维数组元素的引用
2.一维数组的输入与输出 一维数组的输入与输出 如何给数组元素赋值以及如何将数组元素的值输出是数 组最基本的操作。下面将讨论一维数组元素的输入与输出。 例7.1 定义一个五个元素的字符型数组,通过键盘给每 个元素赋值,并以相反的顺序的输出。 程序1 程序2 从上面的例子可以看出,一个数组中往往往包含较多的 数组元素,相同的赋值或输出操作将被重复多次进行,所以, 一维数组元素的输入与输出一般通过一重循环来实现。
/webnew/
7.1.3 一维数组元素的引用
注意: (1)数组元素的引用方式与数组说明符的形式非常相近,都是 “数组名[表达式]”形式,但两者的意义完全不同。 出现的位置不同。定义数组时,“数组名[表达式]”出现在 定义语句中,表示的是定义了一个名为“数组名”的数组,表达式的值 表示该数组中所包含元素的个数。作为数组元素的引用方式时,“数组 名[表达式]”出现在其它执行语句中,表示是数组中的下标为“表达式” 值的那个元素。 表达式的格式不同。定义数组时,“表达式”必须为常量表 达式。作为数组元素的引用方式时,表达式可以变量、常量或函数构成 的合法C表达式。 (2)在C语言中,起始下标规定为0,最大值应为:数组长度-1。 如果发生了下标越界的现象,可能破坏了其它存储单元的数据,甚至破 坏程序代码。 (3)下标必须是整型表达式,若为小数,则自动取整。如a[2.6] 系统自动默认为a[2]。
一维和二维数组的定义
7.3 字符数组和字符串
7.3.4.1字符串输入输出 --包含头文件 字符串输入输出 包含头文件stdio.h 包含头文件 4.puts向终端输出字符串 形式:puts(str); str是输出字符串的起始地址,从这一地址开始,依次输出存储单元 中的字符,直到遇到第一个‘\0’为止。并自动输出一个换行符。 str是存放字符串的起始地址。可以是字符数组名、字符数组元素地 址或下一章将要介绍的字符指针。 7.3.4.2字符串处理函数 -- 包含头文件string.h 字符串处理函数 1.字符串复制函数strcpy。调用形式如下: strcpy(s1,s2) 2.字符串连接函数strcat。调用形式如下: strcat(s1,s2)
第七章
数组
♦一维和二维数组的定义 ♦数组元素引用 ♦字符数组和字符串 ♦数组应用的基本算法
7.1一维数组
7.1.1 一维数组的定义
数组的维数是指表示数组使用的下标个数,如果数组中 每个元素只带有一个下标,称这样的数组为一维数组。 定义形式为: 类型说明符 数组名[常量表达式]; 数组名[常量表达式] 类型说明符指出数组元素的数据类型,数组名是标识 符,元素个数使用方括号和常量表达式。 【讨论】C语言数组大小的规定。 【讨论】如何理解数组名。
7.2 二维和多维数组
7.2.2 二维数组的引用
引用二维数组元素时必须带有两个下标, 形式如下: 数组名[下标1][下标2]
7.2.3 二维数组存储
二维数组在内存中占据一系列连续的存储单元, 数组元素按行顺序存放,先放行下标是0的元素,再 放行下标是1的元素,... 数组int a[3][4]的存储示意
7.3 字符数组和字符串
7.3.3 字符串数组
字符串数组就是数组中的每一个元素又都是存放字 符串的数组。 可以将一个二维字符数组看作一个字符串数组。 例:char line[10][80]; 数组line共有10个元素,每 个元素可以存放80个字符(79个普通字符,一个结束字 符),第一个下标决定字符串个数,第二个下标决定字 符串的最大长度。line是有10个字符串的数组,这些字 符串的最大长度为79。
大学课件C语言数组
第6趟排序后成为:12, 26, 37, 4 8, 49, 64, 75, 97
printf("ENTER 10 REAL NUMBERS\n"); for(i=0;i<10;i++) { scanf("%f",&value); x[i]=value; } total=0.0; for(i=0;i<10;i++) total=total+x[i]*x[i];
/*.....PRINTING OF x[i] VALUES AND TOTAL......*/
number[0] number[1] number[2] number[3] number[4]
C语言中,数组元素的序号(下标)从0开始。
对数组的引用超过了所声明的范围,会导致不可预知的结果.
9
数组的作用
数组元素的作用相当于简单变量 数组名代表的是数组在内存中的首地址 同一个数组中的元素在内存中是按顺 序连续存放的
/*.....PRINTING OF x[i] VALUES AND TOTAL......*/
printf("ENTER 10 REAL NUMBERS\n"); for(i=0;i<10;i++) { scanf("%f", &x[i]); total=total+x[i]*x[i]; } printf("\n"); for(i=0;i<10;i++) printf("x[%2d]=%5.2f\n", i, x[i]); printf("\ntotal=%.2f\n", total);
☆C语言实验五(第七章一维数组:排序综合题)
【2008春上机编程题_C07】【解题思路】:在理解上述要求基础上,只用一个主函数完成:找出Fibonacci 数列的前40个数,存放在一维数组m[40](声明长整型变量long)中,然后找出其中所有素数,存放在一维数组n[40]中(提示:n数组要求对素数总数以k计数),再选用一种排序法对一维数b进行降序排列,最后按长整型量以“%9ld”形式、一行五个数据将满足条件的数据输出到屏幕:【提示】:排序方法有“简单起泡法”;“双向起泡法”;“选择法”;所以要求学生在调试上述程序基础上按班组选取排序方法,编写本次作业。
(约定:起始Fibonacci数列存放在一维数组m[40]中,挑选出的素数存放在一维数组n[40]中,最后以升序排列的数组n输出,满足素数的个数设定为k)。
(参考教科书P134)(参考上机指导书P54例7.5、2010春完善程序题第15题或软件第七章填空第15题)原理为“下列程序的功能是对n数组n[0]~a[k-1]中存储的k个整数从大到小排序。
排序算法是:第一趟通过比较将k个整数中的最小值放在a[k-1]中,最大值放在a[0]中;第二趟通过比较将k个整数中的次小值放在a[k-2]中,次大值放在a[1]中,………,依次类推,直到待排序序列为递减序列。
”P50例7.2)【软件第七章】选择:1,下列一维数组的声明中,正确的是____(22)_____。
A. int a[];B. int n=10,a[n];C. int a[10+1]={0};D. int a[3]={1,2,3,4};5.以下程序运行后的输出结果是_____(25)___。
main(){ char a[7]="a0\0a0\0";int i,j;i=sizeof(a);j=strlen(a);printf("%d %d",i,j);}A.2 2B.7 2C.7 5D.6 28.以下声明中错误的是_____(27)_____。
数组的定义
1、概述 、 2、一维数组的定义和引用 、 3、二维数组的定义和引用 、 4、字符数组 、
章节总览
1. 基本类型之外,C语言还提供了构造类型的数据, 它们有:数组类型、结构体类型、共用体类型。构 造类型数据是由基本类型数据按一定规则组成的, 因此也可以称之为“导出类型”。 2. 数组是有序数据的集合 有序数据的集合。 有序数据的集合 (a)数组中的每一个元素都属于同一个数据类型。 (b)用一个统一的数组名和下标,唯一的确定数组 中的元素。
第二轮交换: (1) 8 (2) 5 (3) 5 (4) 5 第二轮结束 5 5 4 4 2 2 2 0 0 0 0 9 9 9 9 /*8>5,交换*/ /*8>4,交换*/ /*8>2交换*/ /*8>0,交换*/
8
4 4 4
8
2 2
ห้องสมุดไป่ตู้
8
0
8
9
那么第二轮进行了 n-2=6-2=4 次比较即循环了4次 总结:第 i 轮进行了 n- i 比较即循环了n- i 次. 一共要n-1轮比较即外围循环n-1次
一维数组的程序举例( ) 一维数组的程序举例(1)
运行结果: 例 7.2 用数组来处理Fibonacci数列问题。(见教材124页) 1 1 2 3 5 程序如下: 8 13 21 34 55 89 144 233 377 610 /*行号1*/ main( ) { 987 1597 2584 4181 6765 /*行号2*/ int i; /*行号3*/ /*行号4*/ /*行号5*/ /*行号6*/ /*行号7*/ /*行号8*/ /*行号9*/ /*行号10*/ /*行号11*/ int f[20]={1,1}; for(i=2,i<=20;i++) f [ i ]=f [ i -1]+f [ i -2]; for(i=0,i<20;i++) { if( i %5= =0) printf(“\n”);/*控制换行,每行输出五个数*/ printf(“%12d”,f [ i ]); } }
C语言(第七章数组)
对部分元素赋初值(前面的连续元素)。如: int b[10]={0,1,2,3,4};
表示数组元素的值为:
b[0]=0; b[1]=1; b[2]=2; b[3]=3; b[4]=4; 后5个元素的初值为0。
注意:不能只对不连续部分元素或后面的连续
元素赋初值。 语句: int a[10]={, , , , ,1,2,3,4,5};
main ( ) { int a[2] [3]={{1, 2,3},{4, 5,6}}; int b[3] [2], i, j; printf("array a: \n"); for (i=0; i<=1; i++) { for (j=0; j<=2; j++) { printf("%5d", a[i][j]); b[j][i]=a[i][j]; } printf("\n"); } printf("array b:\n"); for (i=0; i<=2; i++) { for (j=0; j<=1; j++) printf("%5d", b[i]j]); printf("\n"); } }
运行结果如下:
1
1
2
3
5
8
89
13
144
21
133
34
377
55
610
987
1597
1584
4181
6765
四、简单预处理指令
1. 指令格式:
#define 符号常量
2. 指令作用
文本串
用整型表达式替换程序中所有的符号常量。
第7章 一维数组应用 1
第七章 数组
4、程序设计 、 功能:求小于lim的所有素数并放在 数组中, 的所有素数并放在aa数组中 功能:求小于 的所有素数并放在 数组中,该函数返回 所求出素数的个数。 所求出素数的个数。 # include <stdio.h> # inculde <conio.h> # define MAX 100 int fun (int lim,int aa[MAX]) { int n=0,i,j; /***************program**************/
第七章 数组
一维数组的应用: 一维数组的应用:
1、读程序写结果: 、读程序写结果:
一维数组的应用即对元素的引用有哪些? 一维数组的应用即对元素的引用有哪些? void main () 1、通常与 循环结合使用。 循环结合使用。 、通常与for循环结合使用 {、一维数组的输出。 int x,y,z; 2、一维数组的输出。 int ( ]={-4,0,10,2,7,-1,19,-22,33,0}; a[ 正序、逆序) 正序、逆序) 3、数组元素赋值。 、数组元素赋值。 x=y=z=0; 通过键盘赋值, for通过键盘赋值, (i=0;i<10;i++) 通过程序运行中获取值 { if (a[i]<0) 利用rand()函数获取值,等办法。 ()函数获取值 利用 ()函数获取值,等办法。
第七章 数组
3、程序 、 题目:函数main()首先从键盘接受 个整数,依次放在数组 首先从键盘接受10个整数 题目:函数 首先从键盘接受 个整数, a中;其次,调用 函数在这10个整数中找出第一个奇数 中 其次,调用fun()函数在这 个整数中找出第一个奇数, 函数在这 个整数中找出第一个奇数, 并返回该数的下标值,如果在这10个数中无奇数 则返回-1 个数中无奇数, 并返回该数的下标值,如果在这 个数中无奇数,则返回 第三,如果fun()函数返回值不等于 ,则把找到的数与第 函数返回值不等于-1, ;第三,如果 函数返回值不等于 一个数交换。 一个数交换。 # include <stdio.h> # define N 20 int fun (int a[20]) { int i; for (i=0;i<10;i++) {/*************FOUND***************/ (a[i]%2==1)或(a[i]%2) 或 if (a[i]&1==0) break;} /***************FOUND***************/ i if (i<10) return 1; else return -1; }
第7章 一维数组应用
第七章 数组
例如:一维数组: 例如:一维数组: mark[100]; float mark[100]; 低地址 每个数据元素占用 的字节数,就是基 的字节数,就是基 类型的字节数 类型的字节数 一个元素占4个 一个元素占 个字节
高地址
86.5 92.0 77.5 52.0
. . . 94.0
mark[0] mark[1] mark[2] mark[3]
第七章 数组
第7章 数组
7.1 一维数组
7.1 一维数组 数组是一组有序数据的集合 有序数据的集合, 数组是一组有序数据的集合,数组中每一个元 素的类型相同 类型相同。 数组名和下标来唯一确定数 素的类型相同。用数组名和下标来唯一确定数 组中的元素。 组中的元素。 7.1.1 一维数组的定义(先定义后使用)全部元素均指定初值,定义中可以省略元素的个数, 如果全部元素均指定初值,定义中可以省略元素的个数, 可以省略元素的个数 例: static int a[5] = {1,2,3,4,5}; 可以写为: 可以写为: static int a[ ] = {1,2,3,4,5}; 两种写法一样效果, 两种写法一样效果,系统会自动根据元素的个数来确定数组的 大小,但是如果是局部制定元素值则不能省略长度值。例如: 大小,但是如果是局部制定元素值则不能省略长度值。例如: {1,2,3};不可以写为 不可以写为: static int a[5] = {1,2,3};不可以写为: {1,2,3};这样系统会自动根据初始值 static int a[ ] = {1,2,3};这样系统会自动根据初始值 个数来认为数组只含有三个元素,即默认其长度为3 个数来认为数组只含有三个元素,即默认其长度为3。 5、与给变量初始化不同的是给数组初始化只能在定义时进行, 与给变量初始化不同的是给数组初始化只能在定义时进行, {1,2,3};不能写成 不能写成: 如: static int a[5] = {1,2,3};不能写成: static int a[5]; a[5] = {1,2,3};(因为a[5]指单个元素) {1,2,3};(因为a[5]指单个元素) a[5]指单个元素
第7章--c++数组
第七章数组数组是相同数据类型数据的集合。
通过数组名和下标可以访问数组中指定的元素。
7.1 一维数组一维数组只有一个下标,它可用于表示一个线性的数据队列。
在程序设计中要先声明数组,对它进行初始化,然后才能使用数组。
7.1.1 一维数组的声明一维数组的声明要解决三个问题。
第一、确定数组的数据类型。
第二、给数组定义一个名字,以便在程序中使用。
第三、指明数组的大小,也就是数组中元素的个数。
声明一维数组的一般形式如下:数据类型数组名[常量表达式]={初值表};7.1.2 一维数组的使用访问一维数组元素的一般形式是:数组名[下标表达式]下标表达式是一个整型表达式。
它是一个由整型常量、整型变量以及运算符组成的式子,也可以是返回值为整型值的函数调用。
C++规定,数组的下标从0开始,因此对于大小为N的一维数组,其下标的取值范围是0到N-1,其中0称为数组的下界,N-1称为数组的上界。
下标表达式的值应该在下标的取值范围之内,否则会产生不可预计的问题。
7.1.3一维数组的初始化通过在初值表中给出初值可以对数组元素进行初始化。
初值用一对花括号界定,初值之间用逗号进行分隔。
例7-4 int y[5]={1,2,3,4,5};1,2,3,4,5为初值表,该语句把y[0]、y[1]、y[2]、y[3]、y[4] 分别初始化为1、2、3、4、5。
通过初值表中初值的个数决定数组的大小,省略常量表达式。
例7-5 double d[]={1.5,2.3,5.6};该声明语句省略了常量表达式,数组的长度由初值表中初值的个数决定。
它说明了有三个元素的双精度数组d。
并且d[0]=1.5, d[1]=2.3, d[2]=5.6。
7.1.4 数组的运算以及数组作为函数参数1 数组的运算数组的运算最终都要归结到对数组元素的操作。
因此,数组的运算与其元素的数据类型以及系统或程序对该数据类型提供何种操作有关。
对于int、float、以及double类型的数组,赋值运算、各种算术运算、++、--等都是允许的,原因是C++提供的这些操作的操作语义支持这些数据类型的运算。
第7章 数组
注意:key是个占位符,读者可以选择个人习惯的名称。由 于for…in是遍历数组的键名,所以key的类型为String。
7.10.2
for…in与for each…in遍历
for each…in循环的语法如下。
注意:element是个占位符,读者可以选择个人习惯的名称 。由于for each…in是遍历数组的键值,而键值的类型可 以是很多种类型(甚至可以是对象或数组),所以key的 类型使用*号,指定为无类型。
7.11
关联数组
ActionScript 3.0中所定义的数组类(Array)所指的都是数 字索引数组。数字索引数组的键是数字数据类型的。关 联数组也属于数组的范畴,但它的键可以为任何数组类 型(甚至是Object)。关联数组体现的是键与键值的一一 对应关系,这种关系称为“值对”。 ActionScript 3.0中使用关联数组时,已经超出了Array类的 范围。要使用字符串作为键的关联数组时,可以使用对 象(Object)来定义;若要使用对象作为键的关联数组时 ,则可以使用预定义的字典类(Dictionary)。
7.6.1
sort方法
2.排序方法参数 如果需要字义其它类型的排序,sort方法有两个参数供选择 :一个是排序方法,另一个是排序类型。 排序方法是一个函数,在定义时它包含两个参数(A,B) ,并要求返回一个值。当返回-1时则把参数A放在B之前 ,返回0时则A和B相等(随机放),返回1时参数A放在B 之后。
7.4.2
二维数组与多维数组
table[0]中存储的值是一个一维数组["张三",73]。要访问这个数组 的第一个元素时则使用table[0][0]。 多维数组与二维数组类似,按照键名/值一层一层对应下去。不过 二维数组以上就已经比较复杂了,一般不再使用“[ ]”直接定 义。下例创建三维数组,并对数组中的数据进行访问。
c语言 第7章 数组(4)
void sort( int b[],int k) {int i,j,t,flag; for (j=0;j<k-1;j++) {flag=0; for (i=0;i<k-j-1;i++) if (b[i]>b[i+1]) { t=b[i]; b[i]=b[i+1]; b[i+1]=t; flag=1; } if (flag==0) break; } }
上一页 下一页
for(i=0;i<26;i++) if(c[i]) {if(m%8==0)putchar('\n');m++; printf("%c: %-d ",i+'A',c[i]); } printf("\n"); for(i=0;i<26;i++) if(c[i+26]) {if(m%8==0)putchar('\n');m++; printf("%c: %-d ",i+'a',c[i+26]); } }
第四讲:
第 七 章 数组
7.1 7.2 7.3 7.4 7.5 7.6 一维数组 二维数组 数组的应用 字符数组与字符串 数组作为函数的参数 程序举例
7.5 数组作为函数的参数
数组作为函数参数主要有两种情况: 数组元素作为函数的实参:这种情况与普通变量 作实参一样,是将数组元素的值传给形参。形 参的变化不会影响实参数组元素,我们称这种 参数传递方式为“值传递”。 数组名作实参:要求函数形参是相同类型的数 组或指针,这种方式是把实参数组的起始地址 传给形参数组,形参数组的改变也是对实参数 组的改变,称这种参数传递方式为“地址传 递”。
数学 一维数组
数学一维数组
一维数组是一种线性数据结构,它由相同类型的元素按照一定顺
序排列组成。
在数学中,一维数组也可以叫作向量或者序列。
它通常由一列数
字组成,表示一个有序的数值集合。
我们可以用中文来描述一个一维数组。
例如,一个名为“学生分数”的一维数组可以包含一组学生的分数。
每个分数都是一个数字,
按照学生的顺序排列。
另外,一维数组也可以表示在某个实验中某个变量随时间的变化。
例如,一个名为“温度”的一维数组可以包含一天中每小时的温度值。
每个温度值都是一个数字,按照时间的顺序排列。
一维数组可以通过索引来访问其中的元素。
索引是一个整数,用
于表示元素在数组中的位置。
在一维数组中,索引通常从0开始,依
次递增,直到数组长度减1。
一维数组可以进行一些常见的操作,例如添加元素、删除元素、
查找元素等。
这些操作可以通过编程语言中的数组方法或函数来实现。
总之,一维数组是一种常见的数据结构,它可以用来表示和处理
有序的数据集合。
无论是描述学生分数还是温度变化,一维数组都提
供了一种便捷的方式来存储和处理数据。
C语言第七章
4、strcpy(字符数组1,字符数组2):
例:main()
把“字符串2”的值拷贝到“字符串1”中。
{char str1[10]; char str2[ ]="Chinese"; strcpy(str1,str2); puts(str1); } 输出: Chinese 说明: (1)字符数组1的长度不应小于字符串2的长度。 (2)“字符数组1”必须写成数组名形式,“串2”可以是字符数 组名,也可以是一个字符串常量。如:strcpy(str1,“China”); (3)拷贝是‘\0‟一起拷贝。 (4)不能用赋值语句将一个字符常量或字符数组直接赋给一个 字符数组。 (5)可以用strcpy函数将字符串2中前面若干个字符拷贝到字符 数组1中去。 例如:strcpy(str1,str2,2);
3、部分元素赋值: int a[3][4] = {{1},{5},{9}}; 1 0 0 0 5 0 0 0 9 0 0 0
仅对a[0][0]、a[1][0]、a[2][0]赋值,编译器自动为未赋
值元素指定初值0。
4、如果对全部元素赋初值,则第一维的长度可以 不指定,但必须指定第二维的长度。 int a[3][4]={1,2,3,4,5,6,7,8,9,10,11,12}; 与下面定义等价: int a[ ][4]={1,2,3,4,5,6,7,8,9,10,11,12};
[例6.6]: main() { int i; char c1[ ] = {"How are you?"}; char c2[15]; scanf("%s", c2 ); for(i=0;i<12;i++) printf("%c", c2[i] ); printf("%s", c1 ); } 程序运行时:输入:abcdefghijklmno 结果:abcdefghijklHow are you?
C语言程序设计第七章 利用数组处理数据
一维数组的存储: 计算机中用连续的内存单元存放各个元素。 如:int a[5];其内存存储为:
保存数组所需内存量与数组元素的基本类型和数组大小有关。 总字节数=sizeof(基本类型)*数组元素个数 如上例:= sizeof(int)*5 第i个元素的地址=第1个元素的地址+i*sizeof(基本类型)
类型说明符 数组名[常量表达式]={值,值……值}; 其中在{ }中的各数据值即为各元素的初值,各值之间用逗号 间隔。 例如:
int a[10]={ 0,1,2,3,4,5,6,7,8,9 }; 相当于a[0]=0;a[1]=1...a[9]=9;
整理课件
C语言对数组的初始化赋值还有以下几点规定:
有 5个元素。但是其下标从0开始计算。因此5个元素分别为
a[0],a[1],a[2],a[3],a[4]。
不能在方括号中用变量来表示元素的个数, 但是可以是符
号常数或常量表达式。
例如:
#define FD 5
main( )
{ int a[3+2],b[7+FD];
……
}是合法的。
但是下述说明方式是错误的。
for (i=0; i<=9;i++) a[i]=i;
for(i=9;i>=0; i--) printf("%d ",a[i]);
printf("\n"); return 0; }
使a[0]~a[9]的值为0~9 先输出a[9],最后输出a[0]
整理课件
一维数组的初始化
数组初始化赋值是指在数组定义时给数组元素赋予初值。 初始化赋值的一般形式为:
for(i=0;i<1;i++) if (a[i]>a[i+1]) { ……}
C++程序设计教程修订版_第07章_数组
2、访问数组元素
•数组中特定的元素通过下标访问。 •为整个数组赋值时,必须一个一个元素逐个访问。
int main() { int iArray[10]; iArray[0] = 1; iArray[1] = 1; iArray[2] = 2; //........ iArray[9] = 55;
}
在定义时也可以只对部分元素赋初值而省略第一维的长度,但 应分行赋初值。如 0 0 3 0 int a[ ][4]={{0,0,3},{ },{0,10}}; 0 0 0 0 0 10 0 0
5、二维数组
作为参数传递一个二维数组给函数,其意义也为内存地址:
//********************* //** ch7_7.cpp ** //********************* #include <iostream.h> int maximum(int[ ][4],int,int); void main() { int sg[3][4]={{68,77,73,86}, {87,96,78,89}, {90,70,81,86}}; int maximum(int grade[][4],int pupils,int tests) { int max=0; for(int i=0; i<pupils; i++) for(int j=0; j<tests; j++) if(grade[i][j]>max) max=grade[i][j];
– int a[500]; – memset(a,0,500*sizeof(int));
• 数组名称 a 代表整个数组的起始(第一个元素)的地址
4、向函数传递参数
• 传给自定义函数
第七章数组1、一维数组1、整形数组的说明例如inta[10]
例 int i=15; 例 int data[5]; int data[i]; (不能用变量定义数组维数) data[5]=10; //C语言对数组不作越界检查,使用时要 注意
一维数组的引用
数组必须先定义,后使用 只能逐个引用数组元素,不能一次引用整个数组 数组元素表示形式: 数组名[下标] 其中:下标可以是常量或整型表达式 例 int a[10]; printf(“%d”,a); ( ) 必须 for(j=0;j<10;j++) printf(“%d\t”,a[j]);
()
3
一维数组的初始化
初始化方式
int a[5]={1,2,3,4,5}; 在定义数组时,为数组元素赋初值 等价于:a[0]=1; (在编译阶段使之得到初值) a[1]=2; a[2]=3; a[3]=4; a[4]=5;
说明: 数组不初始化,其元素值为随机数 对static数组元素不赋初值,系统会自动赋以0值 只给部分数组元素赋初值 当全部数组元素赋初值时,可不指定数组长度
23
4、常用的字符串处理函数
1、 include <stdio.h> char *gets(char s[ ]); 功能:从键盘上读一行字符串,并以’\0’取代换行符。 注意:与scanf( )的区别? gets()可以读取空字符 #include <stdio.h> main( ) { char string[80]; printf(“请输入一个字符串:"); gets(string); printf(“您输入的字符串是: %s\n", string); }
元素个数=行数*列数
数组元素的存放顺序 例 int a[3][4]; float b[2][5]; 原因:内存是一维的 int c[2][3][4]; 二维数组:按行序优先 int a[3,4]; ( ) 多维数组:最右下标变化最快
C语言7数组课件教程
a[0][0] a[0][1] a[0][2] a[1][0] a[1][1] a[1][2]
13
C 程序设计
第7章 数组
§遍历所有二维数组元素a[n][m] for(i=0;i<n;i++) for(j=0; j<m; j++) {
printf(“%d”,a[i][j]); }
14
C 程序设计
6
a[0]1例[0] ai[n0t]0a[[12]][a3[0]=0][{2{]1a,2[1}4],{[04]}}a;[15][1] a[10][2]
a[0111][0] a[0222][1] a[3034][2] a[4140][0] a[5150][1] a[6100][2]
aaa[[[000]]][[[1000]]] aaa[[[000]]][[2[111]]] aaa[[[000]]][0[[222]]] aaa[[[111]]][4[[000]]] aaa[[[111]]][0[[111]]] aaa[[[111]]]0[[[222]]]
1
3
5
7
a[1] a[210]0[08] a2[10]1[01] a2[10]1[22] a2[10]1[43] 9 11 13 15
a[2] a[2210]71[06] a2[210]91[81] a2[220]12[02] a2[220]32[23]
每个元素a[i]由包含4个元素 的一维数组组成
输出:max和row,colum
colum = j;
}
printf("max=%d,row=%d, \
colum=%d\n",max,row,colum); 16
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
pointer
180
176
172
175
17
a[0] a[1] a[2] a[3] a[4] a[5]
第 二 趟 结 束
163 168 180 176 172 175
18
a[0] a[1] a[2] a[3] a[4] a[5]
第 三 趟 163 168 180 176 172 175
pointer pointer pointer
3
数组在内存的存放
例,int a[5]; 数组下标从0开始,共 有5个int型分量(5个 数组元素)。 一维数组的数组元素 在内存里按顺序存放 在连续的存储空间。 数组名代表数组的首 地址,即a的值与a[0] 的地址值相同。
数组 首地址 ffd0 数组地址
a
?
ffd0 ffd2 ffd4 ffd6 ffd8
2
7.1.1 一维数组的定义(续)
以下数组定义是正确的: #define N 10 …… float score1[N], score2[N]; int num[10+N]; char c[26]; 以下数组定义是不正确的: int array(10); int n; float score[n]; char str[ ];
第 四 趟 结 束
163 168 172 175 180 176
22
a[0] a[1] a[2] a[3] a[4] a[5]
第 五 趟
163 168 172 175 180 176
pointer pointer
23
a[0] a[1] a[2] a[3] a[4] a[5]
第 五 趟 结 束
163 168 172 175 176 180
第 一 趟
172
168
180
176
163
pointer
175
pointer pointer
15
a[0] a[1] a[2] a[3] a[4] a[5]
第 一 趟 结 束
163 168 180 176 172 175
16
a[0] a[1] a[2] a[3] a[4] a[5]
第 二 趟
163
168
例如:int a[5],n=2; a[0]=a[1]=1; a[n]=a[n-1]+a[n-2];
5
数组元素的引用(续)
② [ ]是下标运算符, 引用数组元素时, 根据数组的首地址 和下标数,计算出 该元素的实际地址, 取出该地址的内容 进行操作。
float score[5]; 如引用 score[2]: (1)计算 2000+2*4=2008 (2)取出2008的内容
67 74 89 92 34 67 83 95 73 78 78.0 73.0 95.0 83.0 67.0 34.0 92.0 89.0 74.0 67.0
10
一维数组的排序与查找 排序(Sorting)是程序设计中的一种重 要操作,使得无序的数据有序,其目的是为 了快速查找。 升序排序:从小到大排序; 降序排序:从大到小排序。
例如:int a[4]={1,5,4,7}; //只有在定义同时方可如此初始化元素值! 注: 1、将元素值表中的数据值按顺序一一初始化数组元素。 2、在初始化全部元素的情况下,定义数组,长度可省。 例如,int a[]={1,5,4,7}; 3、若花括号中的元素值个数小于数组长度,相应赋值后,其 余赋0。 例如,int a[4]={1,5}; //则a[0]为1,a[1]为5,a[2]和a[3]均为0 4、若元素值个数大于数组长度,则编译错误。 例如,int a[4]={1,5,4,7,0};
1
7.1 一维数组
7.1.1 一维数组的定义 数据类型 数组名[常量表达式];
例如: int a[10]; float score[5];
“数据类型”: 是数组元素的数据类型。 “数组名”: 遵循C语言标识符规则。其值为 常量——数组的首地址。 “常量表达式”:表示数组中有多少个元素,即数 组的长度。它可以是整型常量、整型常量表达式 或符号常量,不允许变量出现!
第7章 数组
一个人N门课的成绩怎样存储和处理? 一个班N门课的成绩怎样存储和处理?......
这些数据的特点:具有相同的数据类型。 为了方便地使用这些数据,C语言提供了一 种构造数据类型:数组。 例如:存储学生成绩用实型数组 score[5] 其中:score是数组名。该数组可以存放5个成绩, 分别用下标变量表示: score[0],score[1],„score[4]。 下标变量也称为数组元素。
10 原始 数据 10 97 No.1 i=0 97 97 No.2 i=1 97 No.3 i=2
比较 思 交换 比较 比较 考
交换 97
97 No.5 i=4
No.4 i=3
12
//任意次序输入六个整数,按升序排序后输出 #define N 6 void main() 程序运行情况如下: { int a[N],temp,i,j; 3 7 5 6 8 0 for(i=0;i<N;i++) 0 3 5 6 7 8 scanf(“%d”,&a[i]); for (i=0; i<=N-2 ;i++) /*控制比较的趟数*/ for (j=0;j<=N-i-2;j++) /*两两比较的次数*/ if (a[j]>a[j+1]) { temp=a[j]; 思考: a[j]=a[j+1]; 如何优化冒泡排序, a[j+1]=temp; 减少循环次数 } for(i=0;i<N;i++) printf(“%3d”,a[i]); 13 }
11
排序过程分析(升序)
n=6
ቤተ መጻሕፍቲ ባይዱ
1. 冒泡法排序
a[0]
a[1] a[2] a[3] a[4] a[5]
比较 交换 j=0 14 交换. 27 比较当前数 49 j=0 38 j=0 38 j=0 27 比较当前数 比较14 49 27 比较当前数. 27 交换 10 交换 据与下一数 . 据与下一数 . 不交j=n-i-2 . 据与下一数 据14 10 14 27 27 38 . 38 10 14 38 38交换据 38 27 49 交换 不交 . 据 . 交换 比较当前数 比较 换 趟数 j=6-2-2 . 比较当前数 . 49据与下一数 38 10 27 27 14 27 14 比较 10 27 49 换 交换 . 据与下一数 不交 交换 据 比较 38 据 38 10 38 14 97 . 97 j=6-1-2 49 10 14 换 交换 比较 比较 10 14 j=6-0-2 14 49 次数 49 49 49 10 97 比较
2
选择排序
(每趟选出一个最小元素.用第一个元素去与
其他元素一一相比较,将指针指向较小的元素,最小的换到前 面)
例如:将以下六个整数按由小到大的顺序排列. a[0] a[1] a[2] a[3] a[4] a[5]
172 168 180 176 163 175
14
a[0] a[1] a[2] a[3] a[4] a[5]
●
ffd0 a
例,int a[5]; 其合法元素: a[0],a[1],……,a[4]
? ? ? ? ? ? ?
ffce
a[-1]
ffd0 a[0] ffd2 a[1] ffd4 a[2] ffd6 a[3] ffd8 a[4] ffda a[5]
数组元素下标越界
7
7.1.3 一维数组的初始化
数组在定义时可初始化数组元素,其一般格式:
19
a[0] a[1] a[2] a[3] a[4] a[5]
第 三 趟 结 束
163 168 172 176 180 175
20
a[0] a[1] a[2] a[3] a[4] a[5]
第 四 趟
163 168 172 176 180 175
pointer pointer
21
a[0] a[1] a[2] a[3] a[4] a[5]
8
7.1.4 一维数组的操作
不能对数组名进行整体操作! 例如: 如何把数组b中元
int a[5] , b[5]={1,2,3,4};
素赋值给 数组a ?
a=b; /* 错误 */ scanf("%d",a); /* 错误 */ printf(“%x\n”,a); /* 正确! 输出数组的首地址 */
24
定义数组a[常量n]
给数组a赋初值
for(i=0 ;i<= n-2 ;i++)
pointer=i for( j=i+1;j<= n-1 ;j++) 一趟 比较
a[j] <
T pointer=j i != T a[i]与a[pointer]值互 换
a[pointer] F
pointer F
一趟结 束对调
输出数组a (排好序的数组)
25
2. 折半查找(Binary search)
只有当被查找的数据是有序的时候,能用快速折半查找 法进行查找。 折半查找算法的思路:——针对升序序列! 设定查找范围[lower,upper],需查找的数据x与中间位置 (mid=(lower+upper)/2)的数据进行比较: 若x==a[mid],停止查找(找到!); 若x<a[mid],改上界,即upper=mid-1,在 [lower,upper] 内重复折半查找; 若x>a[mid],改下界,即lower=mid+1,在 [lower,upper] 内重复折半查找。