A. c語言中如何運用指針將4*4數組的每一個元素順時針或逆時針旋轉一個位置
#include<stdio.h>
#include<malloc.h>
intmain()
{
intn,i,j,k,temp1,temp2,line,row;
int**p=NULL;
printf("請輸入矩陣維數:");
scanf("%d",&n);
if((p=(int**)malloc(sizeof(int*)*(n+1)))==NULL)
{
printf("分配內存失敗!!! ");
return1;
}
for(i=0;i<n;i++)
{
if((p[i]=(int*)malloc(sizeof(int)*(n+1)))==NULL)
{
printf("分配內存失敗!!! ");
return1;
}
}
for(i=0,k=1;i<n;i++)
{
for(j=0;j<n;j++)
{
p[i][j]=k++;
}
}
printf("初始矩陣 ");
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
{
printf("%-4d",p[i][j]);
}
printf(" ");
}
//把矩陣旋轉的思路就是每次最旋轉一圈,直至旋轉至最內層
for(i=0,j=0,k=1;k<=n*n;i++,j++)
{
temp1=p[i+1][j];//用temp1保存將要被賦值的那個位置的數值,防止這個位置的數值被賦值後,原數據丟失
for(row=j;row<n-j;row++,k++)//最外面一層上面的行賦值
{
temp2=p[i][row];
p[i][row]=temp1;
temp1=temp2;
}
for(line=i+1;line<n-i;line++,k++)//最外面一層右面的列賦值
{
temp2=p[line][n-j-1];
p[line][n-j-1]=temp1;
temp1=temp2;
}
for(row=n-j-2;row>=j;row--,k++)//最外面的一層下面的行賦值
{
temp2=p[n-i-1][row];
p[n-i-1][row]=temp1;
temp1=temp2;
}
for(line=n-i-2;line>=i+1;line--,k++)//最外面的一層左面的列賦值
{
temp2=p[line][j];
p[line][j]=temp1;
temp1=temp2;
}
}
if(n%2!=0)//加入是奇數階矩陣,最中心的一個數要賦值
p[(n-1)/2][(n-1)/2]=temp1;
printf("旋轉之後的矩陣 ");
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
{
printf("%-4d",p[i][j]);
}
printf(" ");
}
for(i=0;i<n;i++)
{
free(p[i]);
p[i]=NULL;
}
free(p);
p=NULL;
return0;
}
B. 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. 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;
}
D. c語言圖象模式編程問題
先把畫圖邏輯抽象出來,變為2維數組。0為沒有方塊的地方,1為有方塊的地方,這樣你就可以通過給一個方塊坐標(以左上角還是右下角作為形狀的原點自己選),通過判斷數組是否過界以及數組元素是否為1來判斷是否能放這個方塊,大致就是這樣
--------------------------------------
旋轉不一樣么?固定占幾個格子是知道的吧?就計算這個矩形框內有沒有其他的為1的點,如果有,就不讓轉唄
E. c語言編程魔方陣順時針旋轉90度編程怎麼寫 例如: 8 1 6 3 5 7 4 9 2 旋轉90度
總的矩陣:[a,a]
某一個點:[i, j]
[0,0] -> [0,a] [0,a] -> [a,a] [a,a] -> [a,0] [a,0] -> [0,0]
其它的:[i, j] -> [j, a-i]
F. 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;
}
G. 圖形C可看做是圖形B繞()點順時針方向旋轉()
1.圖形B可以看作是圖形A繞點(Q)順時針方向旋轉(90度),又向(下)平移(2)個格得到的.2.圖形C可以看作是圖形B繞點(O)順時針方向旋轉(90度),又向(左)平移(2)個格得到的.3.圖形D可以看作是圖形C繞點(I)順時針方向旋轉(90度),又向(上)平移(2)個格得到的.
H. C語言編程。編寫一個實現將3*3的二維數組表示的方陣進行順時針旋轉90°函數rotate(),並編寫主函數驗證之
#include "stdlib.h"
void rotate(int (*a)[3])
{
int i,j;
int temp[3][3];
for (i=0;i<3;i++)
{
for (j=0;j<3;j++)
temp[j][2-i]=a[i][j];
}
for (i=0;i<3;i++)
{
for (j=0;j<3;j++)
a[i][j]= temp[i][j];
}
}
main()
{
int i,j;
int a[3][3]= {11,22,33, 44,55,66, 77,88,99};
rotate(a);
printf(「after transform\n」);
for (i=0;i<3;i++)
{
for (j=0;j<3;j++)
printf(「%d\t」,a[i][j]);
}
I. 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;
}
}
J. 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;
}
//運行示例: