C语言学习系列-->第四弹【分支和循环】(上)

简介: C语言学习系列-->第四弹【分支和循环】

前言

从本节开始,将进入C语言循环分支结构,在学习过程中,需要多敲代码,多刷题。

下面是来自牛客竞赛的小白题,学习完本节,可以进行相应的练习:

选择结构程序设计

循环结构程序设计

一、if 语句

1.1 基本 if 语句

if(条件表达式){
    //语句
}

条件表达式为真,就执行语句;条件表达式为假,就不执行语句。通俗易懂!

在C语⾔中,0为假,⾮0表⽰真,也就是表达式的结果如果是0,则语句不执⾏,表达式的结果如果是不是0,则语句执⾏。

#include <stdio.h> 
int main(){
    int a;  //定义一个int型变量a
    scanf("%d", &a);  //读入a的值
    if(a != 0){  //如果a的值不为0
        printf("%d\n", a);  //输出a的值并输出一个回车
    }
    //若a的值为0,则不会执行任何内容,程序正常退出
    return 0;
}

1.2 else 语句

if ( 表达式 )
    语句1
else
  语句2

举个例子:

#include <stdio.h> 
int main(){
    int a;  //定义一个int型变量a
    scanf("%d", &a);  //读入a的值
    if(a != 0){  //如果a的值不为0
        printf("%d\n", a);  //输出a的值并输出一个回车
    }
    else{
        printf("a的值为0!\n");  //若a的值为0,输出"a的值为0!"并输出一个回车
    }
    return 0;
}

1.3 else if 语句

if(条件表达式1){
        //语句1
    }
    else if(条件表达式2){
        //语句2
    }
    else{
        //语句3
    }

举个例子:

#include <stdio.h> 
int main(){
    int a;  //定义一个int型变量a
    scanf("%d", &a);  //读入a的值
    if(a > 100){  //如果a的值大于100
        printf("%d\n", a - 100);  //输出a - 100的值并输出一个回车
    }
    else if(a > 0 && a <= 100){  //如果a的值大于0且a的值小于等于100
        printf("%d\n", a + 100);  //输出a + 100的值并输出一个回车
    }
    else if(a == 0){  //若a的值为0
        printf("a的值为0!\n");  //输出"a的值为0!"并输出一个回车
    }
    else{
        printf("a的值为小于0!\n");  //若a的值不满足以上所有条件,输出"a的值小于0!"并输出一个回车
    }
    return 0;
}

1.4 嵌套 if 语句

在 if else 语句中, else 可以与另⼀个 if 语句连⽤,构成多重判断。

#include <stdio.h> 
int main(){
    int a;  //定义一个int型变量a
    scanf("%d", &a);  //读入a的值
    if(a > 0){
        if(a > 100){  //如果a的值大于100
            printf("%d\n", a - 100);  //输出a - 100的值并输出一个回车
        }
        else{
            printf("%d\n", a + 100);  //输出a + 100的值并输出一个回车
        }
    }
    else if(a == 0){  //若a的值为0
        printf("a的值为0!\n");  //输出"a的值为0!"并输出一个回车
    }
    else{
        printf("a的值为小于0!\n");  //若a的值不满足以上所有条件,输出"a的值小于0!"并输出一个回车
    }
    return 0;
}

以上就是嵌套if语句的语法,有了嵌套if语句,就可以完成更多复杂逻辑的判断。

1.5 else 悬空问题

如果有多个 if 和 else ,可以记住这样⼀条规则, else 总是跟最接近的 if 匹配。

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

上⾯的代码排版,让 else 和第⼀个 if 语句对⻬,让我们以为 else 是和第⼀个if匹配的,当 if语句不成⽴的时候,⾃然想到的就是执⾏ else ⼦句,打印 haha ,但实际上 else 是和第⼆个 if进⾏匹配的,这样后边的 if…else 语句是嵌套在第⼀个 if 语句中的,如果第⼀个 if 语句就不成⽴,嵌套 if 和 else 就没机会执⾏了,最终啥都不打印。

如果我们希望else确实和第⼀个if匹配,可以这样修改代码:

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

只要带上适当的⼤括号,代码的逻辑就会更加的清晰,所以⼤家以后在写代码的时候要注意括号的使⽤,让代码的可读性更⾼。

二、关系操作符

• > ⼤于运算符
• < ⼩于运算符
• >= ⼤于等于运算符
• <= ⼩于等于运算符
• == 相等运算符
• != 不相等运算符

