C语言学习-分支与循环语句(2)

简介: C语言学习-分支与循环语句(2)

思维导图

1. 什么是语句?

C语句可分为以下五类:


1. 表达式语句 2. 函数调用语句 3. 控制语句 4. 复合语句 5. 空语句


不过这一次要介绍的是控制语句。


C语言有九种控制语句:



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

2.1 if语句

if 语句的语法结构:



注:当表达式判断为真,则执行语句。


在C语言中0表示假,非0表示真。


如果想要 if 执行多条语句:



2.1.1 悬空else


注意:else 是与离他最近的 if 匹配的,


此处并未进入第二个 if 语句中,所以编译器不打印任何东西。


2.1.2 if书写形式的对比


2.1.3 练习

巩固一个知识最好的办法就是练习,没有之一。


1. 判断一个书是否为奇数:



2. 输出1~100之间的奇数:



2.2 switch语句

switch语句常用于多分支的情况。


例:(选择输出每一个工作日)


如果使用 if...else if ...else if 的话,那太复杂了,我们需要不一样的语法形式:



2.2.1 在switch语句中的 break

假如我想输入1~5时,打印“工作日”,输入6~7时,打印休息日,该怎么实现呢?



2.2.2 default子句

那如果输入的值与所有case都不符合会怎么样?


这样编译器会跳过这条switch语句,如果你不想它被跳过,可以添加一条default子句。



2.2.3 练习

请问下面这段代码会输出什么呢?(可以停下来算一算)



过程分析及结果:



你算对了吗?


3. 循环语句


3.1 while循环

我们已经掌握了 if 语句,但是这语句只能执行一次。


而生活中同一件事我们可能要做很多次,这时候就要用到 while 循环。


例:我们用while循环打印数字1~10:



3.1.1 while语句中的break和continue、

有关break:



总结:使用break可以跳出循环。


有关continue:



总结:使用continue会跳回循环入口判断。


3.2 for循环

既然我们有了while循环,为啥还要有for循环呢?


例:用for循环打印数字1~10:

显而易见,for循环比while更好用,所以在C语言日常使用for循环更多。


3.2.2 break和continue在for循环中

break与continue在for循环中与while中的意义是相同的:



3.2.3 for语句的循环控制变量

注:不要在for循环内修改变量,容易导致for循环失去控制。


例:




3.2.4 一些for循环的变种


变种:



3.2.5 一道笔试题:

请问这个循环要循环多少次?



所以循环0次。


3.3 do...while()循环

3.3.1 do语句的语法:


3.3.2 do while循环中的break和continue



3.4 练习

小试牛刀,让你对循环语句了解更加透彻。


1. 计算n的阶乘:



2. 计算1!+2!+3!+......n! 的值:



3. 在一个有序数组中查找具体的某个数字n


方法一(逐个寻找):



如果数组中不存在这个数:



方法二(二分查找):


如果在一个很大的数组中查找时,比如一个数组有几百万个数字,那逐个查找的效率就很低了。


而使用二分查找,每次查找都能排除一半的数,效率就非常高了。




4. 编写代码,演示多个字符从两端移动,向中间汇聚。


#include
#include
#include//system函数调用的头文件
#include//Sleep函数调用的头文件
int main()
{
  char arr1[] = "welcome to my blog!!!";
  char arr2[] = "*********************";
  int left = 0;
  int right = strlen(arr1) - 1;
  while (left <= right)
  {
  arr2[left] = arr1[left];
  arr2[right] = arr1[right];
  printf("%s", arr2);
  Sleep(1000);//Sleep函数是实现睡眠,单位是毫秒(让程序暂停一会儿)
  system("cls");//system是一个库函数,可以执行系统命令,cls是清空屏幕的一个命令
  left++;
  right--;
  }
  printf("%s", arr2);
  return 0;
}

5. 编写代码实现,模拟用户登录情景,并且只能登录三次。


