| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 265 人关注过本帖
标题:求教一个循环起始位置改变的问题
只看楼主 加入收藏
kknd84913
Rank: 1
等 级:新手上路
帖 子:61
专家分:0
注 册:2012-12-26
结帖率:0
收藏
 问题点数:0 回复次数:5 
求教一个循环起始位置改变的问题
#include "stdio.h"

int findmax(int *pt,int n)
{
    int *p;
    int t;
    for(;n>=0;n--)  
    {
        for(p=pt;p<pt+n;p++)
        {
   
            if((*p)<*(p+1))
            {
                printf("第%d次交换前数据是:*p=%d,*(p+1)=%d\n",16-n,*p,*(p+1));
                t=*(p+1);
                *(p+1)=*p;
                *p=t;
                printf("交换的结果是:*p=%d,*(p+1)=%d\n\n",*p,*(p+1));
            }
        }
    }

}

main()
{
    int i,x;
    int Num[15]={1,13,4,3,6,5,7,10,19,12,34,56,43,11,23};
    printf("寻找最大的元素的指针\n\n");
    printf("原数组是:\n");
    for(i=0;i<15;i++)
        printf("%d ",Num[i]);
    printf("\n");
    findmax(Num,15);
   
}
为什么这段程序第一次循环从数组0元素开始循环对比 在执行n--一次后就改为从数组3  4位开始对比元素了呢?
搜索更多相关主题的帖子: include 
2013-01-10 11:36
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:528
帖 子:9025
专家分:54030
注 册:2011-1-18
收藏
得分:0 
代码烂也就不说了
明明是个排序功能,却把函数名叫findmax,中文解释又是“寻找最大的元素的指针”
2013-01-10 12:13
XQwindow
Rank: 2
等 级:论坛游民
帖 子:121
专家分:64
注 册:2013-1-1
收藏
得分:0 
额,是排序还是互换?

我不知道我能否当程序员,但我依然热爱编程!
2013-01-10 12:16
x_x
Rank: 2
等 级:论坛游民
帖 子:44
专家分:43
注 册:2012-10-16
收藏
得分:0 
按照你的理解,互换的话,就不必两个循环,
#include "stdio.h"

void findmax(int *pt,int n)//没有返回值,改为 void
 {
     int *p;
     int t;
 //    for(;n>=0;n--)
  //   {
         for(p=pt;p<pt+n;p++)
         {
   
            if((*p)<*(p+1))
             {
                 printf("第%d次交换前数据是:*p=%d,*(p+1)=%d\n",p-pt,*p,*(p+1));
                 t=*(p+1);
                 *(p+1)=*p;
                 *p=t;
                 printf("交换的结果是:*p=%d,*(p+1)=%d\n\n",*p,*(p+1));
             }
         }
    // }

}

void main()//加void
 {
     int i;
     int Num[15]={1,13,4,3,6,5,7,10,19,12,34,56,43,11,23};
//   printf("寻找最大的元素的指针\n\n");
     printf("原数组是:\n");
     for(i=0;i<15;i++)
         printf("%d ",Num[i]);
     printf("\n");
     findmax(Num,15);
   
}

2013-01-10 12:59
x_x
Rank: 2
等 级:论坛游民
帖 子:44
专家分:43
注 册:2012-10-16
收藏
得分:0 
回复 4楼 x_x
还有点问题,应该是这样。
#include "stdio.h"

void findmax(int *pt,int n)
 {
     int *p;
     int t;
 //    for(;n>=0;n--)
  //   {
         for(p=pt;p<pt+n-1;p++)
         {
   
            if((*p)<*(p+1))
             {
                 printf("第%d次交换前数据是:*p=%d,*(p+1)=%d\n",p-pt+1,*p,*(p+1));
                 t=*(p+1);
                 *(p+1)=*p;
                 *p=t;
                 printf("交换的结果是:*p=%d,*(p+1)=%d\n\n",*p,*(p+1));
             }
         }
    // }

}

void main()
 {
     int i;
     int Num[15]={1,13,4,3,6,5,7,10,19,12,34,56,43,11,23};
//   printf("寻找最大的元素的指针\n\n");
     printf("原数组是:\n");
     for(i=0;i<15;i++)
         printf("%d ",Num[i]);
     printf("\n");
     findmax(Num,15);
   
}

 
2013-01-10 13:03
kknd84913
Rank: 1
等 级:新手上路
帖 子:61
专家分:0
注 册:2012-12-26
收藏
得分:0 
回复 5楼 x_x
刚才考虑了一个小时 知道问题出在哪了  就是printf("第%d次交换前数据是:*p=%d,*(p+1)=%d\n",p-pt+1,*p,*(p+1))语句位置不对所以输出的值不是想要的值知识满足IF条件前提条件下的值,子函数是用来排序的(题目要求子函数必须是一个指向函数的指针即返回主函数的值也必须是指针)然后返回排好序的数组的首地址,然后在主函数中输出这个数组。整个程序也编号运行了  谢谢各位的指导。

[ 本帖最后由 kknd84913 于 2013-1-10 13:51 编辑 ]
2013-01-10 13:49
快速回复:求教一个循环起始位置改变的问题
数据加载中...
 
   



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

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