最最最详细的C语言教程笔记零起步(8)进阶必备 同笔者一起学习

本文主要是介绍最最最详细的C语言教程笔记零起步(8)进阶必备 同笔者一起学习,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

C语言教程笔记

  • 十七. 循环辅助
    • 1. 有限循环的3个要素
    • 2. 使用break打破循环
    • 3. 验证密码
    • 4. continue开始新一轮循环
    • 5. for循环中使用循环辅助关键词
      • 5.1 for循环中使用 continue
      • 5.2 for循环中使用 break
    • 6. break 和 continue 与循环嵌套
  • 十八. 多重选择 switch的使用
    • 1. 航空字母读法
    • 2. 字符到航空字母单词转换
    • 3. switch语句
    • 4. break在switch语句中的作用
    • 5. 连续转换程序
    • 6. break和continue究竟属于谁
      • 6.1 break属于谁
      • 6.2 continue 属于谁

十七. 循环辅助

1. 有限循环的3个要素

  1. 开始时,为计数器设置初始值。
  2. 计数器与一个有限值比较作为循环条件。
  3. 更新计数器。

2. 使用break打破循环

要达到上述效果,我们可以修改while中的循环条件。但是,现在有了一个新选择。 可以将循环条件放置于while括号以外的地方,并配合上 break 关键词,也能达到同样的效果。

#include <stdio.h>int main() {  int i = 0;     while(1)     {    if (i == 10)         {      break;         }    printf("%d ", i);         i++;     }     printf("\ni=%d ", i);                     return 0; 
}

这下代码仅打印了出了0到9就退出循环了。while的循环条件依然始终为真,因此没法指望从while处跳 出循环。但是,我们把实际的循环条件放置到了 if 语句中。计数器 i 在0到9时,无法进入 if 内部。而 一旦 i 为10,进入 if 内部,执行了 break 语句,立即跳出了while循环。
请添加图片描述
在这里插入图片描述break执行后,程序立刻从break处跳至循环结束。
break语句后的循环行为将均不执行。

让我们把if和break放到printf的后面。

#include <stdio.h>int main() { int i = 0;     while(1)     {   printf("%d ", i);         if (i == 10)         {     break;         }         i++;     }     printf("\ni=%d ", i);     return 0; 
}

在这里插入图片描述这一次比上面多打印了数字10。i为10时,printf函数将先执行。而后遇到if语句,条件满足进入if语句。 break被执行,这才跳出循环。

最后把if和break放到循环的最后。

#include <stdio.h>int main() { int i = 0;     while(1)     {   printf("%d ", i);         i++;         if (i == 10)         {        break;         }     }     printf("\ni=%d ", i);     return 0; 
}

在这里插入图片描述这一次的结果和第一次结果一致,输出了0到9。
当i的值为9被打印后,紧接着i自增为10,最后进入if执行break,跳出了循环

3. 验证密码

我们来做一个验证密码的程序,要求用户输入一个密码。如果密码不为12345,那么输出密码错误。如 果密码输入正确,则退出程序。

#include <stdio.h>int main() { int password;     while(1)     {    scanf("%d", &password);         if (password == 12345)         {       break;         }         printf("password error\n");     } printf("welcome back\n");     return 0; 
}

在这里插入图片描述将while循环替换为for循环也是等效的。

#include <stdio.h> int main() { int password;     for(;;)     {    scanf("%d", &password);         if (password == 12345)         {      break;        }         printf("password error\n");     }     printf("welcome back\n");     return 0; 
}

4. continue开始新一轮循环

continue语句会跳过本次循环的内容,并开始下一轮的循环。

#include <stdio.h> int main() { int i = 0;     while(i < 20)     {    if (i == 6)         {       i = 15;             continue;         }        printf("%d ", i);         i++;     }     return 0; }

在这里插入图片描述代码本将输出0到19之间的整数。但是,6到14被跳过了。

0到5被正常输出。当 i 为6时, if 条件满足, i 被赋值为15,接着执行 continue 。 continue 将跳过本次循环的内容,重新开始循环,这下从15开始继续循环直到19为止。

5. for循环中使用循环辅助关键词

5.1 for循环中使用 continue

