if,switch,do,while,for分析

本文深入探讨C语言中的关键字,如if、switch等控制结构及bool型变量的正确使用方法,并通过实例对比不同循环语句的特点。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

关键字的秘密

专题一:关键字的秘密。包括以下章节:

  • 基本数据类型分析
  • auto,register,static分析
  • if,switch,do,while,for分析
  • goto,void,extern,sizeof分析
  • const,volatile分析
  • struct,union分析
  • enum,typedef分析

if语句注意事项

  • bool型变量应该直接出现在条件中,不要进行比较
#include <stdio.h>

typedef enum bool
{
    FALSE = 0,
    TRUE = -1
}BOOL;


int main()
{

    BOOL b;
    int i = -1;
    //在c语言中没有标准的bool类型
    //在c语言中只有0和非0,所以TRUE不一定必须为1
    if(b==-1)
    {
        printf("TRUE\n");
    }
    else
    {
        printf("FALSE\n");
    }

    return 0;
}
  • 普通变量与0值相比较,0值应该出现在比较符号的左边
#include <stdio.h>

int main()
{
    int i = 0;

    if(i=-1)//本应该是i==-1,打印结果为FALSE;但是写成了i=-1,结果却是TURE;写成-1=i时,在编译阶段就会报错。
    {
        printf("TRUE\n");
    }
    else
    {
        printf("FALSE\n");
    }

    return 0;
}
  • float类型的变量不能直接与0进行比较,需要定义精度
#include <stdio.h>

#define E 0.00000001 //精度到小数点后8位,可以设置其他的精度

int main()
{
    float f = 5.0;
    //计算机中精度是有限度的,超过一定范围后,会出现不准确
    if((5.0-E <= f)&&(f <= 5.0+E))//不是5.0==f
    {
        printf("TRUE\n");
    }
    else
    {
        printf("FALSE\n");
    }

    return 0;
}

switch语句分析

  • case语句中的值是能是整型或字符型
  • case语句排列
    • 按数字或字母排列个语句
    • 正常情况放前面,异常情况放后面
    • default只用于处理正在的默认情况

实例分析3-1:if和switch使用分析

#include <stdio.h>

void f1(int i)
{
    if( i < 6 )
    {
        printf("Failed!\n");
    }
    else if( (6 <= i) && (i <= 8) )
    {
        printf("Good!\n");
    }
    else
    {
        printf("Perfect!\n");
    }
}

void f2(char i)
{
    switch(i)
    {
        case 'c':
            printf("Compile\n");
            break;

        case 'd':
            printf("Debug\n");
            break;

        case 'o':
            printf("Object\n");
            break;

        case 'r':
            printf("Run\n");
            break;

        default:
            printf("Unknown\n");
            break;

    }
}

int main()
{
    f1(5);
    f1(9);

    f2('o');
    f2('d');
    f2('e');

    return 0;
}

小结

  • if语句适用于按“片段”进行判断的条件中
  • switch语句适用于需要对各个离散值进行分别判断的条件中
  • if语句可以从功能上完全替代switch语句,switch无法替代if语句
  • switch对于多分支条件判断的情形更加简洁

do,while,for区别

  • do语句先执行后判断,至少执行一次
  • while语句先判断后执行,有可能一次也不执行
  • for语句先判断后执行,比while更简洁

实例分析3-2:循环语句使用对比(自然数累加)

#include <stdio.h>

int f1(int n)
{
    int ret = 0;
    int i = 0;

    for(i=1; i<=n; i++)
    {
        ret += i;
    }

    return ret;
}

int f2(int n)
{
    int ret = 0;

    //n为负数时,会成死循环
    //while( n && (ret += n--) );
    while( (n > 0) && (ret += n--) );

    return ret;
}

int f3(int n)
{
    int ret = 0;

//n为负数时,会首先执行一次
//    do{
//          ret += n--;
//    }while( n > 0 );

    if( n > 0 )
    {
        do
        {
            ret += n--;
        }while( n );
    }

    return ret;
}

int main()
{
    //for循环进行累加计算最简洁明了
    //while和do..while比较复杂
    printf("%d\n", f1(10));
    printf("%d\n", f2(10));
    printf("%d\n", f3(10));
    return 0;
}

实例分析3-3:do和break妙用

#include <stdio.h>
#include <malloc.h>

int func(int n)
{
    int i = 0;
    int ret = 0;
    int* p = (int*)malloc(sizeof(int) * n);

     //使用do..break好处:
     //1,一个入口,一个出口
     //2,里面的所有判断都可以break跳出,不需要每个free()
     //3,避免内存泄漏
    do
    {
        if( NULL == p ) break;

        if( n < 0 ) break;

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

        ret = 1;
    }while(0);

    free(p);

    return ret;
}

int main()
{
    if( func(10) )
    {
        printf("OK");
    }
    else
    {
        printf("ERROR");
    }

    return 0;
}
好的,我来为您详细讲解 Java 中的 ifforswitchwhiledo while 语句。 1. if 语句 if 语句用于根据条件执行不同的代码块。语法如下: ``` if (条件) { // 如果条件为真,执行此处的代码块 } ``` 如果条件为真,则会执行代码块中的代码;如果条件为假,则会跳过代码块中的代码。 if 语句还可以与 else 语句结合使用,用于在条件为假时执行另一段代码块。语法如下: ``` if (条件) { // 如果条件为真,执行此处的代码块 } else { // 如果条件为假,执行此处的代码块 } ``` 2. for 语句 for 语句用于重复执行代码块。语法如下: ``` for (初始化语句; 条件; 循环迭代语句) { // 迭代执行此处的代码块 } ``` for 语句的执行顺序如下: - 执行初始化语句; - 检查条件是否为真; - 如果条件为真,则执行代码块中的代码; - 执行循环迭代语句; - 回到第二步,继续检查条件是否为真。 for 语句还可以与 break 和 continue 语句配合使用,用于提前结束循环或跳过某次循环。其中,break 语句用于完全结束循环,而 continue 语句用于跳过本次循环。具体用法可以根据实际情况进行调整。 3. switch 语句 switch 语句用于根据不同的情况执行不同的代码块。语法如下: ``` switch (表达式) { case 值1: // 如果表达式的值等于值1,则执行此处的代码块 break; case 值2: // 如果表达式的值等于值2,则执行此处的代码块 break; // 其他 case 语句 default: // 如果表达式的值不等于任何一个 case 中的值,则执行此处的代码块 break; } ``` switch 语句会根据表达式的值来匹配不同的 case 语句,如果匹配成功,则会执行对应的代码块。如果没有匹配成功,则会执行 default 语句中的代码块。在每个 case 语句的代码块中,可以使用 break 语句来完全结束 switch 语句。 4. while 语句 while 语句用于重复执行某个代码块,直到条件不再成立。语法如下: ``` while (条件) { // 只要条件为真,就会重复执行此处的代码块 } ``` while 语句会在每次循环开始时检查条件是否为真,如果为真,则执行代码块中的代码,然后再次检查条件是否为真,直到条件不再成立。如果条件一开始就为假,则不会执行代码块中的代码。 5. do while 语句 do while 语句与 while 语句类似,也是用于重复执行某个代码块,直到条件不再成立。不同的是,do while 语句会先执行一次代码块,然后再检查条件是否为真。语法如下: ``` do { // 至少会执行一次此处的代码块 } while (条件); ``` do while 语句保证了代码块至少会被执行一次,然后在每次循环结束时检查条件是否为真,如果为真,则继续执行代码块中的代码,直到条件不再成立。如果条件一开始就为假,则只会执行一次代码块中的代码。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值