欢迎来到天天文库
浏览记录
ID:10833277
大小:204.05 KB
页数:37页
时间:2018-07-08
《第6章 (c语言) 指针》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、6.4.4指针与字符数组6.5指针的地址分配6.6指针数组[例6-13]上述程序也可采用指针变量作子程序的形式参数。#includemain(){ intsub_max(); intn,a[10],*ptr=a; intmax; for(n=0;n<=9;n++) scanf("%d",&a[n]); max=sub_max(ptr,10); printf("max=%d",max);}intsub_max(b,i)/*形式参数为指针变量*/int*b,i;{
2、 inttemp,j; temp=b[0];/*数组元素指针的下标法表示*/ for(j=1;j<=i-1;j++) if(temp
3、例6-14]上述程序的子程序中,数组元素还可以用指针表示。#includemain(){ intsub_max(); intn,a[10],*ptr=a; intmax; for(n=0;n<=9;n++) scanf("%d",&a[n]); max=sub_max(ptr,10); printf("max=%d",max);}intsub_max(b,i)/*子程序定义*/int*b,i;{ inttemp,j; temp=*b++; for(j=1;
4、j<=i-1;j++) if(temp<*b)temp=*b++; returntemp;} 在程序中,赋值语句temp=*b++;可以分解为:temp=*b;b++;两句,先作temp=*b;后作b++;程序的运行结果与上述完全相同。 对上面的程序作修改,在子程序中不仅找最大元素,同时还要将元素的下标记录下来。#includemain(){ int*max();/*函数声明*/ intn,a[10],*s,i; for(i=0;i<10;i++)/*输入数据*/
5、 scanf("%d",a+i); s=max(a,10);/*函数调用*/ printf("max=%d,index=%d",*s,s-a);}int*max(a,n)/*定义返回指针的函数*/ int*a,n;{ int*p,*t;/*p用于跟踪数组,t用于记录最大值元素的地址*/ for(p=a,t=a;p-a*t)t=p; returnt;} 在max()函数中,用p-a6、好是所跟踪元素相对数组头的距离,或者说是所跟踪元素相对数组头的元素个数,所以在main()中,最大元素的下标就是该元素的地址与数组头的差,即s-a。运行程序:1357924680max=9,index=4[例6-15]用指向数组的指针变量实现一维数组的由小到大的冒泡排序。编写三个函数用于输入数据、数据排序、数据输出。 在第5章的例题中,我们介绍过选择法排序及算法,此例再介绍冒泡排序算法。为了将一组n个无序的数整理成由小到大的顺序,将其放入一维数组a[0]、a[1]...a[n-1]。冒泡算法如下7、: (开序)①相邻的数组元素依次进行两两比较,即a[0]与a[1]比、a[1]与a[2]比...a[n-2]与a[n-1]比,通过交换保证数组的相邻两个元素前者小,后者大。此次完全的两两比较,能免实现a[n-1]成为数组中最大。②余下n-1个元素,按照上述原则进行完全两两比较,使a[n-2]成为余下n-1个元素中最大。③进行共计n-1趟完全的两两比较,使全部数据整理有序。 下面给出一趟排序的处理过程:原始数据3825第一次相邻元素比:3825第二次相邻元素比:3285第三次相邻元素比:32588、 4个元素进行3次两两比较,得到一个最大元素。若相邻元素表示为a[j]和a[j+1],用指针变量P指向数组,则相邻元素表示为*(P+j)和*(P+j+1)程序实现如下:#include#defineN10main(){ voidinput();/*函数声明*/ voidsort(); voidoutput(); inta[N],*p;/*定义一维数组和指针变量*/ input(a,N);/*数据输入函数调用,实参a是数组名*/ p=a;/*指针变量指
6、好是所跟踪元素相对数组头的距离,或者说是所跟踪元素相对数组头的元素个数,所以在main()中,最大元素的下标就是该元素的地址与数组头的差,即s-a。运行程序:1357924680max=9,index=4[例6-15]用指向数组的指针变量实现一维数组的由小到大的冒泡排序。编写三个函数用于输入数据、数据排序、数据输出。 在第5章的例题中,我们介绍过选择法排序及算法,此例再介绍冒泡排序算法。为了将一组n个无序的数整理成由小到大的顺序,将其放入一维数组a[0]、a[1]...a[n-1]。冒泡算法如下
7、: (开序)①相邻的数组元素依次进行两两比较,即a[0]与a[1]比、a[1]与a[2]比...a[n-2]与a[n-1]比,通过交换保证数组的相邻两个元素前者小,后者大。此次完全的两两比较,能免实现a[n-1]成为数组中最大。②余下n-1个元素,按照上述原则进行完全两两比较,使a[n-2]成为余下n-1个元素中最大。③进行共计n-1趟完全的两两比较,使全部数据整理有序。 下面给出一趟排序的处理过程:原始数据3825第一次相邻元素比:3825第二次相邻元素比:3285第三次相邻元素比:3258
8、 4个元素进行3次两两比较,得到一个最大元素。若相邻元素表示为a[j]和a[j+1],用指针变量P指向数组,则相邻元素表示为*(P+j)和*(P+j+1)程序实现如下:#include#defineN10main(){ voidinput();/*函数声明*/ voidsort(); voidoutput(); inta[N],*p;/*定义一维数组和指针变量*/ input(a,N);/*数据输入函数调用,实参a是数组名*/ p=a;/*指针变量指
此文档下载收益归作者所有