題目
/* 實驗內容:
輸入是16個整數,存放到4*4的二維數組中,用冒泡法按從大到小的順序進行排序,
然后輸出。要求輸入、排序、輸出各個環節都要用到指向數組的指針,
其中排序環節交換數據要求用自定義的swap(int *p1,int *p2)函數實現。*/
切入點
知識點:其實n維數組都是以一位數組的方式存儲的,所以我們就可以用一維數組的方法法解決n維數組的排序問題
解決方案
#include <stdio.h>
void swap(int *p1,int *p2);
int main()
{
int num[4][4];
int (*p)[4]=num;
int col,row;
//輸入
for(row=0;row<4;row++)
{
for(col=0;col<4;col++)
{
scanf("%d",(*(p+row)+col));
}
}
/*
for(int i=0;i<16;i++)
{
printf("%d ",*(*num+i));
}*/
//打印輸入
printf("輸入結果:\n");
for( row=0;row<4;row++)
{
for(int col=0;col<4;col++)
{
printf("%d ",*(*(num+row)+col) );
}
printf("\n");
}
//排序
for(int i=0;i<15;i++)
for(int j=0;j<15-i;j++)
{
// < 則是從大到小
if( *(*num+j) > *(*num+j+1))
swap((*num+j),(*num+j+1));
}
printf("輸出結果:\n");
for( row=0;row<4;row++)
{
for(int col=0;col<4;col++)
{
printf("%d ",*(*(num+row)+col) );
}
printf("\n");
}
return 0;
}
void swap(int *p1,int *p2)
{
int p;
p = *p1;
*p1 = *p2;
*p2 = p;
}