给一个二维数组,用函数使它“翻转”一下。
#include <stdio.h>
#define M 10
#define N 10
#define O 20
void input (int a[][N],int m,int n);
void swap (int a[][N],char c[O],int m,int n);
int strcmp(char *a, char *b);
void output (int a[][N],int m,int n);
void input (int a[][N],int m,int n)
{
int i,j;
for (i=0;i<m;i++)
for (j=0;j<n;j++)
scanf ("%d",&a[i][j]);
printf ("原数组为:\n");
for (i=0;i<m;i++)
{
for (j=0;j<n;j++)
printf ("%d\t",a[i][j]);
printf ("\n");
}
}
int strcmp(char *a,char *b)
{
while(*a!='\0'&&*b!='\0')
{
if(*a<*b)
return -1;
else if(*a>*b)
return 1;
else
{
a++;
b++;
}
}
if(*a=='\0'&&*b=='\0')
return 0;
if(*a=='\0')
return -1;
if(*b=='\0')
return 1;
}
void swap (int a[][N],char c[O],int m,int n)
{
int i,j,t;
char c_1[O]="上下",c_2[O]="左右",c_3[O]="沿对角线";
if(strcmp(c,c_1) == 0)
{
for (i=0;i<m/2;i++)
{
for (j=0;j<n;j++)
{
t=a[i][j];
a[i][j]=a[m-i-1][j];
a[m-1-i][j]=t;
}
}
}
if(strcmp(c,c_2) == 0)
{
for (j=0;j<n/2;j++)
{
for (i=0;i<m;i++)
{
t=a[i][j];
a[i][j]=a[i][n-j-1];
a[i][n-j-1]=t;
}
}
}
if(strcmp(c,c_3) == 0)
{
for (i=0;i<m-1;i++)
for (j=0;j<n-1;j++)
{
t=a[i][j];
a[i][j]=a[m-j-1][n-i-1];
a[m-j-1][n-i-1]=t;
}
}
}
void output (int a[][N],int m,int n)
{
int i,j;
for (i=0;i<m;i++)
{
for (j=0;j<n;j++)
printf ("%d\t",a[i][j]);
printf ("\n");
}
}
main ()
{
int a[M][N],m,n;
char c[O];
printf ("请输入行数:");
scanf ("%d",&m);
printf ("请输入列数:");
scanf ("%d",&n);
printf ("\n");
printf ("请选择反转方式(上下/左右/沿对角线):\n");
scanf ("%s",c);
printf ("\n");
printf ("请输入数组:");
input (a,m,n);
swap (a,c,m,n);
printf ("反转后为:\n");
output (a,m,n);
}
以上使用了函数、字符串&字符串的比较(字符串a>字符串b返回1,a<b返回-1,a==b返回0)。
运行结果为:
上下“翻转”
左右“翻转”
沿主对角线“翻转”,建议选择n*n阶数组来翻转,否则将出现错误。
欸嘿~