c语言:有n个整数的数组,编写程序使其前面各数顺序向后移m个位置,最后m个数变成最前面m个数。

我的代码是这样的:
#include<stdio.h>
void main()
{
int s[10],a,i,m,b,j;
printf("输入一个整数数组:");
for(i=0;i<10;i++)
{
scanf("%d",&a);
s[i]=a;
}
printf("输入要移动的位置数:");
scanf("%d",&m);
for(i=0;i<m;i++)
{
b=s[9];
for(j=8;j>=0;j--)
{
s[j+1]=s[j];
s[0]=b;
}
}
for(i=0;i<10;i++)
printf("%d ",s[i]);
putchar('\n');
}

我不知道哪里出错了,大家帮我看看。

/*要实现这个功能只需要改一个地方:for(j=8;j>=0;j--){s[j+1]=s[j];s[0]=b;}将这句话中的
s[0]=b移到循环外面就可以了,因为这个程序中s[0]也参与运算,s[0]的原来的值将赋给后面的
s[1],循环体内执行s[0]=b;则过早的将s[9]的值给了s[0],导致结果错误,应该先移动好,再将原来s[9]的
值给s[0].除了这个以外,还有几个可以优化的地方:for(i=0;i<10;i++){scanf("%d",&a);s[i]=a;}
这里直接写for(i=0;i<10;i++){scanf("%d",&s[i]);}就行了,没必要用一个临时变量, scanf("%d",&m);
如果用户输入大于10的数,那循环就会多做几次,所以可以加一句m=m%10或将外层循环条件改为for(i=0;i<m%10;i++).
*/
#include<stdio.h>
void main()
{
int s[10],i,m,b,j;
printf("输入一个整数数组:");
for(i=0;i<10;i++)
{
scanf("%d",&s[i]);
}
printf("输入要移动的位置数:");
scanf("%d",&m);
for(i=0;i<m%10;i++)
{
b=s[9];
for(j=8;j>=0;j--)
{
s[j+1]=s[j];
}
s[0]=b;
}
for(i=0;i<10;i++)
printf("%d ",s[i]);
putchar('\n');
}
温馨提示:答案为网友推荐,仅供参考
第1个回答  推荐于2017-12-15
#include<stdio.h>
void main()
{
int s[10],a,i,m,b,j;
printf("输入一个整数数组:");
for(i=0;i<10;i++)
{
scanf("%d",&a);--->这两句没错,但可写成一句:scanf("%d",%s[i]);
s[i]=a;
}
printf("输入要移动的位置数:");
scanf("%d",&m);--->这句也没错,最好在其下加入一句:m%=10;
for(i=0;i<m;i++)
{
b=s[9];
for(j=8;j>=0;j--)
{
s[j+1]=s[j];
s[0]=b;--->这句不能放在这里,在这里就错了
}
就该应在这时:s[0]=b
}
for(i=0;i<10;i++)
printf("%d ",s[i]);
putchar('\n');
}

}本回答被网友采纳
第2个回答  2013-12-14
#include <stdio.h>
void main(void)
{
int i, n, m, t, a[100], *p, *head;
printf("输入有数值n\n");
scanf("%d", &n);
printf("输入数值\n");
for(i=0; i<n; i++)
scanf("%d", &a[i]);
printf("输入调整数值数m\n");
scanf("%d", &m);
p = a; //p和head指向第一个值
head = a;
while(m) //循环m个
{
t = *p; //保存第一个值
i = 0; //下面要循环n次
while(++i < n)
{
*p = *(p+1); //把后面一个值给前面
p++; //指针p向前
}
*(p++) = t; //把保存的第一个值给最后
p = head; //p指回第一个值
m--; //完成一次循环,m减一
}
for(i=0; i<n; i++)
printf("%d ", a[i]);
}
第3个回答  2013-12-14
你新建一个数组s'[10],使s'[(i+m)%10]=s[i],然后再把s'赋值给s,如果不是要求必须用那个方法的话这个会比较容易理解也容易做吧。
相似回答