第5章 利用数组处理批量数据
7 二维数组表示矩阵----》转置
int a[3][4]= {{5,12,23,56},{19,28,37,46},{-12,-34,6,8}};
#include < iostream>
#include < iomanip>
using namespace std;
int main()
{
int a[3][4]= {{5,12,23,56},{19,28,37,46},{-12,-34,6,8}};
int b[4][3];
int i,j;
for(i=0;i<3;i++)
{
for(j=0;j<4;j++)
{
cout<<setw(5)<<a[i][j];
}
cout<<endl;
}
for(i=0;i<4;i++)
{
for(j=0;j<3;j++)
{
b[i][j]=a[j][i];
}
}
cout<<endl;
for(i=0;i<4;i++)
{
for(j=0;j<3;j++)
{
cout<<setw(5)<<b[i][j];
}
cout<<endl;
}
return 0;
}
方阵的转置
int a[4][4]= {{5,12,23,56},{19,28,37,46},{-12,-34,6,8},{54,7,35,-15 } };
#include < iostream>
#include < iomanip>
using namespace std;
int main()
{
int a[4][4]= {{5,12,23,56},{19,28,37,46},{-12,-34,6,8},{54,7,35,-15 } };
int i,j,t;
for(i=0;i<4;i++)
{
for(j=0;j<4;j++)
{
cout<<setw(5)<<a[i][j];
}
cout<<endl;
}
cout<<endl;
for(i=0;i<4;i++)
{
for(j=0;j<i;j++)
{
t=a[i][j];
a[i][j]=a[j][i];
a[j][i]=t;
}
}
for(i=0;i<4;i++)
{
for(j=0;j<4;j++)
{
cout<<setw(5)<<a[i][j];
}
cout<<endl;
}
return 0;
}
8 有一个3×4的矩阵,要求编程序求出其中值最大的那个元素的值,以及其所在的行号和列号。
int a[3][4]= {{5,12,23,56},{19,28,37,46},{-12,-34,6,8}};
#include < iostream>
#include < iomanip>
using namespace std;
int main()
{
int a[3][4]= {{5,12,23,56},{19,28,37,46},{-12,-34,6,8}};
int max,i,j,line,column;
max=a[0][0];
line=0;
column=0;
for(i=0;i<3;i++)
{
for(j=0;j<4;j++)
{
if(a[i][j]>max)
{
max=a[i][j];
line=i;
column=j;
}
}
}
cout<<“最大值为:”<<max<<endl;
cout<<“最大值所在行为:”<<line<<endl;
cout<<“最大值所在列为:”<<column<<endl;
return 0;
}
5.4 、 用数组作函数参数
1 用数组元素作函数实参(找出一维数组或二维数组的最大值)
int a[3][4]= {{5,12,23,56},{19,28,37,46},{-12,-34,6,8}};
#include < iostream>
#include < iomanip>
using namespace std;
int getmax(int x,int y);
int main()
{
int a[3][4]= {{5,12,23,56},{19,28,37,46},{-12,-34,6,8}};
int max,i,j ;
max=a[0][0];
for(i=0;i<3;i++)
{
for(j=0;j<4;j++)
{
max=getmax(max,a[i][j]);
}
}
cout<<“最大值为:”<<max<<endl;
return 0;
}
int getmax(int x,int y)
{
return x>y?x:y;
}
int a[10]={ 13,5,9, 11, 33, 6 ,-9 ,-76, 100, 23}
#include < iostream>
#include < iomanip>
using namespace std;
int getmax(int x,int y);
int main()
{
int a[10]={ 13,5,9, 11, 33, 6 ,-9 ,-76, 100, 23};
int max,i;
max=a[0];
for(i=0;i<10;i++)
{
max=getmax(max,a[i]);
}
cout<<“最大值为:”<<max<<endl;
return 0;
}
int getmax(int x,int y)
{
return x>y?x:y;
}
当使用数组元素作为实参时,与用普通变量,常量作实参时,在定义函数时没有区别。
2 用数组名作函数参数(传递数组名时,是否把所有元素都传过去了???)
如果 在函数中改变了数组元素的值。会影响调用函数中的数组吗?
编写一个函数输出一个数组所有元素。
当使用数组名作为函数参数时。并不是把数组中所有元素传递到函数中。只是传递的是一个地址。数组在内存中的首地址。在函数中处理的数据与调用者是一回事。
#include < iostream>
#include < iomanip>
using namespace std;
void dispArr(int x[10]);
void change(int x[10]);
int main()
{
int a[10]={ 13,5,9, 11, 33, 6 ,-9 ,-76, 100, 23};
dispArr(a);
change(a);
dispArr(a);
return 0;
}
void change(int x[10])
{
//在函数中将数组中每个元素加倍
int i;
for(i=0;i<10;i++)
{
x[i]*=2;
}
}
void dispArr(int x[10])
{
int i;
for(i=0;i<10;i++)
{
cout<<setw(5)<<x[i];
}
cout<<endl;
}
如果使用数组名做为函数的参数。调用者与被调用者(两个函数中)使用的是同一个数组。当在被调函数中对数组元素做了改变,会影响到调用者。
3 编写函数对数组进行选择排序(传递数组名就可以吗?尽量再传递一个数组的大小)
13 5 9 11 33 6 -9 -76 100 23
-76 5 9 11 33 6 -9 13 100 23
-76 -9 9 11 33 6 5 13 100 23
#include < iostream>
#include < iomanip>
using namespace std;
void dispArr(int x[10]);
void sort(int x[10]);
int main()
{
int a[10]= { 13,5,9, 11, 33, 6 ,-9 ,-76, 100, 23};
dispArr(a);
sort(a);
dispArr(a);
return 0;
}
void sort(int x[10])
{
int i,j,min,t;
for(i=0; i<9; i++)
{
min=i;//min记录最小值的下标
for(j=i; j<10; j++)
{
if(x[j]<x[min])
{
min=j;
}
}
t=x[i];
x[i]=x[min];
x[min]=t;
}
}
void dispArr(int x[10])
{
int i;
for(i=0; i<10; i++)
{
cout<<setw(5)<<x[i];
}
cout<<endl;
}
传递数组名时,只是一个首地址。函数中并不知道数组有多大,有几个元素。
4 实参为一维数组名,形参怎么写??要写数组大小吗?写上有意义吗?
形参也写成数组形式,只是数组大小 没有意义。因此在传递数组名的同时,尽量再传递一个参数作为数组的大小。
操作起来更灵活。
#include < iostream>
#include < iomanip>
using namespace std;
void dispArr(int x[],int n);
int main()
{
int a[10]= { 13,5,9, 11, 33, 6 ,-9 ,-76, 100, 23};
int b[5] ={45,54,32,57,92};
dispArr(a,10);
dispArr(b,5);//可使用同一个函数输出不同的数组
dispArr(a,5) ;//还可以使用函数输出部分数组
return 0;
}
//void dispArr(int x[10])//此处的10有意义吗?
void dispArr(int x[ ],int n)
{
int i;
for(i=0; i<n; i++)
{
cout<<setw(5)<<x[i];
}
cout<<endl;
}
5 二维数组名作为实参时,形参该如何写。(打印一个二维数组,求一个二维数组的最大值)。
int a[3][4]= {{5,12,23,56},{19,28,37,46},{-12,-34,6,8}};
实参为二维数组名时,形参也应该是一个二维数组名。
在形参处。行数没有意义。列数意义重大
在传递参数时,再传递一个参数表示行数。此函数可以处理列数相同的数组。
#include
#include
using namespace std;
void disp2dArr(int x[ ][4],int n) ;
int main()
{
int a[3][4]= {{5,12,23,56},{19,28,37,46},{-12,-34,6,8}};
int b[2][4]= {{34,56,12,75},{-54,-37,66,8}};
disp2dArr(a,3);
disp2dArr(b,2);
return 0;
}
//void disp2dArr(int x[3][4],int n) //列数必须写,行数可以不写
void disp2dArr(int x[ ][4],int n) //列数必须写,行数可以不写
{
int i,j;
for(i=0;i<n;i++)
{
for(j=0;j<4;j++)
{
cout<<setw(5)<<x[i][j];
}
cout<<endl;
}
}
#include < iostream>
#include < iomanip>
using namespace std;
void disp2dArr(int x[ ][4],int n) ;
int findMax(int x[][4],int n);
int main()
{
int a[3][4]= {{5,12,23,56},{19,28,37,46},{-12,-34,6,8}};
disp2dArr(a,3);
int m;
m=findMax(a,3);
cout<<m<<endl;
return 0;
}
int findMax(int x[][4],int n)
{
//二维数组的最大值
int max=x[0] [0];
int i,j;
for(i=0;i<n;i++)
{
for(j=0;j<4;j++)
{
if(max<x[i][j])
max=x[i][j];
}
}
return max;
}
//void disp2dArr(int x[3][4],int n) //列数必须写,行数可以不写
void disp2dArr(int x[ ][4],int n) //列数必须写,行数可以不写
{
int i,j;
for(i=0;i<n;i++)
{
for(j=0;j<4;j++)
{
cout<<setw(5)<<x[i][j];
}
cout<<endl;
}
}
724

被折叠的 条评论
为什么被折叠?



