当前位置:首页 » 编程语言 » 数组的旋转c语言
扩展阅读
webinf下怎么引入js 2023-08-31 21:54:13
堡垒机怎么打开web 2023-08-31 21:54:11

数组的旋转c语言

发布时间: 2022-01-18 02:39:01

㈠ C/C++ c语言 二维数组 旋转 输出。


voidrotateArr(){

inttemp[ROW][COL],i,j,k;

for(i=0,j=COL-1;j>=0;i++,j--)

for(k=0;k<COL;k++)

{

temp[k][j]=arr[i][k];//temp作为临时数组,存放90度翻转后的arr数组

}

for(i=0;i<ROW;i++)

{

for(j=0;j<COL;j++)

{

printf("%5d",arr[i][j]=temp[i][j]);//把temp数组的内容逐个赋给arr数组,以改变arr数组的值,使得多次调用rotateArr函数时arr的值会不断改变

}

printf(" ");

}

printf(" ");

}

㈡ 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语言问题,数组翻转

做矩阵转置需要发现其中的规律。仔细分析之后就会知道:从最后一列开始,先输出最下面的元素,然后依次向上输出,该列输出完之后,输出前一列;知道元素全部输出。

下面是我写的代码和运行的结果:

#include<stdio.h>

intmain()

{

inta[100][100],n,i,j;

printf("请输入矩阵的维数:n=% ");

scanf("%d",&n);

printf("请输入矩阵中的元素: ");

for(i=0;i<n;i++)

{

for(j=0;j<n;j++)

{

scanf("%d",&a[i][j]);

}

}

printf("矩阵转置之后为: ");

for(j=n-1;j>=0;j--)

{

for(i=n-1;i>=0;i--)

{

printf("%d",a[i][j]);

}

printf(" ");

}

}

㈣ C语言的编程问题,是数组的旋转问题,有谁能够帮我找出我的错误在哪里并帮我改正,谢谢。

给数组进行顺时针90度旋转,先以左斜对角线为轴,对数组进行翻转,得到结果后,再上下翻转,就可以得到顺时针90度旋转的效果,逆时针同理
参考代码

#include<stdio.h>
#define N 5
void main(void)
{
int i,j,x,y,a[N][N],k=1;
printf("输入一个5*5方阵\n");
printf("转置前\n");
for(i=0; i<N; i++)
for(j=0; j<N; j++)a[i][j]=k++;
for(i=0; i<N; i++)
{
printf("\n");
for(j=0; j<N; j++)
printf("%5d",a[i][j]);
}
printf("\n");
for(i=0; i<N; i++)//以左斜对角线为轴进行翻转
{
for(j=0; j<N-i-1; j++)
{
x=a[i][j];
a[i][j]=a[N-j-1][N-1-i];
a[N-j-1][N-1-i]=x;
}
}
for(i=0; i<N/2; i++) //上下翻转
{
for(j=0; j<N; j++)
{
x=a[i][j];
a[i][j]=a[N-i-1][j];
a[N-i-1][j]=x;
}
}
printf("沿顺时针方向旋转九十度后:\n");
for(i=0; i<N; i++)
{
printf("\n");
for(j=0; j<N; j++)
printf("%5d",a[i][j]);
}
for(i=0; i<N; i++)//以右斜对角线为轴进行翻转
{
for(j=0; j<N; j++)
{
if(j>i)
{
x=a[i][j];
a[i][j]=a[j][i];
a[j][i]=x;
}
}
}
for(i=0; i<N/2; i++) //上下翻转
{
for(j=0; j<N; j++)
{
x=a[i][j];
a[i][j]=a[N-i-1][j];
a[N-i-1][j]=x;
}
}
printf("\n");
printf("沿逆时针方向旋转九十度后:\n");
for(i=0; i<N; i++)
{
printf("\n");
for(j=0; j<N; j++)
printf("%5d",a[i][j]);
}
printf("\n");
}

㈤ 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;

}

㈥ 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;
}

㈦ c语言,将二维数组绕一个角旋转90度 不借助第二数组,

可以,如果如不改写数组,你需要提供一个内联函数。
如果需要保存转置,你必须使用第二数组。
inline int zhuan(int* list,int n ,int newn, int newh){
newn++,newh++;
//n表示数组第一维元素个数,newn表示你调用的转置后的数组的横索引.
return list[(n-newn+1)+(newh-1)*n-1]
}
你试试吧:
int list[][]={{11,12,13,14},{21,22,23,24},{31,32,33,34},};
zhuan((int*)list,4,0,0);
获取转置后矩阵的第一个元素0,0;
------c 代码:
#include <stdio.h>
int list[][4]={11,12,13,14,21,22,23,24,31,32,33,34,};
inline int zhuan(int* list,int n ,int newn, int newh){
newn++,newh++;
//n表示数组第一维元素个数,newn表示你调用的转置后的数组的横索引.
return list[(n-newn+1)+(newh-1)*n-1];
}
using namespace std;
int main(){
int i=0;
int b=0;
int n=0;
for (;i<4;i++){
b=0;
for(;b<3;b++){
n++;
printf("%d,",zhuan((int*)list,4,i,b));
if(n>2){printf("\n");n=0;}
}
}
getchar();
}

㈧ c语言中把一维数组的内容翻转后输出。 不懂什么叫把数组的内容翻转。 翻转是什么意思是倒序存放吗

翻转应该就是n存到0,1存到n-1这样,就是倒序存放

㈨ c程序数组的转置

你的数组转置程序,主要有两个问题,

一 C语言二维数组的参数声明和传参不正确

二 二维数组的转置,只需要以主对角线为轴翻转一次就行了,

因此,transport函数中for_j循环的终止条件应该为j<i;

改正后的数组转置C语言程序如下(改动的地方见注释)

#include<stdio.h>

int main()

{

int a[3][3];

int i,j;

void transport(int a[][3]);//这里把返回值类型int改成void,把a[3][3]改成a[][3]

printf("input:");

for(i=0;i<3;i++)

for(j=0;j<3;j++)

{

scanf_s("%d",&a[i][j]);//这里建议把scanf_s改成scanf

}

transport(a);//这里把a[3][3]改成a

for(i=0;i<3;i++)

{//这里加大括号

for(j=0;j<3;j++)

printf("%3d",a[i][j]);

printf(" ");//这里加一句,换行

}//这里加大括号

return 0;

}

void transport(int a[][3])//这里把返回值类型int改成void,把a[3][3]改成a[][3]

{

int i,j,t;

for(i=0;i<3;i++)

for(j=0;j<i;j++)//这里把j<3;改成j<i;

{

t=a[i][j];

a[i][j]=a[j][i];

a[j][i]=t;

}

}

㈩ 题目用c是把一个数组旋转90度

绕4顺时针转,如有别的要求可留言

#include "stdio.h"
#define N 4
void main ()
{
int a[N][N]={1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16};
int b[N][N];
int i,j,t;
int (*p)[4]=a;
for(i=0;i<N;i++)
for(j=0;j<N;j++)
b[i][j]=p[N-j-1][i];
for(i=0;i<N;i++)
{
for(j=0;j<N;j++)
printf("%4d",b[i][j]);
printf("\n");
}
}

如果对你有所帮助,请记得采纳最佳答案,谢谢!