当然,continue在for循环中也可以生效。

#include <stdio.h>int main() { for(int i = 0; i < 20; i++)     {    if (i == 6)         {       i = 15;             continue;         }         printf("%d ", i);    }     return 0; 
}

在这里插入图片描述结果略有不同,while循环中使用continue后,将回到循环开始,即计算表达式 i < 20 的值。 对于for循环,由于for循环在每次循环结束后,将执行for语句括号内的第三个表达式,即计数器更新表 达式。所以,遇到continue后,先执行 i++ ,值被更新成了16。再开始新的一轮循环,计算表达 式 i < 20 的值。

5.2 for循环中使用 break

#include <stdio.h>int main() { int i = 0;     for(i = 0; i < 20; i++)     {      if (i == 6)         {      break;         }     }     printf("%d ", i);     return 0; }

在这里插入图片描述
与continue不一样,在for中使用break后将直接跳出循环,不会再更新计数器。

for中使用continue,将立即更新计数器,再进入新循环。
for中使用break,将跳出循环。

6. break 和 continue 与循环嵌套

#include <stdio.h>int main() {  for(;;)     {    for(;;)         {        break;  //  跳出内层循环         }         break;      //  跳出外层循环     }     return 0; }

在循环嵌套中,break或continue将作用于自己的直属上级循环。 对于上面的代码,内层循环调用break跳出循环到外层。外层循环再次调用break才能结束外层循环。

十八. 多重选择 switch的使用

1. 航空字母读法

在航空通讯中,经常会出现信号失真和衰落现象,再加上人们口音的不同,很容易发生误听差错。尤其是在26个英文字母中,如BD、 PT、GJ、SX等读音相似的最容易被听错。为此,在航空通讯中,常把 一个字母,读成一个对应的单词。
例如:B读成bravo,D读成delta。
下表为字母A到G的航空字母读法:

字母读法
Aalpha
Bbravo
Ccharlie
Ddelta
Eecho
Ffoxtrot
Ggolf

2. 字符到航空字母单词转换

需求: 编写一个程序,输入字母,输出航空字母单词。

很显然这个程序可以使用 if 嵌套来写。为了简单清晰,我们省略 if 的括号,写成 else if 的形式。

#include <stdio.h>int main() { char c;     scanf("%c", &c);     if(c == 'a')         printf("alpha\n");     else if (c == 'b')         printf("bravo\n");     else if (c == 'c')         printf("charlie\n");     else if (c == 'd')         printf("delta\n");     else if (c == 'e')         printf("echo\n");     else if (c == 'f')         printf("foxtrot\n");     else if (c == 'g')         printf("golf\n");     else         printf("i don't know\n");     return 0; 
}

3. switch语句

除了用 if 嵌套,C语言还提供 switch 语句, switch 更适合这种情形,可以使得代码更加清晰明了。

#include <stdio.h>int main() { char c;     scanf("%c", &c);     switch(c)     {    case 'a':             printf("alpha\n");             break;         case 'b':             printf("bravo\n");             break;         case 'c':             printf("charlie\n");             break;         case 'd':             printf("delta\n");             break;         case 'e':             printf("echo\n");             break;         case 'f':             printf("foxtrot\n");             break;         case 'g':             printf("golf\n");             break;         default:             printf("i don't know\n\n");     }     return 0; 
}

switch使用公式:

switch(整型表达式) 
{ case 整型常量1:         语句     case 整型常量2:         语句     case 整型常量3:         语句     case 整型常量4:         语句     case 整型常量5:         语句     default:         语句     ... 
}

字符型也是一种整型。

switch的跳转步骤:

  1. switch 会先计算括号内的整型表达式结果。
  2. 依次对比 case 中的常量,是否等于整型表达式的结果。
  3. 若不相等,对比下一个 case 。
  4. 若相等,跳转到这个 case 。
  5. 若没有相等的,跳转到 default 。

swtich语句的几个注意事项:

  1. switch 后面的括号里面只能填一个整型表达式
  2. case 后的常量不能有重复的。
  3. 可以没有 default 。

请添加图片描述

4. break在switch语句中的作用

把每个 case 后跟的 break 都去掉,然后输入 ‘e’ 。

