❶ c语言怎么旋转一个矩阵
#include<stdio.h>
int main()
{int i,j,t,n,a[20][20];
scanf("%d",&n);
for(i=0;i<n;i++)
{for(j=0;j<n;j++)
{a[i][j]=i*n+j+1;
printf("%3d",a[i][j]);
}
printf(" ");
}
printf(" ");
for(i=0;i<=n/2;i++)
for(j=i;j<n-i-1;j++)
{t=a[i][j];
a[i][j]=a[j][n-1-i];
a[j][n-1-i]=a[n-1-i][n-1-j];
a[n-1-i][n-1-j]=a[n-1-j][i];
a[n-1-j][i]=t;
}
for(i=0;i<n;i++)
{for(j=0;j<n;j++)
printf("%3d",a[i][j]);
printf(" ");
}
return 0;
}
❷ 旋转矩阵 C语言
试试吧 这个是我自己在网吧写的
#include <stdio.h>
#include <malloc.h>
void main(){
int m;
int n;
char *p;
scanf("%d",&m);
scanf("%d",&n);
p=(int *)malloc(sizeof(char)*m*n);
for(int i=0;i<m*n;i++)
p[i]='\0';
int x=0,y=0;
int state=0;
for(int i=0;i<m*n;i++){
p[x*m+y]='A'+(char)(i%26);
switch(state){
case 0:
y++;
if(y>=n||p[x*n+y]!='\0'){
state=1;
y--;
x++;
}
break;
case 1:
x++;
if(x>=n||p[x*n+y]!='\0'){
state=2;
x--;
y++;
}
break;
case 2:
y--;
if(y<0||p[x*n+y]!='\0'){
state=3;
y++;
x--;
}
break;
case 3:
x--;
if(x<0||p[x*n+y]!='\0'){
state=0;
x++;
y++;
}
break;
}
}
for(int i=0;i<m*n;i++){
printf("%c",p[i]);
if(i%n==n-1){
printf("\n");
}
}
}
❸ c语言 二维数组的顺时针旋进
以下是我3年前编写的程序,当时也是为了考计算机二级时娱乐一下写的,你可以参考一下;你的题目是要6阶矩阵,不过我的程序是9x9,你只需要简单地修改一下就行了,这个你就自己学习一下了,毕竟全给你弄好也不利于你的学习。
特别注意:请输入go回车显示旋进输出。
#include<stdio.h>
#include<string.h>
voidmain(void)
{
charab[]="go",ac[56];
inta[9][9];
inth=0,i,j;
intleft=9,right=0,up=0,down=9;
for(i=0;i<9;i++)
{
for(j=0;j<9;j++)
{
a[i][j]=h;
h++;
}
}
for(i=0;i<9;i++)
{
for(j=0;j<9;j++)
{
printf("%2d",a[i][j]);
}
putchar(' ');
}
printf("9x9矩阵顺时针内螺旋方式输出已就绪,请指示:");
loop:
gets(ac);
if(0==strcmp(ac,ab))
{
for(i=0,j=0;(left!=up-1)||(right!=down+1);)
{
for(;j<down;)
{
printf("%2d",a[i][j]);
j++;
}
down--;
putchar(' ');
for(i=right+1,--j;i<left;)
{
printf("%2d",a[i][j]);
i++;
}
left--;
putchar(' ');
for(j=down-1,--i;j>up-1;)
{
printf("%2d",a[i][j]);
j--;
}
up++;
putchar(' ');
for(i=left-1,++j;i>right;)
{
printf("%2d",a[i][j]);
i--;
}
++i;
right++;
putchar(' ');
j++;
}
}
else
{
printf("对不起,您输入的“%s”为无效字段! ",ac);
printf("请再次输入:");
gotoloop;
}
}
❹ 将下面矩阵分别按顺时针90度,逆时针90度,和旋转180度,打印出来
#include"stdio.h"
voidmain()
{
inta[5][6]={1,3,4,2,5,2,
2,3,6,3,8,3,
2,9,7,9,4,8,
6,3,8,1,9,3,
9,3,5,2,8,5,};
ints90[6][5],ni90[6][5],x180[5][6];
inti,j;
printf("顺时针旋转90度矩阵为: ");
for(i=0;i<6;i++)
{
for(j=0;j<5;j++)
{
s90[i][j]=a[4-j][i];
printf("%2d%",s90[i][j]);
}
printf(" ");
}
printf("逆时针旋转90度矩阵为: ");
for(i=0;i<6;i++)
{
for(j=0;j<5;j++)
{
s90[i][j]=a[j][5-i];
printf("%2d%",s90[i][j]);
}
printf(" ");
}
printf("旋转180度矩阵为: ");
for(i=0;i<5;i++)
{
for(j=0;j<6;j++)
{
s90[i][j]=a[4-i][5-j];
printf("%2d%",s90[i][j]);
}
printf(" ");
}
}
❺ C语言矩阵问题
顺时针旋转,(xa, ya) 坐标变换: xb = ya; yb = (n-1)- xa;
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char* argv[]) {
int i,j,xa,ya,xb,yb,n;
int *p,*q;
printf("输入n:");
scanf("%d", &n);
p = (int*) malloc(sizeof(int) * n*n);
q = (int*) malloc(sizeof(int) * n*n);
for (i=0;i<n;i++) {
for (j=0;j<n;j++) {
*(p+i*n+j) = i*n+j+1;
}
}
for (i=0;i<n;i++) {
for (j=0;j<n;j++) {
printf("%4d ", *(p+i*n+j));
}
printf("\n");
}
printf("\n");
//旋转90度
for (i=0;i<n*n;i++) {
xa= i/n; ya= i%n;
xb = ya; yb = n-1-xa;
*(q + xb*n+yb) = *(p+i);
}
printf("顺时针旋转90---------------------------------------------\n");
for (i=0;i<n;i++) {
for (j=0;j<n;j++) {
printf("%4d ", *(q+i*n+j));
}
printf("\n");
}
printf("\n");
free(p);
free(q);
return 0;
}
❻ c语言中矩阵的旋转问题.
#include<stdio.h>
main()
{inta[3][3]={{11,12,13},{14,15,22},{23,24,25}};
inti,j,t;
printf("原来的矩阵为: ");
for(i=0;i<3;i++)
{for(j=0;j<3;j++)
printf("%d ",a[i][j]);
printf(" ");}
for(i=0;i<2;i++)
for(j=0;j<=2-i;j++)
{t=a[i][j];
a[i][j]=a[2-i][2-j];
a[2-i][2-j]=t;}
printf("旋转后的矩阵为: ");
for(i=0;i<3;i++)
{for(j=0;j<3;j++)
printf("%d ",a[i][j]);
printf(" ");}
}
RUN:
❼ C语言求助大神二阶顺时针旋转90度输出
#include<stdio.h>
#defineN4//宏定义数组界限,可根据实际情况更改
intmain(){
inti,j,t,a[N][N];
for(i=0;i<N;i++)
for(j=0;j<N;j++)
scanf("%d",&a[i][j]);//读取矩阵
for(i=0;i<N;i++)
for(j=0;j<=i;j++)
{t=a[i][j];a[i][j]=a[j][i];a[j][i]=t;}
for(j=0;j<N/2;j++)
for(i=0;i<N;i++)
{t=a[i][j];a[i][j]=a[i][N-j-1];a[i][N-j-1]=t;}//实现顺时针方向旋转矩阵90度
for(i=0;i<N;i++){
printf(" ");
for(j=0;j<N;j++)
printf("%4d",a[i][j]);//输出旋转后的矩阵
}
return0;
}
//运行示例:
❽ c语言中旋转矩阵的问题
这个题用链表做相当简单了。。。 做一个循环链表
❾ C语言如何编写旋转矩阵源代码
这里以顺时针旋转90°为例:
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#defineN4
voidmain()
{
inti,j;
inta[N*N],b[N][N];//这里设置旋转为4*4的矩形,自己在这里改成其它的矩形
int*p=a;//用指针来指向这个一维数组。这样在旋转赋值的时候会轻松很多
srand(time(NULL));
for(i=0;i<N*N;i++)
{
a[i]=rand()%100;//随机生成0~99
printf("%d ",a[i]);
if((i+1)%4==0)
printf(" ");
}
for(i=N-1;i>=0;i--) //旋转赋值,这里可修改旋转的方向和角度
for(j=0;j<N;j++,p++)
b[j][i]=*p;
printf("顺时针旋转90度后: ");
for(i=0;i<N;i++)
{for(j=0;j<N;j++)
printf("%d ",b[i][j]);
printf(" ");
}
}
这种旋转矩形的,个人建议生成一维数组,用指针指向改数组,再用指针来赋值;也可生成二维数组,再定义数组指针来指向,这样稍麻烦一些些。