第8章 数组及其应用(一维数组)
一维数组及其应用
x = linspace(1,5) s = [2,5,9] a = x(s)
引用一维数组x中的第2、5、9个元素, 将其赋值给变量 a
b = x(end:-1:1)
c = x(1:2:end) d = x(2:2:end)
b=? c=?d=?
4、一维数组中子数组的赋值
x = linspace(1,5) x([1,4]) = [2,7]
4、一维数组的逻辑运算
逻辑运算可以在标量与标量,数组与数组,标量与数组间进行
a = [0, 1, 2, 0, 3], b = [4, 5, 0, 0, 6], c = 7
逻辑运算 与 或 非 异或 运算符 a&b a|c ~a 函数形式 and(a, b) or(a, c) not(a) xor(a, b) 结果 [0, 1, 0, 0, 1] [1, 1, 1, 1, 1] [1, 0, 0, 1, 0] [1, 0, 1, 0, 0]
x
2134
0.2346
x(1)
x(2)
x(1,1)
x(2,1)
… 6.555
…
… x(k)
… 一维编号
… x(k,1)
… 二维编号
3、标量(scalar)
一个数,称为标量,在Matlab中看作为 1 X 1 矩阵(二维数组)
a=
2134
在matlab中,使用a(1)和a(1,1)都可以访问变量a
Matlab中,标量和向量一般用小写字母表示
x = linspace(1,5) s = [1,4] a = [2,7] x(s) = a
将2、7分别赋值给x的第1、4个元素
5、利用空数组进行赋值可以修改数组的大小
(1)执行如下赋值语句:
一维数组的基础知识及应用
分析 每盏灯使用数组中的一个元素表示,1代表开 ,0代表关。然后模拟每个人的操作
标志数组方法
用数组解题的一般步骤
定义数组 给数组赋初值 运算和操作 输出
例4
输出斐波列契数列的前N项(5个1行) 0 1 1 2 3 5 8 13 21 ...... 程序文件名:fibo.cpp
一维数组定义
一维数组定义的一般形式: 数据类型 数组名[常量表达式];
如: int a[5];
数组名是一个标识符 常量表达式的值表示数组元素的个数
一维数组中的元素在内存中按下标序号顺序存放
引用一维数组的元素
C++语言规定,只能引用数组中的元素 ,而不 能一次引用整个数组 引用数组元素的一般形式: 数组名[下标] 如 a[2] C++数组的下标从0开始
除了在定义时给出数组元素的值,数组可以通 过赋值语句和输入语句赋初值。 不能整个数组赋值,只能逐个元素赋值 for (int i=0;i<5;i++) a[i]=i+1;
一维数组的输入输出
一维数组元素的输入 不能整个数组输入,只能逐个元素输入。一般用 for循环做。如: for (int i=1;i<5;i++) cin>>a[i]; 一维数组元素的输出 不能整个数组输出,只能逐个元素输出。一般用 for循环做。如: for (int i=1;i<5;i++) cout<<a[i];
例1
将一个数列中的所有元素倒序排放 。
程序名:rever.cpp 键盘输入输出 输入格式: 第一行:一个整数n(n<=100),表示数列中数的个数 第二行:用空格隔开的n个整数 输出格式:n个已倒序排放的数,以空格分隔
C语言程序设计ppt数组
达数组中打头元素旳地址
2024/10/10
6
8.2.1 一维数组旳申明
例8.1 具有基本数据类型旳一维数组旳申明
#define SIZE 10 int array[5]; double d[5],e[SIZE]; char name[SIZE*5];
13. double even;
21. course_even[i]=course_su
/*分别为全部课程旳总分、平均分 m[i]/5.0;
*/
22. sum+=course_sum[i];
14. int i;
23.
} /* 计算各门课平总分 */
24. even=sum/(3.0*SIZE);
2024/10/10
2024/10/10
17
例8.10
8. int course_sum[3]={0,0,0}; 15. for(i=0;i<5;i++){
9. double course_even[3];
16. course_sum[0]+=math[i];
/组**分/ 别为各门课程总分、平均分数17. course_sum[1]+=physics[i];
用若干个数字序号(下标)来区别各数组元素
例如定义float score[30],可表述30位学生成绩 用数组具有什么好处?
2024/10/10
3
8.1 数组概述
问题
计算全班30位同学某门课程旳平均成绩
处理措施
设置30个float型变量来统计成绩 设置一种有30个float型元素旳数组来统计成绩
第8章 数组
– 二维数组的存储
• 从逻辑上看,二维数组元素间的关系相当 于矩阵:第一维长度是矩阵的行数,第二 维长度是矩阵的列数。 • 从存储上看,内存是一维的、线性的空间, 那么就要采取一定的方式将二维的数组映 射到一维的内存中去。 • C语言中采用行优先的方式来存储二维数 组,同一行中再按列顺序存放。 • 若有定义: static float f[3][4]; 则f是一个3行4列的数组,它在内存中的 存储示意图如右图所示: 上一页
• b[i]和b+i都表示第i行首地址,二者值相同,但类型却不同: 前者的基类型为二维数组元素类型,后者的基类型为二维数 组的行(即一维数组类型)。 • 若考虑b为一维数组类型的一维数组,*(b+i)为b的第i个元 素,则*(b+i)与b[i]等价。
– 数组元素的地址
• 二维数组元素地址的类型是基类型为数组元素类型的指针 类型,如&b[i][j]就可以看作基类型为整型的指针类型。 • 对于二维数组b中第i行、第j列(0<=i<=2,0<=j<=3)的元素的 地址可表示为:b[i]+j或*(b+i)+j。 •二维数组在内存中按行序顺次存放,元素b[i][j]之前已存放 了第0行、第1行、…第i-1行共i行元素;在第i行中,b[i][j]之 前已经存放了第0列、第1列、…第j-1列共j个元素,即b[i][j] 之前共有i*4+j个元素,那么,b[i][j]的地址也可表示为 : &b[0][0]+i*4+j或b[0]+i*4+j。 上一页
– 将字符串常量赋给字符数组
• 可将字符串常量中的字符逐个赋值给字符数组,且最后一 个字符是空字符。 • 可以在定义字符数组时同时将字符串常量赋值给它。 • 定义字符数组时可省略数组的长度,系统会根据所赋字符 串常量的实际长度来确定字符数组的长度。 上一页
一维数组的定义和使用
一维数组的定义和使用一维数组是一种存储相同类型数据元素的线性数据结构。
它的定义形式为:```<数据类型> <数组名>[<数组长度>];```其中,数据类型是指数组中存储的元素类型,数组名是指数组的名称,数组长度是指数组中元素的个数。
一维数组的使用包括数组的初始化、元素的访问和修改等操作。
1. 数组的初始化可以分为静态初始化和动态初始化两种方式:- 静态初始化:直接给数组元素赋初值,如`int[] arr = {1, 2, 3, 4, 5}`;- 动态初始化:先声明数组,再给数组元素赋值,如`int[] arr = new int[5]; arr[0] = 1; arr[1] = 2; ...`。
2. 元素的访问和修改可以通过数组下标来进行操作:- 访问数组元素:使用数组下标来获取数组中的元素值,下标从0开始,如`int value = arr[0]`;- 修改数组元素:使用数组下标来修改数组中的元素值,如`arr[0] = 10`。
下面是一个示例代码,演示了一维数组的定义和使用:```javapublic class ArrayExample {public static void main(String[] args) {// 静态初始化int[] arr1 = {1, 2, 3, 4, 5};// 动态初始化int[] arr2 = new int[5];arr2[0] = 10;arr2[1] = 20;arr2[2] = 30;arr2[3] = 40;arr2[4] = 50;// 访问数组元素System.out.println("arr1[0] = " + arr1[0]); System.out.println("arr2[2] = " + arr2[2]); // 修改数组元素arr1[0] = 100;arr2[2] = 300;System.out.println("arr1[0] = " + arr1[0]);System.out.println("arr2[2] = " + arr2[2]); }}```输出结果:```arr1[0] = 1arr2[2] = 30arr1[0] = 100arr2[2] = 300。
国二计算机VB教程8
a(1),b(1,1)
从上面的例子可以看出,数组的定义和数组元素的引用 在形式上是一样,因此要注意区分数组定义和数组元素。 例如:
Dim a(12) As Integer … b = a(12) …
在这个程序中,出现了两个a(12),但是这两个a (12)的含义是不一样的。在Dim语句中出现的a(12) 不是数组元素,而是“数组说明符”,由它说明所建立的 数组a的最大可以用的下标为12;而在赋值语句“b= a (12)”中的a(12)是一个数组元素,它表示的是数组 a中序号为12的数组元素。 说明: ① 在引用数组元素的时候,其数组名、类型以及维数必须 与定义的时候一致; ② 在引用数组元素的时候,其下标值应该在定义数组所指 定的范围内; ③ 如果建立的数组是二维或者多维,那么在引用数组元素 的时候必须给出与维数相同个数的下标。
8.2.1 动态数组的定义
定义数组时,如果不指明数组的维数和每一维的下标范 围,仅用一对圆括号表示,那么在使用时,就可以利用
ReDim语句对数组的维数和下标范围重新定义,这样的数 组称为“动态数组”。 由此可见,定义一个动态数组可以分为两步: 在窗体、标准模块或过程中用Dim或Public声明一个没有 下标的数组(圆括号不能省略); 在过程中用ReDim语句定义带下标的数组。 ReDim语句格式是:
a(n)
其中a称为数组名,n是下 按照下标的个数可以将数组分为一维数组、二维数组或 多维数组。
8.1.1 数组的定义
在使用数组之前,必须先用数组说明语句进行定义,以 便系统分配内存单元。在Visual Basic中,可以用4个语句 来定义数组。这4个语句格式相同,但适用范围不同。
头歌云课实验八:数组及其应用
头歌云课C语言实验八:数组及其应用关卡1:折半查找关卡2:二位数组操作关卡3:二维数组的展开关卡4:数组元素交换关卡5:幻方第1关: 折半查找本关任务:由N个有序整数组成的数列已放在一维数组中,给定程序的功能是:利用折半查找法查找整数m在数组中的位置。
若找到,返回其下标值,否则返回-1。
编程要求请仔细阅读右侧代码,结合相关知识,在Begin-End区域内进行代码补充,完成编写折半查找的小程序。
测试说明平台会对你编写的代码进行测试:测试输入:5预期输出:-5 4 9 15 28 45 66 89 100 180Not be found!测试输入:9预期输出:-5 4 9 15 28 45 66 89 100 180m=9,index=2代码:#include <stdio.h>#define N 10int main(){int i, a[N]={-5,4,9,15,28,45,66,89,100,180 }, k=-1, m; int low=0, high=N-1, mid;for(i=0;i<N;i++)printf("%d ", a[i]);printf("\n");scanf("%d",&m);while(low <= high){mid = (low + high) / 2;if(m < a[mid])high = mid-1;/***** 以下一行有错误*****/else if(m > a[mid]) low=mid+1;/***** 以下一行有错误*****/else {k=mid;break;}}if(k>=0)printf("m=%d,index=%d\n",m,k);elseprintf("Not be found!\n");return 0;}第2关: 二位数组操作本关任务:输入一个N×N的二维数组。
C语言程序设计教程 第08章 一维数组的应用
本例题涉及的是对数组元素进行操作 的基本算法。对一维数组各元素的访问, 通常是在单重循环中实现。通过循环变量 与循环体内语句的配合,可以灵活地、有 选择地访问指定元素。 读者在阅读以下程序时,应理解数组 元素下标与数组元素值的区别;掌握如何 用循环变量控制数组元素的下标;以及如 何在连续输出的过程中控制输出换行。
8.4 与一维数组有关的参数传递
8.4.1 数组元素作实参
数组元素就是带下标的变量。所以,
数组元素作实参与简单变量作实参一样,
对应的形参应该是同类型的简单变量。
例8.3 编写程序:利用随机函数产生 6个50以内的整数存入数组a中,然后调用 自定义函数isodd依次判断数组a中的元素 是否为奇数。 程序如下 #include "stdlib.h" int isodd(int x)
需要说明的是:当数组名作为实参时, 对应的形参应该是指针,但还允许其他表 示形式。以ArrIn函数为例,对于调用语句: ArrIn(a,20);,相应的函数首部允许是以下 三种形式: ① void ArrIn(int *x,int n) ② void ArrIn(int x[ ],int n) ③ void ArrIn(int x[N],int n) 无论表示形式如何,C编译器都将x按 指针处理。
/* 形参是与实参相同类型的普通变量x */
{ if(x%2==1) return 1; else return 0; }
main( ) { int a[6],i; for(i=0; i<6; i++) { a[i]=rand( )%50; printf("%4d",a[i]); } printf("\n");
第8章 数组和其应用(一维数组)
2019年1月23日
stu2
5
4 void main() 8 { float stu1,stu2,stu3,stu4,stu5,…,stu100; 12 float aver,sum; … printf("\nenter 100 students grade:"); 396 scanf("%f,%f, %f",&stu1,&stu2,&stu3); scanf("%f,%f, %f",&stu4,&stu5,&stu6); ……. scanf("%f,%f, %f",&stu98,&stu99,&stu100); sum=stu1+stu2+stu3+stu4+stu5+stu6+…+stu100; aver=sum/100; printf("\n100 students aver:%f",aver); } C 语言程序设计
解决办法什么是
数组呢?
用数组,可共用一个scanf命令,并利用循环 结构读取。 int score[100],i; for (i=0;i<100;i++) scanf(“%d”,&score[i]);
数组是有序数据的集合。数组中的每一个 元素都属于同一个数据类型。用一个统一的 数组名和下标来唯一地确定数组中的元素。
2019年1月23日
编程计算100个学生的平均成绩。 stu stu[100]
8.1
一维数组
0
stu[0] stu[1] stu[2] stu[3] …… stu[99]
C语言程序设计_2 第8章 数组
int a[3][3]={{1,2,3},{4,5,6},{7,8,9}} a[3][3]={{1 },{4 },{7
.2). 按行连续赋值 把数组元素顺序赋值。例如: 把数组元素顺序赋值。例如:
int a[5][3]={1,2,3,4,5,6,7,8,9} a[5][3]={1
通常写为如下矩阵形式,比较直观: 通常写为如下矩阵形式,比较直观:
二维数组存储是按行排列的, 二维数组存储是按行排列的, 即放完一行之后顺次放入第二 行。
8.2.2 二维数组元素的表示方法
二维数组的元素也称为双下标变量,其表示的形式为: 二维数组的元素也称为双下标变量,其表示的形式为:
数组名[下标1][下标 数组名[下标1][下标2] 下标2
其中下标应为整型常量或整型表达式。例如: 其中下标应为整型常量或整型表达式。例如:
8.2 二维数组
只有一个下标的数组称为一维数组, 只有一个下标的数组称为一维数组,其数组 元素称为单下标变量。 元素称为单下标变量。有多个下标的数组称为 多维数组, 其数组元素称为多下标变量。 多维数组, 其数组元素称为多下标变量。 最 常用的是二维数组, 常用的是二维数组,更高维数的数组与二维数 组相似。 组相似。
8.1.2 数组元素的表示方法
数组元素是数组的基本单元,它是一种变量,其标识方法为 数组元素是数组的基本单元, 它是一种变量, 数组名后跟一个下标。下标指定元素在数组中的顺序号。 数组名后跟一个下标。下标指定元素在数组中的顺序号。数组元 素的一般形式为: 素的一般形式为:
数组名[下标] 数组名[下标]
例如,单独使用一个下标变量: 例如,单独使用一个下标变量:
int a[10]; a[10] a[7]=6; a[7]=6
《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
一维数组应用
一维数组的相关应用1.数组的定义:定义格式:数据类型数组名[数组的长度]其中:数据类型就是前面讲到的int、float、long、double、char等基本类型,当然也可以是我们后面还要介绍的其他类型(此处暂不考虑)。
数组名与普通变量的起名规则是一样的。
但不能与同一函数中的其他任何变量起一样的名字。
数组的长度定义是数组的长度只能是常量或常量表达式,否则就会出现编译错误。
例如:我们要定义一个整型数组,它里面能够存放10个元素,则应该定义成如下形式:int a[10];其他类型的数组与此类似,如:float f1[5], f2[10];long long1[10], long2[50];char ch1[30], ch2[10];也可以采用常量表达式来定义:如#define N 100main() {float num[N]; //定义了具有N个浮点型数据元素的数组,其中N为常量…}以下列举一些关于数组的应用,记住一点,数组的操作跟循环是息息相关的。
一维数组对应单重循环,后面要讲的二维数组对应的是二重循环。
2.给一维数组元素赋值:程序如下#include <stdio.h>main() { myfunc( ); }myfunc( ) {int a[10], i;printf(“input ten int number:\n”);/*下面的for循环将给数组a的每个元素赋值(从键盘上输入的)*/for (i=0; i<10; i++)scanf(“%d”, &a[i]);}3.一维数组元素的输出:程序如下#include <stdio.h>main() { myfunc( ); }myfunc( ){int a[10], i;printf(“input ten int number:\n”);/*下面的for循环将给数组a的每个元素赋值(从键盘上输入的)*/ for (i=0; i<10; i++)scanf(“%d”, &a[i]);/*下面的代码,将已经赋值的数组各元素输出到屏幕上*/for (i=0; i<10; i++)printf(“%d “, a[i]);}4.对一维数组元素进行相应处理后再输出。
一维数组 数学
一维数组:数学中的有序数据结构
一维数组是一个数学概念,它是一个有序的数列,其中每个元素都可以通过一个唯一的下标来访问。
下标从0开始,因此第一个元素的下标是0,第二个元素的下标是1,以此类推。
数组的长度是指数组中元素的数量,一旦创建,长度不可改变。
数组可以存储任何类型的数据,包括整数、浮点数、字符、字符串等。
在数学中,数组常用于表示和操作数据集合。
例如,一个一维数组可以表示一个序列的数值,可以通过各种数学运算来操作这些数值,如加法、减法、乘法、除法等。
对于一个一维数组,我们可以通过下标来访问和修改其中的元素。
例如,如果我们有一个长度为n的一维数组a,那么a[i]表示数组中下标为i的元素。
我们可以通过赋值操作来修改数组中的元素,例如a[i] = x可以将x赋值给数组中下标为i的元素。
除了基本的访问和修改操作外,我们还可以对数组进行各种数学操作,例如计算数组的总和、平均值、最大值、最小值等。
这些操作可以通过编写相应的函数或算法来实现。
总的来说,一维数组是数学中的一个重要概念,它可以用于表示和操作数据集合,并且可以通过各种数学运算来操作数组中的元素。
一维数组应用的原理
一维数组应用的原理什么是一维数组一维数组是计算机科学中的一种基本数据结构,它是由相同类型的数据元素组成的有序集合。
一维数组中的每个元素都可以通过一个索引值来访问,这个索引值是一个非负整数,表示元素在数组中的位置。
一维数组的定义与声明在大多数编程语言中,一维数组可以通过以下方式来定义和声明:类型名数组名[数组长度];其中类型名表示数组中元素的类型,数组名是为数组分配的内存空间的标识符,数组长度表示数组的容量。
一维数组的使用场景一维数组在计算机科学中有广泛的应用场景,以下是一些常见的场景: - 存储一组数据:一维数组可以用来存储一组相关的数据,例如存储学生成绩、存储员工工资等。
- 索引和遍历:通过使用索引值,可以方便地访问和操作数组中的元素。
同时,利用循环结构可以对一维数组进行遍历操作。
- 参数传递:一维数组可以作为函数的参数进行传递,通过传递数组的指针可以避免复制整个数组的开销。
- 逻辑处理:一维数组可以方便地进行各种逻辑处理,例如排序、查找最大值、求和等。
一维数组的访问和操作访问数组元素一维数组中的每个元素都可以通过索引值来访问,索引值的范围通常是从0到数组长度减1。
例如,对于一个长度为10的数组,索引值的范围是0到9。
通过以下方式可以访问数组元素:数组名[索引值]修改数组元素的值一维数组中的元素可以通过赋值操作来修改其值。
例如,要将数组中的某个元素修改为新的值,可以使用以下表达式:数组名[索引值] = 新值增加和删除数组元素一维数组的长度是固定的,一旦定义了数组的长度,就不能再改变。
因此,一维数组的长度不支持增加和删除元素的操作。
但是,可以通过重新定义一个新的数组,将原来的数组元素复制到新数组中来实现增删元素的效果。
一维数组的常见应用示例存储学生成绩一维数组可以用来存储学生成绩,例如,定义一个长度为5的一维数组,可以存储5个学生的成绩。
通过遍历数组可以计算平均成绩、找到最高分等。
```markdown float scores[5]; // 定义长度为5的一维数组// 输入学生成绩 for (int i = 0; i < 5; i++) { cout <<。
数学一维数组
数学一维数组一维数组是数学中的一种数据结构,它由一组有序的数值组成,这些数值按照一定的顺序排列在数组中。
一维数组常用于存储和处理一组相关的数据,例如学生的成绩、商品的价格、信号的强度等等。
在数学中,一维数组可以用于解决各种问题,例如统计数据、计算平均值、查找最大值和最小值等。
一维数组的定义和初始化是使用数学中的符号和方法进行的。
通常,我们使用方括号[]来表示一个一维数组,数组中的每个元素用逗号分隔开。
例如,[1, 2, 3, 4, 5]表示一个由5个元素组成的一维数组,其中的元素分别为1、2、3、4和5。
一维数组通常用一个变量来表示,这个变量可以通过索引来访问数组中的元素。
索引从0开始,表示数组中的第一个元素,依次递增。
一维数组的操作包括访问元素、修改元素、插入元素和删除元素等。
要访问一维数组中的元素,我们可以使用索引来定位元素的位置,然后通过变量名和索引来获取元素的值。
例如,对于数组[1, 2, 3, 4, 5],要访问第三个元素,我们可以使用变量名[2]来获取它的值,即3。
如果要修改数组中的元素,我们可以通过索引来定位元素的位置,然后用新的值替换原来的值。
例如,要将数组[1, 2, 3, 4, 5]中的第一个元素修改为10,我们可以使用变量名[0] = 10来实现。
在数学中,一维数组还可以进行各种运算和操作。
例如,可以对一维数组进行求和、求平均值、排序和查找等操作。
求和操作是将数组中的所有元素相加,得到它们的总和。
求平均值是将数组中的所有元素相加,然后除以元素的个数,得到它们的平均值。
排序操作是将数组中的元素按照一定的规则进行排序,例如从小到大或从大到小。
查找操作是在数组中寻找指定的元素,如果找到则返回元素的索引,否则返回-1。
一维数组还可以和其他数学概念和方法进行结合,解决更复杂的问题。
例如,可以使用一维数组来表示二进制数和十进制数之间的转换,通过数组中的元素来表示二进制数的每一位,然后进行相应的运算和操作。
8.4 一维数组应用举例_C语言程序设计_[共2页]
在函数 fun( )执行完毕,返回主函数时,系统释放 a 和 b 所占存储单元,指针变量 a 和数组 b 将不再存在。因此,函数 fun( )不应把 b 的值作为返回值,这样做,主函数中的指针变量 p 将不 指向任何对象而成为“无向指针”。
8.4 一维数组应用举例
【例 8-9】从键盘输入 10 个数,用起dio.h> int main() {
int a[10];
int i,j,tem;
for(i=0;i<=9;i++)
{
printf("请输入第%d 个数:",i+1);
scanf("%d",&a[i]);
}
for(i=9;i>0;i--)
//请注意这句!
for(j=0;j<i;j++)
if(a[j]>a[j+1])
{ tem=a[j];
a[j]=a[j+1];
189
第 8 章 数组
b 数组的开头。
#include<stdio.h> #define N 10 int *fun(int a[N],int n) {
int b[N]; return b; } void main() { int w[N]; p=fun(w,N); }
以上程序涉及几个概念。
在函数 fun( )中,形参 a 在形式上写作为 a[N],实际上它也可以写作 a[]或*a。但无论写成哪 种形式,C 编译程序都将其作为一个指针处理。在调用 fun 函数时,系统只为形参 a 开辟了存储 单元,并把 main( )函数中 w 数组的起始地址存入其中,使它指向 w 数组的首地址。因此,在 fun( ) 函数中,凡是指针变量可以参与运算,形式指针 a 同样可以参与,如可以进行 a++的操作,使它 移动去指向 w 数组的其他元素,还可以通过赋值语句使它不再指向 w 数组的元素。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
12:43:07
C 语言程序设计
2012年12月7日
第8章 数组
§8.1 一维数组
1.一维数组的定义
[ ]:数组运算符 单目运算符 优先级(1) 左结合 不能用( )
数据类型
例 int a[6];
数组名[常量表达式];
表示元素个数 下标从0开始
合法标识符
a
0 1 2 3 4 5
数组名表示内存首地 址,是地址常量。
C 语言程序设计
2012年12月7日 8
编程计算100个学生的平均成绩。
for(j=0;j<100;j++) void main() scanf(“%f”,&stu[j]); { float [100]; float aver,sum=0; printf("\nenter 100 students grade:"); scanf("%f,%f, %f",&stu1,&stu2,&stu3); scanf("%f,%f, %f",&stu4,&stu5,&stu6); ……. scanf("%f,%f, %f",&stu98,&stu99,&stu100); sum=stu1+stu2+stu3+stu4+stu5+stu6+…+stu100; aver=sum/100; for(j=0;j<100;j++) printf("\n100 students aver:%f",aver); sum+=stu[j]; }
C 语言程序设计
排序原理示意如下(n=5,第2轮)
第1轮(i=1) 第1次(j=0) 第2次(j=1) 第3次(j=2)
35
21 21
13
8
8 35
72
72 72
0<=j<n-i
13 35 13 8
第2轮(i=2)
21
13
8
35
72
17
C 语言程序设计
2012年12月7日
排序原理示意如下(n=5)
2012年12月7日
stu[0] stu[1] stu[2] stu[3] …… stu[99]
6
8.1
2.一维数组的引用
一维数组
数组必须先定义,后使用。 数组元素表示形式: 数组名[下标] 其中:下标可以是整型变量或整型表达式。 只能逐个引用数组元素,不能一次引用整个数组。
例
int stu[5]; printf(“%d”,stu); 可以: for(j=0;j<5;j++) printf(“%d\t”,stu[j]);
C 语言程序设计
2012年12月7日 13
8.1
一维数组
交换法:冒泡排序方法(最简单的排序方法)
这种方法的基本思想是:将待排序的元素看作是竖着排列 的“气泡”,较小的元素比较轻,从而要往上浮。 在冒泡排序算法中要对这个“气泡”序列处理若干遍。 所谓一遍处理,就是自上向下检查一遍这个序列,并时刻 注意两个相邻的元素的顺序是否正确。如果发现两个相邻 元素的顺序不对,即“重”的元素在上面,就交换它们的 位置。显然,处理一遍之后,“最重”的元素就沉到了最 低位置;处理二遍之后,“次重”的元素就浮到了次低位 置。在作第二遍处理时,由于最低位置上的元素已是“最 重”元素,所以不必检查。一般地,第i遍处理时,不必 检查第i位置以下的元素,因为经过前面i-1遍的处理,它 们已正确地排好序。这个算法的具体实现如下。
4.程序举例
数组的输入输出
定义数组
基本方法
输入/赋值
运算 输出
C 语言程序设计
12:43:07
2012年12月7日
12
8.1
一维数组
例2:空中有5驾飞机来袭,指挥人员已计算出空中目 标的威胁程度值,请按照威胁程度值从大到小的顺 序对空中目标进行排序,以便于指挥员进行火力分 配,对来袭目标进行拦截. 数学模型:给定5个整数,请按从大到小的顺序排序. 排序的问题:所谓排序,就是将一个数据元素(或 记录)的任意序列,按照指定的关键字,重新排 成一个有序的序列。 排序的方法:交换法、选择法、插入法
解决办法什么是
数组呢?
用数组,可共用一个scanf命令,并利用循环 结构读取。 int score[100],i; for (i=0;i<100;i++) scanf(“%d”,&score[i]);
数组是有序数据的集合。数组中的每一个 元素都属于同一个数据类型。用一个统一的 数组名和下标来唯一地确定数组中的元素。
C 语言程序设计
2012年12月7日 14
8.1
一维数组
例2:空中有5驾飞机来袭,指挥人员已计算出空中目 标的威胁程度值,请按照威胁程度值从大到小的顺 序对空中目标进行排序,以便于指挥员进行火力分 配,对来袭目标进行拦截. 设5驾飞机威胁程度值分别是:
35
72
21
13
8
C 语言程序设计
2012年12月7日
15
排序原理示意如下(n=5,第1轮,轮用i)
排序前 第1次(j=0) 第2次(j=1) 第3次(j=2) 第4次(j=3) 第1轮(i=1)
35
72
21
13
8
35
35 35
72
21
13
8
8 8
0<=j<n-i
21 72 13 21 13 72
35
35
21
21
13
13
8
8
72
72
2012年12月7日 16
排序前
C 语言程序设计
2012年12月7日 9
8.1
一维数组
8.1
一维数组
3.一维数组的初始化方式
在定义数组时,为数组元素赋初值 int stu[5]={61,72,93,84,55}; 等价于: (在编译阶段使之得到初值) stu[0]=61; stu[1]=72; stu[2]=93; stu[3]=84;stu[4]=55; 说明: (A)数组不初始化,其元素值为随机数; (B)只给部分数组元素赋初值; (C)当全部数组元素赋初值时,可不指定数组长度。 如 int stu[5]={61,72,93}; 等价于: stu[0]=61; stu[1]=72;stu[2]=93; stu[3]=0; stu[4]=0; int a[]={1,2,3,4,5,6}; 如编译系统自动根据初值个数确定数组维数 int stu[3]={61,72,83,95,41}; ()
38 C 语言程序设计
2012年12月7日
stu2
5
编程计算100个学生的平均成绩。 stu stu[100]
8.1
一维数组
0
4 void main() 8 { float stu1,stu2,stu3,stu4,stu5,…,stu100; 12 float aver,sum; … printf("\nenter 100 students grade:"); 396 scanf("%f,%f, %f",&stu1,&stu2,&stu3); scanf("%f,%f, %f",&stu4,&stu5,&stu6); ……. scanf("%f,%f, %f",&stu98,&stu99,&stu100); sum=stu1+stu2+stu3+stu4+stu5+stu6+…+stu100; aver=sum/100; printf("\n100 students aver:%f",aver); } C 语言程序设计
C 语言程序设计
2012年12月7日
()
()
7
8.1
一维数组
编程计算5个学生的平均成绩。
void main() for(j=0;j<5;j++) { float stu[5]; scanf(“%f”,&stu[j]); float sum ,aver; printf("\nenter 5 students grade:"); scanf("%f,%f,%f,%f,%f",&stu1,&stu2,&stu3, &stu4,&stu5); sum=stu1+stu2+stu3+stu4+stu5; aver=(float)sum/5; printf("\n5 students aver:%f",aver); } sum=stu[0]+stu[1]+stu[2]+stu[3]+stu[4];
C 语言程序设计
a[0] a[1] a[2] a[3] a[4] a[5]
编译时分配连续内存 内存字节数=数组维数* sizeof(元素数据类型)
2012年12月7日 3
8.1
注意:
(1)
一维数组
例 int i=15; int stu[i]; (不能用变量定义数组维数) 数组大小最好用宏来定义,以适应未来可能的变化 #define SIZE 10 int a[SIZE]; 数组大小定义好后,将永远不变 (2) 例 int data[5]; data[5]=10; (C语言对数组不作越界检查,使用时要 注意)
C 语言程序设计