| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 534 人关注过本帖
标题:这是什么问题,帮忙看看吧.
只看楼主 加入收藏
暴风雪282
Rank: 4
等 级:业余侠客
帖 子:61
专家分:295
注 册:2011-10-4
结帖率:100%
收藏
已结贴  问题点数:10 回复次数:8 
这是什么问题,帮忙看看吧.
/*移动一维数组中的内容,若数组中有n个整数,要求把下标从p到n-1(p≤n-1)的数组元素平移到数组的前面。*/

#include <stdio.h>
#define N 80
void fun(int *w, int p, int n)
{
   int i = 0,b = 0;
   for (i = p;i < n;i++)
   {
       b = w[i];
       w[i] = w[i - p];
       w[i - p] = b;
   }
}
main()
{
  int a[N]={1,2,3,4,5,6,7,8,9,10,11,12,13,14,15};
  int i, p, n=15;
  
  printf("The original data:\n");
  for(i=0;i<n;i++)
     printf("%3d",a[i]);
     
  printf("\n\nEnter p: ");
  scanf("%d",&p);
  fun(a,p,n);
  
  printf("\nThe data after moving:\n");
  for(i=0;i<n;i++)
     printf("%3d",a[i]);
  printf("\n\n");
}
输入P是6,为什么输出会是7,8,9...15,4,5,6,1,2,3
最后这六个数的顺序怎么是这样啊.不应该是1,2,3,4,5,6么
搜索更多相关主题的帖子: 移动 original include 元素 
2011-12-04 19:39
原味好
Rank: 4
来 自:西安
等 级:业余侠客
帖 子:59
专家分:250
注 册:2011-11-29
收藏
得分:5 
你的问题出在:
        那个调用的函数的for循环里面,你是在拿第i个数跟第i-p个数对调,当你输入6时,先把前面1到6分别和7到12互换,然后再到i=n时才停止
        你看我帮你改的,
程序代码:
#include <stdio.h>
#define N 80
void fun(int *w, int p, int n)
{
   int i = 0,j,b = 0;
   for (i = 0;i < p;i++)  //这里到
   {
       b = w[0];
       for (j=0;j<n;j++)
       {
          
           w[j] = w[j+1];
         
       }
       w[14] = b;  // 这里
   }
}
main()
{
  int a[N]={1,2,3,4,5,6,7,8,9,10,11,12,13,14,15};
  int i, p, n=15;

 
  printf("The original data:\n");
  for(i=0;i<n;i++)
     printf("%3d",a[i]);
    
  printf("\n\nEnter p: ");
  scanf("%d",&p);
  fun(a,p,n);

 
  printf("\nThe data after moving:\n");
  for(i=0;i<n;i++)
     printf("%3d",a[i]);
  printf("\n\n");
}
2011-12-04 20:28
吴小杰
Rank: 3Rank: 3
来 自:。。。。。。
等 级:论坛游侠
帖 子:58
专家分:107
注 册:2011-11-11
收藏
得分:5 
for (i = p;i < n;i++)
    {
        b = w[i];
        w[i] = w[i - p];
        w[i - p] = b;
    }
 这里有问题开始是 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15总共要换9次   
        第一次    7 2 3 4 5 6 1 8 9 10 11 12 13 14 15  
                      。。。。。。     
         第6次   7 8 9 10 11 12  1  2  3  4 5 6 13 14  15
         第7次   7 8 9 10 11 12  13 2  3  4 5 6 1  14  15  
         第8次   7 8 9 10 11 12  13 14 3  4 5 6 1  2  15
         第9次   7 8 9 10 11 12  13 14 15 4 5 6 1  2   3

我觉得应该把w[]分为两部分a[]和b[]分别存1-6 和7-15  再进行赋值
2011-12-04 20:38
琉璃瓦
Rank: 2
等 级:论坛游民
帖 子:5
专家分:25
注 册:2011-5-31
收藏
得分:0 
回复 2楼 原味好
2楼想法和我一样,但我想了好一阵
2011-12-04 20:43
暴风雪282
Rank: 4
等 级:业余侠客
帖 子:61
专家分:295
注 册:2011-10-4
收藏
得分:0 
我可以理解你这种方法,答案也是你这样的,但是我没看答案做出的这个是什么错误你说的不是很清楚,我拿他们对调不行么?

Dance like there is nobody.
2011-12-04 20:52
暴风雪282
Rank: 4
等 级:业余侠客
帖 子:61
专家分:295
注 册:2011-10-4
收藏
得分:0 
回复 3楼 吴小杰
嘿嘿,还行啊,这么隐蔽的错误都能看出来.谢谢啊,解决的办法我就自己看看了.

Dance like there is nobody.
2011-12-04 20:55
原味好
Rank: 4
来 自:西安
等 级:业余侠客
帖 子:59
专家分:250
注 册:2011-11-29
收藏
得分:0 
对调当然不行了,因为你的题目要求不是对调两个数。你再仔细好好想想吧,不明白再来问我
2011-12-04 21:01
暴风雪282
Rank: 4
等 级:业余侠客
帖 子:61
专家分:295
注 册:2011-10-4
收藏
得分:0 
回复 7楼 原味好
嘿嘿,看懂你二楼说的了,确实是那样的,谢谢了.

Dance like there is nobody.
2011-12-04 21:08
暴风雪282
Rank: 4
等 级:业余侠客
帖 子:61
专家分:295
注 册:2011-10-4
收藏
得分:0 
回复 2楼 原味好
但是你那个还有个问题,j的坐标放到数组里难道不会越界么.

Dance like there is nobody.
2011-12-04 21:12
快速回复:这是什么问题,帮忙看看吧.
数据加载中...
 
   



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

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