⑴ c语言的矩阵翻转
#include<stdio.h>
intmain(){
intM,N,T;
scanf("%d%d%d",&M,&N,&T);
intmat[M][N];
printf("请输入原始矩阵: ");
for(inti=0;i<M;i++){
for(intj=0;j<N;j++){
scanf("%d",&mat[i][j]);
}
}
printf("原矩阵为: ");
for(inti=0;i<M;i++){
for(intj=0;j<N;j++){
printf("%d",mat[i][j]);
}
printf(" ");
}
inttemp=0;
if(T==0){
printf("左右翻转后: ");
for(inti=0;i<M;i++){
for(intj=0;j<N/2;j++){
temp=mat[i][j];
mat[i][j]=mat[i][N-j-1];
mat[i][N-j-1]=temp;
}
}
for(inti=0;i<M;i++){
for(intj=0;j<N;j++){
printf("%d",mat[i][j]);
}
printf(" ");
}
}
if(T==1){
printf("上下翻转后: ");
for(inti=0;i<M/2;i++){
for(intj=0;j<N;j++){
temp=mat[i][j];
mat[i][j]=mat[N-i-1][j];
mat[N-i-1][j]=temp;
}
}
for(inti=0;i<M;i++){
for(intj=0;j<N;j++){
printf("%d",mat[i][j]);
}
printf(" ");
}
}
return0;
}
⑵ C语言矩阵逆时针旋转
把最后的printf(" %d",a[i][j]);改成printf(" %d",b[i][j]); -----------------------------------------------------------#include<stdio.h>main(){int i,j,a[3][3]={{1,2,3},{4,5,6},{7,8,9}},b[3][3];for(i=0;i<=2;i++){for(j=0;j<=2;j++)printf(" %d",a[i][j]);printf("\n");}printf("\n");for(i=0;i<3;i++) {for(j=0;j<3;j++) </p><p>b[j][i]=a[i][2-j];<br> }for(i=0;i<=2;i++){for(j=0;j<=2;j++)</p><p>printf(" %d",b[i][j]);</p><p>printf("\n");</p><p>}getchar();}
⑶ 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语言矩阵逆时针翻转(先输入两个整数,一个是矩阵阶数,一个是翻转次数)
#include <stdio.h>
#include <stdlib.h>
//显示数据
void Print(int **a,int m)
{
int i,j;
for(i=0;i<m;i++)
{
for(j=0;j<m;j++)
printf("%3d",a[i][j]);
printf("\n");
}
}
void main(void)
{
int m,n;//阶数和逆转次数
int i,j;
int **a;//原数组
int **b;//逆转后数组
scanf("%d%d",&m,&n);
if(m<=0||n<=0)
return;
//分配内存
a=(int**)malloc(sizeof(int*)*m);
b=(int**)malloc(sizeof(int*)*m);
if((a==NULL) || (b==NULL))
return;
for(i=0;i<m;i++)
{
a[i]=(int*)malloc(sizeof(int)*m);
b[i]=(int*)malloc(sizeof(int)*m);
if((a==NULL) || (b==NULL))
return;
}
//录入数据
for(i=0;i<m;i++)
for(j=0;j<m;j++)
scanf("%d",&a[i][j]);
//显示数据:原数组
//Print(a,m);
//4种状态
n=n%4;
switch (n)
{
case 0://不变
Print(a,m);
break;
case 1://逆旋一次
for (i=0;i<m;i++)
for(j=0;j<m;j++)
{
b[m-1-j][i]=a[i][j];//对应关系
}
Print(b,m);
break;
case 2://逆旋二次
for (i=0;i<m;i++)
for(j=0;j<m;j++)
{
b[m-1-i][m-1-j]=a[i][j];
}
Print(b,m);
break;
case 3://逆旋三次
for (i=0;i<m;i++)
for(j=0;j<m;j++)
{
b[j][m-1-i]=a[i][j];
}
Print(b,m);
break;
}
//释放内存
for(i=0;i<m;i++)
{
free(a[i]);
free(b[i]);
}
free(a);
free(b);
}
⑸ 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>
intmain()
{
intm,n,t,i,j;
scanf("%d%d",&m,&n);
inta[m][n];//定义一个mxn矩阵
for(i=0;i<m;i++)//矩阵输入
{
for(j=0;j<n;j++)
{
scanf("%d",&a[i][j]);
}
}
scanf("%d",&t);
if(t==1)//水平翻转
{
for(i=0;i<m;i++)
{
for(j=n-1;j>=0;j--)//每列倒序输出
{
if(j!=0)
{
printf("%d",a[i][j]);
}
else
{
printf("%d",a[i][j]);//当循环至每列末尾时,不输出空格
}
}
printf(" ");//每行输出完后回车
}
}
else//竖直翻转
{
for(i=m-1;i>=0;i--)//倒序输出每行
{
for(j=0;j<n;j++)
{
if(j!=n-1)
{
printf("%d",a[i][j]);
}
else
{
printf("%d",a[i][j]);//当循环至每列末尾时,不输出空格
}
}
printf(" ");
}
}
return0;
}
⑺ 旋转矩阵 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语言矩阵翻转求助。。。。
int a[M][N] 由于M,n未知,所以不能这样定义,一般都是取稍微大于最大值。如
a[202][202]
⑼ 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;
}
⑽ 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(" ");
}
}
这种旋转矩形的,个人建议生成一维数组,用指针指向改数组,再用指针来赋值;也可生成二维数组,再定义数组指针来指向,这样稍麻烦一些些。