#include <stdio.h>int main() { char c;     scanf("%c", &c);     switch(c)     {   case 'a':             printf("alpha\n");         case 'b':             printf("bravo\n");         case 'c':             printf("charlie\n");         case 'd':             printf("delta\n");         case 'e':             printf("echo\n");         case 'f':             printf("foxtrot\n");         case 'g':             printf("golf\n");         default:             printf("i don't know\n\n");     }     return 0; }

在这里插入图片描述结果为输出了从 e 开始其后的所有对应单词,同时 default 也被执行了。

事实上, switch 找到对应的 case 后,仅仅是从对应的 case 处开始执行。并不会执行完对应 case 就跳出整个 switch 了。

除非遇到break才会跳出整个switch。
如果你不想执行后续的case,请一定要加上break,跳出整个switch。

5. 连续转换程序

我们希望这个程序应该持续的为我们提供转换服务,而不是每次转换完就退出了。那么这个程序需要加上循环。

#include <stdio.h>int main() { char c;     while(1)     {   scanf("%c", &c);         switch(c)         {     case 'a':                 printf("alpha\n");                 break;             case 'b':                 printf("bravo\n");                 break;             case 'c':                 printf("charlie\n");                 break;             default:                 printf("i don't know\n\n");         }     }     return 0; 
}

在这里插入图片描述
当输入 ‘a’ 后,输出了转换结果 alpha ,但是紧跟着出现了 i don’t know 。这是为什么呢?

这是因为我们输入的时候,首先键入了 ‘a’ ,之后再按下了回车键 ‘\n’ 。scanf首先吸收了 ‘a’ ,而后再吸收了 ‘\n’ ,所以才输出了 i don’t know 。

很显然我们不需要这个额外的 ‘\n’ ,可以使用函数 fflush(stdin) ,清除未被吸收的输入。

#include <stdio.h>int main() { char c;     while(1)     {         scanf("%c", &c);         switch(c)         {       case 'a':                 printf("alpha\n");                 break;             case 'b':                 printf("bravo\n");                 break;             case 'c':                 printf("charlie\n");                 break;             default:                 printf("i don't know\n\n");         }         fflush(stdin);  //  清空输入缓存区     }     
return 0; 
}

6. break和continue究竟属于谁

6.1 break属于谁

#include <stdio.h>int main() {  char c;     while(1)     {         scanf("%c", &c);         switch(c)         {     case 'a':                 printf("alpha\n");                break;             case 'b':                 printf("bravo\n");                 break;             case 'c':                 printf("charlie\n");                 break;             default:                 printf("i don't know\n\n");         }         fflush(stdin);     }     return 0; 
}

switch 中的 break 能让 while(1) 结束循环吗?

答案是不能, switch 中的 break 只属于switch语句。它的效果是跳出 switch 。无法对 while 语句产生效果。
若将 break 写在 switch 语句外,那么它将对 while 产生效果。

#include <stdio.h>int main() { char c;     while(1)  {     scanf("%c", &c);         switch(c)    {      case 'a':                 printf("alpha\n");                 break;  //  这个break直属于switch             case 'b':                 printf("bravo\n");                 break;  //  这个break直属于switch             case 'c':                 printf("charlie\n");                 break;  //  这个break直属于switch             default:                 printf("i don't know\n\n");         }         fflush(stdin);    //  这个break直属于while         break;     }     
return 0; 
}

在这里插入图片描述

6.2 continue 属于谁

#include <stdio.h>int main() { char c;     while(1)     {     scanf("%c", &c);         switch(c)         {       case 'a':                 printf("alpha\n");                 break;             case 'b':                 printf("continue\n");                 fflush(stdin);                 continue;   //  这里有个continue                 printf("bravo\n");                 break;             case 'c':                 printf("charlie\n");                 break;             default:                 printf("i don't know\n\n");         }         fflush(stdin);     }     return 0; 
}

continue 由于对 switch 不产生影响。所以这个 continue 直属于while。 当我们输入 ‘b’ ,执行了 continue 前的两条语句后,循环重新开始。

点个赞吧 😉

