C语言从入门到入土(入门篇)(分支语句与循环语句p1)

目录

分支语句和循环语句

1. 什么是语句?

2. 分支语句(选择结构)

2.1 if语句

2.1.1 悬空else

2.1.2 if书写形式的对比

2.1.3 练习

2.2 switch语句

2.2.1 在switch语句中的 break

2.2.2 default子句

2.2.3 练习

3. 循环语句

3.1 while循环

3.1.1 while语句中的break和continue


分支语句和循环语句

分支语句
  1. if
  2. switch
循环语句
  1. while
  2. for
  3. do while
goto语句        

1. 什么是语句?

C 语句可分为以下五类:
1. 表达式语句
2. 函数调用语句
3. 控制语句
4. 复合语句
5. 空语句
控制语句 用于控制程序的执行流程,以实现程序的各种结构方式,它们由特定的语句定义符组成, C 语 言有九种控制语句。
可分成以下三类:
1. 条件判断语句也叫分支语句: if 语句、 switch 语句;
2. 循环执行语句: do while 语句、 while 语句、 for 语句;
3. 转向语句: break 语句、 goto 语句、 continue 语句、 return 语句。

2. 分支语句(选择结构)

如果你好好学习,校招时拿一个好 offer ,走上人生巅峰。
如果你不学习,毕业等于失业,回家卖红薯。
这就是选择!

2.1 if语句

if 语句的语法结构是怎么样的呢?
语法结构:
if ( 表达式 )
    语句 ;
if ( 表达式 )
    语句 1 ;
else
    语句 2 ;
// 多分支    
if ( 表达式 1 )
    语句 1 ;
else if ( 表达式 2 )
    语句 2 ;
else
    语句 3 ;
演示代码:
#include <stdio.h>
// 代码 1
int main ()
{
int age = 0 ;
    scanf ( "%d" , & age );
    if ( age < 18 )
  {
        printf ( " 未成年 \n" );
  }
}
// 代码 2
#include <stdio.h>
int main ()
{
int age = 0 ;
    scanf ( "%d" , & age );
    if ( age < 18 )
  {
        printf ( " 未成年 \n" );
  }
    else
  {
        printf ( " 成年 \n" );
  }
}
// 代码 3
#include <stdio.h>
int main ()
{
int age = 0 ;
    scanf ( "%d" , & age );
    if ( age < 18 )
  {
        printf ( " 少年 \n" );
  }
    else if ( age >= 18 && age < 30 )
  {
        printf ( " 青年 \n" );
  }
    else if ( age >= 30 && age < 50 )
  {
      printf ( " 中年 \n" );
  }
    else if ( age >= 50 && age < 80 )
  {
        printf ( " 老年 \n" );
  }
    else
  {
        printf ( " 老寿星 \n" );
  }
   
}
解释一下:
如果表达式的结果为真,则语句执行。
C 语言中如何表示真假?
0 表示假,非 0 表示真。

左边这个程序是怎么算的呢?其实我们以输入10为例,10输入进去后,先是 18<=10 为假  然后程序变为  0<40   ,然后0<40为真变为1,恒成立程序,进入程序内部。所以不要这么写 ,要写成:

如果条件成立,要执行多条语句,怎应该使用代码块。
#include <stdio.h>
int main ()
{
    if ( 表达式 )
  {
        语句列表 1
  }
    else
  {
        语句列表 2
  }
    return 0 ;
}
这里的一对 { } 就是一个代码块。

2.1.1 悬空else

当你写了这个代码:
#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 ;
}
改正:
// 适当的使用 {} 可以使代码的逻辑更加清楚。
// 代码风格很重要
#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 的匹配 else 是和它离的最近的 if 匹配的。

2.1.2 if书写形式的对比

// 代码 1
if ( condition ) {
    return x ;
}
return y ;
// 代码 2
if ( condition )
{
    return x ;
}
else
{
  return y ;
}
// 代码 3
int num = 1 ;
if ( num == 5 )
{
    printf ( "hehe\n" );
}
// 代码 4
int num = 1 ;
if ( 5 == num )
{
    printf ( "hehe\n" );
}
代码 2 和代码 4 更好,逻辑更加清晰,不容易出错。

这样的结果是打印出了  hehe  违背初始的意愿,所以我们一般用更好一点的方式去写

像这样

这个时候如果写错了,编译器会报错的,更有利于我们发现问题。 这个写法适用于一个变量与一个常量相不相等的情况下(这将是一个很好的编程习惯)。 

2.1.3 练习

1. 判断一个数是否为奇数
2. 输出 1-100 之间的奇数

2.2 switch语句

switch 语句也是一种分支语句。
常常用于多分支的情况。
比如:
输入 1 ,输出星期一
输入 2 ,输出星期二
输入 3 ,输出星期三
输入 4 ,输出星期四
输入 5 ,输出星期五
输入 6 ,输出星期六
输入 7 ,输出星期日
那我没写成 if...else if ...else if 的形式太复杂,那我们就得有不一样的语法形式。
这就是 switch 语句。
switch ( 整型表达式 )
{
    语句项;
}
语句项 是什么呢?
// 是一些 case 语句:
// 如下:
case 整形常量表达式 :
    语句 ;

2.2.1 switch语句中的 break

