hhh.Danko 2021-05-18 16:50 采纳率: 100%
浏览 611
已采纳

c语言循环移动数组元素

【问题描述】

定义一个长度为10的一维整型数组,并编写三个函数分别实现如下功能:

(1)函数input:对数组的各元素实现从键盘输入赋值。

(2)函数output:将数组的所有元素向屏幕打印输出。

(3)函数moveToRight:向右循环移动数组元素

(4)函数moveToLeft:向左循环移动数组元素

(5)函数move:将数组元素向左或向右循环移动m个位置。移动规则为:

● 若m>0,调用moveToRight函数,执行向右循环移动;

● 若m=0,不做任何移动;

● 若m<0,调用moveToLeft函数,执行向左循环移动。

目前已编写完成main函数和move函数,请编程实现input函数、output函数、moveToRight函数和moveToLeft函数。

/*

@Filename: ex605.c

@Author: 

@Version: 1.0

@Date: 2021-03-18

@Description: Loopy Moving of Array Element

*/

#include <stdio.h>

#include <stdlib.h>

#define LENGTH 10

/*主函数*/

int main(void){

/*声明函数*/

void input(int *p, int n);

void output(int *p, int n);

void move(int *p, int length, int m);

 

/*定义数据结构*/

int a[LENGTH], m;//m表示数组元素循环移动的位置个数

int *p = a;

 

/*调用input函数,通过键盘输入为数组a赋值*/

input(p, LENGTH);

 

/*从键盘输入为循环移动位置个数m赋值*/

scanf("%d", &m);

/*调用move函数,完成数组元素的循环移动*/

move(p, LENGTH, m);

 

/*调用output函数,输出移动后的数组元素*/

output(p, LENGTH);

return 0;

}

/*

 * 函数名称:input

 * 函数功能:通过键盘输入为一维数组元素赋值

 * 输入格式:各输入数据之间以空格分隔

 * 形式参数:p,int型指针变量,一维整型数组首地址

 * 形式参数:n,int型,一维数组长度

 * 返回值:无

 */

void input(int *p, int n){

// 请编程实现本函数

 

}

/*

 * 函数名称:output

 * 函数功能:向屏幕打印输出一维数组元素值

 * 输出格式:各输出数据之间以空格分隔

 * 形式参数:p,int型指针变量,一维整型数组首地址

 * 形式参数:n,int型,一维数组长度

 * 返回值:无

 */

void output(int *p, int n){

// 请编程实现本函数

 

}

 

/*

 * 函数名称:moveToRight

 * 函数功能:使一维数组各元素向右循环移动m个位置

 * 形式参数:p,int型指针变量,一维整型数组首地址

 * 形式参数:length,int型,一维数组长度

 * 形式参数:m,int型,循环移动的位置数

 * 返 回 值:无

 */

void moveToRight(int *p, int length, int m){

// 请编程实现本函数

 

}

 

/*

 * 函数名称:moveToLeft

 * 函数功能:使一维数组各元素向左循环移动m个位置

 * 形式参数:p,int型指针变量,一维整型数组首地址

 * 形式参数:length,int型,一维数组长度

 * 形式参数:m,int型,循环移动的位置数

 * 返 回 值:无

 */

void moveToLeft(int *p, int length, int m){

// 请编程实现本函数

 

}

 

/*

 * 函数名称:move

 * 函数功能:使一维数组元素循环向左或向右移动m个位置

 * 形式参数:p,int型指针变量,一维整型数组首地址

 * 形式参数:length,int型,一维数组长度

 * 形式参数:m,int型,表示循环移动的方向和移动的位置个数

 *          当m>0时,执行向右循环移动(水平方向从左向右循环移动)

 *          当m=0时,不做任何移动

 *          当m<0时,执行向左循环移动(水平方向从右向左循环移动)

 * 返 回 值:无

 */

void move(int *p, int length, int m){

if(m > 0){

/*向右循环移动*/

moveToRight(p, length, m);

 

}else if(m == 0){

/*不移动*/

; //空语句,什么都不做

 

}else{

/*向左循环移动*/

moveToLeft(p, length, m);

 

}

}

注:不得使用全局变量。

【输入形式】

有两行输入,第1行输入为数组元素赋值,第2行输入为m赋值

【输出形式】

有一行输出,输出循环移动后的数组各元素值

【样例输入】

1 2 3 4 5 6 7 8 9 10

3

【样例输出】

8 9 10 1 2 3 4 5 6 7

【样例输入】

1 2 3 4 5 6 7 8 9 10

-3

【样例输出】

4 5 6 7 8 9 10 1 2 3

【样例说明】

【评分标准】

正确性

/*
@Filename:  ex605.c
@Author:  
@Version:  1.0
@Date:  2021-03-18
@Description:  Loopy  Moving  of  Array  Element
*/
#include  <stdio.h>
#include  <stdlib.h>
#define  LENGTH  10
/*主函数*/
int  main(void){
        /*声明函数*/
        void  input(int  *p,  int  n);
        void  output(int  *p,  int  n);
        void  move(int  *p,  int  length,  int  m);
        
        /*定义数据结构*/
        int  a[LENGTH],  m;//m表示数组元素循环移动的位置个数  
        int  *p  =  a;
        
        /*调用input函数,通过键盘输入为数组a赋值*/
        input(p,  LENGTH);
        
        /*从键盘输入为循环移动位置个数m赋值*/
        scanf("%d",  &m);
        /*调用move函数,完成数组元素的循环移动*/
        move(p,  LENGTH,  m);
        
        /*调用output函数,输出移动后的数组元素*/
        output(p,  LENGTH);
        return  0;
}
/*
  *  函数名称:input
  *  函数功能:通过键盘输入为一维数组元素赋值
  *  输入格式:各输入数据之间以空格分隔  
  *  形式参数:p,int型指针变量,一维整型数组首地址
  *  形式参数:n,int型,一维数组长度  
  *  返回值:无  
  */
void  input(int  *p,  int  n){
        //  请编程实现本函数
        
}
/*
  *  函数名称:output
  *  函数功能:向屏幕打印输出一维数组元素值
  *  输出格式:各输出数据之间以空格分隔  
  *  形式参数:p,int型指针变量,一维整型数组首地址
  *  形式参数:n,int型,一维数组长度
  *  返回值:无  
  */
void  output(int  *p,  int  n){
        //  请编程实现本函数
        
}

/*
  *  函数名称:moveToRight
  *  函数功能:使一维数组各元素向右循环移动m个位置
  *  形式参数:p,int型指针变量,一维整型数组首地址
  *  形式参数:length,int型,一维数组长度
  *  形式参数:m,int型,循环移动的位置数
  *  返  回  值:无  
  */
void  moveToRight(int  *p,  int  length,  int  m){
        //  请编程实现本函数
        
}

/*
  *  函数名称:moveToLeft
  *  函数功能:使一维数组各元素向左循环移动m个位置
  *  形式参数:p,int型指针变量,一维整型数组首地址
  *  形式参数:length,int型,一维数组长度
  *  形式参数:m,int型,循环移动的位置数
  *  返  回  值:无  
  */
void  moveToLeft(int  *p,  int  length,  int  m){
        //  请编程实现本函数
        

}

/*
  *  函数名称:move
  *  函数功能:使一维数组元素循环向左或向右移动m个位置
  *  形式参数:p,int型指针变量,一维整型数组首地址
  *  形式参数:length,int型,一维数组长度
  *  形式参数:m,int型,表示循环移动的方向和移动的位置个数
  *                    当m>0时,执行向右循环移动(水平方向从左向右循环移动)  
  *                    当m=0时,不做任何移动  
  *                    当m<0时,执行向左循环移动(水平方向从右向左循环移动)
  *  返  回  值:无  
  */
void  move(int  *p,  int  length,  int  m){
        if(m  >  0){
                /*向右循环移动*/
                moveToRight(p,  length,  m);
                
        }else  if(m  ==  0){
                /*不移动*/
                ;  //空语句,什么都不做  
                
        }else{
                /*向左循环移动*/
                moveToLeft(p,  length,  m);
                
        }
}

  • 写回答

