Ⅰ 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語言,怎麼將一個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度
你到底要逆時針還是順時針
順時針的,轉置一下,水平翻轉一下就好了
逆時針的,轉置一下,垂直翻轉一下就好了
#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或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語言怎麼旋轉一個矩陣
#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語言求助大神二階順時針旋轉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語言二維數組通過指針旋轉90度
//初始的二維數組:
//1234
//5678
//9101112
//13141516
//順時針轉90度後的二維數組:
//13951
//141062
//151173
//161284
#include<stdio.h>
//#include<stdlib.h>//該頭文件暫時不用
//#include<string.h>//該頭文件暫時不用
#defineN4
//原代碼inta[N][N];//放在這里定義,二維數組a屬於全局變數
//將二維數組通過指針旋轉90度(順時針轉90度)
voidproc(intbuf[N][N],intn)
{
inti,j,t;
int*parr;//指向int類型的指針
parr=&buf[0][0];//將二維數組看成一維數組
for(i=0;i<=n-1;i++)
{
for(j=i;j<n-i-1;j++)
{
t=*(parr+i*n+j);
*(parr+i*n+j)=*(parr+(n-1-j)*n+i);
*(parr+(n-1-j)*n+i)=*(parr+(n-1-i)*n+n-1-j);
*(parr+(n-1-i)*n+n-1-j)=*(parr+j*n+n-1-i);
*(parr+j*n+n-1-i)=t;
}
}
}
voidOutput(inta[N][N])//輸出二維數組
{
inti,j;
for(i=0;i<N;i++)
{
for(j=0;j<N;j++)
{
printf("%4d",a[i][j]);
}
printf(" ");
}
}
intmain()//原代碼voidmain()
{
//N的數值不大,二維數組a可放在函數main里定義,作為局部變數
inta[N][N];
inti,j,c=0;
for(i=0;i<N;i++)
{
for(j=0;j<N;j++)
{
a[i][j]=++c;
}
}
Output(a);
printf(" ");
//原代碼proc(&a[N][N],N);
proc(a,N);
Output(a);
return0;
}
Ⅷ 輸入n*n的字元矩陣,把它旋轉90度後輸出用c語言寫,拜託了,急啊!!
你這個其實是打了5行,沒有賦值的,其中1,3行沒有內容,所以是空格。要想沒有空格,if(i%2==1){printf("\n");}只要偶數行,就沒有空格。
Ⅸ 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語言二維數組元素怎麼「順時針旋轉」,如圖
#include"stdio.h"
int main()
{int i,j,n,t,a[20][20];
int c;
scanf("%d",&n);
for(i=0;i<n;i++)
{for(j=0;j<n;j++)
{a[i][j]=n*i+j+1;
printf("%3d",a[i][j]);
}
printf(" ");
}
printf("After: ");
for(i=0;i<n-1;i++)
for(j=i;j<n-1-i;j++)
{t=a[i][j];
a[i][j]=a[n-1-j][i];
a[n-1-j][i]=a[n-1-i][n-1-j];
a[n-1-i][n-1-j]=a[j][n-1-i];
a[j][n-1-i]=t;
}
for(i1=0;i1<n;i1++)
{for(j1=0;j1<n;j1++)
printf("%3d",a[i1][j1]);
printf(" ");
}
return 0;
}