switch 语句中,我们没办法直接实现分支,搭配 break 使用才能实现真正的分支。
比如:
#include <stdio.h>
int main ()
{
    int day = 0 ;
    switch ( day )
  {
        case 1
            printf ( " 星期一 \n" );
            break ;
        case 2 :
            printf ( " 星期二 \n" );
            break ;
        case 3 :
            printf ( " 星期三 \n" );
            break ;    
        case 4 :
            printf ( " 星期四 \n" );
            break ;    
        case 5 :
            printf ( " 星期五 \n" );
            break ;
        case 6 :
            printf ( " 星期六 \n" );
            break ;
        case 7 :
            printf ( " 星期天 \n" );    
            break ;
  }
    return 0 ;
}
有时候我们的需求变了:
1. 输入 1-5 ,输出的是 “weekday”;
2. 输入 6-7 ,输出 “weekend”
所以我们的代码就应该这样实现了:
#include <stdio.h>
//switch 代码演示
int main ()
{
    int day = 0 ;
    switch ( day )
  {
        case 1
case 2 :
        case 3 :
        case 4 :
        case 5 :
            printf ( "weekday\n" );
            break ;
        case 6 :
        case 7 :
            printf ( "weekend\n" );
            break ;
  }
    return 0 ;
}
break 语句 的实际效果是把语句列表划分为不同的分支部分。
编程好习惯
在最后一个 case 语句的后面加上一条 break 语句。
(之所以这么写是可以避免出现在以前的最后一个 case 语句后面忘了添加 break 语句)。

2.2.2 default子句

如果表达的值与所有的 case 标签的值都不匹配怎么办?
其实也没什么,结构就是所有的语句都被跳过而已。
程序并不会终止,也不会报错,因为这种情况在 C 中并不认为是个错误。
但是,如果你并不想忽略不匹配所有标签的表达式的值时该怎么办呢?
你可以在语句列表中增加一条 default 子句,把下面的标签
default
写在任何一个 case 标签可以出现的位置。
switch 表达式的值并不匹配所有 case 标签的值时,这个 default 子句后面的语句就会执行。
所以,每个 switch 语句中只能出现一条 default 子句。
但是它可以出现在语句列表的任何位置,而且语句流会像执行一个 case 标签一样执行 default 子句。

(default放在第一行也是可以的,只是习惯放在最后一行) 

编程好习惯
在每个 switch 语句中都放一条 default 子句是个好习惯,甚至可以在后边再加一个 break

2.2.3 练习

#include <stdio.h>
int main ()
{
    int n = 1 ;
  int m = 2 ;
    switch ( n )
  {
    case 1 :
            m ++ ;
    case 2 :
            n ++ ;
    case 3 :
            switch ( n )
          { //switch 允许嵌套使用
            case 1 :
                    n ++ ;
            case 2 :
                    m ++ ;
                    n ++ ;
                    break ;
          }
    case 4 :
            m ++ ;
            break ;
    default :
            break ;
  }
    printf ( "m = %d, n = %d\n" , m , n );
    return 0 ;
}
结果是:m=5,n=3
因为嵌套switch里面的break跳出循环时只能跳出里面的switch(即跳出case3),然后就执行case4.遇到break跳出外面的switch。

3. 循环语句

  1. while
  2. for
  3. do while

3.1 while循环

我们已经掌握了, if 语句:
if ( 条件 )
    语句 ;
当条件满足的情况下, if 语句后的语句执行,否则不执行。
但是这个语句只会执行一次。
由于我们发现生活中很多的实际的例子是:同一件事情我们需要完成很多次。
那我们怎么做呢?
C 语言中给我们引入了: while 语句,可以实现循环。
//while 语法结构
while ( 表达式 )
循环语句 ;
while 语句执行的流程:

比如我们实现:

在屏幕上打印1-10的数字。

#include <stdio.h>

int main ()
{
     int i = 1 ;
     while ( i <= 10 )
     {
             printf ( "%d " , i );
                     i = i + 1 ;
     }
     return 0 ;
上面的代码已经帮我了解了 while 语句的基本语法,那我们再了解一下:

3.1.1 while语句中的breakcontinue

break 介绍
//break 代码实例
#include <stdio.h>
int main ()
{
    int i = 1 ;
    while ( i <= 10 )
    {
          if ( i == 5 )
              break ;
              printf ( "%d " , i );
            i = i + 1 ;
     }
     return 0 ;
}

   

总结:

breakwhile循环中的作用:

其实在循环中只要遇到 break ,就停止后期的所有的循环,直接终止循环。
所以: while 中的 break 是用于 永久 终止循环的。
continue 介绍
//continue 代码实例 1
#include <stdio.h>
int main ()
{
        int i = 1 ;
                while ( i <= 10 )
     {
                  if ( i == 5 )
                        continue ;
                printf ( "%d " , i );
                i = i + 1 ;
       }
return 0 ;
}

      

这里代码输出的结果是什么?

总结:

continue while 循环中的作用就是:
continue 是用于终止本次循环的,也就是本次循环中 continue 后边的代码不会再执行,
而是直接跳转到 while 语句的判断部分。进行下一次循环的入口判断。

好啦!!!

由于时间原因,今天就先到这里啦!

下一篇我们接着讲哈!

如果感觉对你有用,就来个点赞加关注吧!

谢谢大家!!!

猜你喜欢

转载自blog.csdn.net/weixin_62700590/article/details/120936640