专栏首页嵌入式开发圈C语言实现数组的循环左移,右移,翻转

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

找工作笔试中,经常喜欢考像下面这样的题目,这样的题目在工作中也是很常用的,我们来看看:

假设数组为 :

12345

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

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

翻转则为:54321

我们来实现下这个程序:

 1#include <stdio.h>
 2#include <stdlib.h>
 3#include <string.h>
 4#define  NR(x)  (sizeof(x)/sizeof(x[0]))
 5//数组左移 
 6int buffer_left_move(int *buffer , int buf_len)
 7{
 8    int i ;
 9    char tmp = buffer[0];
10    for(i = 1 ; i < buf_len ; i++)
11    {
12        buffer[i-1] = buffer[i] ;
13    }
14    buffer[buf_len-1] = tmp ;
15}
16//数组右移 
17int buffer_right_move(int *buffer , int buf_len)
18{
19    int i ;
20    char tmp = buffer[buf_len - 1];
21    for(i = buf_len ; i > 0 ; i--)
22    {
23        buffer[i] = buffer[i-1] ; 
24    }
25    buffer[0] = tmp ;
26}
27//数组翻转 
28int buffer_turn_over(int *buffer , int buf_len)
29{
30    int size = buf_len ; 
31    int i , tmp; 
32    for(i = 0 ; i < size/2 ; i++)
33    {
34        tmp = buffer[i] ; 
35        buffer[i] = buffer[size-1-i] ;
36        buffer[size-1-i] = tmp;
37    }
38}
39//打印数组 
40void print_buffer(int *buffer, int buf_len)
41{
42    int i ;
43    system("cls");
44    printf("please input \'a' or \'b' or \'w' \n");
45    for(i = 0 ; i < buf_len ; i++)
46    {
47        printf("%d",buffer[i]);
48    }
49    putchar('\n');
50}
51
52int main(void)
53{
54    int buffer[5] = {1,2,3,4,5} ;
55
56    print_buffer(buffer,NR(buffer));
57    while(1)
58    {
59        switch(getch())
60        {   
61            //左边 
62            case 'a': 
63                    buffer_left_move(buffer,NR(buffer)) ;
64                    print_buffer(buffer,5);
65                    break ;
66            //右边 
67            case 'd':  
68                    buffer_right_move(buffer,NR(buffer));
69                    print_buffer(buffer,5);
70                    break ;
71            //翻转 
72            case 'w':
73                    buffer_turn_over(buffer,NR(buffer)) ;
74                    print_buffer(buffer,5);
75                    break ;
76        }
77    }
78    return 0 ; 
79}

运行结果:

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

本文分享自微信公众号 - 嵌入式开发圈(gh_d6ff851b4069)

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2019-06-12

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • C语言基础算法---从数组中找最大最小值的实际应用

    最近几天有文章的读者反馈,本平台发布的文章只是讲了一些基础知识,并没有谈到具体应用,根据各位的反馈,我也做了相应的思考,所以咱们还是需要理论和实践结合来...

    morixinguan
  • 什么?C/C++面试过不了?因为你还没看过这个!

    (为了方便记忆可以想成)被 const 修饰(在 const 后面)的值不可改变,如下文使用例子中的 p2、p3。

    morixinguan
  • C语言宏定义的提示之法

    这是我早期做intel驱动的时候看到intel的驱动工程师写的代码,虽然这两个宏没有实际用途,但细细一看却发现大有用处。

    morixinguan
  • mysql join和sort的buffer

    参数查看命令 SELECT @@join_buffer_size; SELECT @@sort_buffer_size; join_buffer_size 当...

    dys
  • 如何在windows下和linux下获取文件(如exe文件)的详细信息和属性

    最近在项目开发中,由cs开发的exe的程序,需要自动升级,该exe程序放在linux下,自动升级时检测不到该exe程序的版本号信息,但是我们客户端的exe程序需...

    业余草
  • GNU emacs Lisp小结3

    chapter4 与缓冲区有关的函数 4.1 查找更多的信息 C-h f 函数名   ;查询函数 C-h v 变量名   ;查询变量 find-tags 函数 ...

    py3study
  • EMLOG无插件实现网站源码压缩

    在以往的Emlog优化教程中,相信都是使用的代码压缩插件,今天主要是分享插件的代码版本,也就是不使用插件,直接将代码丢在module.php中就可以,好吧,又消...

    似水的流年
  • EMLOG无插件实现网站源码压缩

    在以往的Emlog优化教程中,相信都是使用的代码压缩插件,今天主要是分享插件的代码版本,也就是不使用插件,直接将代码丢在module.php中就可以,好吧,又消...

    似水的流年
  • Netty 异步的、事件驱动的网络应用程序框架和工具

    Netty是由JBOSS提供的一个Java开源框架。Netty提供异步的、事件驱动的网络应用程序框架和工具,用以快速开发高性能、高可靠性的网络服务器和客户端程序...

    WindWant
  • java的IO模型

    本文主要是重新梳理了Java的IO模型,基于之前NIO的文章进行补充,为学习Netty做准备。

    贪挽懒月

扫码关注云+社区

领取腾讯云代金券