标题:我这个程序错在那里?望诸位帮帮我 谢谢
只看楼主
gestopaxmc
Rank: 1
等 级:新手上路
帖 子:69
专家分:0
注 册:2007-1-2
 问题点数:0 回复次数:8 
我这个程序错在那里?望诸位帮帮我 谢谢

有n个整数,使前面各数顺序向后移m个位置,最后m个数变成最前面m个数。

#include <stdio.h>
void main()
{
int m,*p,t,i,j;
int a[10]={1,2,3,4,5,6,7,8,9,10};
printf("请输入要移动的位数:");
scanf("%d\n",&m);
p=&a[9];
for(i=0;i<m;i++)
{
t=*p;
for(j=9;j>=i;j--)
a[j]=a[j-1];
a[i]=t;
}
for(i=0;i<10;i++)
printf("%4d",a[i]);
}

搜索更多相关主题的帖子: int void main 整数 
2007-07-22 21:56
anlogo
Rank: 2
等 级:论坛游民
威 望:1
帖 子:293
专家分:20
注 册:2007-7-20
得分:0 

看了一下,主要犯了两个错误:
#include <stdio.h>
void main()
{
int m,*p,t,i,j;
int a[10]={1,2,3,4,5,6,7,8,9,10};
printf("\n请输入要移动的位数:");
scanf("%d",&m);
p=&a[9];
for(i=0;i<m;i++)
{
t=*p;

for(j=9;j>=1;j--)
a[j]=a[j-1];
a[0]=t;
}
for(i=0;i<10;i++)
printf("%4d",a[i]);
}

2007-07-22 22:27
anlogo
Rank: 2
等 级:论坛游民
威 望:1
帖 子:293
专家分:20
注 册:2007-7-20
得分:0 

再说用这种算法也太浪费时间了

2007-07-22 22:28
zklhp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:china
等 级:贵宾
威 望:254
帖 子:11485
专家分:33241
注 册:2007-7-10
得分:0 
以下是引用anlogo在2007-7-22 22:28:35的发言:

再说用这种算法也太浪费时间了

哪种算法比较好?

2007-07-22 22:49
zklhp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:china
等 级:贵宾
威 望:254
帖 子:11485
专家分:33241
注 册:2007-7-10
得分:0 
直接输出是不是比较好?

#include <stdio.h>
#include <conio.h>
#define NUM 10
int main()
{
int m,t;
int a[NUM]={1,2,3,4,5,6,7,8,9,10};
printf("请输入要移动的位数:");
do
{
scanf("%d",&m);

}while((m>0)&&(m<=NUM)==0);

for (t=NUM-m;t<NUM;t++)
{
printf("%4d",*(a+t));
}
for (t=0;t<NUM-m;t++)
{
printf("%4d",*(a+t));
}

getch();

return 0;

}
2007-07-22 23:06
gestopaxmc
Rank: 1
等 级:新手上路
帖 子:69
专家分:0
注 册:2007-1-2
得分:0 
谢谢回答 楼上的简单么 貌似没看出来 !

玉树临风赛潘安,一树梨花压海棠的.......
2007-07-23 20:38
ljfljf2006
Rank: 1
等 级:新手上路
帖 子:58
专家分:0
注 册:2005-9-11
得分:0 
这算法应该算是比较简单的吧,代码少点,变量也少点,但需要多定义一个数组.

#include <stdio.h>
void main()
{
int m,i;
int a[10]={1,2,3,4,5,6,7,8,9,10};
int b[10];
printf("enter the number:");
scanf("%d",&m);
for(i=0;i<10;i++)
b[i]=a[(i+m)%10];
for(i=0;i<10;i++)
{ a[i]=b[i];
printf("%4d",a[i]);
}
}

I will come back!
2007-07-23 23:39
ZSXCT
Rank: 1
等 级:新手上路
帖 子:28
专家分:0
注 册:2007-7-10
得分:0 

我也是R。BAGGIO的忠实球迷,同样的感觉  
I WILL COME BACK!!
# include<stdio.h>
void main()
{int m,t,i,j;
int a[10]={1,2,3,4,5,6,7,8,9,10};
printf("input the num");
scanf("%d",&m);

for(i=0;i<m;i++)
{t=a[0];


for(j=0;j<9;j++)

a[j]=a[j+1];
a[9]=t;

}
for(i=0;i<10;i++)

printf("%4d",a[i]);
}



2007-07-24 01:01
boot2046
Rank: 2
等 级:新手上路
威 望:3
帖 子:168
专家分:0
注 册:2007-7-23
得分:0 
我也来一个,移动的时候都不用循环,这个算法应该比较省时间哦
#include <stdio.h>
void main()
{
int m,*p,t,i,j;
int tmp[10];
int a[10]={1,2,3,4,5,6,7,8,9,10};
printf("\n请输入要移动的位数:");
scanf("%d",&m);
memcpy(tmp, a, (10-m) * sizeof(int));
memcpy(a, a+10-m, m*sizeof(int));
memcpy(a+m, tmp, (10-m)*sizeof(int));
for(i=0;i<10;i++)
printf("%4d",a[i]);
}


Linux是简单的,你不需要成为天才也能理解这种简单,Windows是复杂的,就算你是天才也不能理解这种复杂
2007-07-24 09:45



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-157331-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.250644 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved