内容正文:
任务
数组
任务描述
任务目标
学校计算机专业3个班级,每班五位同学参加C语言程序设计比赛,请编写程序把他(她)们的成绩从键盘输入,并且显示每班同学要求在班级中成绩从低到高输出,同时计算出班级平均分,将平均分输出到屏幕上。
1. 掌握一维数组的定义和使用。
2. 掌握二维数组的定义和使用。
3. 理解数组和字符串、字符串数组的联系。
4. 掌握简单常用字符数组的应用。
5. 掌握与数组有关的算法(如排序算法)。
项目三 处理大量同类型数据
知识储备
1
(1)定义一维数组:
int a[5]
【说明】:
① 数据类型是该数组全体元素的数据类型。
② 数组名的命名规则和变量名相同,遵循标识符命名规则。
③ 常量表达式的值为元素个数,即数组长度。例如a[5],表示数组有5个元素。
④ 下标是从0开始的。例如a[5]的5个元素分别为: a[0]、a[1]、a[2]、a[3]、a[4]。
⑤ 常量表达式可以是常量、符号常量,但不能包含变量,即不能对数组长度作动态定义。例如,以下定义数组的方式是不行的:
int i=5;
int a[i];
类型符 数组名[常量表达式]
1.一维数组
任务 数组
研发实力雄厚,较强的抄袭及超越功力
(2)引用一维数组:
引用数组,即引用其数组元素。
格式如下:
数组名[下标表达式]
下标表达式可以是常量或整型表达式。例如: a[3],a[2+2],a[8/4]
1.一维数组
【说明】 :
① 数组必须先定义,后使用。
② 定义数组时使用“数组名[常量表达式]”和引用数组元素时用到的“数组名[下标表达式]”在形式上相似,但是在含义和用法上却是不同的。如:
int a[5];/*定义数组长度为5*/
s=a[5]; /*引用a数组中序号为5的元素。*/
③ 只能单个引用数组元素而不能一次引用全部数组。例如:
int a[5];
pringf(“%d”,a); 错误
必须改为:
for(i=0;i<5;i++)
printf(“%d\t”,a[i]);
任务 数组
研发实力雄厚,较强的抄袭及超越功力
(3)一维数组的初始化:
方法一: 在定义数组时对全部数组元素赋初始值。如:
int a[5]={0,1,2,3,4} /*a[0]=0,a[1]=1,a[2]=2,a[3]=3,a[4]=4*/
方法二: 可以只给一部分元素赋值。如:
int a[5] ={0,1,2}/*a[0]=0,a[1]=1,a[2]=2,a[3]=0,a4[]=0*/
方法三: 在定义数组时不指定数组长度,系统根据数据的数量确定数组的长度。
int a[]={0,1,2,3} /*系统根据大括号中有4个数,判定a数组长度为4*/
1.一维数组
任务 数组
研发实力雄厚,较强的抄袭及超越功力
(4)排序:
① 冒泡排序:
第一趟: 首先比较第1个和第2个数,将小数放前,大数放后。然后比较第2个数和第3个数,将小数放前,大数放后,如此继续,直至比较最后两个数,将小数放前,大数放后。至此第一趟结束,将最大的数放到了最后。
第二趟: 仍从第一对数开始比较(可能由于第2个数和第3个数的交换,使得第1个数不再小于第2个数),将小数放前,大数放后,一直比较到倒数第二个数(倒数第一的位置上已经是最大的),第二趟结束。在倒数第二的位置上得到一个新的最大数(其实在整个数列中是第二大的数)。
如此下去,重复以上过程,直至最终完成排序。
1.一维数组
任务 数组
研发实力雄厚,较强的抄袭及超越功力
② 选择排序:
设有n个数据要排序,每次选出1个满足条件的,经过n-1次就选好了n-1个数据,而剩下的最后一个数自然排好了,所以n个数排序共需要n-1步。具体步骤是:
第1步在第1 ~ n个数中找出最小(最大)数,然后和第1个数交换,前1个数排好。
第2步在第2 ~ n个数中找出最小(最大)数,然后和第2个数交换,前2个数排好。
……
第j步在第j ~ n个数中找出最小(最大)数,然后和第j个数交换,前j个数排好。
……
第n-1步在第n-1 ~ n个数(即最后2个数)中找出最小(最大)数,然后和第n-1个数交换,第n个自然排好,排序结束。
1.一维数组
任务 数组
研发实力雄厚,