亲宝软件园·资讯

展开

C语言选择与循环结构

清风自在 流水潺潺 人气:0

一、程序中的选择结构(if)

if的用法

上代码:

#include <stdio.h>
int main()
{
    short a = 1;
    short b = 2;
    int c = a - b;
    if( c > 0 )
    {
        printf("a > b\n");
    }
    else
    {
        printf("a <= b\n");
    }
    return 0;
}

下面为输出结果:

if ... else ...剪裁与组合

裁剪

组合

上代码:

#include <stdio.h>
int main()
{
    short a = 2;
    short b = 2;
    int c = a - b;
    if( c > 0 )
        printf("a > b\n");
    else if( c == 0 )
        printf("a == b\n");
    else
        printf("a < b\n");
    return 0;
}

下面为输出结果:

小结

二、switch多分支选择语句

switch-更简洁的多分支选择结构

上代码:

#include <stdio.h>
int main()
{
    int a = 1;
    int b = 2;
    char sign = 0;
    printf("Input a sign: ");
    scanf("%c", &sign);
    switch(sign)
    {
        case '+':
            printf("%d + %d = %d\n", a, b, a + b);
            break;
        case '-':
            printf("%d - %d = %d\n", a, b, a - b);
            break;
        case '*':
            printf("%d * %d = %d\n", a, b, a * b);
            break;
        default:
            printf("Unsupported Sign: %c\n", sign);
    }
    return 0;
}

下面为输出结果:

switch 实验小结

switch 语句的分支合并技巧

上代码:

#include <stdio.h>
int main()
{
    int num = 0;
    printf("Input a number: ");
    scanf("%d", &num);
    switch( num )
    {
        case 1:
        case 2:
        case 3:
        case 4:
        case 5:
            printf("%c\n", 'A' + (num - 1));
            break;
        default:
            printf("Invalid Input\n");
    }
    return 0;
}

下面为输出结果:

小结

三、while循环结构

while - 循环结构的直接支持

 

上代码:

#include <stdio.h>
int main()
{
    int sum = 0;
    int i = 1;
    while( i <= 100 )
    {
        sum = sum + i;
        i = i + 1;
    }
    printf("sum = %d\n", sum);
    printf("i = %d\n", i);
    return 0;
}

下面为输出结果:

进阶while循环

上代码:

#include <stdio.h>
int main()
{
    int sum = 0;
    int i = 1;
    while( i <= 1000 )
    {
        if( (i % 3) == 0 )
        {
            sum = sum + i;
            printf("i = %d\n", i);
        }
        i = i + 1;
    }
    printf("sum = %d\n", sum);
    return 0;
}

下面为部分输出结果:

小结

if 语句可以看作只循环一次的 while 语句

while语句可以看作扩展的 if 语句

while(...)
    if(...)
        while(...)
        {
        }

四、do...while 与 for

do...while 循环结构

do...while 的构成与执行

上代码:

#include <stdio.h>
int main()
{
    int sum = 0;
    int input = 0;
    int i = 0;
    while( i > 100 )
        printf("while( i > 0 )\n");
    do
        printf("do...while( i > 0 )\n");
    while( i > 100 );
    do
    {
        printf("Input: ");
        scanf("%d", &input);
        sum = sum + input;
    } while( sum < 100 );
    printf("sum = %d\n", sum);
    return 0;
}

下面为输出结果:

这里注意一个问题:while 和 do...while 的区别,可以看到 i 为 0 时,while 循环里面的不会执行,而 do...while 会执行一次。

循环结构的套路

真:执行循环体

假:结束循环

for循环结构(更简洁的循环结构)

for ( 0.初始化循环变量; 1.循环条件; 3.改变循环变量 )

{

2.循环体;

}

可以用下面的图表示:

上代码:

#include <stdio.h>
int main()
{
    int esum = 0;
    int osum = 0;
    int i = 0;
    for(i=1; i<=100; i=i+2)
    {
        osum = osum + i;
        esum = esum + (i + 1);
    }
    printf("osum = %d\n", osum);
    printf("esum = %d\n", esum);
    return 0;
}

下面为输出结果:

for循环注意事项

for ( 0.初始化循环变量; 1.循环条件; 3.改变循环变量 )

{

2.循环体;

}

上代码:

#include <stdio.h>
int main()
{
    int sum = 0;
    int i = 1;
    for(; i <= 100; )
    {
        sum = sum + i;
        i = i + 1;
    }
    printf("sum = %d\n", sum);
    return 0;
}

下面为输出结果:

小结

五、break和continue

再论break

上代码:

#include <stdio.h>
int main()
{
    int sum = 0;
    int i = 1;
    while( 1 )
    {
        sum = sum + i;
        if( i == 100 )
            break;
        i = i + 1;
    }
    printf("sum = %d\n", sum);
    printf("i = %d\n", i);
    return 0;
}

下面为输出结果:

再上一段代码:

#include <stdio.h>
int main()
{
    int target = 30;
    int input = 0;
    for(;;)
    {
        printf("Input: ");
        scanf("%d", &input);
        if( input == target )
            break;
        else if( input < target )
            printf("It's small!\n");
        else if( input > target )
            printf("It's big!\n");
    }
    printf("Target = %d\n", input);
    return 0;
}

下面为输出结果:

break遵循最近匹配原则

上代码:

#include <stdio.h>
int main()
{
    int i = 0;
    for(i=1; i<=10; i=i+1)
    {
        switch( i % 2 )
        {
        case 0:
            printf("%d is even number!\n", i);
            break;
        case 1:
            printf("%d is odd number!\n", i);
            break;
        }
    }
    return 0;
}

下面为输出结果:

可以看到,break 对应的是 switch ,而不是 for,这就是 break 的最近匹配原则。

再上一段代码:

#include <stdio.h>
int main()
{
    int k = 0;
    int input = 0;
    printf("Input: ");
    scanf("%d", &input);
    switch( input % 2 )
    {
        case 0:
            printf("case 0\n");
            for(k=0; k<=2; k=k+1)
                if( k )
                    break;
        break;
        case 1:
            printf("case 1\n");
        break;
    }
    return 0;
}

下面为输出结果:

如果把case 0 下面的 break 去掉一个,那么输出结果就会变成下面这样:

这还是因为 break 的最近匹配原则,去掉一个 break 后,break匹配的就是 for 了,所以也会输出第二个 case 后面的内容。

continue一循环体终结者

上代码,打印1000以内能被7整除的整数,并统计数量:

#include <stdio.h>
int main()
{
    int i = 0;
    int n = 0;
    for(i=1; i<1000; i=i+1)
    {
        if( i % 7 )
            continue;
        printf("%d ", i);
        n = n + 1;
    }
    printf("\n");
    printf("Count: %d\n", n);
    return 0;
}

下面为输出结果:

小结

加载全部内容

相关教程
猜你喜欢
用户评论