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 這個問題就是高中解析幾何的旋轉問題。或者圖形學里的二維圖形旋轉問題