文档介绍:为了解决比较复杂的问题,本章介绍C语言提供的一种最简单的构造类型──数组及应用。
1维数组的定义和引用
2维数组的定义和引用
字符数组与字符串
数组作为函数参数
线性表
栈
队列
第5章数据的顺序存储结构及应用
上一章
返回目录
下一章
1维数组的定义和引用
1维数组的定义
1维数组元素的引用
1维数组元素的初始化
1维数组应用举例
1维数组的定义
[] 从键盘上任意输入10个整数,要求按从小到大的顺序在屏幕上显示出来。
排序的方法有很多,本题采用冒泡法。
冒泡法的基本思想:通过相邻两个数之间的比较和交换,使排序码(数值)较小的数逐渐从底部移向顶部,排序码较大的数逐渐从顶部移向底部。就像水底的气泡一样逐渐向上冒,故而得名。
由A[n]~A[1]组成的n个数据,进行冒泡排序的过程可以描述为:
(1)首先将相邻的A[n]与A[n-1]进行比较,如果A[n]的值小于A[n-1]的值,则交换两者的位置,使较小的上浮,较大的下沉;接着比较A[n-1]与A[n-2],同样使小的上浮,大的下沉。依此类推,直到比较完A[2]和A[1]后,A[1]为具有最小排序码(数值)的元素,称第一趟排序结束。
(2)然后在A[n]~A[2]区间内,进行第二趟排序,使剩余元素中排序码最小的元素上浮到A[2];重复进行n-1趟后,整个排序过程结束。
/*案例代码文件名:*/
/*功能:从键盘上任意输入n个整数,用冒泡法按从小到大地排序,并在屏幕上显示出来。*/
#include ""
#define NUM 10 /*定义符号常量(数据个数N)*/
main()
{ int data[NUM]; /*定义1个1维整型数组data*/
int i,j,temp; /*定义循环变量和临时变量*/
clrscr(); /*库函数clrscr():清屏*/
printf("Please input 10 numbers:\n");
for(i=0; i<NUM; i++)
scanf("%d", &data[i]);
/*冒泡法排序*/
for(i=0; i<NUM-1; i++) /*外循环:控制比较趟数*/
for(j=NUM-1; j>i; j--) /*内循环:进行每趟比较*/
if(data[j]<data[j-1]) /*如果data[j]大于data[j-1],交换两者的位置*/
{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]);
getch(); /*等待键盘输入任一字符,目的使程序暂停*/
}
数组同变量一样,也必须先定义、后使用。
1维数组是只有1个下标的数组,定义形式如下:
数据类型数组名[常量表达式][, 数组名2[常量表达式2]……];
(1)“数据类型”是指数组元素的数据类型。
(2)数组名,与变量名一样,必须遵循标识符命名规则。
(3)“常量表达式”必须用方括号括起来,指的是数组的元素个数(又称数组长度),它是一个整型值,其中可以包含常数和符号常量,但不能包含变量。
注意:C语言中不允许动态定义数组。
特别说明:在数组定义时,“常量表达式”外的方括号;以及元素引用时,“下标表达式”外的方括号,都是C语言语法规则所要求的,不是本书所约定的可选项的描述符号!
(4)数组元素的下标,是元素相对于数组起始地址的偏移量,所以从0开始顺序编号。
(5)数组名中存放的是一个地址常量,它代表整个数组的首地址。同一数组中的所有元素,按其下标的顺序占用一段连续的存储单元。
数组元素的引用
引用数组中的任意一个元素的形式:
数组名[下标表达式]
1.“下标表达式”可以是任何非负整型数据,取值范围是0~(元素个数-1)。
特别强调:在运行C语言程序过程中,系统并不自动检验数组元素的下标是否越界。因此在编写程序时,保证数组下标不越界是十分重要的。
,实质上就是1个变量,它具有和相同类型单个变量一样的属性,可以对它进行赋值和参与各种运算。
,数组作为1个整体,不能参加数据运算,只能对单个的元素进行处理。
1维数组元素的初始化
初始化格式:
数据类型数组名[常量表达式]={初值表}
(1)如果对数组的全部元素赋以初值,定义时可以不指定数组长度