㈠ 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");
}
}
如果对你有所帮助,请记得采纳最佳答案,谢谢!