3条回答 默认 最新

  • CSDN专家-link 2021-05-18 17:15
    关注

    简单一点

    #include <stdio.h>
    
    #include <stdlib.h>
    
    #define LENGTH 10
    
    /*主函数*/
    
    int main(void){
    	/*声明函数*/
    
    	void input(int *p, int n);
    
    	void output(int *p, int n);
    
    	void move(int *p, int length, int m);
    
    
    
    	/*定义数据结构*/
    
    	int a[LENGTH], m;//m表示数组元素循环移动的位置个数
    
    	int *p = a;
    
    
    
    	/*调用input函数,通过键盘输入为数组a赋值*/
    
    	input(p, LENGTH);
    
    
    
    	/*从键盘输入为循环移动位置个数m赋值*/
    
    	scanf("%d", &m);
    
    	/*调用move函数,完成数组元素的循环移动*/
    
    	move(p, LENGTH, m);
    
    
    
    	/*调用output函数,输出移动后的数组元素*/
    
    	output(p, LENGTH);
    
    	return 0;
    
    }
    
    /*
    
    * 函数名称:input
    
    * 函数功能:通过键盘输入为一维数组元素赋值
    
    * 输入格式:各输入数据之间以空格分隔
    
    * 形式参数:p,int型指针变量,一维整型数组首地址
    
    * 形式参数:n,int型,一维数组长度
    
    * 返回值:无
    
    */
    
    void input(int *p, int n){
    	// 请编程实现本函数
    
    	for (int i = 0; i < n; i++)
    		scanf_s("%d", &p[i]);
    
    }
    
    /*
    
    * 函数名称:output
    
    * 函数功能:向屏幕打印输出一维数组元素值
    
    * 输出格式:各输出数据之间以空格分隔
    
    * 形式参数:p,int型指针变量,一维整型数组首地址
    
    * 形式参数:n,int型,一维数组长度
    
    * 返回值:无
    
    */
    
    void output(int *p, int n){
    	// 请编程实现本函数
    
    	for (int i = 0; i < n; i++)
    		printf("%d ", p[i]);
    
    }
    
    
    
    /*
    
    * 函数名称:moveToRight
    
    * 函数功能:使一维数组各元素向右循环移动m个位置
    
    * 形式参数:p,int型指针变量,一维整型数组首地址
    
    * 形式参数:length,int型,一维数组长度
    
    * 形式参数:m,int型,循环移动的位置数
    
    * 返 回 值:无
    
    */
    
    void moveToRight(int *p, int length, int m){
    	// 请编程实现本函数
    	int *q = new int[length];
    	int i = 0;
    	for (i = 0; i < length; i++)
    	{
    		q[(i+m)%length] = p[i];
    	}
    	for (i = 0; i < length; i++)
    		p[i] = q[i];
    	delete[]q;
    }
    
    
    
    /*
    
    * 函数名称:moveToLeft
    
    * 函数功能:使一维数组各元素向左循环移动m个位置
    
    * 形式参数:p,int型指针变量,一维整型数组首地址
    
    * 形式参数:length,int型,一维数组长度
    
    * 形式参数:m,int型,循环移动的位置数
    
    * 返 回 值:无
    
    */
    
    void moveToLeft(int *p, int length, int m){
    	// 请编程实现本函数
    	int *q = new int[length];
    	int i = 0;
    	for (i = 0; i < length; i++)
    	{
    		q[(i-m+length)%length] = p[i];
    	}
    	for (i = 0; i < length; i++)
    		p[i] = q[i];
    	delete[]q;
    
    
    }
    
    
    
    /*
    
    * 函数名称:move
    
    * 函数功能:使一维数组元素循环向左或向右移动m个位置
    
    * 形式参数:p,int型指针变量,一维整型数组首地址
    
    * 形式参数:length,int型,一维数组长度
    
    * 形式参数:m,int型,表示循环移动的方向和移动的位置个数
    
    *          当m>0时,执行向右循环移动(水平方向从左向右循环移动)
    
    *          当m=0时,不做任何移动
    
    *          当m<0时,执行向左循环移动(水平方向从右向左循环移动)
    
    * 返 回 值:无
    
    */
    
    void move(int *p, int length, int m){
    	if (m > 0){
    		/*向右循环移动*/
    
    		moveToRight(p, length, m);
    
    
    
    	}
    	else if (m == 0){
    		/*不移动*/
    
    		; //空语句,什么都不做
    
    
    
    	}
    	else{
    		/*向左循环移动*/
    
    		moveToLeft(p, length, m);
    
    
    
    	}
    
    }
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

悬赏问题

  • ¥15 树莓派与pix飞控通信
  • ¥15 自动转发微信群信息到另外一个微信群
  • ¥15 outlook无法配置成功
  • ¥30 这是哪个作者做的宝宝起名网站
  • ¥60 版本过低apk如何修改可以兼容新的安卓系统
  • ¥25 由IPR导致的DRIVER_POWER_STATE_FAILURE蓝屏
  • ¥50 有数据,怎么建立模型求影响全要素生产率的因素
  • ¥50 有数据,怎么用matlab求全要素生产率
  • ¥15 TI的insta-spin例程
  • ¥15 完成下列问题完成下列问题