⑴ 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(" ");
}
}
這種旋轉矩形的,個人建議生成一維數組,用指針指向改數組,再用指針來賦值;也可生成二維數組,再定義數組指針來指向,這樣稍麻煩一些些。