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;
}
//运行示例: