迭代中断条件

时间:2017-08-15 12:05:08

标签: c for-loop iteration break control-flow

以下是我写的插入排序代码

#include<stdio.h>
#include<conio.h>
void main()
{
    int i, j, a[10], temp, f = 0, k = 0;
    clrscr();
    printf("\n\t\t\t\tINSERTION SORT\nEnter the Array:-\n");
    for (i = 0; i <= 9; i++)
        scanf("%d", &a[i]);
    for (i = 0; i <= 9; i++)                  // 1st for loop
    {
        temp = a[i];
        for (j = 0; j <= i - 1; j++)               // 2nd  for loop
        {
            f = 0;
            if (a[i]<a[j])                      //  if loop
            {
                for (k = i - 1; k >= j; k--)            //   3rd for loop
                    a[k + 1] = a[k];
                a[k + 1] = temp;
                break;                              // break statement
            }
        }
    }
    printf("\nThe sorted array is:-\n");
    for (i = 0; i <= 9; i++)
        printf("%d\n", a[i]);
    getch();
}

我被告知break语句会停止特定时刻( nth 当前运行最内层循环的时间&amp;启动其下一个实例( n + 1 time)。所以在这里我很困惑,这里的break语句是否会停止第三个循环或条件。但是我被告知它会影响第二个循环。

这里的任何人都可以告诉我哪个for循环会产生影响。

1 个答案:

答案 0 :(得分:4)

break停止循环,而不是if语句。

所以这里:

for (i = 0; i <= 9; i++)                 // 1st for loop
{
    temp = a[i];
    for (j = 0; j <= i - 1; j++)         // 2nd  for loop
    {
        f = 0;
        if (a[i]<a[j])                   //  if STATEMENT
        {
            for (k = i - 1; k >= j; k--) //   3rd for loop
                a[k + 1] = a[k];
            a[k + 1] = temp;
            break;                      // break statement
        }
    }
}

,假设i的值为0,当break执行时,阻止第二个循环再次执行,您将退出该循环。因此,您将在第一个循环中再次进行,其中将开始新的迭代,i等于1.

您所描述的内容建议使用continue关键字,该关键字仅与循环有关,它不会直接影响if语句。

在上面的代码中,如果使用continue语句而不是break语句,那么您将跳过该迭代(意味着{{1}以下没有任何内容将被执行),并继续第二个循环的下一次迭代(给continue增加一个值)。但是,在你的代码中,没有任何内容,因此它不会有任何区别。

PS:

此评论错误:

j

if语句不是循环。