鱼C论坛

 找回密码
 立即注册
查看: 563|回复: 7

关于for循环break跳出的问题

[复制链接]
发表于 2022-8-8 22:22:27 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
最近看 谭浩强老师的 程序如下,有个问题想请教:
#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;} //此处为什么,要用break跳出,
a[i]=n;
for(i=0;i<=10;i++)
printf("%d ",a[i]);
printf("\n");
}

//请教一下各位,备注部分里面有break跳出循环,既然跳出循环了,那么又是如何将数组 依次向后移动一位的。执行的顺序没搞懂,不太理解!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2022-8-8 22:23:32 | 显示全部楼层
就是没想通,既然在对比时进行for循环,依次将数组向后移,为什么移一位后,就break跳出了,到上个for中的if(n>a[i])不就是i越来越大了,再把n赋予a[i],越看越不对,所以问一下,备注部分的break是否是在for(s=9;s>=i,s--) a[s+1]=a[s];执行循环完成之后再执行的break呢?我是初学者,有点看不懂了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-8-8 22:35:24 | 显示全部楼层
又是谭老师的教材,他把你带偏了
提问题之前请先把代码格式化好,就算你看着这样的代码没什么感觉
那你也得考虑给你回答问题的我们
你觉得我们看到这样的代码是什么样的感觉吗?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-8-8 22:46:06 | 显示全部楼层
括号有点乱呀
但是那个break是在for(s=9;s>=i,s--) a[s+1]=a[s];执行完了以后执行的
for(s=9;s>=i,s--) a[s+1]=a[s];//注意这里的分号,这段代码相当于
for(s=9;s>=i,s--)
{
    a[s+1]=a[s];
}
break;//这个break是针对外面的for的,这应该是一个排序,然后插入n的程序
没有{}来声明代码块的话,for语句就只对紧跟在他后面的语句起作用。
在c语言里{}外的语句会把{}里面的语句当作一句代码来看待
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-8-9 01:06:59 | 显示全部楼层
for 循环完了再 break 的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-8-9 10:39:41 | 显示全部楼层
本帖最后由 柿子饼同学 于 2022-8-9 10:43 编辑

看看别的吧 qwq
这代码太阴间了
帮你改了 排版 , 以后照着别人的代码写 , 不要再这样写了
你这个主要问题是那个 for 循环如果没加大括号就只执行最近的一个语句
即使有语句在它下面也不会执行
另外 , 你的 main 的 int 没加 , 后面 return 0; 没加
建议以后看到循环就加大括号 , 至少清楚一点
千万不要 不要 不要 这么写代码了  
#include<stdio.h>

int main(){
    int i, j, p, q, s, n;
    int 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");

    return 0;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

 楼主| 发表于 2022-8-9 12:10:57 | 显示全部楼层
感谢各位大侠,因为教材是这样写的,所以就原样复制下来了,以后会排版的   ,现在才明白,原来 在for循环结束之前  ;是单独一个,我总把循环体当成for的一部分,理所当然就break跳出了。谢谢各位的解答!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-8-10 04:09:36 | 显示全部楼层
wjs3721 发表于 2022-8-9 12:10
感谢各位大侠,因为教材是这样写的,所以就原样复制下来了,以后会排版的   ,现在才明白,原来 在for循环 ...

如果问题解决了请选一个最满意答案设为最佳答案,谢谢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-10-8 22:12

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表