《C语言程序设计基础与实训教程》第7章:数组
C语言基础 第7章 数组
一维数组: float mark[100];
低地址
每个数据元素占用 的字节数,就是基
类型的字节数 一个元素占4个字节
高地址
86.5 mark[0]
92.0 mark[1]
77.5 mark[2]
52.0 mark[3]
.
.
.
.
.
.
94.0
mark[99]
第7章 数组
7.1.2 一维数组的初始化 ❖ 初始化:在定义时指定初始值,编译器把初值
例:int a[10] = {0,1,2,3,4}; 仅前5个元素赋初值,后5个元素自动赋为0。 3、全部元素均初始化为0,不允许简写。 int a[10] = {0,0,0,0,0,0,0,0,0,0}; 不能写成:int a[10]={0*10};
第7章 数组
❖ 不能简写为:
❖ static int a[10] = {0*10};
第7章 数组
❖ 注意: 2)C语言不允许对数组的大小做动态定义, 如:
❖ int n;
❖ scanf("%d",&n);
❖ int a[n]; ❖ 因为在编译时,C编译器根据已知数组大
小分配内存。//只针对全局变量
❖ 说明:
1)数组名:按标识符规则。本例a就是数 组名。
2)整型常量表达式:表示数组元素个数 (数组的长度)。可以是整型常量或符 号常量,不允许用变量。整型常量表达 式在说明数组元素个数的同时也确定了 数组元素下标的范围,下标从0开始~整 型常量表达式-1(注意不是1~整型常量 表达式)。
7.1.3 数组元素的引用
❖ C语言规定,不能引用整个数组,只能逐 个引用元素,元素引用方式:
C语言程序设计第七章
第7章数组7.1一维数组的定义和引用7.1.1一维数组的定义及其元素的引用1.一维数组的定义一维数组是指数组中的每个元素只带有一个下标的数组。
定义方式为:类型说明符数组名[常量表达式];。
例如:long array[10];●每个数组的第一个元素的下标总是0,这也称为数组下标的下界,所以上面的数组的最后一个元素的下标应该是9,这也称为数组下标的上界。
●在执行上面的语句后,C编译程序将在内存中开辟连续的10个存储单元,每个存储单元的名称就是每个数组的元素的名称,如array[0],array[1]……,可以用这样的名字来直接引用各存储单元。
●在定义一个数组的语句中,可以有多个数组说明符。
●可以把数组说明符和普通变量名同时写在一个类型定义语句中。
2.一维数组元素的引用数组元素的引用形式为:数组名[下标表达式]。
●一个数组元素实质上是一个变量名,代表内存中的一个存储单元,一个数组占据的是一连串连续的存储的单元。
●引用数组元素时,数组的下标可以是整型常量,也可以是整型表达式。
●数组必须先定义后使用。
●只能逐个引用数组元素而不能一次引用整个数组。
●在C语言程序的运行过程中,系统并不自动检验数组元素的下标是否越界。
7.1.2一维数组的初始化当数组定义后,系统会为该数组在内存中开辟一串连续的存储单元,但这些存储单元中并没有确定的值。
可以在定义数组时为所包含的数组元素赋初值。
如:int a[6]={0,1,2,3,4,5};●所赋初值放在一对花括号中,数值类型必须与所说明类型一致。
●所赋初值之间用逗号隔开,系统将按这些数值的排列顺序,从a[0]元素开始依次给数a中的元素赋初值。
●不能跳过前面的元素给后面的元素个数时,将自动给后面的其他元素补初值0。
●当所赋初值个数少于所定义数组的元素个数时,将自动给后面的其他元素补初值0。
●当所赋初值个数多于所定义数组的元素个数时,也就是说超出了数组已经定义的范围,在编译时系统将给出出错信息。
谭浩强 c语言程序设计(第七章)
13 27 76 13 30 27 27 97 30 76 97 第
27 30 97 30 97 初 始 关 键 字 n=8
第 一 趟 趟 趟 二 三 第
第 四 趟 趟 五
第 六 趟
第 七 趟
第
10
第七章 数组
#include <stdio.h> main() { int a[11],i,j,t; printf("Input 10 numbers:\n"); for(i=1;i<11;i++) scanf("%d",&a[i]); printf("\n"); 假 for(i=1;i<=9;i++) for (j=1;j<=10-i;j++) if(a[j]>a[j+1]) {t=a[j]; a[j]=a[j+1]; a[j+1]=t;} printf("The sorted numbers:\n"); for(i=1;i<11;i++) printf("%d ",a[i]); }
{
#include <stdio.h> 1 f[0] 0 main() 1 f[1] 1 { int i; 2 2 int f[20]={1,1}; f[2] 3 3 for(i=2;i<20;i++)f[3] 4 5 f[4] f[i]=f[i-2]+f[i-1]; 5 for(i=0;i<20;i++;\n"); printf("%12d",f[i]); } } 19 f[19] f[19]
C语言程序设计何钦铭颜晖第7章数组
C语言程序设计何钦铭颜晖第7章数组《C语言程序设计(第3版)》是由何钦铭和颜晖共同编写的一本C语言教材,主要介绍了C语言的基础知识和编程方法。
其中第7章是关于数组的内容,涵盖了数组的定义、初始化、访问元素以及数组的运算等方面。
本文将从以下几个方面对本章进行详细介绍。
首先,第7章首先介绍了数组的概念和定义。
数组是一组有序的、相同类型的数据元素的集合,通过下标来唯一标识数组中的每个元素。
章节中详细介绍了数组的声明和初始化方式,包括静态数组和动态数组的定义。
其次,本章还讲解了数组元素的访问和操作。
可以通过数组的下标来访问数组中的元素,数组的下标从0开始,依次递增。
章节通过实例演示了如何通过循环遍历数组和输入输出函数来操作数组中的元素。
同时,还介绍了数组的一些特殊运算,比如数组的拷贝和交换等操作。
接着,本章进一步讨论了多维数组的概念和使用方法。
多维数组是一种特殊的数组类型,每个元素还可以拥有多个子元素。
本章通过示例介绍了多维数组的定义和初始化方式,并且详细演示了如何通过嵌套循环来遍历多维数组。
此外,本章还介绍了C语言中常用的数组函数和头文件。
通过引入相关的头文件和函数,可以方便地进行数组的操作和处理。
例如,<stdlib.h>头文件中的rand(函数可以用来生成随机数,<string.h>头文件中的strcpy(函数可以用来拷贝字符串等。
最后,本章还提供了一些数组的应用实例,包括数组的排序、查找和统计。
通过这些实例,读者可以更好地理解如何运用数组来解决实际问题。
总的来说,第7章《数组》是《C语言程序设计(第3版)》中的一章,主要介绍了数组的概念、定义、访问和操作,以及多维数组和数组函数的使用方法。
通过本章的学习,读者可以全面掌握C语言中数组的知识和应用技巧,为后续的编程学习和实践奠定良好基础。
C语言程序设计教程第7章
C语言程序设计教程第7章《C语言程序设计教程》第7章是关于数组和指针的内容。
本章从数组的定义、初始化、访问等基础知识开始讲解,然后介绍了二维数组、多维数组和字符数组,并通过具体的示例代码进行讲解。
此外,本章还讲解了指针的概念和用法,包括指针的定义、指针的运算、指针与数组的关系等内容。
首先,本章介绍了数组的定义和初始化的方法。
数组是由相同类型的数据元素组成的有序集合,使用方括号来定义数组的长度。
数组可以通过下标来访问和修改元素的值。
此外,本章还介绍了数组初始化的方法,包括静态初始化和动态初始化。
然后,本章详细讲解了二维数组和多维数组的概念和使用方法。
二维数组可以看作是由多个一维数组组成的,可以通过两个下标来访问和修改元素的值。
多维数组与二维数组类似,只是多维数组可以有更高维度的数组。
本章通过示例代码演示了如何定义和使用二维数组和多维数组。
接下来,本章介绍了字符数组的概念和使用方法。
字符数组是由字符组成的一维数组,可以用于存储和处理字符串。
本章通过示例代码演示了如何定义、初始化和使用字符数组,包括字符串的输入、输出和处理。
最后,本章详细讲解了指针的概念和用法。
指针是一种特殊的变量,可以存储变量的地址。
本章介绍了指针的定义和初始化的方法,以及指针的运算,包括指针的加法、减法和比较操作。
本章还讲解了指针与数组的关系,包括指针与一维数组的关系、二维数组的关系和字符数组的关系。
本章通过示例代码演示了指针的使用方法,包括指针与数组的遍历、指针与字符串的处理等。
总之,第7章《数组和指针》是《C语言程序设计教程》中比较重要和基础的章节。
通过学习本章的内容,读者可以了解数组和指针的概念和用法,掌握数组和指针的定义、初始化、访问等基本操作,以及掌握二维数组、多维数组和字符数组的使用方法。
通过本章的学习,读者可以更好地理解和运用C语言的数组和指针特性,提高自己的编程技能。
10c程序设计 第7章 数组PPT课件
图7.4
图7.5
7.2.3 二维数组的初始化
(1) 分行给二维数组赋初值。如
int a[3][4]={{1,2,3,4},{5,6,7,8}, {9,10,11,12}};
(2) 将所有数据写在一个花括弧内,按数组行 排列的顺序对各元素赋初值。
类型关键字 数组名[常数表达式];
二、数组元素 数组名[下标]
下界为 0,上 界为常数表达 式
说明:
(1) 数组名定名规则和变量名相同。 (2) 数组名后是用方括弧括起来 (3) 常量表达式表示元素的个数。
a[10]中,10表示a数组有10个元素, a[0],a[1],a[2],a[3],……,a[8],a[9]。 (4) 常量表达式中可以包括常量和符号常量, 不能包含变量。
C语言构造类型的数据,它们有:
数组类型、结构体类型、共用体。
构造类型数据是由基本类型数据按 一定规则组成的。
数组是有序数据的集合。数组中的 每一个元素都属于同一个数据类型。 用一个统一的数组名和下标来唯一 地确定数组中的元素。
7.1 一维数组的定义和引用
7.1.1 一维数组的定义
一、定义
标识符 数组体积
for(i=0; i<10; i++) printf(“%f ”, a[i]); }
7.2 二维数组的定义和引用
7.2.1 二维数组的定义 二维数组定义的一般形式为类型说明符: 数组名[常量表达式][常量表达式] 例如:float a[3][4],b[5][10]; 定义a为3×4(3行4列)的数组,b为5×10(5
int b[3][2],i,j; printf("array a:\n");
C语言程序设计_谭浩强_第二版_CH07
第七章 数组
7.3字符数组 7.3.6字符串处理函数 (5)strcmp(字符数组1,字符数组2) strcmp(str1,str2); (6)strlen(字符数组) strlen(str); (7)strlwr(字符串) strlwr(str); (8)strupr(字符串) strupr(str);
C程序设计
第七章 数组
主讲人:兰强
ቤተ መጻሕፍቲ ባይዱ
第七章 数组
主要内容: 一维数组的定义和引用 二维数组的定义和引用 字符数组
第七章 数组
7.1.1 一维数组的定义 类型说明符 数组名[常量表达式]; 例如:int a[10]; 表示定一个一维数组a,有10个元素。 注意: (1)数组数组的元素是从下标从0开始的。 a[0],a[1],a[2],……,a[9]。 (2)数组的大小必须是常量表达式,不允许 使用变量来表示数组的大小。
第七章 数组
7.3字符数组 7.3.4字符串和字符串结束标志 用’\0’来作为字符串结束标志。 可以用char c[]={“I AM HAPPY”};来对数 组初始化。 等价于 char c*+=,‘I’,’ ’,’A’,’M’,’ ’,’H’,’A’,’P’,’P’,’Y’,’\0’-;
第七章 数组
7.3字符数组 7.3.5字符串的输出输出 (1)逐个字符输入输出,用格式符”%c”输入或 输出一个字符。 使用函数:putchar(),getchar() (2)将整个字符串一次输入或输出,用”%s”格 式符。 使用函数:puts(),gets()
第七章 数组
7.3字符数组 7.3.6字符串处理函数 (1)puts(字符数组) puts(str); (2)gets(字符数组) gets(str); (3)strcat(字符数组1,字符数组2) strcat(str1,str2); (3)strcpy(字符数组1,字符数组2) strcpy(str1,str2);
C语言程序设计第七章数组
a[0] a[1] a[2] a[3] a[4]
数组名a是数组存储区的首地址,即存放数组第一个元素的地址。 数组名 是数组存储区的首地址,即存放数组第一个元素的地址。 是数组存储区的首地址 a⇔&a[0];因此数组名是一个地址常 量。不能对数组名进行赋 ⇔ ; 值和运算。 值和运算。
㈡
5 8 8 4 5 2 8 4 0 8 2 8 0 9 5 5
㈢
4 2 0 5 8 9 4 4
㈣
2 0 4 5 8 9 2 2
㈤
0 2 4 5 8 9
结果
0 2 4 5 8 9
共循环多少次? 共循环多少次? 每次循环进行了多少次比较?什么时候结束? 每次循环进行了多少次比较?什么时候结束? 如果要求先将最小的数排在最前面,该如何操作? 如果要求先将最小的数 一维数组
数组的使用 就是对数组元素的读写操作。使用数组与使用普通变量类似, 就是对数组元素的读写操作。使用数组与使用普通变量类似, 也是先定义后使用。与变量不同的是不能对数组整体进行(读取) 也是先定义后使用。与变量不同的是不能对数组整体进行(读取) 操作,只能对数组的元素进行操作。 操作,只能对数组的元素进行操作。 一维数组的引用格式 数组名 [ 下标 ] 说明 下标可以是常量或常量表达式。 下标可以是常量或常量表达式。 下标可以是变量 也可以是表达式。 可以是变量, 下标可以是变量,也可以是表达式。 下标如果是表达式, 首先计算表达式, 计算的最终结果为下标值。 下标如果是表达式 首先计算表达式 计算的最终结果为下标值。 下标值若不是整型, 系统会自动取整 系统会自动取整。 下标值若不是整型,C系统会自动取整。 下标值从0开始。而不是从1开始。 下标值从 开始。而不是从 开始。 开始 开始 使用数组时,下标不能超过或等于定义时的下标值。 使用数组时,下标不能超过或等于定义时的下标值。
《C语言程序设计》第7章数组
{temp=data[j]; data[j]=data[j+1]; data[j+1]=temp; }; printf("\nthe result of sort:\n"); /*输出排序后的数据*/ for(i=0; i<NUM; i++) printf("%d ",data[i]);
}
7.2 2维数组的定义和引用
1 0 0 0
int a[3][4]={{1},{0,6}, {0,0,11}}; 0 6 0 0
0 0 11 0
int a[3][4]={{1},{5,6}};
1 0 0 0 5 6 0 0 0 0 0 0
int a[3][4]={{1},{}, {9}};
1 0 0 0 0 0 0 0 9 0 0 0
(1)首先将相邻的A[1]与A[2]进行比较,如果 A[2]的值小于A[1]的值,则交换两者的位置, 使较小的下沉,较大的上浮;接着比较A[2]与 A[3],同样使小的下沉,大的上浮。依此类推, 直到比较完A[n-1]和A[n]后,A[n]为具有最大排 序码(数值)的元素,称第一趟排序结束。
(2)然后在A[1]~A[n-1]区间内,进行第二趟排
7.3.2 字符数组的初始化
字符数组的初始化,可以通过为每个数 组元素指定初值字符来实现。
如:
char c[10]={‘I’,’□’,’a’,’m’,’□’,’h’,’a’,’p’,’p’,’y’};
char c2[ ]={‘c’,’h’,’i’,’n’,’a’}; char d[2][3]={{‘□’,’*’,’□’},{‘*’,’□’,’*’}};
x x[0] —— x[0][0] x[0][1] x[0][2] x[0][3] x[1] —— x[1][0] x[1][1] x[1][2] x[1][3] x[2] —— x[2][0] x[2][1] x[2][2] x[2][3]
C语言程序设计 第3版 第7章 数组
printf("%d ",a[i]); }
运行结果
15820 1750 1670 12670 1820
C语言程序设计
第7章 数组
第2讲:字符数组
提纲
1.字符数组的定义、初始化及元素引用 2.字符串定义及相关函数 3.字符数组应用实例
1. 字符数组
定义 初始化 元素引用
for(i=0;i<12;i++) printf("%c",ch[i]);
}
如果执行语句ch[2]=ch[3],结果会变化。
运行结果
Good morning
C语言程序设计
2. 字符串
介绍 处理函数
定义:
字符串一般使用字符数组来处理,字符串的结束标志’\0’也要存放在该字符数组中。 例如:
算法设计如下:
1、定义一个整型数组a,长度为10; 2、通过scanf语句进行数组元素赋值; 3、将第一个元素设为最高分和最低分; 4、通过累加求和得到10学生的总成绩,同时通过
比较得到最高分和最低分; 5、除以10就得到平均成绩; 6、输出平均分、最高分和最低分;
C语言程序设计
语句编写
main()
‘l’
‘l’
‘o’
C语言程序设计
1. 字符数组
定义 初始化 元素引用
一维数组初始化:
(1)在定义数组时,赋给字符数组各元素的初值。 例如: char ch[5]={‘h’,‘e’,‘l’,‘l’,‘o’};
(2)字符数组的长度也可以省略不写。 例如: char ch[]={‘h’,‘e’,‘l’,‘l’,‘o’};
C语言程序设计教程数组
}
输入:1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
输出:15 14 13 12 11 10 9 8 7 6 5 4 3 2 1
2021/3/24
第6页/共78页
第7章 数组
7
6.1.3 一维数组的存储结构与初始化
1.一维数组的存储结构
数组变量 在内存中分配一片连续的存储单元,数组元素按 数组下标从小到大连续存放。a代表首地址(数组起始地址),每个 元素字节数相同,因此,根据数组元素序号可以求得数组各元 素在内存的地址,并可对数组元素进行随机存取。
2021/3/24
第8页/共78页
第7章 数组
9
对数组初始化的几种方法:
a[0] 0
a[1]
①在定义数组时,对全部数组元素赋予初值。 初始化 a[2]
例:int a[5]={0,1,2,3,4};
a[3]
1
2 3
②在定义数组时,对部分数组元素赋予初值。
a[4] 4
例:int a[5]={1,2}; 等价 a[0]=1,a[1]=2; 其它赋0
③对全部数组元素赋初值时,可省数组长度,系统自动确定。
例:int a[ ]={0,1, 2,3,4} ;等价于 int a[5]={0,1,2,3,4};
若不对auto数组进行初始化,则其初值是不可知的。
若一个static或外部数组未进行初始化,则对数值型数组 元素,初值为0,而对字符型数组元素,初值为空字符 ‘\0’.
1.定义形式:
存储类别 类型标识符 数组名[行数][列数];
例:float b[5][3]; 定义了一个5×3的数组b,即数组为5行3列,可存放15 个实型数据。
《C语言程序设计与数据结构》第7章数组
主要内容
7.1 一维数组 7.2 二维数组 7.3 字符数组 7.4 数组在函数中的应用 7.5 折半查找 7.6 数组元素排序 7.7 典型习题分析解答
C语言程序设计与数据结构
7.1 一维数组
7.1.1 一维数组的定义与初始化 7.1.1.1 一维数组的定义
C语言程序设计与数据结构
2.输入字符串──gets()函数 (1)调用方式:gets(字符数组) (2)函数功能:从标准输入设备(stdin)──键盘上,读取1个字符串(可以包含空格),并将 其存储到字符数组中去。 (3)使用说明 1)gets()读取的字符串,其长度没有限制,编程者要保证字符数组有足够大的空间,存放输 入的字符串。 2)该函数输入的字符串中允许包含空格,而在scanf()函数中使用%s接收字符串时,空格做为 字符串的结束标志。 【例7.6】 #include <stdio.h> main( ) { char st[15]; printf("input string:\n"); gets(st); puts(st); } 输入:c program 显示:c program
C语言程序设计与数据结构
Байду номын сангаас
3.字符串比较──strcmp()函数 (1)调用方式:strcmp(字符串1 ,字符串2) 其中“字符串”可以是串常量,也可以是1维字符数组。 (2)函数功能:比较两个字符串的大小。 如果:字符串1=字符串2,函数返回值等于0; 字符串1<字符串2,函数返回值负整数; 字符串1>字符串2,函数返回值正整数。 (3)使用说明 ①如果一个字符串是另一个字符串从头开始的子串,则母串为大。 ②不能使用关系运算符“==”来比较两个字符串,只能用strcmp() 函数来处理。 【例7.7】 #include <string.h> main( ) {int k; char st1[15],st2[]="C Language"; printf("input a string:\n"); gets(st1); k=strcmp(st1,st2); if(k==0) printf("st1=st2\n"); if(k>0) printf("st1>st2\n"); if(k<0) printf("st1<st2\n");}
《C语言程序设计》微课课件 第7章 数组
{
int n,f[20];
/*定义变量*/
f[0]=f[1]=1;
/*赋初值*/
for(n=2;n<20;n++)
/*循环条件设定*/
f[n]=f[n-1]+f[n-2]; /*计算f[n]的值*/
for(n=0;n<20;n++)
/*循环*/
{
if(n%4==0)
/*如果n能够被4整除*/
printf("\n");/*每输出四个数后换行*/
for(i=0;i<3;i++)
/*外循环*/
{
for(j=0;j<6;j++)
/*内循环*/
s=s+a[i][j];
/*各科的分数累加*/
v[i]=s/6;
/*各科平均分*/
s=0;
/*s重新赋初值0*/
}
for(j=0;j<6;j++)
/*外循环*/
{
for(i=0;i<3;i++)
/*内循环*/
一维数组
3.一维数组的初始化
Three
数组的初始化就是在定义数组的同时,给其数组元素赋初值。
类型说明符 数组名[常量表达式]={数值1,数值2,…,数值n}; 例如:int a[3]={0,1,2};
提示 〔1〕可以只给局部元素赋初值。
〔2〕只能给元素逐个赋值,不能给数组整体赋值。 〔3〕如果在定义数组时给全部元素赋值,那么在数组说明中可以不给出数组元素的 个数,此时数组的个数由值的个数确定。 〔4〕如果花括号{}中数值的个数多于数组元素的个数,编译时将提示语法错误。
C语言程序设计-电子教案-甘勇-50848295 07 数组
7.2 一维数组与指针运算
一维数组的数组名 一维数组的下标与指针 作为函数参数的一维数组的数组名
一维数组的数组名
先看以下两个定义: int sum; int num[5]; 变量sum是一个标量,因为它是一个单一的值且这个数值 是整型的。变量num是一个数组,因为它是一组值的集合。 当数组名和下标值一起使用,就可以标识数组中某个特定 的值。
num[2]的类型是整型数据,那么 num的类型又是什么呢?它所表 示的又是什么呢?
在C语言中,在几乎所有使用数组名的表达式中, 数组名的值是一个指针常量,也就是数组中第一 个数组元素的地址。num的类型取决于数组元素 的类型,数组元素的类型是int类型,那么num的 类型就是“指向int的常量指针”。因此一维数组 的数组名表示的是该数组中第一个数组元素的存 储地址,数组名的类型是“指向数组元素存储类 型的常量指针”。请不要将数组等同于指针,因 为数组具有一些和指针完全不同的特征。
再通过间接访问操作访问这个新的存储空间取得这个存 储空间中所存储的数据。这个过程看上去很熟悉,因为 这和前面的数组下标的引用过程完全一样的。因此 num[2]和*(num+2)是等价的。请牢记在C语言中下标引 用和间接访问表达式是一样的。
#define N 10 ……
int array[N]; int *ptr = array+5;
例如:
f[2][3]=f[2][2]/2+1; f[2][2]=f[1][2]*f[2][1];
例如:a[0]=a[5]+a[7]-a[2*3] 数组元素是一个变量。
例如:price[3]=20.23; scanf(“%d %f”, &grade[2], &price[0] );
C语言第7章数组
} }
[例7.3]输入10个数,从大到小排序输出。
main()
{ int i,j,p,q,s,a[10];
printf(“intput 10 numbers:\n”);
for(i=0;i<10;i++) scanf(“%d”,&a[i]);
for(i=0;i<10;i++)
注意:字符型与整型可以通用,但有区别:
char c[10]; /*在内存中占10字节*/
int c[10]; /*在内存中占20字节*/
二、字符数组的初始化
1、逐个元素初始化
static char c[10] = {'I',' ','a','m',' ','h','a','p','p','y'};
2、初始化数据少于数组长度,多余元素自动为“空”('\0',二进制0)。
字符数组:存放字符数据的数组,每一个元素存放一个字符。
一、定义字符数组
例、char c[10]; /*定义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[8]='p'; c[9]='y';
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
/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]。
程序 运行结果如下图: 运行结果如下图:
/webnew/
7.1.4 一维数组的应用举例
例7.3 编写程序,对数组输入若个整型数,并利用选择法 对数组中的数进行排序(按从大到小排序)。 分析:选择法的基本思想是:用变量p来存放最大数所在 的位置,若数组中有n个数,首先p中存放0,认为a[0]中数最大。 然后把a[p]跟后面的a[1]比较,若a[1]比a[p]大,则p=1;否则p不 变。接着a[p]跟后面的a[2]比较,若a[2]比a[p]大,则p=2;否则p 不变。接着a[p]跟后面的a[3]比,a[4]比,……,与最后一个元 素比较。这时p中存放的是所有元素中最大元素所在的位置。把 a[0]中的数与a[p]中的数交换。a[0]中存放最大元素。 再从余下的n-1个数中找最大的数与a[1]交换,重复直到排 序结束。 程序
a[0] a[1] a[2] a[3] a[4] a[5] a[6] a[7] a[8] a[9]
图7.1数组元素在内存中的存储
/webnew/
7.1.2 一维数组的初始化
当定义一个数组时,系统根据类型说明,分配由常量表 达式所指定的相应数量的存储单元,一个存储单元对应一个 数组元素。数组的初始化实质上就是在定义数组时,为每一 个数组元素赋初值。数组的初始化是在编译阶段完成的,不 占用运行时间。这样可以使数组元素在程序开始运行前就得 到初值,从而节约了运行时间,提高了执行速度。 一维数组的初始化可分为以下几种情况: (1)给全部数组元素赋初值 例:int arr[8]={10,11,12,13,0,4,5,6}; 在给全部数组元素赋初值的情况下,也可以写成如下形
/webnew/
7.1.1 一维数组的定义
(6)一维数组在内存中顺序存放,占用内存一段连续空间,数组名代表 这一段连续空间的首地址。定义了一个数组,实质上是定义一批同类型的变 量,这一批变量的名字有如下形式:数组名[下标],下标为它在数组中的排序 号(序号从0开始)。这些变量在内存中的地址连续。 例如,有如下定义:int a[10]; 系统为数组a开辟了10个连续的存储单元,定义了十个变量,这一批变量的名 字分别为a[0],a[1],a[2],a[3],a[4],a[5],a[6],a[7],a[8],a[9]。如图7.1 所示。 数组名代表的是整个存储单元的首地址,可以说a与数组元素a[0]的地址值相 同。
/webnew/
7.1.1 一维数组的定义
2. 说明 (1)数组名的命名和其它变量一样,应符合用户标识符的命名规则,并且不 得与其它变量同名。 (2)数组名后面必须是方括号。 例如,int a(100);是错误的。 (3)“[]”中的常量表达式中不能包含变量,即使是变量已被赋值。如下面的 用法是错误的: int m; m=10; int a[m]; (4)如果类型相同,可同时说明多个数组和多个变量。 例如: int a,b, k1[10],k2[20]; (5)常量表达式的值表示数组元素的个数。
/webnew/
7.2维数组的定义格式
二维数组定义的一般形式为: 类型说明 数组名[常量表达式1][常量表达式2]; 数组名[常量表达式1][常量表达式2]为二维数组的数组说明符。二维数 组说明符中必须有两个用方括号括起来的常量表达式。这两个常量表达式 的值不再是数组元素的个数。常量表达式1表示该数组有多少行,常量表达 式2表示数组中每行有多少个元素,所以常量表达式1与常量表达式2的乘积 2 1 2 才表示二维数组的容量,即数组元素的个数。 例如:int a[3][4]; 定义了一个二维数组,a[3][4]为数组说明符,数组名为a,其数组元 素的类型为整型。它有3行,每行中有4个元素,所以,该数组的数组元素 共有3×4个,即: a[0][0],a[0][1],a[0][2],a[0][3] a[1][0],a[1][1],a[1][2],a[1][3] a[2][0],a[2][1],a[2][2],a[2][3]
第7章 数组
(时间:6次课,12学时)
/webnew/
第7章 数组
学习目的与要求: 数组是由基本类型构造而得的一种数据类型, 它是属于构造类型。 数组就是一组数据,是具有相同数据类型的数 据的有序集合。数组中的每个数据称为数组元素。 数组中的数据即数组元素有两个特点:一是具有相 同的数据类型,二是数据彼此之间的位置是有序的。 本章主要介绍一维数组、二维数组以及数组元 素为字符型的字符数组。要求掌握数组的定义、初 始化及数组元素的引用方式,掌握常用字符串处理 函数的使用。
/webnew/
第7章 数组
7.1 一维数组 7.2 二维数组 7.3 字符数组 7.4 上机实训
/webnew/
7.1 一维数组
如果一个数组元素在数组中的位置可以 通过一个位置数就可以确定,我们称这样的 数组为一维数组,这个位置数称作下标。也 就是说,一维数组元素具有一个下标。
/webnew/
7.2 二维数组
当我们在站队时,不是排成一排,而是排 成几排几列,这样,每一个人的位置必须由 第几行和第几列确定。同样道理,如果数组 中元素的位置由两个位置数(两个下标)来 确定,我们称这样的数组为二维数组。二维 数组可以看成是一个行列式或一个二维表。
/webnew/
7.1.1 一维数组的定义
1、一维数组的定义格式 C语言中,定义一维数组的一般形式为: 类型说明 数组名 [常量表达式]; 其中,类型说明中的类型是指数组元素的数据类型,它们可以是基本类型, 如int 、float等,也可以是构造类型。数组名 [常量表达式]为数组说明符,数 组名是数组的标识符,其命名遵循标识符的命名规则。常量表达式表示该数 组中元素的个数,即数组容量或数组长度,可以是整型常量、字符常量以及 有确定值的常量表达式,其值必须是正整数。 例如:int a[10]; /*定义一个名为a的一维数组,数组中有10个数组元素*/ float b[‘A’],c[3*5]; int a1[MAX],b1,c1; /*MAX为一符号常量*/
/webnew/
7.1.3 一维数组元素的引用
个元素的整型数组, 例 7.2 定义一个有 个元素的整型数组 , 数组的第一 . 定义一个有30个元素的整型数组 个为10,以后每个元素依次加2,并顺序输出各数组元素。 个为 ,以后每个元素依次加 ,并顺序输出各数组元素。
/webnew/
7.1.3 一维数组元素的引用
数组是一组数组元素的顺序集合,数组名代表了整个数组存储 空间的首地址。当我们对数组进行操作时,不能对整个数组进行操作, 只能对其中的数组元素进行操作。 1. 一维数组元素的引用方式 数组元素实质上就是一个普通的变量,通过数组名加下标来指 定。所以,一维数组元素的引用方式为: 数组名[下标表达式] 下标表达式即为该数组元素在数组中的位置。 例如:若有如下定义:float f[5]; 则f[0]、f[2]、f[i]、f[i+j]都是数组元素合法的引用形式,但要注 意下标的取值范围,它的下限为0,上限为数组长度-1。
/webnew/
7.1.4 一维数组的应用举例
例7.4 编写程序,定义一个含有20个元素的数组,并完成以下操作。 (1)调用C库函数中的随机函数给所有的元素赋以10~50之间的随机数; (2)输出数组元素中的值; (3)按顺序对每隔四个数求一个和数,保存和数并输出。 分析:调用随机函数的方法如下:在程序开头包含头文件stdio.h,通 过函数random(x)得到一个0到x之间的随机整数,因此,可以通过10+ random(40)产生一个10~50之间的随机数。 题目要求按顺序对每隔四个数求一个和数,20个元素将得到5个和数。 20 5 和数要求保存并输出,所以,必须再定义一个一维数组用于和数的保存。 程序 运行结果如图: