C语言实现数组的循环左移,右移,翻转的示例

数组结合指针可以实现很多有趣的功能,比如下面这个程序:

假设数组为 : 12345

如果左移一次即为:23451 ,依次类推

如果右移一次即为:51234 ,依次类推

翻转则为:54321

我们来实现下这个程序:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define NR(x) (sizeof(x)/sizeof(x[0]))
//数组左移
int buffer_left_move(int *buffer , int buf_len)
{
	int i ;
	char tmp = buffer[0];
	for(i = 1 ; i < buf_len ; i++)
	{
		buffer[i-1] = buffer[i] ;
	}
	buffer[buf_len-1] = tmp ;
}
//数组右移
int buffer_right_move(int *buffer , int buf_len)
{
	int i ;
	char tmp = buffer[buf_len - 1];
	for(i = buf_len ; i > 0 ; i--)
	{
		buffer[i] = buffer[i-1] ;
	}
	buffer[0] = tmp ;
}
//数组翻转
int buffer_turn_over(int *buffer , int buf_len)
{
	int size = buf_len ;
	int i , tmp;
	for(i = 0 ; i < size/2 ; i++)
	{
		tmp = buffer[i] ;
		buffer[i] = buffer[size-1-i] ;
		buffer[size-1-i] = tmp;
	}
}
//打印数组
void print_buffer(int *buffer, int buf_len)
{
	int i ;
	system("cls");
	printf("please input \'a' or \'b' or \'w' \n");
	for(i = 0 ; i < buf_len ; i++)
	{
		printf("%d",buffer[i]);
	}
	putchar('\n');
}

int main(void)
{
	int buffer[5] = {1,2,3,4,5} ;

	print_buffer(buffer,NR(buffer));
	while(1)
	{
		switch(getch())
		{
			//左边
			case 'a':
					buffer_left_move(buffer,NR(buffer)) ;
					print_buffer(buffer,5);
					break ;
			//右边
			case 'd':
					buffer_right_move(buffer,NR(buffer));
					print_buffer(buffer,5);
					break ;
			//翻转
			case 'w':
					buffer_turn_over(buffer,NR(buffer)) ;
					print_buffer(buffer,5);
					break ;
		}
	}
	return 0 ;
}

运行结果:

please input 'a' or 'b' or 'w'

12345

按下a为不断左移,按下d为不断右移,按下w则为翻转

以上这篇C语言实现数组的循环左移,右移,翻转的示例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持我们。

(0)

