c语言编程 将一个随机输入的4*4二维数组逆时针旋转90度后以4行4列输出

如题... 如题 展开
 我来答
White_MouseYBZ
2017-07-17 · TA获得超过4万个赞
知道大有可为答主
回答量:2.1万
采纳率:82%
帮助的人:6694万
展开全部

直观的算法是动态申请一个同样大小的二维数组,将旋转结果存入,然后再拷贝到原数组并释放临时数组。之所以要动态申请,是考虑到数组较大时别让这个临时用一下的中间数组永久占用内存空间。代码如下:

#include "stdio.h"
#include "stdlib.h"
#define N 4
int main(int argc,char *argv[]){
int m[N][N],i,j,*p,**q;
p=(int *)malloc(sizeof(int)*N*N);//按一维数组申请临时空间以便于释放
q=(int **)malloc(sizeof(int *)*N);//另申请一个一维指针数组空间
if(!p || !q){
printf("Application memory failure, exit...\n");
return 0;
}
for(j=i=0;i<N;q[i++]=p+j,j+=N);//将指针数组空间组织成二维数组
printf("Please enter data for 2 dimensional array...\n");
for(i=0;i<N;i++){//向二维数组m输入数据并输出
for(j=0;j<N;j++){
scanf("%d",m[i]+j);
printf("%d\t",m[i][j]);
}
printf("\n");
}
for(i=0;i<N;i++)
for(j=0;j<N;q[N-1-j++][i]=m[i][j]);//旋转结果存入临时空间
printf("\nAfter the rotation:\n");
for(i=0;i<N;i++){
for(j=0;j<N;printf("%d\t",m[i][j++]=q[i][j]));//将结果复制到m并输出
printf("\n");
}
free(p);//释放临时空间
free(q);//释放指针空间
return 0;
}

运行样例如下:

百度网友db1f22d
2010-11-01 · TA获得超过294个赞
知道答主
回答量:83
采纳率:0%
帮助的人:66万
展开全部
#include<stdio.h>
int main()
{
int a[4][4];
for(int i=0;i<4;i++)
for(int j=0;j<4;j++)
scanf("%d",&a[3-j][i]);

for(int i=0;i<4;i++)
{
for(int j=0;j<4;j++)
printf("%d\t",a[i][j]);
printf("\n");
}
}
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式