重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
#include stdio.h
网站建设哪家好,找创新互联建站!专注于网页设计、网站建设、微信开发、成都微信小程序、集团企业网站建设等服务项目。为回馈新老客户创新互联还提供了昆山免费建站欢迎大家使用!
#include stdlib.h
#include malloc.h
#define m 3 /* row */
#define n 4 /* column */
int **creat2d(int mm,int nn);//声明一下子函数
void main()
{
int i,j;
int **s;
s=creat2d(m,n);
for(i=0;im;i++)
{
for(j=0;jn;j++)
{
s[i][j]=i*2+j;//s当做二维数组使用
printf("s[%d][%d]=%d ",i,j,s[i][j]);
}
printf("\n");
}
for(i=0;im;i++)//先free掉m个行指针
{
free(s[i]);
s[i]=NULL;//free之后要置为null,防止野指针
}
free(s);
s=NULL;//防止野指针
}
int **creat2d(int mm,int nn)
{
int **a;
int j;
a=(int**)malloc(sizeof(int*)*mm);//mm个行
for(j=0;jmm;j++)
a[j]=(int*)malloc(sizeof(int*)*nn);//每行nn个数
return a;
}
void get_val(int array[][200], int m, int n, int *max, int *min)
{
int i, j;
for(*max = array[0][0], *min= array[0][0], j = 0; j m; j++){
for(i = 0; i n; i++){
if(*max array[j][i]){
*max = array[j][i];
}
if(*min array[j][i]){
*min = array[j][i];
}
}
}
}
int main(int argc, char *argv[])
{
int array_test[100][200];
int j, i, max, min;
for(j = 0; j 100; j++){
for(i = 0; i 200; i++){
array_test[j][i] = i*j;
}
}
get_val(array_test, 100, 200, max, min);
printf("max:%d,min:%d\n",max,min);
}
编译通过并通过测试,另外还可以通过指针传递:
void get_val(int *array, int m, int n, int *max, int *min)
{
int i, j;
for(*max = *array, *min= *array, j = 0; j m; j++){
for(i = 0; i n; i++){
if(*max *(array+j*n+i)){
*max = *(array+j*n+i);
}
if(*min *(array+j*n+i)){
*min = *(array+j*n+i);
}
}
}
}
另外,虚机团上产品团购,超级便宜
在子函数申请二维数组,主函数使用,可以用动态申请。
方法不止一种,我这里用指针的指针实现二维数组。
二维数组除了行列,本身地址也是连续的,从第一行第一列的元素地址++,可以取出所有元素。所以我这里先申请了完整的连续地址。
#includestdio.h
#includemalloc.h
int ** sr(void)
{
int i,j;
int *memory=(int *)malloc(sizeof(int)*9);//申请完整的连续内存地址3*3
int **arr=(int **)malloc(sizeof(int*)*3);//申请二维数组行指针数组(也就是二维数组)
if(!memory || !arr){
printf("内存申请错误!\n");return NULL;}
for(i=0,j=0;i9;i+=3)//将连续地址按列数,取出每行首地址,赋值给二维数组元素
arr[j++]=memory[i];
for(i=0;i3;i++)
for(j=0;j3;j++)
scanf("%d",arr[i][j]);
return arr;
}
int main(void)
{
int i,j,**arr=sr();
if(!arr)
return 1;
printf("---主函数调用子函数定义的二维数组---\n");
for(i=0;i3;i++,printf("\n"))
for(j=0;j3;j++)
printf("%d ",arr[i][j]);
printf("\n---实现二维数组地址连续性---\n");
int *p=arr[0][0];
while(p=arr[2][2])
printf("%d ",*p++);
return 0;
}
把if(b[n][m]=b[n][m+1])
break;去掉就行了。不过你的代码输不出你要的结果的,你要输出最大的元素是吗。是的话,看下下面的代码,下面的才能够找到数组的最大值:
#includestdio.h
void fun(int b[4][4])
{
int n,m,t,max,c=0,d=0;
max=b[0][0];
for(n=0;n4;n++)
for(m=0;m4;m++)
{ if(maxb[n][m])
{
t=b[n][m];
max=b[n][m];
b[n][m]=max;
c=n;
d=m;
}
}
printf("最大的是b[%d][%d]%d\n",c,d,b[c][d]);
}
int main()
{
int i,j,a[4][4];
for(i=0;i4;i++)
for(j=0;j4;j++)
scanf("%d",a[i][j]);
for(i=0;i4;i++)
for(j=0;j4;j++)
printf("a[%d][%d]=%d\n",i,j,a[i][j]);
printf("\n");
fun(a);
}
//December 10,2014 By 12952010
#includestdio.h
#define row 3
#define column 3
int sort(int array[][column]){//冒泡排序
int temp,j,i;
int arr[row*column];
int k=0;
for(i=0; irow; i++)
for( j=0; jcolumn ; j++){
arr[k++]= array[i][j];
}
for(i=0;irow*column-1;i++)
for(j=0;jrow*column-i-1; j++)
if(arr[j+1]arr[j]){
temp=arr[j];
arr[j]=arr[j+1];
arr[j+1]=temp;
}
for(i=0 ,k=0; irow; i++)
for( j=0; jcolumn ; j++){
array[i][j]=arr[k++];
}
}
void show(int array[][column] ){//显示数组元素
for( int i=0 ; i row; i++ ) {
printf("\n");
for(int j=0; jcolumn; j++){
printf(" %4d ",array[i][j]);
}
}
}
void display(int array[][column]){//逆序输出
for(int i=row-1;i=0;i--){
printf("\n");
for(int j=column-1;j=0;j--)
printf(" %4d ",array[i][j]);
}
}
void setting(int array[][column]){//初始化数组
int temp=10;
for( int i=0; irow; i++ ){
for( int j=0; jcolumn; j++)
array[i][j]=temp--;
}
}
int main(){
int array[row][column];
setting(array);
printf("\n\n-------Befor sort---------\n");
show(array);
printf("\n\n-------逆序输出---------\n");
display(array);
printf("\n\n-------After sort---------\n");
sort(array);
show(array);
return 0;
}