一.问题描述
某个图像通过一个整数组成的n*n矩阵表示,其中每个整数表示一个像素值。写出一种方法, 根据flag变量的值将图像向右或者向左旋转90°。如果flag值为0,则向左旋转,如果flag为1,则向右旋转。函数rotatePictureMethod的输入分别由矩阵matrix、矩阵的维度n以及flag的值组成。函数应返回一个指向二维矩阵指针,该矩阵是按照flag值旋转后的结果矩阵而动态分配的。
二.问题分析
这道问题的主要难点是要为矩阵动态分配空间,因此需要对二级指针有一定的理解。
三.C语言代码
#include<stdio.h>
#include<stdlib.h>
void BuildArray(int n,int ***p)
{
int i;
*p=(int **)malloc(n*sizeof(int));
for(i=0;i<n;++i)
{
(*p)[i]=(int *)malloc(n*sizeof(int));
}//for
}//BuildArray,为矩阵分配空间
int **rotatePictureMethod(int **matrix,int n,int flag)
{
int **rotatedMatrix;
int i,j;//临时变量
BuildArray(n,&rotatedMatrix);//为rotatedMatrix矩阵分配空间
if(flag==0)
{
for(i=0;i<n;++i)
{
for(j=0;j<n;++j)
{
rotatedMatrix[i][j]=matrix[j][n-i-1];
}//for
}//for
}//if,左旋
else if(flag==1)
{
for(i=0;i<n;++i)
{
for(j=0;j<n;++j)
{
rotatedMatrix[i][j]=matrix[n-j-1][i];
}//for
}//for
}//if,右旋
return rotatedMatrix;
}//rotatePictureMethod,旋转
int main()
{
int n=0;//矩阵阶数
int **matrix,**rotatedMatrix;//rotatedMatrix用来接收返回的数组指针
int i,j;//临时变量
int flag;//旋转控制
printf("输入阶数n:");
scanf("%d",&n); //输入阶数
BuildArray(n,&matrix);//为matrix矩阵分配空间
printf("输入矩阵matrix:\n");
for(i=0;i<n;++i)
{
for(j=0;j<n;++j)
{
scanf("%d",&matrix[i][j]);
}//for
}//for,为matrix矩阵赋值
printf("输入旋转控制量flag:");
scanf("%d",&flag);//输入旋转控制量
rotatedMatrix=rotatePictureMethod(matrix,n,flag);
for(i=0;i<n;++i)
{
for(j=0;j<n;++j)
{
printf("%d\t",rotatedMatrix[i][j]);
}//for
printf("\n");
}//for,输出旋转后矩阵
system("pause");//暂停
return 0;
}//main