(只允许输入三次密码,如果密码正确则提示登录成功,如果三次均输入错误,则退出程序)


#include
int main()
{
  int i = 0;
  char passward[20] = { 0 };//创建字符数组
  int sign = 0;//标记
  for (i = 0; i < 3; i++)
  {
  printf("请输入密码:");
  scanf("%s", passward);//数组名本身算作地址,所以不用取地址
  if (0 == strcmp(passward, "123456"))//假设密码是123456
  {
    printf("登陆成功\n");
    sign = 1;
    break;
  }
  else
  {
    printf("密码错误");
  }
  }
  if (0 == sign)
  {
  printf("三次密码输入错误,程序退出");
  }
  return 0;
}


3.4.1 猜数字游戏实现

#define _CRT_SECURE_NO_WARNINGS 1
#include
#include
#include
void menu()
{
  printf("**********************************\n");
  printf("****** 开始游戏:1  退出游戏:0  ****\n");
  printf("**********************************\n");
}
void game()
{
  int ret = rand() % 100 + 1;//生成随机数1~100 (rand函数是专门用来生成随机数的)
                            //rand函数返回的是0~RAND_MAX(32767)之间的一个随机数
  while (1)
  {
  printf("请输入数字:");
  int num = 0;
  scanf("%d", &num);
  if (num < ret)
  {
    printf("猜小了\n");
  }
  else if (num > ret)
  {
    printf("猜大了\n");
  }
  else
  {
    printf("恭喜你,猜对了!\n");
    break;
  }
  }
}
int main()//程序从主函数进入
{                                   //我们通过使用time函数生成随机数
  int input = 0;                  //rand函数在使用之前,
  srand((unsigned int)time(NULL));//要使用一个srand函数来设置随机数的生成器
  do                              //srand函数在程序中只要调用一次就可以了,
  {                               //不需要频繁调用(所以将它放在主函数中)
  menu();//给游戏设置一个精美的菜单
  scanf("%d", &input);
  switch (input)
  {
  case 1:
    printf("猜数字游戏开始\n");
    game();//猜数字游戏的具体实现
    break;
  case 0:
    printf("游戏退出\n");
    break;
  default:
    printf("输入错误\n");
    break;
  }
  } while (input);
  return 0;
}


4. goto语句

goto语句的语法形式:



使用goto语句能去到你想去到的地方,一般用于跳出多层循环。


注:goto语句只能在同一个函数中生效,不能跨函数使用。


例:用goto语句写一个关机程序:

//程序设计思路:
//程序执行起来就倒计时关机
//如果输入‘我是猪’就取消关机
//使用goto语句进行实现
#include
#include
#include
int main()
{
  char input[20] = { 0 };//创建一个字符数组
  system("shutdown -s -t 60");//这是Windows系统的一个命令,倒计时60s后关机
  again:
  printf("你的电脑将在60秒内关机,如果输入:‘我是猪’则停止关机\n");
  scanf("%s", input);//接收用户输入的内容
  if (strcmp(input, "我是猪") == 0)//当字符串进行比较时,不能直接写成“input == "我是猪"”
  {                                //要使用strcmp函数,再进行比较判断。
    printf("真乖,这就把关机取消\n");
    system("shutdown -a");//停止关机
  }
  else
  {
    printf("不识好歹,自讨苦吃。");
    goto again;
  }
  return 0;
}

当然,也可以使用循环来实现:


//程序设计思路:
//程序执行起来就倒计时关机
//如果输入‘我是猪’就取消关机
//使用循环语句进行实现
#include
#include
#include
int main()
{
  char input[20] = { 0 };//创建一个字符数组
  system("shutdown -s -t 60");//这是Windows系统的一个命令,倒计时60s后关机
  while (1)
  {
  printf("你的电脑将在60秒内关机,如果输入:‘我是猪’则停止关机\n");
  scanf("%s", input);//接收用户输入的内容
  if (strcmp(input, "我是猪") == 0)//当字符串进行比较时,不能直接写成“input == "我是猪"”
  {                                //要使用strcmp函数,再进行比较判断。
    printf("真乖,这就把关机取消\n");
    system("shutdown -a");//停止关机
    break;
  }
  else
  {
    printf("不识好歹,自讨苦吃。\n");
  }
  }
  return 0;
}

