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则为翻转

时间: 2024-11-22 22:19:05

C语言实现数组的循环左移,右移,翻转的相关文章

嵌入式C开发---用循环实现左移右移

//将n左移m位 int byte_to_left_move(int n , int m) { int i , ret = 1 ; if(n == 0 || n < 0) { return ; } if(n == 1) { for(i = 0 ; i < m ; i++) ret *= n * 2 ; } if(n > 1) { for(i = 0 ; i < m ; i++) ret *= n ; } return ret ; } //将n右移m位 int byte_to_rig

《JavaScript面向对象编程指南》——第2章 基本数据类型、数组、循环及 条件表达式2.1 变量

第2章 基本数据类型.数组.循环及 条件表达式 在深入学习JavaScript的面向对象特性之前,我们首先要了解一些基础性知识.在这一章中,我们将会从以下几个方面入手. JavaScript中的基本数据类型,例如字符串和数字等. 数组. 常用操作符,例如+.-.delete.typeof等. 控制流语句,例如循环和if-else条件表达式等. 2.1 变量 通常,变量都是用来存储数据的.当我们编写程序时,用变量来表示实际数据显然要方便些.尤其是当我们需要多次使用某个数字(例如3.14159265

C语言如何用for循环构建2*2矩阵

问题描述 C语言如何用for循环构建2*2矩阵 2*2矩阵: 1 2 3 4 很简单的矩阵 不过不用scanf输入 直接用for循环输出 我想的方法是定义一个变量x=1,然后在for循环里面,每一次x++存入数组 代码: #include<stdio.h> int main() { int a[2][2]; int i,j,x=1; for(i=0;i<2;i++) for(j=0;j<2;j++) { a[i][j]=x; x++; } printf("%d "

c语言字符数组中回车符问题?

问题描述 c语言字符数组中回车符问题? //getline函数:将一行读入到S中并返回其长度 int getline(char s[] ,int length) { int c,i; for(i=0; i<length-1 && (c=getchar())!=EOF && c!='n';++i) s[i]=c; if(c == 'n'){ s[i] = c; ++i; } s[i]=''; return i; } 我想问一下,这里的if(c =='n')有什么用?我觉

c语言基础-刚刚学习c语言的数组部分,不懂,求助一下!

问题描述 刚刚学习c语言的数组部分,不懂,求助一下! 输入一组整数,将它们排序后按照由小到大的顺序输出,不知道要不要用到循环语句,求助这个这个程序怎么写 解决方案 #include <stdio.h>void main() { int i, j, temp; int a[10]; for (i = 0; i < 10; i++) { scanf("%d,", &a[i]); } for (j = 0; j < 9; j++) { for (i = 0;

编程c语言-C语言中数组的元素如果不赋值会改变吗

问题描述 C语言中数组的元素如果不赋值会改变吗 做了一个循环,循环里是一个if判断,如果是真就给数组赋值,正常的话只会做一次,然后就不会在给数组赋值了,结果做完整个循环后,被赋值的数组的数又全变成初始的0了,这是怎么回事. 解决方案 看你的代码,找到之后,需要用break跳出循环.如果是函数调用,检查下形参和实参. 解决方案二: 源码贴出来,凭空没法诊断.有可能是数组寿命到了,或者其他原因 解决方案三: 加一个flag判断一下,如果是第一次就正常使用,如何不是,就退出 解决方案四: 你赋的值就是

c语言-C语言中数组中的 怎样打印到屏幕上

问题描述 C语言中数组中的 n 怎样打印到屏幕上 比如说 一个字符串 数组 char a [] = {'n'}; 想要在屏幕上显示 n 这个字样该怎么实现? 解决方案 你是要打印n两个字符么?如果时的话,可以这样 char a [] = {"\n"}; 解决方案二: char a[] = "n";然后输出就ok了:因为这里是转义字符,要输出斜杠的话必须要写成的形式 解决方案三: 查找替换,将n替换成\n 解决方案四: n是换行符号,如果要单纯显示"n&qu

希望大神帮助下-关于C语言中数组的输出,求…………

问题描述 关于C语言中数组的输出,求---- #include int main() {int i,a[10]; for(i=1;i<=10;i++) a[i]=i; printf("%d ",a); return 0; } 怎么才可以输出这样形式呢? 12345678910 为什么老是输出 1244960 这种形式呢?谢谢! } 解决方案 printf("%d ",a[i]); C语言中的数组输出不能整体输出,的用for循环依次输出每一个元素 数组名就像一个

命令行参数-C语言 字符串数组处理,50B,急求

问题描述 C语言 字符串数组处理,50B,急求 1.我想写一个程序:(C) 给定一个字符串"test" 生成一个字符串数组,元素分别为"test1","test2""test3""test4".(用for循环,元素数量可变) 2.为什么我程序在把命令行传入的参数赋值给一个字符串变量后,其余的字符串变量都变成了这个参数值?比如: tx[0]="KU"; printf("t1===