c语言程序设计 移位

来源:百度知道 编辑:UC知道 时间:2024/05/24 16:21:35
将数组a[n]的每个元素都循环右移k位,设0<k<n.例如:n=6,k=2;如果a[6]的元素原始排列为:10,20,30,40,50,60;右移2位置后的排列为:50,60,10,20,30,40.
程序要求:(1)数组元素的个数n与右移位数k,均为用户随意输入的值,不可以由程序员设置成固定值.(2)程序必须可执行,必要的程序段需要填写注释语句.

#include "Stdio.h"

main()
{
int i,n,k;
int a[100],b[50]; /*定义一个数组?/
printf("please input n:\n");
scanf("%d",&n);

printf("please input %d numbers:\n",n);
for(i=0;i<n;i++)
scanf("%d",&a[i]);/*给数组赋n个值*/

printf("please input k:\n");
scanf("%d",&k);

for(i=n-k;i<n;i++)
b[i-n+k]=a[i];/*将a数组后面k个元素移到b数组里面*/

for(i=n-k-1;i>=0;i--)
a[i+k]=a[i];/*数组开始右移*/

for(i=0;i<k;i++)
a[i]=b[i];/*数组b的元素放回数组a*/

for(i=0;i<n;i++)
printf("%d, ",a[i]);
getch();

}

--------------
运行结果:
please input n:
6
please input 6 numbers:
10 20 30 40 50 60
please input k:
3
40,50,60,10,20,30,

分析:如果数组元素右移2位,实际就是把数组的最后2位前提,从最后那个开始移动
方案:循环。先是最后一个,把他保留,再把剩下的依次后移一位,最后把保留的值赋给a[0]元素
#include<stdio.h>