1003:图像旋转(C语言描述)

一.问题描述

某个图像通过一个整数组成的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
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值