⑴ 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<iostream>
usingnamespacestd;
intmain(){
inti,j,a[4][4];
for(i=0;i<4;i++)
for(j=0;j<4;j++)
cin>>a[i][j];
for(j=3;j>=0;j--)
{
for(i=0;i<4;i++)
{
cout.width(10);
cout<<a[i][j];
}
cout<<endl;
}
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;
}
⑷ 用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 这个问题就是高中解析几何的旋转问题。或者图形学里的二维图形旋转问题
⑸ 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(" ");
}
}
这种旋转矩形的,个人建议生成一维数组,用指针指向改数组,再用指针来赋值;也可生成二维数组,再定义数组指针来指向,这样稍麻烦一些些。
⑹ 用c语言实现将bmp图片(黑白单色)进行任意角度旋转。求高手给完整代码。
typedef int (WINAPI ICEPUB_IMGCIRCUMGYRATE)(char *strImgFilename,char *strBmpFilename,int radian);
ICEPUB_IMGCIRCUMGYRATE *icePub_imgCircumgyrate = 0;
HINSTANCE hDLLDrv = LoadLibrary("icePubDll.dll");
if(hDLLDrv)
{
icePub_imgCircumgyrate=(ICEPUB_IMGCIRCUMGYRATE *)GetProcAddress(hDLLDrv,"icePub_imgCircumgyrate");
}
if(icePub_imgCircumgyrate)
{
icePub_imgCircumgyrate("a.jpg","a1.bmp",45);
icePub_imgCircumgyrate("d.png", "d1.bmp",120);
}
if(hDLLDrv)
FreeLibrary(hDLLDrv);
⑺ C语言画图——关于旋转图形和定位图形
你可以这样做。比如有一个图形为三角形,在七巧板的中,它可能有8种状态,然后分别画出8种状态的图形,当你激活它的旋转程序后,就换一张另一个状态的图形。
或者写一个函数,参数为各个顶点的座标,旋转的时候通过计算,找到新状态的各个顶点的座标,这样也可以。
⑻ C语言中如何将一个正方形矩阵旋转45度
首先确定绕那一点旋转,让后确定各点的坐标,也就是三个点,YC'=-XC*sin(45)
⑼ 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语言实现旋转
怎样用C语言实现旋转
#include <stdio.h>
void main()
{
int M;
int N;
int flag=0;
int num1=0;
int num2=1;
int i=0;
int j=0;
char str='A';
char Array[31][31];
printf("请输入矩阵的行M和矩阵的列N:");
scanf("%d%d",&M,&N);
Array[0][0]=str;
while(flag < M*N-1)
{
switch(num2%4)
{
case 1:
++j;
if(j == N-num1-1)
{
num2++;
}
break;
case 2:
++i;
if(i == M-num1-1)
{
num2++;
}
break;
case 3:
--j;
if(j == num1)
{
num2++;
}
break;
case 0:
--i;
if(i == num1+1)
{
num2++;
num1++;
}
break;
}
if(++str == 'Z'+1)
str='A';
Array[i][j]=str;
flag++;
}
for(i=0;i<M;i++)
{
for(j=0;j<N;j++)
{
printf("%c ",Array[i][j]);
}
printf("\n");
}
}