C语言:有n个整数,使前面各数顺序向后移m个位置,最后m个数变成最前面m个数,写一个函数实现以上功能
10.4
#include <iostream>
#define N 10
#define M 3
void main()
{
void move(int num[N],int n,int m);
int num[N];
int i;
printf("输入%d个整数\n\n",N);
for(i=0;i<N;i++)
{
scanf("%d",&num[i]);
}
move(num,N,M);
printf("\n\n调整后的%d个整数为:\n\n",N);
for(i=0;i<N;i++)
{
printf("%d ",num[i]);
}
printf("\n\n");
}
void swap(int *p,int *q)【这个函数有什么用?都没见到?】
{
int temp;
temp=*p;
*p=*q;
*q=temp;
}
void move(int num[N],int n,int m)【这个函数完全不懂 希望逐个加上解释】
{
int *p,*num_end;
int temp;
num_end=num+n;
temp=*(num_end-1);
for(p=num_end-1;p>=num;p--)
*p=*(p-1);
*num=temp;
m--;
if(m>0) move(num,n,m);
}
swap这个函数定义了 但是没有出现过 怎么解释?我知道是互换……
楼主的叙述好像不太清晰!
你的意思森并正是要实现数字相后面移动吗?
原来:1,2,3,4,5,6,7,8,9,10
移此悔动数 4
后来:7,8,9,10,1,2,3,4,5,6
楼主是要实现这个功能吗?
你那个函数蛮复杂的,我给你写一个,你应该看的懂的!同样实现此功能!
具体程序如下:
#include <stdio.h>
#define M 10 /*数组的长度可以再这里实现修改*/
void main()
{
int a[M],b[M];
int i,p;
printf("蔽念input the arrary a:"); /*输入你想的整形数*/
for(i=0;i<10;i++)
scanf("%d",&a[i]);
for(i=0;i<M;i++) /*数出原数组*/
{
printf("%d ",a[i]);
}
printf("\n");
flag:printf("input the number of p:\n"); /*输入转移值p*/
scanf("%d",&p);
if(p>M-1) /*如果p的值超出则重新输入*/
{
printf("error!\n");
goto flag;
}
for(i=0;i<10;i++) /*实现向后转移,并把值存入数组b*/
{
b[i+p]=a[i];
if((i+p)==10)
break;
}
int j=0;
for(;i<M;i++)
b[j++]=a[i];
for(i=0;i<M;i++) /*把数组b的值赋值给a*/
a[i]=b[i];
for(i=0;i<M;i++) /*数出数组a的元素*/
{
printf("%d ",a[i]);
}
printf("\n");
}
这个函数能实现上面的功能,而且都为简单的语句,想必楼主一定看的懂的!
嘿嘿!
void swap(int *p,int *q)【这个函数作用是交换两个元素的数值】
{
int temp;
temp=*p;
*p=*q;
*q=temp;
}
void move(int num[N],int n,int m)【这个函数完全不懂 希望逐个加上解释】
{
int *p,*num_end;
int temp;
num_end=num+n; /*也就是num[n]*/
temp=*(num_end-1); /*保存最后一个元素的值,num[n-1]*/
for(p=num_end-1;p>=num;p--)
*p=*(p-1); /*从最后一个元轿伏没厅蔽素开始赋值为其前面一个元素的数值,统一进闭纳行后移操作*/
*num=temp; /*首元素的赋值为临时变量temp,即原先的最后一个元素*/
m--; /*要移动的位数减少一*/
if(m>0) move(num,n,m); /*递归进行*/
}