所以平时建议少用goto语句,否则语句跳来跳去容易出错。


写在最后:

以上就是本篇文章的内容了,感谢你的阅读。


ps:你们是更喜欢看截图还是代码段?可以再评论区告诉我,我以后就会多用。


如果喜欢本文的话,欢迎点赞和评论,写下你的见解。


如果想和我一起学习编程,不妨点个关注,我们一起学习,一同成长。


之后我还会输出更多高质量内容,欢迎收看。


相关文章
|
1月前
|
C语言
初识C语言2——分支语句和循环语句
初识C语言2——分支语句和循环语句
70 5
|
1月前
|
C语言
【c语言】分支语句
C语言通过三种基本结构——顺序、选择和循环,构建复杂的程序逻辑。本文主要介绍了C语言的选择结构,即if-else语句及其变体,包括简单的if语句、if-else组合、else if多分支判断、嵌套if以及解决悬空else问题的方法。此外,还详细讲解了逻辑运算符和关系运算符的使用,以及如何利用条件操作符简化逻辑判断。最后,文章对比了if-else与switch语句在实现多分支逻辑时的应用,并解释了switch语句中的break和default关键字的作用。
30 8
|
1月前
|
C语言
【c语言】循环语句
循环结构是C语言中用于简化重复操作的重要工具,主要包括while循环、do-while循环和for循环。while循环是最基本的形式,通过不断检查条件来决定是否继续执行循环体。do-while循环则先执行循环体,再检查条件,至少执行一次。for循环逻辑更复杂,但使用频率最高,适合初始化、条件判断和更新变量的集中管理。此外,循环中还可以使用break和continue语句来控制循环的提前终止或跳过当前迭代。最后,循环可以嵌套使用,解决更复杂的问题,如查找特定范围内的素数。
37 6
|
1月前
|
Serverless C语言
C语言控制语句:分支、循环和转向
C语言控制语句:分支、循环和转向
|
1月前
|
C语言
教你快速理解学习C语言的循环与分支
教你快速理解学习C语言的循环与分支
16 0
|
1月前
|
小程序 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
|
11天前
|
C语言
c语言调用的函数的声明
被调用的函数的声明: 一个函数调用另一个函数需具备的条件: 首先被调用的函数必须是已经存在的函数,即头文件中存在或已经定义过; 如果使用库函数,一般应该在本文件开头用#include命令将调用有关库函数时在所需要用到的信息“包含”到本文件中。.h文件是头文件所用的后缀。 如果使用用户自己定义的函数,而且该函数与使用它的函数在同一个文件中,一般还应该在主调函数中对被调用的函数做声明。 如果被调用的函数定义出现在主调函数之前可以不必声明。 如果已在所有函数定义之前,在函数的外部已做了函数声明,则在各个主调函数中不必多所调用的函数在做声明
27 6
|
1月前
|
存储 缓存 C语言
【c语言】简单的算术操作符、输入输出函数
本文介绍了C语言中的算术操作符、赋值操作符、单目操作符以及输入输出函数 `printf` 和 `scanf` 的基本用法。算术操作符包括加、减、乘、除和求余,其中除法和求余运算有特殊规则。赋值操作符用于给变量赋值,并支持复合赋值。单目操作符包括自增自减、正负号和强制类型转换。输入输出函数 `printf` 和 `scanf` 用于格式化输入和输出,支持多种占位符和格式控制。通过示例代码详细解释了这些操作符和函数的使用方法。
36 10