C语言学习打卡DAY4|分支和循环

一、逻辑操作符:&& , || , !

C语言中的逻辑操作符包括:

  1. && 逻辑与操作符:用于判断两个条件是否同时成立,如果两个条件都为真,返回真,否则返回假。

  2. || 逻辑或操作符:用于判断两个条件是否存在一个为真,如果其中一个条件为真,返回真,否则返回假。

  3. ! 逻辑非操作符:用于将一个条件取反,如果条件为真,返回假,反之亦然。

这些逻辑操作符通常用于条件语句和循环语句中,可以帮助我们进行复杂的逻辑判断和控制程序流程。

练习:闰年的判断

输⼊⼀个年份year,判断year是否是闰年
闰年判断的规则:

  1. 能被4整除并且不能被100整除是闰年
  2. 能被400整除是闰年
#include <stdio.h>
//代码1
int main()
{
 int year = 0;
 scanf("%d", &year);
 if(year%4==0 && year%100!=0)
 printf("是闰年\n");
 else if(year%400==0)
 printf("是闰年\n");
 
 return 0;
}
//代码2
int main()
{
 int year = 0;
 scanf("%d", &year);
 if((year%4==0 && year%100!=0) || (year%400==0))
 printf("是闰年\n");
 
 return 0;
}
短路

C语言中的短路求值(Short-circuit evaluation)是指在逻辑表达式中,当第一个操作数已经可以确定整个表达式的值时,就不再对后面的操作数进行求值的过程。

例如,在一个if语句中,如果第一个条件为假,则不会再对后面的条件进行求值,因为无论后面是什么结果都不会影响整个if语句的结果。

C语言中的逻辑与(&&)和逻辑或(||)操作符都支持短路求值。当使用逻辑与操作符时,如果第一个操作数为假,则整个表达式为假,不再对后面的操作数进行求值;当使用逻辑或操作符时,如果第一个操作数为真,则整个表达式为真,不再对后面的操作数进行求值。

短路求值可以提高程序的效率和执行速度,同时也可以使程序更加简洁和易读。但是,在某些情况下,过度依赖短路求值可能会导致代码的理解和维护变得困难。因此,在编写代码时,需要根据具体情况灵活使用短路求值。

二、switch语句

C语言的 switch 语句是一种多分支选择结构,它的作用是根据一个表达式的值,在若干个常量表达式中选择一个执行相应的语句。

switch 语句的基本语法如下:

switch(expression){
    case constant1:
        statement1;
        break;
    case constant2:
        statement2;
        break;
    ...
    default:
        statementN;
}

其中,expression 是要进行比较的表达式,constant1, constant2, … 是若干个常量表达式,用来与 expression 进行比较,如果匹配则执行相应的语句 (statement1, statement2, …)。如果所有的常量表达式都不匹配,则执行 default 后面的语句 (statementN)。

注意,每个 case 后面都要加上 break 语句,否则程序会继续执行下去,直到遇到 breakswitch 语句结束为止。default 语句是可选的,但是通常建议加上,以处理未匹配的情况。在 switch 语句中 case 语句和 default 语句是没有顺序要求的,只要你的顺序是满足实际需求的就可以。不过我们通常是把 default 语句放在最后处理的。

• switch 后的 expression 必须是整型表达式
• case 后的值,必须是整形常量表达式

下面是一个简单的 switch 语句示例:

#include <stdio.h>

int main() {
    int day = 3;

    switch (day) {
        case 1:
            printf("Monday\n");
            break;
        case 2:
            printf("Tuesday\n");
            break;
        case 3:
            printf("Wednesday\n");
            break;
        case 4:
            printf("Thursday\n");
            break;
        case 5:
            printf("Friday\n");
            break;
        case 6:
            printf("Saturday\n");
            break;
        case 7:
            printf("Sunday\n");
            break;
        default:
            printf("Invalid day\n");
            break;
    }

    return 0;
}

输出结果为:

Wednesday

在上面的程序中,我们定义了一个变量 day 的值为 3,然后使用 switch 语句匹配该值,输出相应的星期几。由于 day 的值为 3,所以匹配了 case 3,输出了 Wednesday。

三、while循环

C语言中的while循环是一个重复执行某个代码块的控制流结构。它的语法如下:

while (condition) {
  // code block to be executed
}

在这个语法中,condition(条件)是一个布尔表达式或者可以被强制转换为布尔值的表达式。只要条件为真,code block(代码块)就会被重复执行。

while循环的工作流程如下:

  1. 检查条件,如果条件为false,跳出循环,继续执行下一条语句;
  2. 如果条件为true,执行循环中的代码块;
  3. 执行完毕后再次检查条件,如果条件为true,跳回步骤2。

