㈠ 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语言编程题 将M*M的矩阵按顺时针旋转90度
顺时针旋转90度不就是矩阵的转置吗?行和列交换就可以了。
#include<stdio.h>
#define
M
3
void
main()
{
int
a[M][M],b[M][M];
int
i,j;
printf("输入矩阵a:\n");
for(i=0;i<M;i++)
for(j=0;j<M;j++)
scanf("%d",&a[i][j]);
printf("转置前的矩阵:\n");
for(i=0;i<M;i++)
{
for(j=0;j<M;j++)
printf("%d
",a[i][j]);
printf("\n");
}
printf("\n转置后的矩阵:\n");
for(i=0;i<M;i++)
{
for(j=0;j<M;j++)
{
b[i][j]=a[j][i];
printf("%d
",b[i][j]);
}
printf("\n");
}
}
运行结果:
输入矩阵a:
1
2
3
4
5
6
7
8
9
转置前的矩阵:
1
2
3
4
5
6
7
8
9
转置后的矩阵:
1
4
7
2
5
8
3
6
9
Press
any
key
to
continue
㈢ c++将矩阵顺时针旋转90度
你到底要逆时针还是顺时针
顺时针的,转置一下,水平翻转一下就好了
逆时针的,转置一下,垂直翻转一下就好了
#include <stdio.h>
#include <stdlib.h>
#define N 4
void show(int a[N][N]) {
int i, j;
for (i = 0; i < N; i++) {
for (j = 0; j < N; j++) {
printf("%3d", a[i][j]);
}
printf("\n");
}
printf("--\n");
}
int main()
{
int a[N][N];
int i, j, t = 1;
for (i = 0; i < N; i++) {
for (j = 0; j < N; j++) {
a[i][j] = t++;
}
}
show(a);
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;
}
}
show(a);
/* 这是顺时针水平翻转的,注意不能与下面垂直翻转的同时运行,不然就水平翻一下,垂直又翻一下了
for (i = 0; i < N; i++) {
for (j = 0; j < N/2; j++) {
t = a[i][j];
a[i][j] = a[i][N-1-j];
a[i][N-1-j] = t;
}
}
show(a);*/
for (i = 0; i < N; i++) {
for (j = 0; j < N/2; j++) {
t = a[j][i];
a[j][i] = a[N-1-j][i];
a[N-1-j][i] = t;
}
}
show(a);
return 0;
}
㈣ C++输入一个n*n的字符矩阵,把它左转90度后输出.
1、矩阵的转置就是矩阵的行与列的转换。
2、矩阵左转90度就是把现有矩阵每一行向左转90角变成列形成的新矩阵,也就是整个矩阵逆时针转90度后得到矩阵。
3、C++示例,程序中为避免手动输入字符的麻烦,只输入n,字符由随机数产生。
#include<iostream>
#include<cstdlib>
#definernd(x)(rand()%x);
usingnamespacestd;
intmain(intargc,char*argv[])
{
charc[50][50];
intn,i,j;
isr:
cout<<"inputn,2=<n<=25"<<endl;
cin>>n;
if(n<2||n>50)gotoisr;
for(i=0;i<n;i++){
for(j=0;j<n;j++){
c[i][j]=97+rnd(25);
cout<<c[i][j];
}
cout<<endl;
}
cout<<endl;
for(i=n-1;i>=0;i--){
for(j=0;j<n;j++){
cout<<c[j][i];
}
cout<<endl;
}
cout<<endl<<endl;
getchar();
return0;
}
㈤ 编程,c或c++,将一个二维数组顺时针旋转90度。
#include<stdio.h>
#define N 4
int a[N][N]={{1,2,3,4},{5,6,7,8},{9,10,11,12},{13,14,15,16}};
void prt()
{int i,j;
for(i=0;i<N;i++)
{
for(j=0;j<N;j++)
printf("%4d",a[i][j]);
printf(" ");
}
}
int main()
{int i,j,k,t;
printf("原来的数组: ");
prt();
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;
}
printf(" 顺时针旋转90度后的数组: ");
prt();
getch();
return 0;
}
㈥ c语言,怎么将一个n行,每行m个数的矩形数组矩阵逆时针转动90度啊
#include<stdio.h>
#define M 3
#define N 5
int main(void)
{
int a[N][M],left[M][N],right[M][N];
int i,j,k;
for(i=0;i<N;i++)
{
printf(“请输入第%d行%d个整数:”,i+1,M);
for(j=0;j<M;j++)scanf(“%d”,&a[i][j]);
}
printf(“原始数组:\n”);
for(i=0;i<N;i++)
{
for(j=0;j<M;j++)
{
printf(“%5d”,a[i][j]);
left[j][i]=right[j][i]=a[i][j];
}
putchar('\n');
}
for(i=0;i<M/2;i++)
for(j=0;j<N;j++)
{
k=left[i][j];
left[i][j]=left[M-i][j];
left[M-i][j]=k;
}
for(i=0;i<M;i++)
for(j=0;j<N/2;j++)
{
k=right[i][j];
right[i][j]=right[i][N-j];
right[i][N-j]=k;
{
printf(“左转90度:\n”);
for(i=0;i<M;i++)
{
for(j=0;j<N;j++)printf(“%5d”,left[i][j]);
putchar('\n');
}
printf(“右转90度:\n”);
for(i=0;i<M;i++)
{
for(j=0;j<N;j++)printf(“%5d”,right[i][j]);
putchar('\n');
}
return 0;
}
㈦ C语言实现矩阵逆时针旋转90度,代码调试!!!!
局部变量数组a太大了,
方法1:要么把M改小,
#include <stdio.h>
#include <stdlib.h>
#define M 100
void Rotation(int a[M][M],int m,int n)
{
int tem[M][M];
int i,j,k = 0;
for(j=n-1;j>=0;j--)
{
for(i=0;i<m;i++)
tem[k][i] = a[i][j];
k++;
}
for(i=0;i<n;i++)
for(j=0;j<m;j++)
a[i][j] = tem[i][j];
}
int main()
{
int m,n;
int i,j;
int a[M][M];
scanf("%d %d",&m,&n);
for(i=0;i<m;i++)
for(j=0;j<n;j++)
scanf("%d",&a[i][j]);
Rotation(a,m,n);
for(i=0;i<n;i++)
{
for(j=0;j<m;j++)
printf("%d ",a[i][j]);
printf(" ");
}
return 0;
}
====================================================
2. 方法2:
要么把a和tem改为全局变量
#define M 1000
int tem[M][M];
void Rotation(int a[M][M],int m,int n)
{
int i,j,k = 0;
for(j=n-1;j>=0;j--)
{
for(i=0;i<m;i++)
tem[k][i] = a[i][j];
k++;
}
for(i=0;i<n;i++)
for(j=0;j<m;j++)
a[i][j] = tem[i][j];
}
int a[M][M];
int main()
{
int m,n;
int i,j;
scanf("%d %d",&m,&n);
for(i=0;i<m;i++)
for(j=0;j<n;j++)
scanf("%d",&a[i][j]);
Rotation(a,m,n);
for(i=0;i<n;i++)
{
for(j=0;j<m;j++)
printf("%d ",a[i][j]);
printf(" ");
}
return 0;
}
㈧ 输入n*n的字符矩阵,把它旋转90度后输出用c语言写,拜托了,急啊!!
你这个其实是打了5行,没有赋值的,其中1,3行没有内容,所以是空格。要想没有空格,if(i%2==1){printf("\n");}只要偶数行,就没有空格。
㈨ 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(" ");
}
}
这种旋转矩形的,个人建议生成一维数组,用指针指向改数组,再用指针来赋值;也可生成二维数组,再定义数组指针来指向,这样稍麻烦一些些。
㈩ 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;
}