标题:这两个有什么区别?
只看楼主
李若斌
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:219
专家分:184
注 册:2009-9-30
结帖率:90.48%
已结贴  问题点数:30 回复次数:7 
这两个有什么区别?
最近自己理解for循环有点差别,求大家的解释,假设一个输入数组,将数组中的数由大到小输出,程序如下:
#include <stdio.h>                               #include <stdio.h>
void main()                                      void main()
{ int i,j,temp,a[10];                             { int i,j,temp,a[10];
  a[10]={2,4,6,8,9,5,1,3,7,10};                     a[10]={2,4,6,8,9,5,1,3,7,10};
  for(i=0;i<10;i++)                                 for(i=0;i<9;i++)
  { for(j=i+1;j<10;j++)                              {for(j=i+1;j<10;j++)
   {if(a[i]<a[j]) i=j;}                                if(a[i]<a[j])
    temp=a[i];                                            {temp=a[i];
    a[i]=a[j];                                             a[i]=a[j];
    a[j]=temp;                                             a[j]=temp;}
  }                                                      }
 for(i=0;i<10;i++)                                   for(i=0;i<10;i++)
 printf("%d",a[i]);                                  printf("%d",a[i]);
getch();                                             getch();
}                                                    }
左边和右边运行以后会有相同的结果吗?求详细解释。谢谢。。
还有就是疑问一点  如果想在一个for循环里面有两个执行语句,加{}和不加{}是有差别的对吧?我最近有点想不大明白这个问题了。

[ 本帖最后由 李若斌 于 2009-11-14 11:40 编辑 ]
搜索更多相关主题的帖子: void include 
2009-11-14 11:21
xiepanqi
Rank: 2
等 级:论坛游民
帖 子:43
专家分:55
注 册:2009-10-24
得分:5 
你这程序有错误
a[10]赋值错误
第二个for语句j++前面应该是;号


for语句后面不加{}的话就只能有一个语句
加{}就可以执行多个语句
不过一般就算只有一个语句也加{},这样可以让程序更清晰
2009-11-14 11:34
李若斌
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:219
专家分:184
注 册:2009-9-30
得分:0 
回复 2楼 xiepanqi
数组不是这样赋值??
那个j++那里是打错了。我已经改过了。
想问的是两个有什么区别
2009-11-14 11:41
gameohyes
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:湖南
等 级:版主
威 望:53
帖 子:1275
专家分:3629
注 册:2009-3-5
得分:10 
支持楼上
不同之处-> for(i=0;i<10;i++)                                 for(i=0;i<9;i++)
以下放内循环
temp=a[i];
a[i]=a[j];                                       
a[j]=temp;                                          

C#超级群 74862681,欢迎大家的到来!
2009-11-14 11:42
李若斌
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:219
专家分:184
注 册:2009-9-30
得分:0 
回复 4楼 gameohyes
问题的来源是来自与另外一个版主在一个问题中的解答 题目是判断出5个学生四个科目的平均成绩然后由大到小输出。
他的回答是这样的#include<stdio.h>
void main()
{
    int i,j;
    float sum,t;
    float a[5][4],ave[5];
    for (i=0;i<5;i++)
    {
        for(j=0,sum=0;j<4;j++)
        {
        scanf("%f",&a[i][j]);
            sum=sum+a[i][j];
        }
    ave[i]=sum/4;
    }
    for(i=0;i<4;i++)
      {
        for(j=i+1;j<5;j++)
        if(ave[i]<ave[j])
          {t=ave[j];ave[j]=ave[i];ave[i]=t;}    我就是看了这里,觉得有点郁闷了
      }
    for(i=0;i<5;i++)
       printf("%.2f\n",ave[i]);
}
2009-11-14 11:47
lijm1989
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:珠海
等 级:贵宾
威 望:12
帖 子:675
专家分:2844
注 册:2009-10-14
得分:15 
LZ想知道的会不会是选择排序和冒泡排序的区别???  —————以下内容载抄~~~~



================================================
功能:选择排序
输入:数组名称(也就是数组首地址)、数组中元素个数
================================================
*/
/*
====================================================
算法思想简单描述:
在要排序的一组数中,选出最小的一个数与第一个位置的数交换;
然后在剩下的数当中再找最小的与第二个位置的数交换,如此循环
到倒数第二个数和最后一个数比较为止。
选择排序是不稳定的。算法复杂度O(n2)--[n的平方]
=====================================================
*/
void select_sort(int *x, int n)
{
    int i, j, min, t;
    for (i=0; i<n-1; i++) /*要选择的次数:0~n-2共n-1次*/
    {
        min = i; /*假设当前下标为i的数最小,比较后再调整*/
        for (j=i+1; j<n; j++)/*循环找出最小的数的下标是哪个*/
        {
            if (*(x+j) < *(x+min))
            {
                min = j; /*如果后面的数比前面的小,则记下它的下标*/
            }
        }

        if (min != i) /*如果min在循环中改变了,就需要交换数据*/
        {
            t = *(x+i);
            *(x+i) = *(x+min);
            *(x+min) = t;
        }
    }
}

================================================
功能:冒泡排序
输入:数组名称(也就是数组首地址)、数组中元素个数
================================================
*/
/*
====================================================
算法思想简单描述:
在要排序的一组数中,对当前还未排好序的范围内的全部数,自上
而下对相邻的两个数依次进行比较和调整,让较大的数往下沉,较
小的往上冒。即:每当两相邻的数比较后发现它们的排序与排序要
求相反时,就将它们互换。

下面是一种改进的冒泡算法,它记录了每一遍扫描后最后下沉数的
位置k,这样可以减少外层循环扫描的次数。
冒泡排序是稳定的。算法时间复杂度O(n2)--[n的平方]
=====================================================
*/
void bubble_sort(int *x, int n)
{
    int j, k, h, t;

    for (h=n-1; h>0; h=k) /*循环到没有比较范围*/
    {   
        for (j=0, k=0; j<h; j++) /*每次预置k=0,循环扫描后更新k*/
        {
            if (*(x+j) > *(x+j+1)) /*大的放在后面,小的放到前面*/
            {
                t = *(x+j);
                *(x+j) = *(x+j+1);
                *(x+j+1) = t; /*完成交换*/
                k = j; /*保存最后下沉的位置。这样k后面的都是排序排好了的。*/
            }
        }
    }
}
2009-11-14 11:51
李若斌
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:219
专家分:184
注 册:2009-9-30
得分:0 
回复 6楼 lijm1989
正解。我一直不大明白为什么大家用第二个程序,哎...明白了。自己把自己套死了。书上还写了个错误的程序,我还在疑问为什么for循环下面好几个语句为什么只在第二个for循环中加{}。。。。。
2009-11-14 12:05
dong152liang
Rank: 2
来 自:廊坊
等 级:论坛游民
帖 子:56
专家分:29
注 册:2009-11-8
得分:0 
这时起泡法比较法,十个数只需要九趟比较,左边哪个是比较十趟多了一次,这没什么大错误,
起泡法原理
第一趟比较
第一次
2 4
6 8 9 5 1 3 7 10  互换 4 2 6 8 9 5 1 3 7 10
第二次
4 2 6 8 9 5 1 3 7 10互换 6 2 4 8 9 5 1 3 7 10
6 2 4 8 9 5 1 3 7 10 互换8 2 4 9 5 1 3 7 10
以此类推
第二趟就是用第二个数了也就是2一次比较,第一个数是最大的数不用比较,所以就少一次比较了
2009-11-14 12:25



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




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

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