| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 988 人关注过本帖
标题:我是小白,请教for循环break
只看楼主 加入收藏
wjs3721
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2021-6-1
结帖率:0
收藏
已结贴  问题点数:20 回复次数:6 
我是小白,请教for循环break
#include<stdio.h>
main()
{
int i,j,p,q,s,n,a[11]={127,3,6,28,54,68,87,105,162,18};
for(i=0;i<10;i++)
{ p=i;q=a[i];
for(j=i+1;j<10;j++)
if(q<a[j]) {p=j;q=a[j];}
if(p!=i)
{
s=a[i];
a[i]=a[p];
a[p]=s;
}
printf("%d ",a[i]);
}
printf("\ninput number:\n");
scanf("%d",&n);
for(i=0;i<10;i++)
if(n>a[i])
{for(s=9;s>=i;s--) a[s+1]=a[s];
break;}

a[i]=n;
for(i=0;i<=10;i++)
printf("%d ",a[i]);
printf("\n");
}

请教一下各位,红色部分里面有break跳出循环,既然跳出循环了,那么又是如何将数组 依次向后移动一位的。执行的顺序没搞懂,不太理解!

[此贴子已经被作者于2022-8-7 23:45编辑过]

搜索更多相关主题的帖子: printf i++ break for 循环 
2022-08-07 23:42
wjs3721
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2021-6-1
收藏
得分:0 
就是没想通,既然在对比时进行for循环,依次将数组向后移,为什么移一位后,就break跳出了,到上个for中的if(n>a[i])不就是i越来越大了,再把n赋予a[i],越看越不对,所以问一下,红色部分的break是否是在for(s=9;s>=i,s--) a[s+1]=a[s];执行循环完成之后再执行的break呢?我是初学者,有点看不懂了
2022-08-08 00:15
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:528
帖 子:9031
专家分:54061
注 册:2011-1-18
收藏
得分:10 
为什么移一位后,就break跳出了
因为你不肯将代码排版,故意让自己理不清代码。最终求仁得仁,误认为“移一位后,就break跳出”
2022-08-08 08:35
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:528
帖 子:9031
专家分:54061
注 册:2011-1-18
收藏
得分:0 
程序代码:
#include <stdio.h>

int main( void )
{
    int a[11] = { 127, 3, 6, 28, 54, 68, 87, 105, 162, 18 };

    // 将数组a前10个元素从大到小排序(使用原代码中的选择排序法)
    const size_t N = sizeof(a)/sizeof(*a)-1;
    for( size_t i=0; i!=N; ++i )
    {
        size_t min_idx = i;
        for( size_t j=i+1; j!=N; ++j )
        {
            if( a[min_idx] < a[j] )
                min_idx = j;
        }
        if( min_idx != i )
        {
            int tmp = a[i];
            a[i] = a[min_idx];
            a[min_idx] = tmp;
        }
    }

    // 输出排序后的数组
    for( size_t i=0; i!=N; ++i )
        printf( "%d%c", a[i], " \n"[i+1==N] );

    // 输入一个待插入的元素
    int n;
    printf( "input number: " );
    scanf( "%d", &n );

    // 确定插入位置
    size_t insert_idx;
    for( insert_idx=0; insert_idx!=N && a[insert_idx]>=n; ++insert_idx );
    // 将 insert_idx 位置之后的元素右挪一位,腾出位置
    for( size_t i=N; i!=insert_idx; --i )
        a[i] = a[i-1];
    // 插入n
    a[insert_idx] = n;

    // 输出插入后的整个数组
    for( size_t i=0; i!=N+1; ++i )
        printf( "%d%c", a[i], " \n"[i+1==N+1] );
}
2022-08-08 08:58
wjs3721
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2021-6-1
收藏
得分:0 
回复 3楼 rjsp
大神,这是 谭浩强 C语言的教程里的举例程序,因为我所是初学,所以没搞懂。感觉是跳出循环了,而执行结果是对的。确实是break没弄明白,不是说遇到break就跳出了吗,难道是在  ; 之前执行和;之后执行的结果不一样么

[此贴子已经被作者于2022-8-8 20:43编辑过]

2022-08-08 20:30
不会游泳的虾
Rank: 7Rank: 7Rank: 7
等 级:贵宾
威 望:27
帖 子:109
专家分:679
注 册:2021-7-1
收藏
得分:10 
见注释,供参考:
程序代码:
#include <stdio.h>
int main()
{
    int i, j, p, q, s, n, a[11] = { 127,3,6,28,54,68,87,105,162,18 };
    for (i = 0; i < 10; i++) //这一段是选择排序,将数组a[]元素按降序排序
    {
        p = i; q = a[i];
        for (j = i + 1; j < 10; j++) {
            if (q < a[j]) {
                p = j; q = a[j];
            }
        }
        if (p != i)
        {
            s = a[i];
            a[i] = a[p];
            a[p] = s;
        }
        printf("%d ", a[i]);
    }
    printf("\ninput number:\n"); //输入待插入的数值 n
    scanf("%d", &n);            
    for (i = 0; i < 10; i++) {  
        if (n > a[i])
        {
            for (s = 9; s >= i; s--)//将数组元素后移一位,直到下标为 i 的位置
                a[s + 1] = a[s];    //循环移动,直到 s==i。
            break; // 这个 break; 是跳出 for (i = 0; i < 10; i++) 循环
        }
    }
    a[i] = n; //将 n 插入到数组 a[i] 
    for (i = 0; i <= 10; i++) //输出插入 n 后的数组
        printf("%d ", a[i]);
    printf("\n");
    return 0;
}
2022-08-10 08:53
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:528
帖 子:9031
专家分:54061
注 册:2011-1-18
收藏
得分:0 
以下是引用wjs3721在2022-8-8 20:30:18的发言:

……这是 谭浩强 C语言的教程里的举例程序,……

谭浩强的代码也是排版的,无论谭浩强有多么神奇,毕竟也是个普通人类,不排版的代码他也无法阅读。
2022-08-12 10:39
快速回复:我是小白,请教for循环break
数据加载中...
 
   



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

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