学C的第六天(深入了解 分支语句 和 循环语句 )(2)

简介: 2.switch语句:switch语句也是一种分支语句,常常用于多分支的情况。语法结构:

2.switch语句:

switch语句也是一种分支语句,常常用于多分支的情况。

语法结构:

switch (整型表达式)                      


{                                                      


                               case 整型常量表达式: // case相当于入口                      


语句;                      


                                break; // break相当于出口                      


                               case 整型常量表达式: // case相当于入口                      


语句;                      


                                break; // break相当于出口                      


                               case 整型常量表达式: // case相当于入口                      


语句;                      


                 break; // break相当于出口      


......              


}      

//switch语句
#include <stdio.h>
int main()
{
  int day = 0;
  scanf("%d", &day);
  switch (day) // 得输入整型表达式
  {
  case 1: // case后写整形常量表达式
    printf("星期一\n"); //语句
    break; // 如果进入对应的case语句的话,退出switch语句,
         // 否则之后的case语句也会被执行
  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;
}

                  image.png                            default子句(设置输出超过case的情况下的操作方法):

//switch语句
#include <stdio.h>
int main()
{
  int day = 0;
  scanf("%d", &day);
  switch (day) // 得输入整型表达式
  {
  case 1: // case后写整形常量表达式
    printf("星期一\n"); //语句
    break; // 如果进入对应的case语句的话,退出switch语句,
         // 否则之后的case语句也会被执行
  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;
  default:
    printf("输入错误");
        break;
  }
  return 0;
}

    e52d19d6874349b0a50a2066063c8180.png

(default不用非得放在switch的最后

(switch也允许嵌套使用break只会跳出一层switch

补充:

1. 星期一 ~ 星期五打印"weekday",星期六 ~ 星期日打印”weekend“:多个case实现同一效果(不用巧用break

//巧用break
#include <stdio.h>
int main()
{
  int day = 0;
  scanf("%d", &day);
  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;
}


image.png

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

 

二.循环语句 (循环结构):

1.while循环语句:

while - 语法格式:

while (表达式)


{                      

......

循环语句;

}                      

 

(循环语句执行完后,再判定表达式,若成立,再进入while循环)

//while循环
#include <stdio.h>
int main()
{
  int n = 1;
  //使用while循环打印 1~10
  while ( n <= 10 )
  {
    printf("%d ", n);
    n++;
  }
  return 0;
}

93f368391e13463f89ed5cfef3128d8a.png

补充:

1. while循环语句中的 break:嵌套if语句再利用break来(跳出)终止循环

(在循环中只要遇到break,就停止后期的所有的循环、直接终止循环

所以:while中的break是用于永久终止循环的。)

//while循环
#include <stdio.h>
int main()
{
  int n = 1;
  //使用break终止while循环
  while (n <= 10)
  {
    if (n == 5)
    {
      break;
    }
    printf("%d ", n);
    n++;
  }
  return 0;
}

image.png

2. while循环语句中的 continue:跳过本次循环continue后边的代码,直接去while循环的判断部分


(continue是用于终止本次循环的,就是本次循环中continue后边的代码不会再执行,


而是直接跳转到while语句的判断部分,进行下一次循环的入口判断


多层循环中,只会跳出内层循环,一次只能跳出一层循环。)

//while循环
#include <stdio.h>
int main()
{
  int n = 1;
  //使用continue跳过循环中continue后面的语句
  while (n <= 10)
  {
    if (n == 5)
    {
      continue;
    }
    printf("%d ", n);
    n++;
  }
  return 0;
}

68e7cc419d6a4e37bfcbd2eb90a229c9.png

3.利用while和getchar()函数来实现多组输入

*getchar()函数putchar()函数

//getchar() 和 putchar()
#include <stdio.h>
int main()
{
  // getchar()函数:接收一个字符
  // 如果接收失败的话,会返回EOF(即-1),
  // 所以,该函数的返回类型是 int,
  // 接收该函数返回值的变量也应该是int
  // 因为字符本质是ASCii码,所以也可以接收字符
  int ch = getchar();
  // 跟getchar对应的还有putchar
  // putchar()函数:打印字符,只能打印字符
  putchar(ch);
  return 0;
}


3342394581d546f8919ee8dd94ae16df.png

*实现多组输入

//getchar()实现多组输入;
#include <stdio.h>
int main()
{
  int ch = 0;
  // EOF - end of file - 文件结束标志
  // #define EOF    (-1)
  // 在函数读取失败的时候返回了 EOF
  // 之前介绍过利用 scanf函数 来实现多组输入 
  // scanf 函数读取成功,返回的是读取到的数据的个数
  // 读取失败返回 EOF
  // 
  // getchar 读取成功返回字符的ASCII码值
  // 读取失败返回EOF
  // 回车也会读取,先读输入的字符,在读回车
  // 
  // ctrl + Z - 会让 scanf 或者 getchar 返回 EOF
  while ( (ch = getchar()) != EOF )
  {
    putchar( ch );
  }
  return 0;
}

image.png

4.利用while和getchar清空缓冲区

getchar方法取走\n‘回车’)重点!!

#include <stdio.h>
int main()
{
  //密码:123456
  char password[20] = { 0 };
  printf("请输入密码:>");
  scanf("%s", password); // 数组本身就是地址,所以这里不用加&(取地址符)重点!!
  printf("请确认密码(Y/N):");
  char input = 0;
  getchar(); // 把键盘输入的 \n(回车) 取走 
  scanf("%c", &input); // 因为input是变量,所以要加&(取地址符)
  if ('Y' == input)
  {
    printf("确认成功\n");
  }
  else 
  {
    printf("确认失败\n");
  }
  return 0;
}

a900a580c1774159b48d6751848a22e2.png

(出问题)d7e9dec648f342de9e32c01328bc2650.png

*getchar方法循环取走\n‘回车’(清空缓冲区)

#include <stdio.h>
int main()
{
  //密码:123456
  char password[20] = { 0 };
  printf("请输入密码:>");
  scanf("%s", password); // 数组本身就是地址,所以这里不用加&(取地址符)重点!!
  printf("请确认密码(Y/N):");
  char input = 0;
  //getchar(); // 把键盘输入的 \n(回车) 取走 
  //清理掉缓冲区中剩余的数据
  while ( getchar() != '\n' )//循环直到取走\n(回车)为止
  {
    ;
  }
  scanf("%c", &input); // 因为input是变量,所以要加&(取地址符)
  if ('Y' == input)
  {
    printf("确认成功\n");
  }
  else 
  {
    printf("确认失败\n");
  }
  return 0;
}


image.png

2.for循环语句:

3.do while循环语句:

三.转向语句:

1.break转向语句:

多用于switch语句,和循环语句,进入对应case语句后,执行到case里的break跳出switch循环,防止再执行该case语句以下的case语句。在switch语句中,我们没办法直接实现分支,搭配break使用才能实现真正的分支。


在循环中只要遇到break,就停止后期的所有的循环、直接终止循环。

2.goto转向语句:(遇到再说明)

3.continue转向语句:

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

多层循环中,只会跳出内层循环一次只能跳出一层循环

4.return转向语句:

返回一个值,可以使用返回的值,平常写的main方法里就经常使用,因为main方法前面的返回类型是int,所以在main方法的代码块的最后总会写上 "return 0"。


可以在自定义的函数中使用 retuan 语句,当在主方法中调用该函数时,使用这个返回的值。


return会结束整个main函数(主程序)。

相关文章
|
21天前
|
Go C语言
分支语句与循环语句,详细讲解
分支语句与循环语句,详细讲解
|
2月前
|
缓存 编译器 Go
分支语句和循环语句
分支语句和循环语句
56 0
|
8月前
|
编译器 C语言 C++
分支语句和循环语句上
分支语句和循环语句
41 0
分支语句和循环语句上
|
7月前
|
数据安全/隐私保护 C语言
分支语句与循环语句(2)
分支语句与循环语句(2)
44 0
|
7月前
|
C语言
分支语句和循环语句(1)
分支语句和循环语句(1)
38 0
|
8月前
|
编译器
分支语句与循环语句题
分支语句与循环语句题
49 0
|
8月前
|
缓存 Go 数据安全/隐私保护
分支语句和循环语句下
分支语句和循环语句
57 0
|
8月前
|
算法 数据安全/隐私保护
分支语句与循环语句——练习
分支语句与循环语句——练习
39 0
|
9月前
|
数据安全/隐私保护
【分支语句与循环语句】
【分支语句与循环语句】
36 0
|
11月前
|
C语言
超详细的分支和循环语句知识点
超详细的分支和循环语句知识点