这篇关于最最最详细的C语言教程笔记零起步(8)进阶必备 同笔者一起学习的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/392126

相关文章

Python pandas库自学超详细教程

《Pythonpandas库自学超详细教程》文章介绍了Pandas库的基本功能、安装方法及核心操作,涵盖数据导入(CSV/Excel等)、数据结构(Series、DataFrame)、数据清洗、转换... 目录一、什么是Pandas库(1)、Pandas 应用(2)、Pandas 功能(3)、数据结构二、安

C语言中%zu的用法解读

《C语言中%zu的用法解读》size_t是无符号整数类型,用于表示对象大小或内存操作结果,%zu是C99标准中专为size_t设计的printf占位符,避免因类型不匹配导致错误,使用%u或%d可能引发... 目录size_t 类型与 %zu 占位符%zu 的用途替代占位符的风险兼容性说明其他相关占位符验证示

Apache Ignite 与 Spring Boot 集成详细指南

《ApacheIgnite与SpringBoot集成详细指南》ApacheIgnite官方指南详解如何通过SpringBootStarter扩展实现自动配置,支持厚/轻客户端模式,简化Ign... 目录 一、背景:为什么需要这个集成? 二、两种集成方式(对应两种客户端模型) 三、方式一:自动配置 Thick

Python对接支付宝支付之使用AliPay实现的详细操作指南

《Python对接支付宝支付之使用AliPay实现的详细操作指南》支付宝没有提供PythonSDK,但是强大的github就有提供python-alipay-sdk,封装里很多复杂操作,使用这个我们就... 目录一、引言二、准备工作2.1 支付宝开放平台入驻与应用创建2.2 密钥生成与配置2.3 安装ali

2025版mysql8.0.41 winx64 手动安装详细教程

《2025版mysql8.0.41winx64手动安装详细教程》本文指导Windows系统下MySQL安装配置,包含解压、设置环境变量、my.ini配置、初始化密码获取、服务安装与手动启动等步骤,... 目录一、下载安装包二、配置环境变量三、安装配置四、启动 mysql 服务,修改密码一、下载安装包安装地

在macOS上安装jenv管理JDK版本的详细步骤

《在macOS上安装jenv管理JDK版本的详细步骤》jEnv是一个命令行工具,正如它的官网所宣称的那样,它是来让你忘记怎么配置JAVA_HOME环境变量的神队友,:本文主要介绍在macOS上安装... 目录前言安装 jenv添加 JDK 版本到 jenv切换 JDK 版本总结前言China编程在开发 Java

C语言进阶(预处理命令详解)

《C语言进阶(预处理命令详解)》文章讲解了宏定义规范、头文件包含方式及条件编译应用,强调带参宏需加括号避免计算错误,头文件应声明函数原型以便主函数调用,条件编译通过宏定义控制代码编译,适用于测试与模块... 目录1.宏定义1.1不带参宏1.2带参宏2.头文件的包含2.1头文件中的内容2.2工程结构3.条件编

Spring Boot Actuator应用监控与管理的详细步骤

《SpringBootActuator应用监控与管理的详细步骤》SpringBootActuator是SpringBoot的监控工具,提供健康检查、性能指标、日志管理等核心功能,支持自定义和扩展端... 目录一、 Spring Boot Actuator 概述二、 集成 Spring Boot Actuat

电脑提示d3dx11_43.dll缺失怎么办? DLL文件丢失的多种修复教程

《电脑提示d3dx11_43.dll缺失怎么办?DLL文件丢失的多种修复教程》在使用电脑玩游戏或运行某些图形处理软件时,有时会遇到系统提示“d3dx11_43.dll缺失”的错误,下面我们就来分享超... 在计算机使用过程中,我们可能会遇到一些错误提示,其中之一就是缺失某个dll文件。其中,d3dx11_4

Linux下在线安装启动VNC教程

《Linux下在线安装启动VNC教程》本文指导在CentOS7上在线安装VNC,包含安装、配置密码、启动/停止、清理重启步骤及注意事项,强调需安装VNC桌面以避免黑屏,并解决端口冲突和目录权限问题... 目录描述安装VNC安装 VNC 桌面可能遇到的问题总结描js述linux中的VNC就类似于Window