[计算机软件及应用]第6章数组g.pptVIP

  • 2
  • 0
  • 约1.95万字
  • 约 60页
  • 2018-03-04 发布于浙江
  • 举报
[计算机软件及应用]第6章数组g

例1: void main() { int a[6]; printf(%d\n,sizeof(a)); printf(%x\n,a); printf(%p\n,a+1); } 数组排序 对于数据处理工作,排序是其最基本的运算之一。为了提高计算机的工作效率,人们提出了各种各样的排序方法和算法。 所谓排序是,就是整理表中的记录,使之按关键字递增(或递减)次序排列起来。常用的排序算法有:冒泡法、选择法、插入法、快速排序法、堆排序法、归并排序法等。本节主要介绍冒泡法和选择法。 思考题 冒泡法除了从上到下相邻两个元素的比较外,还可以从下到上相邻两个元素的比较。模仿该例,给出从下到上相邻两个元素的比较的冒泡算法。 6.5 把 数组传递给函数 1。数组元素作函数实参——值传递 数组名的本质如下: 1)数组名指代一种数据结构,这种数据结构就是数组;  例如: char str[10]; printf(“%d\n”, sizeof(str));   输出结果为10,str指代数据结构char[10]。 2) 数组名可以转换为指向其指代实体的指针,而且是一个指针常量,不能作自增、自减等操作,不能被修改; char str[10]; str++; //编译出错 void Func ( char str[100])//与(char *str)一样 { printf(%d,sizeof( str )); } void main() { char *p = (char *) malloc( 100 ); printf(%d\n,sizeof ( p ) ); Func(p); } Windows NT 32位平台下,指针的长度(占用内存的大小)为4字节,故sizeof( str ) 、sizeof ( p ) 都为4。 const关键字至少有下列n个作用: (1)欲阻止一个变量被改变,可以使用const关键字。在定义该const变量时,通常需要对它进行初始化,因为以后就没有机会再去改变它了; (2)对指针来说,可以指定指针本身为const,也可以指定指针所指的数据为const,或二者同时指定为const; (3)在一个函数声明中,const可以修饰形参,表明它是一个输入参数,在函数内部不能改变其值; 常见错误 ① 数组下标越界,如, int a[10],i; for(i=0;i=10;i++) scanf(%d,a[i]); 由于a定义有10个元素,下标为0─9,当i为10时,实际上scanf形式为 scanf(%d,a[10]); 而数组a中根本没有a[10]这个元素,所以这次接收输入是错误的。C 语言本身对下标越界不做检查,因此在发生这种错误时,程序可能会继续运行, 而把错误带到程序的其他地方。 ② 数组整体赋值。如: int a[10],b[10]; b=a; 这是错误的,C语言不允许对数组作整体的操作,如果想把a的值赋给b,需要用循环来实现,如 for(i=0;i10;i++) b[i]=a[i]; 同样也不能用scanf一次接收一个数组的值,如 scanf(%,a);//是错误的。 作业 11,15,32,35,38 2。数组名作函数参数 地址传递 在主调函数与被调函数分别定义数组,且类型应一致 形参数组大小(多维数组第一维)可不指定 形参数组名是地址变量 例 求学生的平均成绩 #include stdio.h float average(const int stu[10], int n); void main() { int score[10], i; float av; printf(Input 10 scores:\n); for( i=0; i10; i++ ) scanf(%d, score[i]); av=average(score,10); printf(Average is:%.2f, av); } float average(const int stu[10], int n) { int i; float av,total=0; for( i=0; in; i++ ) total += stu[i]; av = total/n; return av; } 避免原来的数组被修改 . . 2 1 0 9 score 56 23 12 …. …. 88 stu 例 数组排序----简单选择排序 void sort(int array[],int n) {

文档评论(0)

1亿VIP精品文档

相关文档