正文

C++ 入门 第5章  例5.6 用函数处理例5.5。2008-09-22 10:18:00

【评论】 【打印】 【字体: 】 本文链接:http://blog.pfan.cn/yzrj/38433.html

分享到:

  算法和例5.5是一样的,今设一函数max_value,用来进行比较并返回结果。可编写程序如下: #include <iostream> using namespace std; int main( ) { int max_value(int x,int max);                //函数声明    int i,j,row=0,colum=0,max    int a[3][4]={{5,12,23,56},{19,28,37,46},{-12,-34,6,8}};  //数组初始化       max=a[0][0];    for (i=0;i<=2;i++)      for (j=0;j<=3;j++) { max=max_value(a[i][j],max);          //调用max_value函数 if(max==a[i][j])                     //如果函数返回的是a[i][j]的值 {row=i;                            //记下该元素行号i   colum=j;                          //记下该元素列号j       } }    cout<<″max=″<<max<<″,row=″<<row<<″,colum=″<<colum<<endl;   } int max_value(int x,int max)         //定义max_value函数 {if(x>max) return x;               //如果x>max,函数返回值为x else return max;                  //如果x≤max,函数返回值为max   }   2. 用数组名作函数参数   可以用数组名作函数参数,此时实参与形参都用数组名(也可以用指针变量,见第6章)。 例5.7 用选择法对数组中10个整数按由小到大排序。 所谓选择法就是先将10个数中最小的数与a[0]对换;再将a[1]到a[9]中最小的数与a[1]对换……每比较一轮,找出一个未经排序的数中最小的一个。共比较9轮。 根据此思路编写程序如下: #include <iostream> using namespace std; int main( ) {void select_sort(int array[],int n);             //函数声明  int a[10],i;  cout<<″enter the originl array:″<<endl;   for(i=0;i<10;i++)                                //输入10个数    cin>>a[i];  cout<<endl;  select_sort(a,10);                              //函数调用,数组名作实参  cout<<″the sorted array:″<<endl;  for(i=0;i<10;i++)                               //输出10个已排好序的数    cout<<a[i]<<″  ″;  cout<<endl;  return 0; } void select_sort(int array[],int n)              //形参array是数组名 {int i,j,k,t;  for(i=0;i<n-1;i++) {k=i;      for(j=i+1;j<n;j++)                           if(array[j]<array[k]) k=j;  t=array[k];array[k]=array[i];array[i]=t; } }   运行情况如下: enter the originl array: 6 9 -2 56 87 11 -54 3 0 77↙                 //输入10个数 the sorted array: -54 -2 0 3 6 9 11 56 77 87 关于用数组名作函数参数有两点要说明: (1) 如果函数实参是数组名,形参也应为数组名(或指针变量,关于指针见第5章),形参不能声明为普通变量(如int array;)。实参数组与形参数组类型应一致(现都为int型),如不一致,结果将出错。 (2) 需要特别说明的是: 数组名代表数组首元素的地址,并不代表数组中的全部元素。因此用数组名作函数实参时,不是把实参数组的值传递给形参,而只是将实参数组首元素的地址传递给形参。 形参可以是数组名,也可以是指针变量,它们用来接收实参传来的地址。如果形参是数组名,它代表的是形参数组首元素的地址。在调用函数时,将实参数组首元素的地址传递给形参数组名。这样,实参数组和形参数组就共占同一段内存单元。见图5.6。   在用变量作函数参数时,只能将实参变量的值传给形参变量,在调用函数过程中如果改变了形参的值,对实参没有影响,即实参的值不因形参的值改变而改变。而用数组名作函数实参时,改变形参数组元素的值将同时改变实参数组元素的值。在程序设计中往往有意识地利用这一特点改变实参数组元素的值。 实际上,声明形参数组并不意味着真正建立一个包含若干元素的数组,在调用函数时也不对它分配存储单元,只是用array[]这样的形式表示array是一维数组名,以接收实参传来的地址。因此array[]中方括号内的数值并无实际作用,编译系统对一维数组方括号内的内容不予处理。形参一维数组的声明中可以写元素个数,也可以不写。   函数首部的下面几种写法都合法,作用相同。 void select_sort(int array[10],int n)     //指定元素个数与实参数组相同 void select_sort(int array[],int n)            //不指定元素个数 void select_sort(int array[5],int n)       //指定元素个数与实参数组不同 在学习第6章时可以进一步知道,C++实际上只把形参数组名作为一个指针变量来处理,用来接收从实参传过来的地址。前面提到的一些现象都是由此而产生的。

阅读(2013) | 评论(1)


版权声明:编程爱好者网站为此博客服务提供商,如本文牵涉到版权问题,编程爱好者网站不承担相关责任,如有版权问题请直接与本文作者联系解决。谢谢!

评论

暂无评论
您需要登录后才能评论,请 登录 或者 注册