关系表达式常⽤于 if 或 while 结构。

注意,相等运算符与赋值运算符 = 是两个不⼀样的运算符,不要混淆。

另⼀个需要避免的错误是:多个关系运算符不宜连⽤

三、逻辑操作符

逻辑运算符提供逻辑判断功能,⽤于构建更复杂的表达式,主要有下⾯三个运算符。
• ! :逻辑取反运算符(改变单个表达式的真假)。
• && :与运算符,就是并且的意思(两侧的表达式都为真,则为真,否则为假)。
• || :或运算符,就是或者的意思(两侧⾄少有⼀个表达式为真,则为真,否则为假)。

注:C语⾔中,⾮0表⽰真,0表⽰假

逻辑取反运算符

⽐如,我们有⼀个变量叫 flag ,如果flag为假,要做⼀个什么事情,就可以这样写代码:

if(!flag)
{
 printf("do something\n");
}

如果 flag 为真, !flag 就是假,如果 flag 为假, !flag 就是真
所以上⾯的代码的意思就是 flag 为假,执⾏if语句中的代码。

四、switch 语句

4.1 作用

执行多条件分支语句。

4.2 语法

switch(expression){
    case value1:执行语句1; break;
    case value2:执行语句2; break;
    ...
    default: 执行语句n; break;
}

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

•case 和后边的数字之间必须有空格
•每⼀个 case 语句中的代码执⾏完成后,需要加上 break ,才能跳出这个switch语句。

4.3 switch语句中的case和default的顺序问题

在 switch 语句中 case ⼦句和 default ⼦句有要求顺序吗? default 只能放在最后吗?
其实,在 switch 语句中 case 语句和 default 语句是没有顺序要求的,只要你的顺序是满⾜实
际需求的就可以。
不过我们通常是把 default ⼦句放在最后处理的。

目录
相关文章
|
1月前
|
C语言
初识C语言2——分支语句和循环语句
初识C语言2——分支语句和循环语句
68 5
|
29天前
|
C语言
【c语言】分支语句
C语言通过三种基本结构——顺序、选择和循环,构建复杂的程序逻辑。本文主要介绍了C语言的选择结构,即if-else语句及其变体,包括简单的if语句、if-else组合、else if多分支判断、嵌套if以及解决悬空else问题的方法。此外,还详细讲解了逻辑运算符和关系运算符的使用,以及如何利用条件操作符简化逻辑判断。最后,文章对比了if-else与switch语句在实现多分支逻辑时的应用,并解释了switch语句中的break和default关键字的作用。
30 8
|
28天前
|
C语言
【c语言】循环语句
循环结构是C语言中用于简化重复操作的重要工具,主要包括while循环、do-while循环和for循环。while循环是最基本的形式,通过不断检查条件来决定是否继续执行循环体。do-while循环则先执行循环体,再检查条件,至少执行一次。for循环逻辑更复杂,但使用频率最高,适合初始化、条件判断和更新变量的集中管理。此外,循环中还可以使用break和continue语句来控制循环的提前终止或跳过当前迭代。最后,循环可以嵌套使用,解决更复杂的问题,如查找特定范围内的素数。
36 6
|
1月前
|
Serverless C语言
C语言控制语句:分支、循环和转向
C语言控制语句:分支、循环和转向
|
1月前
|
算法 编译器 C语言
【C语言】实现猜数字游戏(分支语句与循环语句的运用)
【C语言】实现猜数字游戏(分支语句与循环语句的运用)
|
1月前
|
C语言
教你快速理解学习C语言的循环与分支
教你快速理解学习C语言的循环与分支
15 0
|
1月前
|
小程序 C语言
初识C语言:走近循环
初识C语言:走近循环
|
1月前
|
编译器 C语言 C++
【C语言】循环语句(语句使用建议)
【C语言】循环语句(语句使用建议)
|
1月前
|
C语言 C++
C语言 之 内存函数
C语言 之 内存函数
34 3
|
C# C语言 C++
从头开始学习c语言
以前的时候学习C语言时候认为C语言不过是一个学习的工具,学习一些理论知识就达到目的了,谁会用这么傻的语言啊,连个界面也没有,不像vb一下子就做出一个窗体来,放上几个按钮就可以了 后来学习C++的时候,认为C++与C是一种完全不同的语言,两者基本没有什么兼容性,当时在学校里看书的时候,一直比较纳闷为会c++的书上会写C++/C语言教程,到了现在才明白,我去C++与C本来就是一体是一脉相承的
1049 0