【问题描述】
定义一个长度为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);
}
}