一维数组的定义和引用
C语言第六章_数组_2
if (a[i]>a[i+1])
{temp=a[i];a[i]=a[i+1];a[i+1]=temp;14}
#include <stdio.h> main(){ /*对10个整数排序*/
int a[10]={9, 8, 5, 4, 2, 0, 6, 1, 3, 7}, i, k; for (k=1;k<10;k++)
f0=1 (n=0m) ain(){
f1=1
(n=1) int i; long f [20]={1,1};
0 f1n=fn-1f+[0f]n-2 (nfo2r) (i=2;i<20;i++)
1
1
f[1]
2
2
f[2]
f[i]=f[i-2]+f[i-1];
3
3
f[3]
for(i=0;i<20;i++)
4
数组是具有一定顺序的若干同数据类型变 量的集合体。数组要有名称,要有规模。
一.一维数组定义
类型说明符 数组名[常量];
例如:int a[6]; a = = &a[0]
a
内存映象:编译时分配一片连续的内 存空间,数组名为该空间的首地址— —常量地址。
0 a[0]
1 a[1]
2 a[2]
3 a[3]
1
4 a[4]
4
一行一行地存储所有的数组 5
a[0][1] a[0][2] a[0][3] a[1][0] a[1][1]
元素,数组名为该空间的首 6 a[1][2]
地址——地址常量。
7 a[1][3]
8
第八章 数组
例: int a[2][3]; 它在内存情况:
a[0][0] a[0][1] a[0][2] a[1][0] a[1][1] a[1][2]
8.2 二维数组的引用与初始化
一、引用形式:数组名[下标][下标]
(1)下标可以是整型表达式或符号常量 例如:a[2][3],a[2-1][2*2-1]
(2)数组元素可以出现在表达式中,也可以被赋值。
例如: 有定义 int a[10]; 数组元素引用举例 /*可以引用元素的从a[0]到a[9]*/
a[5]=6; a[7]=a[5]++;
a[6]=3; a[0]=a[5]+a[7]-a[2*3];
8.1.3 一维数组的初始化
1.初始化--在定义数组时对数组元素赋初值; 2.初始化方法:
[static] 数组类型 数组名[数组长度]={数组元素值};
运行结果: I am happy
例8-stdio.h>
void main( )
{
char c[5][5]={{‘ ‘,’ ‘,’* ‘},{‘ ‘,’*’,’ ‘,’*’},{‘*’,’ ‘,’ ‘,’ ‘,’*’}, {‘ ‘,’*’,’ ‘,’*’},{‘ ‘,’ ‘,’*’}};
举例:
(1)给数组a各元素赋以初值: [static] int a[10]={0,1,2,3,4,5,6,7,8,9}; (2)可以只给一部分元素赋初值,后几个元素值为 0 [static] int a[10]={0,1,2,3,4}; (3)如果想使一个数组中全部元素值为0,可以写成: static int a[10]={0,0,0,0,0,0,0,0,0,0} 或static int a[10]; (4)在全部数组元素赋初值时,可以不指定数组长度: int a[5]={1,2,3,4,5}; 可以写成: int a[ ]={1,2,3,4,5};
一维和二维数组的定义
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
6.1 排序问题
3. 初始化
类型名 数组名[数组长度]={初值表}; 初值表中依次放着数组元素的初值。例如: int a[10]={1,2,3,4,5,6,7,8,9,10}; 静态存储的数组如果没有初始化,系统自动给所有的数组元素赋0。 即 static int b[5]; 等价于 static int b[5]={0,0,0,0,0}; 初始化也可以只针对部分元素,如 static int b[5]={1,2,3}; 只对数组b的前3个元素赋初值,其余元素的初值为0。又如 int f[20]={0,1}; 对数组f的前两个元素赋初值,其余元素的值 不确定。
18
6.2 矩阵中最大值的位置
4. 使用二维数组编程
例7:定义一个3*2的二维数组a,数组元素的值由下式给 出,按矩阵的形式输出a。a[i][j]=i+j(0≤i ≤2, 0≤j ≤1), 见文件p131ex7-6.cpp
i
j
第1次 第2次 第3次 第4次 第5次
第6次
0 0 1 1 2
2
0 1 0 1 0
9
6.1 排序问题
4. 使用一维数组编程
例4:输入一个正整数n(1<n≤10), 再输入n个整数,将它们存入 数组a中。 ① 输出最小值和它所对应的下标。 ② 将最小值与第一个数交换,输 出交换后的n个数。 数组的长度在定义时必须确定, 如果无法确定需要处理的数据 数量,至少也要估计其上限, 并将该上限值作为数组长度。 因为n ≤10,数组长度就取上 限10。此外,如果用变量 index记录最小值对应的下标, 则最小值就是a[index]。 见p124ex7-4.cpp
8
6.1 排序问题
4. 使用一维数组编程
C语言学习入门笔记之数组
数组笔记在程序设计中,把具有相同类型的若干变量按有序的形式组织起来。
这些按序排列的同类数据元素的集合称为数组。
在C语言中,数组属于构造数据类型。
一个数组可以分解为多个数组元素,这些数组元素可以是基本数据类型或是构造类型。
因此按数组元素的类型不同,数组又可分为数值数组、字符数组、指针数组、结构数组等各种类别。
1.一维数组的定义和引用1.一维数组的定义方式在C语言中使用数组必须先进行定义。
一维数组的定义方式为:类型说明符数组名[常量表达式];其中:类型说明符是任一种基本数据类型或构造数据类型。
数组名是用户定义的数组标识符。
方括号中的常量表达式表示数据元素的个数,也称为数组的长度。
例如:int a[10]; 说明整型数组a,有10 个元素。
float b[10],c[20]; 说明实型数组b,有10个元素,实型数组c,有20个元素。
char ch[20]; 说明字符数组ch有20 个元素。
对于数组类型说明应注意以下几点:1)数组的类型实际上是指数组元素的取值类型。
对于同一个数组,其所有元素的数据类型都是相同的。
2)数组名的书写规则应遵循标识符命名规则。
3)数组名不能与其它变量名相同。
例如:main(){int a; float a[10];……}是错误的。
4)方括号中常量表达式表示数组元素的个数,如a[5]表示数组a 有5 个元素。
但是其下标从0 开始计算。
因此5 个元素分别为a[0],a[1],a[2],a[3],a[4]。
5)常量表达式中可以包括常量和符号常量,不能用变量来表示元素的个数,也就是说,C语言不允许对数组的大小作动态定义,即数组的大小不依赖于程序运行过程中变量的值。
例如:#define FD 5 main(){int a[3+2],b[7+FD];……}是合法的。
但是下述说明方式是错误的。
main(){int n=5; int a[n];……}6)允许在同一个类型说明中,说明多个数组和多个变量。
c语言一维数组的定义
c语言一维数组的定义
在本文中,我们将讨论C语言中一维数组的定义以及其用途。
C语言中的数组可以用来存储数据和处理数据。
一维数组是最简单的数组形式,它由一组元素组成,这些元素具有相同的数据类型。
数组中每个元素通过一个下标访问,下标从0开始。
在C语言中,一维数组的定义方式为:类型数组名[元素数量],其中类型表示数组中存储的元素类型,数组名用于标识数组,而元素数量表示数组中元素的数量。
例如,定义一个由5个整数组成的数组:
int myArray[5];
这种定义方式创建了一个数组,其元素数量为5,每个元素的类型为整数。
在C语言中,数组元素可以使用下标表示。
例如,在上面定义的数组中,第一个元素的下标是0,第二个元素的下标是1,以此类推。
要访问数组元素,我们需要指定数组名和下标。
例如,以下代码将数组中的第三个元素设置为5:
myArray[2] = 5;
在C语言中,一维数组是一种重要的数据结构,它提供了可靠的数据存储和处理机制。
一维数组可以用于各种数据处理任务,如数据
搜索、排序和处理。
使用数组,我们可以轻松地处理大量数据,从而使程序具有更高的效率和性能。
总之,一维数组是C语言中最基本的数据结构之一,其定义方式相对简单,但使用范围非常广泛。
通过深入了解数组,我们可以使程序的性能和效率大大提高,从而实现更高效的数据处理和应用。
数组应用的实验报告
一、实验目的1. 掌握数组的定义、声明、初始化和引用方法。
2. 熟悉数组在数据存储和操作中的优势。
3. 学习并实现一些常用的数组操作,如排序、查找、插入和删除等。
4. 提高编程能力,培养解决实际问题的能力。
二、实验环境1. 操作系统:Windows 102. 编译器:Visual Studio 20193. 编程语言:C++三、实验内容1. 一维数组的定义、初始化和引用2. 二维数组的定义、初始化和引用3. 数组元素的查找4. 数组元素的排序5. 数组元素的插入和删除四、实验步骤1. 一维数组的定义、初始化和引用(1)定义一个整型一维数组,并初始化前5个元素为1、2、3、4、5。
(2)使用循环遍历数组,输出所有元素。
(3)使用指针遍历数组,输出所有元素。
2. 二维数组的定义、初始化和引用(1)定义一个整型二维数组,并初始化前3行3列的元素。
(2)使用嵌套循环遍历数组,输出所有元素。
(3)使用指针遍历数组,输出所有元素。
3. 数组元素的查找(1)定义一个整型数组,并初始化前10个元素为1、2、3、4、5、6、7、8、9、10。
(2)编写一个函数,用于查找数组中是否存在指定的元素。
(3)在主函数中调用该函数,查找元素5在数组中的位置。
4. 数组元素的排序(1)定义一个整型数组,并初始化前10个元素为1、2、3、4、5、6、7、8、9、10。
(2)编写一个冒泡排序函数,用于对数组进行排序。
(3)在主函数中调用该函数,对数组进行排序,并输出排序后的结果。
5. 数组元素的插入和删除(1)定义一个整型数组,并初始化前10个元素为1、2、3、4、5、6、7、8、9、10。
(2)编写一个插入函数,用于在数组中插入一个新元素。
(3)编写一个删除函数,用于删除数组中的指定元素。
(4)在主函数中调用插入和删除函数,对数组进行操作,并输出操作后的结果。
五、实验结果与分析1. 一维数组的定义、初始化和引用实验结果:成功定义、初始化和引用了一维数组,并输出所有元素。
数组的定义
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 ]); } }
第6章数组(一维数组)
9
31
1
for ( i=0; i<n-1; i++ ) for (( j=0; j<n-1-i; j++ ) for j=0; j<n-1; j++ ) 相邻两数比较, ) if ( a[j]>a[j+1] 前小后大 a[j]a[j+1]
• • • • • 其他不变,改变声明项为:int 其他不变,改变声明项为:int 其他不变,改变声明项为:int 其他不变,改变声明项为:int 其他不变,改变声明项为: int n; a[n]={0,1,2,3}; a[4]={0,1,2,3}; a[4]={2,8}; a[4]={2,4,6,8,10}; a[4]={2,4,6,d};
注意: 不能写成 b=a;
•例:(P159)
16
[例] N盏灯排成一排,从1到N按顺序依次编号。有N 个人也从1到N依次编号。第一个人(1号)将灯全部 关闭。第二个人(2号)将凡是2和2的倍数的灯打开。 第三个人将凡是3和3的倍数的灯做相反处理(该灯如 为打开的,将它关闭;如为关闭的,将它打开)。以 后的人都和3号一样,将凡是与自己相同的灯和是自 己编号倍数的灯做相反处理。请问:当第N个人操作 之后,哪几盏灯是点亮的。
17
#include <stdio.h> #define N 10 void main(void) { int lamp[N+1]; int i,j,k; for(i=1;i<=N;i++) /*将灯全部关闭*/ lamp[i]=0; for(i=2;i<=N;i=i+2) /*将凡是2和2的倍数的灯打开*/ lamp[i]=1; for(j=3;j<=N;j++) /*将3和3的倍数的灯做相反处理*/ for(i=j;i<=N;i=i+j) for(i=1,k=j;k<=N;k=i*j,i++) lamp[i]=!lamp[i]; for(i=1;i<=N;i++) if(lamp[i]) printf("%2d", i); }
数组的三种定义方式
数组的三种定义方式什么是数组?数组是一种数据结构,用来存储一组相同类型的元素。
它是一种线性结构,它的元素在内存中是连续存储的。
数组通常用来表示一个集合,我们可以通过数组的下标来访问和修改其中的元素。
数组的三种定义方式在编程中,我们可以使用不同的方式来定义数组。
以下是数组的三种定义方式:1. 一维数组一维数组是最简单的数组形式,它包含固定数量的元素,这些元素按照一定顺序排列。
一维数组的定义方式如下:dataType[] arrayName = new dataType[arrayLength];其中,dataType表示数组中元素的数据类型,arrayName是数组的名称,arrayLength表示数组的长度。
以下是一个示例:int[] numbers = new int[5];在上面的示例中,我们定义了一个名为numbers的整型数组,它可以存储5个整数。
2. 多维数组多维数组是由一维数组组成的数组,它可以按照多个维度来表示数据。
常见的多维数组包括二维数组和三维数组。
多维数组的定义方式如下:dataType[][] arrayName = new dataType[arrayLength1][arrayLength2];以下是一个二维数组的示例:int[][] matrix = new int[3][4];在上面的示例中,我们定义了一个名为matrix的二维整型数组,它包含3行4列。
3. 动态数组动态数组是一种在运行时可以改变大小的数组。
在静态数组中,数组的长度是固定的,一旦分配了内存,就不能改变。
与之相反,动态数组可以根据需求来改变大小。
动态数组的定义方式如下:ArrayList<dataType> arrayName = new ArrayList<>();以下是一个示例:ArrayList<Integer> numbers = new ArrayList<>();在上面的示例中,我们定义了一个名为numbers的动态整型数组。
第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]指单个元素
c语言--- 数组
=10×2
数组名表示数组所 1012 在内存首地址也是 a[0]的地址,是地 1014 址常量 :
1028
80
66 :
第7章 数 组
引言
一维数组 二维数组 字符数组与字符串
7.1 引言
一、数组的引入 为了便于处理一批类型相同的数据,引入了数组类型.
例:某班有40名学生,求该班成绩的平均分
#include <stdio.h> main( ) { int j , sum , s ; float ave ; sum=0; for(j=1; j<=40 ; j++) { scanf(“%d”,&s); sum=sum+s; } ave=sum/40; printf(“ave=%f”,ave); } 假设现在要保存每个学 生的成绩,那就需要40个变 量,但这样一来输入、输出、 计算都会变得繁琐,若成千 上万数据,显然不合适。 在这种情况下,我们可以 使用数组类型,声明一个数 组含有40个整型元素,每个 数组元素存放一个成绩,这 样,成绩的输入、输出、计 算就可通过循环来实现.
• 如果要对n个数据排序,就需要进行n-1轮的比较,每次都对相 邻两个数进行比较,将较大的数交换到后一个元素中。每1轮 的比较都找出未排好的数据中的最大数放在这几个数的后面。 • 例如,第1轮需要比较n-1次,在n个数中找出最大数放在数组 的最后1个元素中;
• 第2轮将对剩下的前n-1个数进行比较,需要比较(n-1)-1次,将 前n-1个数中的最大者放入数组的倒数第2个元素中; • ……以此类推,第n-1轮需要进行1次比较,将剩下的2个数中 的较大者放入a[1]中,将最小的数放入a[0]中。 • 当第n-1轮比较进行完后,所有的数据都按照升序在数组中排 列。
第8讲 一维数组和二维数组
特点: 特点:
数组元素的个数必须是确定的 数组元素的类型必须一致
一维数组在内存中的存放方式: 一维数组在内存中的存放方式:
数组定义以后,编译系统(计算机) 数组定义以后,编译系统(计算机)将在内 存中开辟一块连续的存储单元用于存放数组元素, 存中开辟一块连续的存储单元用于存放数组元素, 数组名表示存储单元的首地址, 数组名表示存储单元的首地址,存储单元的大小 由数组的类型和数组的大小决定。 由数组的类型和数组的大小决定。 例如 int a[5]; ; int
例: 1)float b[12]; ) b[1]=1.0; b[3]=7.6; b[0]=b[1]+b[3]; b[2]=b[1]-b[3]; ······ 2)int j, a[10]; ) for ( j=0; j<10; j++ ) a[j]=j;
3、一维数组的初始化 、
数组的初始化:指定义数组时对数组元素赋以 数组的初始化 指定义数组时对数组元素赋以 初值。 初值。 格式: 格式: 类型符 数组名 表达式 ={初值表 数组名[表达式 表达式]= 初值表 初值表}; 说明: 说明:
2 3 1 6 8 9
2 1 3 6 8 9
1 2 3 6 8 9
第五轮
第一轮 第二轮 第三轮 第四轮
分析说明: 分析说明:
1)相邻两数比较: a[j]>a[j+1] )相邻两数比较: > 2)第一轮:6个数,j=1~5;循环 次,找出最大数,放 )第一轮: 个数 个数, ;循环5次 找出最大数, 在最后。 在最后。 3)第二轮:5个数,j=1~4;循环 次,找出次大数,放 )第二轮: 个数 个数, ;循环4次 找出次大数, 在最大数前。 在最大数前。 4)余此类推,经过5轮,将6个数排序输出。 )余此类推,经过 轮 个数排序输出。 个数排序输出 所以: 所以:外循环为 i=0~4,内循环为:j=0~5-i; ,内循环为: ; 即:for ( i=0; i<5 ; i++) < for (j=0; j<6–i; j++) < if ( a[j]>a[j+1]) { a[j]←→a[j+1] } >
第5章 数组
说明
► “类型说明符”、“数组名”及“常量表达
式”的含义与一维数组中的相关定义相同。 ► 二维数组中有两个下标,每一维的下标都 是从0算起。
第16页
共49页
5-2-2 二维数组元素的引用
► 二维数组元素的引用格式为: ► 数组名[行下标表达式][列下标表达式]
第17页
共49页
说明
► 字符数组的定义 ► 字符数组的初始化 ► 字符数组的引用
► 字符串和字符串结束标志
► 字符数组的输入输出
► 字符串处理函数
► 字符数组的应用
第23页 共49页
5-3-1 字符数组的定义
► 字符数组的定义与前面介绍的数值数组的
定义类似。
第24页
共49页
5-3-2 字符数组的初始化
► 逐个字符赋值 ► 用字符串对字符数组赋初值
第42页 共49页
5-4 程序案例
► 筛选完成后,筛子中剩下的即为素数。 ► #include <stdio.h> ► main() ►{
► ►
int i,a[100]; /*筛子数组*/ int i,n=0; /*n为素数个数,用于输出格 式控制*/ ► int minp,doub; /* minp为筛选种 子,doub为倍数*/ ► for(i=0;i<100;i++) /*建立筛子*/
第27页
共49页
5-3-3 字符数组的引用
► 字符数组的引用和前面几节数组的引用没
有什么区别,也是通过对数组元素的引用 实现的,每次得到一个字符,只是要注意 数据元素的类型现在是字符型。
第28页
共49页
5-3-4 字符串和字符串结束标志
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?
char9 数组
9.1.2 一维数组的引用 除了给指针变量赋地址值外,还可以给指针变量赋 NULL值。 例如:p=NULL; NULL是在stdio.h头文件中的预定义符。NULL的代码 值为0,当p=NULL时,称p为空指针。因为NULL的代码 值是0,所以上面语句等价于: p=’\0’; 或 p=0; 这时,指针p并不是指向地址为0的存储单元,而是具 有一个确定的值——“空”。企图通过一个空指针去访问 一个存储单元时,将会得到一个出错信息。
•编写程序,通过函数给数组输入若干大于等于5的整数,用0作为输入结束标志, 调用函数输出该数组中的元素。
#include <stdio.h> #define N 20 void aout(int *,int); int ain(int *); main() { int a[N], i; i = ain(a); aout(a, i); }
9.2 一维数组和指针
9.2.1 一维数组和数组元素的地址 一维数组在主存中占连续的存储空间,数组名 代表的是数组的首地址。可定义一个指针变量, 通过赋值或赋初值的形式,把数组名或数组的第 一个元素的地址赋值该指针变量,该指针变量就 指向了该数组。值得注意的是,这个指针变量中 的地址值不可改变,也就是说,不可以给数组名 重新赋值,因而数组名也可以认为是一个地址常 量。
在以下语句中,由于进入循环前指针变量pa指 向的是数组a的首地址,则pa++使得pa依次指了a 数组中的每一个元素: for(pa=a, i=0; i<5; i++) pa++; 同样也可以写成: for(pa=a, i=0; i<5; i++) { scanf(“%d”, pa); pa++;} 或 for(pa=a, i=0; i<5; i++) scanf(“%d”, pa++); 或 for(pa=a; pa-a<5; pa++) scanf(“%d”, pa);
《c语言程序设计教学资料》第8章---数组
一维数组的初始化
不为自动数组初始化,数组中的元素值是不确定的 不为静态或外部数组初始化,则对数值型数组元素, 初值为0,而对字符型数组元素,初值为空字符 ‘\0’ 对数组元素初始化的实现方法:
1.在定义数组时对数组元素赋以初值。
例如: int a[10]={0,1,2,3,4,5,6,7,8,9}; 将数组元素的初值依次放在一对花括弧内。经过上 面的定义和初始化之后,a[0]=0,a[1]=1,a[2]=2, a[3]=3,a[4]=4,a[5]=5,a[6]=6,a[7]=7,a[8]=8, a[9]=9。
0
30
b1]
1
34
b[2]
2
38
b[3]
3
3c
b[4]
4
40
c
52
44
a
61
48
i
14678910235
4c
b[8]
8
50
b[9]
9
54
b[10]
10
58
c和a的值因数组越界编辑p而pt 被破坏了 b[11]
11
5c
二维数组程序举例
例: 将一个二维数组行和列元素互换,存到另一个二维数 组中。
数组名 [下标] 下标可以是整型常量或整型表达式。例如: a[0]=a[5]+a[7]-a[2*3]
注意
定义数组时用到的“数组名[常量表达式]” 和引用数 组元素时用到的“数组名[下标]” 是有区别的。 例如∶ int a[10]; // 定义数组长度为10
t=a[6]; //引用a数组中序号为6的元素
sizeof(数组名)
编辑ppt
c18_一维数组
本次课内容:一维数组
教学目的:掌握一维数组的定义、初始化,数组的引用、数组作 为函数参数及数据排序、查找等处理方法。
如: static int a[5]={1,2,3,4,5}; static char ch[2]={‘a’,’b’};
说明: (1) 元素定义的初值个数不足时,用零补齐。 如 static int a[ 5]={1,2,3}; 等价于: static a[5]={1,2,3,0,0}; int s[8]={0}; s[0] ~ s[7]中的值均为零。 (2)元素定义时赋初值,可以不指定数组个数; 如 static int a[ ]={1,2,3,4,5]; 此时将以初值个数决定数组长度。 (3)静态和外部存储类型的数组不进行初始化,隐含的初
{ t=n-i; for (j=0;j<=t-1;j++) if (a[j]>a[j+1]) { temp=a[j]; a[j]=a[j+ return; }
/*外循环:共循环n-1次,为内循环 提供循环终值(t=n-i)*/
/*内循:负责找出最大数送至最后*/
a[0] a[1] a[2] a[3] a[4]
10 5 7 3 6
5 10 7 3 6
5 7 10 3 6
5 7 3 10 6
5 7 3 6 10
数据处理函数: void bubble(int a[ ],int n ) {
int i,j,t trmp; for ( i=1 ; i<=n-1;i++)
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
7.1.2 一维数组元素的引用
• 先定义,后使用。不能一次引用整个数 组。 • 表示形式: 数组名[下标] • 下标可以是整型常量或表达式。例如: • a[0]=a[5]+a[7]-a[2*3]
• EG: main( ) { • int i, a[10] ; • for (i=0;i<=9;i++) /*循环结束后i=10*/ • a[i]=i ; • for (i=9;i>=0;i– –) • printf(―%d‖,a[i]); • } • 运行结果: • 9876543210
1 0 6 0 0 0 0 0 0 0 0 0
4.若对全部元素赋值,第一维的长度可省略, 但第二维的长度不可省. static int a[2][2]={1,2,3,4}; 等同于 static int a[ ][2]={1,2,3,4};
•例如
7.2.4 程序举例
• 例7.5 3X4矩阵,ห้องสมุดไป่ตู้最大值及其所在的行 号和列号。 •Max=a[0][0]
例7.6 输出一个字符串 main() { char c[10]={'I',' ', 'a','m',' ','a', ' ','b','o','y'}; int i; for (i=0;i<10;i++) printf ("%c", c[i]); printf ("\n"); } I am a boy
#include <dos.h> main() {unsigned int sing[]={262,250,294,250,330,262,250, 262,250,294,250,330,250,262,250, 330,250,349,250,392,500, 330,250,349,250,392,500, 392,125,440,125,392,125,349,125,330,250,262,250, 392,125,440,125,392,125,349,125,330,250,262,250, 294,250,196,250,262,500, 294,250,196,250,262,500, 0,0};
9 8 5 4 2 0
8 8 9 5 5 9 4 4 2 2 0 0
8 8 8 5 5 5 4 4 4 9 2 2 2 9 0 0 0 9
8 5 4 2 0
5 8 4 2 0
5 4 8 2 0
5 4 2 8 0
5 4 2 0 8
输入n个数给a[1]到a[n] For j=1 to n-1 For i=1 to n-j Y a[i]>a[i+1] N
7.3.4字符串和字符串结束标志 ‘\0‘
• 注意:static char c[ ]={‗c‘,‗h‘,‗i‘,‗n‘,‗a‘}; static char c[ ]={―china‖ } 前者的长度为5,不包含结束标志‘\0‘,而后者的长度 为6,包含结束标志‘\0‘,第六个元素为‘\0‘。 • 有了字符串结束标志数组的长度就不重要了。 • Char c[]={ " I am happy"}; • Char c[]=" I am happy"; • static char c[ ]={‗c‘,‗h‘,‗i‘,‗n‘,‗a‘,'\0'}; • static char c[ ]={―china‖} static char c[10 ]={―china‖ }
a[i]<=>a[I+1]
•输出a[1]到a[n]
• Void sound(unsigned frequency) • void nosound () • void delay(unsigned milliseconds);
唱名 1 2 3 4 5 6 7 频率 131 147 165 175 196 220 247 唱名 1 2 3 4 5 6 7 频率 262 294 330 349 392 440 494 1=C 4/4 1 2 3 1| 1 2 3 1| 3 4 5 --| 3 4 5--| 56 54 31| 56 54 3 1| 2 5 1-- | 2 5 1--|
§7.3 字符数组
•
7.3.1 字符数组的定义 char c[10]; (占一个字节) c[0]='I'; c[1]=' '; c[2]='a'; c[3]='m'; c[4]=' '; c[5]='h'; c[6]='a'; c[7]='p'; c[p]=''; c[9]='y'; I am happy • 也可用 int c[10]; (占两个字节)
7.3.2 一维数组的初始化:
• 1)逐一赋值。 • Char c[10]={'I', ' ', 'a', 'm', ' ', 'h','a','p','p','y'}; • 2)初值个数同预定的长度相同时, 可忽略数组长度。 • Char c[]={'I', ' ', 'a', 'm', ' ', 'h','a','p','p','y'};
应用:
•
• • • • •
main( ) { static char c[5]={‗a‘ ,‗b‘ ,‗c‘ ,‗d‘ ,‗e‘}; int i; for (i=0;i<5;i++) printf (―%c‖, c[i]) ; printf (―\n‖);
• } • 运行结果: • abcde
7.3.3 字符数组的引用
C h i n a \0 \0 \0 \0 \0
7.3.5 字符数组的输入输出
• (1)逐个输入输出,用“%c‖. • (2)整个字符串输入输出,用“%s‖. Static char c[ ]=―china‖; printf (―%s‖,c); 输出结果:china • 注意:(1)遇到结束标志‘\0‘就结束,但 不输出. • (2) 用“%s‖输出时,输出是字符数 组名,不是数组元素名. • char c[ ]=―china‖; printf (―%s‖,c[0]);
7.1.3 一维数组的初始化
• 1. 定义数组时对数组元素赋初值. static int a[10] ={0,1,2,3,4,5,6,7,8,9}; • 2. 只将一部分元素赋值. static int a[10]={0,1,2,3,4}; 只提供前五个元素的初值. • 3.对全部数组元素赋初值时,可以不指定数组的长度. static int a[ ]={1,2,3,4,5}; static int a[10]={1,2,3,4,5}; 注意:的区别 中只有5个元素,而中有10个元素,其中 后5个元素初值为0.
a10 a11 a12 a13 a 20 a 21 a 23 a 23 a30 a31 a31 a33
C语言允许使用多维数组 如:int f[3][4][5];
7.2.2 二维数组的引用
• 表示形式: 数组名[下标][下标] 注意:下标值应在已定义的数组大小的范 围内,不要越界. • b[1][2]=a[2][3]/2; • 区分:定义数组 a[2][2] 和引用元素 a[2][2] 前者是定义数组的维数和各维的大小,后 者是下标值,不要混淆.
1 5 9 0 0 0 0 0 0 0 0 0
int a[3][4] = {{1},{0,6},{0,0,11}};
1 0 0 0 6 0 0 0 11 0 0 0
可以对某几行元素赋值 int a[3[4]={{1},{5,6}};
1 5 0 0 6 0 0 0 0 0 0 0
•int a[3[4]={{1},{},{6}};
•
第 7 章 数组
7.1 一维数组的定义和引用 7.2 二维数组的定义和引用 7.3 字符数组
• • • • •
7.1 一维数组的定义和引用
• 7.1.1 定义:
• 类型说明符 数组名[常量表达式] • 如: int a[10], b[100]; • 说明:(1) 数组名定义同变量名. • (2) 用[ ],而不能用( ) . • (3) 常量表达式表示元素的个数: a[10]中有10 个元素,从a[0]—a[9],下标从0开始,不能使用数组元 素a[10]. • (4) 常量表达式中不能包含变量. int n; scanf (―%d‖, &n); int a[n];
• (3)若字符数组中包含一个以上‘\0‘,则遇第一 个‘\0‘时输出就结束. • (4)用“%s‖格式时,输入项为字符数组名,不要 加地址符&. • Char str[20]; C •2000 • scanf (―%s‖,&str); (×) h •2001 • 应为 scanf (―%s‖,str); i •2002 • 实际上数组名就是 n •2003 • 数组的首地址。 •2004 a •2005 \0
7.2.3
二维数组的初始化:
• 1.分行赋值: static int a[2][2]={{1,2},{3,4}}; • 2.将所有数据写入一个花括号中: static int a[2][2]={1,2,3,4}; • 3.对部分元素赋值: 若定义为静态的,其余为0. int a[3][4] = { {1}, {5}, {9}};