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 ⼦句放在最后处理的。

目录
相关文章
|
9天前
|
存储 C语言
C语言学习记录——动态内存函数介绍(malloc、free、calloc、realloc)
C语言学习记录——动态内存函数介绍(malloc、free、calloc、realloc)
17 1
|
9天前
|
编译器 C语言 C++
C语言学习记录——位段(内存分配、位段的跨平台、位段的应用)
C语言学习记录——位段(内存分配、位段的跨平台、位段的应用)
11 0
|
9天前
|
C语言
c语言循环题目
c语言循环题目
|
9天前
|
测试技术 C语言
数据结构学习记录——树习题—Tree Traversals Again(题目描述、输入输出示例、解题思路、解题方法C语言、解析)
数据结构学习记录——树习题—Tree Traversals Again(题目描述、输入输出示例、解题思路、解题方法C语言、解析)
9 1
|
9天前
|
存储 算法 安全
数据结构学习记录——图应用实例-拯救007(问题描述、解题思路、伪代码解读、C语言算法实现)
数据结构学习记录——图应用实例-拯救007(问题描述、解题思路、伪代码解读、C语言算法实现)
10 0
|
9天前
|
程序员 C语言 C++
C语言学习记录——动态内存习题(经典的笔试题)、C/C++中程序内存区域划分
C语言学习记录——动态内存习题(经典的笔试题)、C/C++中程序内存区域划分
9 0
|
9天前
|
C语言
C语言学习记录——动态内存开辟常见的错误
C语言学习记录——动态内存开辟常见的错误
9 1
|
9天前
|
存储 C语言
C语言学习记录——通讯录(动态内存)
C语言学习记录——通讯录(动态内存)
7 0
|
9天前
|
C语言
C语言学习记录——通讯录(静态内存)
C语言学习记录——通讯录(静态内存)
13 2
|
9天前
|
存储 C语言
C语言学习记录——联合体(共用体、特点、用法、联合体大小计算)
C语言学习记录——联合体(共用体、特点、用法、联合体大小计算)
13 2