1. 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;
}
2. 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;
}
3. 编程,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;
}
4. 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;
}
5. 用c语言编程三角形绕一点旋转九十度怎么做
A(ax, ay) B(bx, by) C(cx, cy) 移动后A(ax0, ay0)...
1)ax = r*cosα ay = r*sinα
ax0 = r*cos(α+90) ay0=r*sin(α+90) 用三角函数展开就ok了
2)旋转90度就是坐标点从一个象限旋转到另一个象限,先判断正负,再将横纵坐标交换并根据正负情况乘以-1或者1 这个问题就是高中解析几何的旋转问题。或者图形学里的二维图形旋转问题
6. C语言中怎样将一个三行四列的二维数组 逆时针旋转90°啊,帮帮忙啊
下面程序的功能是将一个 3 行 4 列的数组进行逆时针旋转 90 度后输出,要求原始数组的数据随机输入,新数组以 4 行 3 列的方式输出。
主要涉及知识点:二维数组的输入及输出、循环嵌套与二维数组的结合、输出的格式控制。
代码实现:
#include<stdio.h>
intmain(){
inta[3][4],b[4][3],i,j;/*a存放原始数组数据,b存放旋转后数组数据*/
printf("input16numbers:");
/*输入一组数据存放到数组a中,然后旋转存放到b数组中*/
for(i=0;i<3;i++){
for(j=0;j<4;j++){
scanf("%d",&a[i][j]);
printf("%6d",a[i][j]);
b[3-j][i]=a[i][j];
}
printf(" ");
}
printf("arrayb: ");
for(i=0;i<4;i++){
for(j=0;j<3;j++)
printf("%6d",b[i][j]);
printf(" ");
}
return0;
}
7. 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
8. 输入n*n的字符矩阵,把它旋转90度后输出用c语言写,拜托了,急啊!!
你这个其实是打了5行,没有赋值的,其中1,3行没有内容,所以是空格。要想没有空格,if(i%2==1){printf("\n");}只要偶数行,就没有空格。
9. c语言编程 将一个随机输入的4*4二维数组逆时针旋转90度后以4行4列输出
直观的算法是动态申请一个同样大小的二维数组,将旋转结果存入,然后再拷贝到原数组并释放临时数组。之所以要动态申请,是考虑到数组较大时别让这个临时用一下的中间数组永久占用内存空间。代码如下:
#include"stdio.h"
#include"stdlib.h"
#defineN4
intmain(intargc,char*argv[]){
intm[N][N],i,j,*p,**q;
p=(int*)malloc(sizeof(int)*N*N);//按一维数组申请临时空间以便于释放
q=(int**)malloc(sizeof(int*)*N);//另申请一个一维指针数组空间
if(!p||!q){
printf("Applicationmemoryfailure,exit... ");
return0;
}
for(j=i=0;i<N;q[i++]=p+j,j+=N);//将指针数组空间组织成二维数组
printf("... ");
for(i=0;i<N;i++){//向二维数组m输入数据并输出
for(j=0;j<N;j++){
scanf("%d",m[i]+j);
printf("%d ",m[i][j]);
}
printf(" ");
}
for(i=0;i<N;i++)
for(j=0;j<N;q[N-1-j++][i]=m[i][j]);//旋转结果存入临时空间
printf(" Aftertherotation: ");
for(i=0;i<N;i++){
for(j=0;j<N;printf("%d ",m[i][j++]=q[i][j]));//将结果复制到m并输出
printf(" ");
}
free(p);//释放临时空间
free(q);//释放指针空间
return0;
}
运行样例如下:
10. 用c语言编程三角形绕一点旋转九十度怎么做
A(ax, ay) B(bx, by) C(cx, cy) 移动后A(ax0, ay0)... 1)ax = r*cosα ay = r*sinα ax0 = r*cos(α+90) ay0=r*sin(α+90) 用三角函数展开就ok了 2)旋转90度就是坐标点从一个象限旋转到另一个象限,先判断正负,再将横纵坐标交换并根据正负情况乘以-1或者1 这个问题就是高中解析几何的旋转问题。或者图形学里的二维图形旋转问题