需要注意的是,如果条件一直为true,那么while循环将一直循环下去,直到程序被强制结束或者出现其他跳出循环的语句(如break或return)。

下面是一个简单的while循环的示例,它会输出数字1到5:

#include <stdio.h>

int main() {
    int i = 1;
    while (i <= 5) {
        printf("%d ", i);
        i++;
    }
    return 0;
}

输出结果为:

1 2 3 4 5 

四、for循环

C语言中的for循环是一个常用的循环控制结构,它可以方便地进行循环计数,并且通常能够比while循环更简洁地实现特定的循环需求。

for循环的语法如下:

for (表达式1;表达式2;表达式3) {
    // code block to be executed
}

表达式1 ⽤于循环变量的初始化
表达式2 ⽤于循环结束条件的判断
表达式3 ⽤于循环变量的调整

for循环的工作流程如下:

  1. 初始化计数器变量;
  2. 检查条件,如果为false,跳出循环,继续执行下一条语句;
  3. 如果条件为true,执行循环中的代码块;
  4. 执行完毕后执行计数器递增或递减的表达式;
  5. 再次检查条件,如果为true,跳回步骤3。

for循环中,可以省略任何一个或所有三个语句,但是分号必须保留。如果省略了条件,循环将一直进行下去,直到程序出现了breakgotoreturn或异常等跳出循环的语句。

练习:在屏幕上打印1~10的值
参考代码:

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

五、do-while循环

C语言中的do-while循环是一种基于条件的循环语句,它先执行循环体中的代码块,然后再进行条件判断,根据条件是否成立来决定是否再次执行循环操作。无论条件是否成立,do-while循环中的代码块至少会执行一次。

do-while循环的语法格式如下:

do {
    //循环体代码
} while (循环条件);

其中,循环条件是一个表达式,当其值为true(非零)时,继续执行循环体中的代码。如果循环条件为false(0),则跳出循环。与其他循环语句一样,do-while循环中的循环体代码可以是一个语句块(由一对大括号包围的多条语句)。

下面是一个do-while循环的示例代码:

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

以上代码中,循环体中的代码会被执行5次,因为循环条件为i < 5,只要i小于5时,就一直执行循环体中的代码,当i等于5时,循环结束。

六、break和continue语句

C语言中的breakcontinue语句常用于控制循环的流程。它们可以用在forwhiledo-while等循环控制语句中。

break语句

break语句用于在循环执行过程中跳出该循环,它可以用于forwhiledo-while等循环结构。当break语句被执行时,程序会跳出当前循环,继续执行循环外的下一条语句。

示例代码:

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

输出结果为:

0
1
2
3
4

当i等于5时,break语句被执行,循环中断,因此只输出了0到4。

continue语句

continue语句用于跳过循环中的某个迭代,继续执行下一次迭代,它同样可以用于forwhiledo-while等循环结构。continue 可以帮助我们跳过某⼀次循环 continue 后边的代码,直接到循环的判断部分,进行下⼀次循环的判断。

示例代码:

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

输出结果为:

0
1
2
3
4
6
7
8
9

当i等于5时,continue语句被执行,该次循环被跳过,因此不输出5,而是直接继续执行下一次循环输出6到9。

七、循环的嵌套

练习
找出100~200之间的素数,并打印在屏幕上。
注:素数又称质数,只能被1和本身整除的数字。

题目解析:

  1. 要从100 ~ 200之间找出素数,首先得有100~200之间的数,这⾥可以使用循环解决。
  2. 假设要判断i是否为素数,需要拿2 ~ i-1之间的数字去试除i,需要生成2~i-1之间的数字,也可以使用循环解决。
  3. 如果2~i-1之间有数字能整除i,则i不是素数,如果都不能整除,则i是素数。

参考代码:

#include <stdio.h>
int main()
{
    int i = 0;
    //循环产⽣100~200的数字
    for(i=100; i<=200; i++)
   {
         //判断i是否为素数
         //循环产⽣2~i-1之间的数字
         int j = 0;
         int flag = 1;//假设i是素数
         for(j=2; j<i; j++)
         {
             if(i % j == 0)
             {
                 flag = 0;
                 break;
             }
         }
         if(flag == 1)
            printf("%d ", i);
    }
    return 0;
}

八、goto语句

在 C 语言中,可以使用 goto 语句跳转到程序中的其他位置。具体语法如下:

goto label;

// ...

label: statement;

其中,label 是一个用户定义的标签,statement 是要执行的语句。当程序执行到 goto 语句时,会跳转到 label 标记的位置执行 statement 语句,然后继续执行后面的语句。

使用 goto 语句可以跳出多重嵌套的循环或者在程序中实现类似 switch 语句的功能。但是,过度使用 goto 语句可能会使程序难以理解和维护,应该尽量避免滥用。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值