相关推荐

  • C语言数组元素的循环移位方法

    如下所示: /*C语言数组元素的循环移位*/ #include <stdio.h> int main() { int num[5],num1[5]; int i, j,k=1; int t,n; printf("请输入5个数:"); for(i=0;i<5;i++) { scanf("%d",&num[i]); //将数读入数组num } printf("请输入循环次数:"); scanf("%d",

  • 在.NET Core类库中使用EF Core迁移数据库到SQL Server的方法

    前言 如果大家刚使用EntityFramework Core作为ORM框架的话,想必都会遇到数据库迁移的一些问题. 起初我是在ASP.NET Core的Web项目中进行的,但后来发现放在此处并不是很合理,一些关于数据库的迁移,比如新增表,字段,修改字段类型等等,不应该和最上层的Web项目所关联,数据的迁移文件放到这里也感觉有点多余,有点乱乱的感觉,所以才想着单独出来由专门的项目进行管理会比较好,也比较清晰! 注意目标框架选择的是.NET Core 2.0而不是.NET Standard 2.0.

  • C++中的移动构造函数及move语句示例详解

    前言 本文主要给大家介绍了关于C++中移动构造函数及move语句的相关内容,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍吧. 首先看一个小例子: #include <iostream> #include <cstring> #include <cstdlib> #include <vector> using namespace std; int main() { string st = "I love xing"; vec

  • javascript数据结构之多叉树经典操作示例【创建、添加、遍历、移除等】

    本文实例讲述了javascript数据结构之多叉树经典操作.分享给大家供大家参考,具体如下: 多叉树可以实现复杂的数据结构的存储,通过遍历方法可以方便高效的查找数据,提高查找的效率,同时方便管理节点数据.javascript的DOM其实就是以多叉树的形式存储的.下面用javascript来实现多叉树的数据结构 1.创造一个节点 数据是以节点的形式存储的: class Node { constructor(data) { this.data = data; this.parent = null;

  • oracle数据库迁移到MySQL的方法总结

    前言 之前搭建了一个ExtJS + spring + Oracle 的这样一个报表系统的框架. 因为其他部门的要求, 也需要这个Framework 进行一些特殊的定制. 但是有一个问题是 Oracle 的数据库是需要收费的, 个人使用倒没什么问题, 公司使用的话就会有侵权的问题了. 而MySQL 则是完全免费的. 所以使用 ExtJS + Spring + MySQL  这样的组合应该就没什么问题了. 理论上来说, MySQL 已经被Oracle 收购, 这两者之间的Migrate 应该比较容易

  • 如何将Oracle的一个大数据表快速迁移到 Sqlserver2008数据库(图文教程)

    oracle 服务器  版本  11.2.0.1.0 Sqlserver2008  R2 前提条件是 SQLSERVER服务器上安装了Oracle客户端并且进行了配置 不会配置的请参照 这个链接 1  登录MSSM 工具 2 选中其中一个数据库  右键⇒任务⇒导入数据 3   打开窗口 Sqlserver导入和导出向导   点击下一步 4 进入选择数据源画面 a: 数据源 选择  Microsoft OLE DB Provider for Oracle  然后 点击 右侧的 属性 按钮 5  数

  • 利用PHP判断是手机移动端还是PC端访问的函数示例

    前言 最近在开发项目的时候,分别开发了PC端和手机端,需要实现,用手机访问PC端WWW域名的时候,自动判断跳转到移动端,用电脑访问M域名手机网站的时候,自动跳转到PC端网站,于是有了下面这个判断函数: 示例代码: /** * 移动端判断 */ function isMobile() { // 如果有HTTP_X_WAP_PROFILE则一定是移动设备 if (isset ($_SERVER['HTTP_X_WAP_PROFILE'])) { return true; } // 如果via信息含有

  • 嵌入式C实战项目开发技巧:对一个有规律的数组表进行位移操作的方法

    在嵌入式项目开发中,LED灯的操作是一定要会的,也是基础中的基础,比如用51单片机写个跑马灯,这不简单嘛,定义一个数组把那8个跑马灯存起来,然后搞个for循环不就可以了嘛,但是,实际工作开发中写一个跑马灯可不像学校和书本上那么简单噢,往往最简单的东西,有可能也是最复杂的.现在我的需求是这样的,我要求实现以下形式的流水灯: 跑马灯在这个表格中是一位一位进行存储的,如果要一行全亮,那么写0xff,灯就全亮了,写0x00,灯就全灭了. 要求从led1流水到led100这个灯,也就是实现100个灯的跑马

  • Javascript实现数组中的元素上下移动

    前言 我们交换数组可以实现元素上下移动了,这个效果我们在表格或以前排序算法中都会用到,下面来看一个JavaScript下实现交换数组元素上下移动例子 在写项目的时候,要实现一个数组记录上下移动的示例.写起来也没有没麻烦,无非是交换数组元素.最终实现代码如下,比较重要的是那个函数. 示例代码: // 交换数组元素 var swapItems = function(arr, index1, index2) { arr[index1] = arr.splice(index2, 1, arr[index

  • 解决C语言数组元素循环右移的问题

    如下所示: #include<stdio.h> #define N 100 int main() { int a[N]; int i,j,k,n,m,temp=0; scanf("%d %d",&n,&m); i=0; while(i<n) { scanf("%d",&a[i]); i++; } for(j=0;j<m;j++) //移动次数 { temp=a[n-1]; //保存最后一位数 for(k=n-1;k&g

随机推荐