手写C语言之分支循环语句-语法详细版(09)

简介: 手写C语言之分支循环语句-语法详细版

switch-default

如果表达的值与所有的case标签的值都不匹配怎么办?其实也没什么,结构就是所有的语句都被跳过而已。程序并不会终止,也不会报错,因为这种情况在C中并不认为是个错误。但是,如果你并不想忽略不匹配所有标签的表达式的值时该怎么办呢?


你可以在语句列表中增加一条default子句,把下面的标签:default:写在任何一个 case 标签可以出现的位置。

当 switch 表达式的值并不匹配所有 case 标签的值时,这个 default 子句后面的语句就会执行。

所以,每个switch语句中只能出现一条default子句。


但是它可以出现在语句列表的任何位置,而且语句流会像执行一个case标签一样执行default子句。


任意位置,而且只能出现一次!


image.png


#include <stdio.h>
int main()
{
  int n = 1;
  int m = 2;
  switch (n)
  {
  case 1:
  m++; // m:3
  case 2:
  n++; // n:2
  case 3:
  switch (n)
  {//switch允许嵌套使用
  case 1:
    n++; //这里不会执行!因为条件是1,但是n是2
  case 2:
    m++; //m:4
    n++;//n:2
    break;
  }
  case 4:
  m++;//m:5
  break;
  default:
  break;
  }
  printf("m = %d, n = %d\n", m, n);
  return 0;
}




image.png



为什么是这个结果,大家一定要明白这个执行逻辑顺序,这里强调的是:break是跳出,如果没有写就会一次执行,但是前提是必须要满足这个条件(和变量有一一对应),且依次执行后面的语句。

这样对应上面的代码就可以完全可以看懂了!


switch也是选择题里面经常会考察的一个点,如果你觉得它难,那一定是没有理解到精髓,建议多看和多测试!


循环语句

while循环

当条件满足的情况下,if语句后的语句执行,否则不执行。但是这个语句只会执行一次。由于我们发现生活中很多的实际的例子是:同一件事情我们需要完成很多次。那我们怎么做呢?


C语言中给我们引入了: while 语句,可以实现循环。

//while 语法结构
while(表达式)
循环语句;

表达式成立:1,不成立:0


image.png


死循环演示


#include <stdio.h>
int main()
{
  int i = 0;
  while (1) {
  i++;
  printf("正在执行第%d次任务!",i);
  }
  return 0;
}




image.png

在写代码的过程中,我们需要避免死循环的产生!


break与continue

在循环中,我们经常需要使用这两个关键词关键词进行跳出循环,最终达到我们所需的要求的!


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

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


我们在写代码的过程中,一定要学会自己分析算法,一般的考试和面试重点在于如何使用代码完成这个算法功能效果


九九乘法表(while)

比如,我们可以利用while循环自己写一个九九乘法表:


#include <stdio.h>
int main()
{
  int i = 0;
  while (i < 9) {
  i++;
  int j = 0;
  while (j < i) {
    j++;
    printf("%d*%d=%d\t", i, j, i * j);
  }
  printf("\n");
  }
  return 0;
}



image.png


那么有的同学就会疑问,如果是嵌套循环的话,break是怎么个规则法呢?

它的规则是,跳出本次循环,而不是全部循环!


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




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

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


#include <stdio.h>
int main()
{
  int ch = 0;
  while ((ch = getchar()) != EOF)
  putchar(ch);
  return 0;
}


这个代码是什么意思呢?

首先getchar()是读取字符,但是它会把\0也读进去,也就是说,我们输入一个字符,一般不是一个字符,它还有一个反斜杠0


image.png


这里EOF是文件读取错误的一种显示!那么如果,我们需要达到回车之后,不进入下一行又该怎么去实现呢?


#include <stdio.h>
int main()
{
char ch = '\0';
while ((ch = getchar()) != EOF)
{
if (ch < ‘0’ || ch > ‘9’)
continue;
putchar(ch);
}
return 0;
}



这个代码的作用是:只打印数字字符,跳过其他字符的,具有清空缓冲区的作用!


密码区缓冲代码

那么在日常的生活中我们有什么具体的案例?

假设,目前需要你写一个密码验证程序,用户输入密码进行确认,然后进行判断密码是否正确!


#include <stdio.h>
int main() {
  char passwoed[15] = { 0 };
  printf("请设置你的密码():");
  scanf("%s", &passwoed);//读取密码,但是在终端我们会回车
  //清空缓冲区,将\n清空,因为scanf只会接收password这个里面的东西
  getchar();
  printf("输入Y确认:");
  getchar();//清空缓冲区
  char result = getchar();
  if (result = 'Y') {
  printf("确认成功!");
  }
  else {
  printf("确认失败!");
  }
  return 0;
}



image.png


简单的来说就是,getchar()可以用来清空缓冲区,这样就避免bug的出现!

这样看来,C语言果然适合做一些系统和软件的设计,在python语言中,我们都不用担心这些东西!


但是真的这个程序就是没有bug的吗?我们如果请专业的测试人员,可能一测试!


image.png

当我们的密码里面出现空白格之后,也是不可以的,同时当我们输入过快的时候,没有输入Y而是输入的回车那么他也确认成功?


image.png



原来是,之前这个等号没有写出双等号!第一个bug解决了,那么我们继续解决第二个!



#include <stdio.h>
int main() {
  char passwoed[15] = { 0 };
  printf("请设置你的密码():");
  scanf("%s", &passwoed);//读取密码,但是在终端我们会回车
  //清空缓冲区,将\n清空,因为scanf只会接收password这个里面的东西
  getchar();
  printf("输入Y确认:");
  //getchar();//清空缓冲区
  int temp = 0;
  while ((temp = getchar()) != '\n') {
  ;
  }
  char result = getchar();
  if (result == 'Y') {
  printf("确认成功!");
  }
  else {
  printf("确认失败!");
  }
  return 0;
}


image.png




每文一语

日积月累才是最好的前进!


相关文章
|
4月前
|
C语言
初识C语言2——分支语句和循环语句
初识C语言2——分支语句和循环语句
94 5
|
1月前
|
C语言
【C语言程序设计——循环程序设计】枚举法换硬币(头歌实践教学平台习题)【合集】
本文档介绍了编程任务的详细内容,旨在运用枚举法求解硬币等额 - 循环控制语句(`for`、`while`)及跳转语句(`break`、`continue`)的使用。 - 循环嵌套语句的基本概念和应用,如双重`for`循环、`while`嵌套等。 3. **编程要求**:根据提示在指定区域内补充代码。 4. **测试说明**:平台将对编写的代码进行测试,并给出预期输出结果。 5. **通关代码**:提供完整的代码示例,帮助理解并完成任务。 6. **测试结果**:展示代码运行后的实际输出,验证正确性。 文档结构清晰,逐步引导读者掌握循环结构与嵌套的应用,最终实现硬币兑换的程序设计。
51 19
|
1月前
|
算法 C语言
【C语言程序设计——循环程序设计】求解最大公约数(头歌实践教学平台习题)【合集】
采用欧几里得算法(EuclideanAlgorithm)求解两个正整数的最大公约数。的最大公约数,然后检查最大公约数是否大于1。如果是,就返回1,表示。根据提示,在右侧编辑器Begin--End之间的区域内补充必要的代码。作为新的参数传递进去。这个递归过程会不断进行,直到。有除1以外的公约数;变为0,此时就找到了最大公约数。开始你的任务吧,祝你成功!是否为0,如果是,那么。就是最大公约数,直接返回。
77 18
|
1月前
|
Serverless C语言
【C语言程序设计——循环程序设计】利用循环求数值 x 的平方根(头歌实践教学平台习题)【合集】
根据提示在右侧编辑器Begin--End之间的区域内补充必要的代码,求解出数值x的平方根;运用迭代公式,编写一个循环程序,求解出数值x的平方根。注意:不能直接用平方根公式/函数求解本题!开始你的任务吧,祝你成功!​ 相关知识 求平方根的迭代公式 绝对值函数fabs() 循环语句 一、求平方根的迭代公式 1.原理 在C语言中,求一个数的平方根可以使用牛顿迭代法。对于方程(为要求平方根的数),设是的第n次近似值,牛顿迭代公式为。 其基本思想是从一个初始近似值开始,通过不断迭代这个公式,使得越来越接近。
57 18
|
1月前
|
C语言
【C语言程序设计——循环程序设计】统计海军鸣放礼炮声数量(头歌实践教学平台习题)【合集】
有A、B、C三艘军舰同时开始鸣放礼炮各21响。已知A舰每隔5秒1次,B舰每隔6秒放1次,C舰每隔7秒放1次。编程计算观众总共听到几次礼炮声。根据提示,在右侧编辑器Begin--End之间的区域内补充必要的代码。开始你的任务吧,祝你成功!
52 13
|
1月前
|
存储 C语言
【C语言程序设计——循环程序设计】利用数列的累加和求 sinx(头歌实践教学平台习题)【合集】
项的累加和,一般会使用循环结构,在每次循环中计算出当前项的值(可能基于通项公式或者递推关系),然后累加到一个用于存储累加和的变量中。在C语言中推导数列中的某一项,通常需要依据数列给定的通项公式或者前后项之间的递推关系来实现。例如,对于一个简单的等差数列,其通项公式为。的级数,其每一项之间存在特定的递推关系(后项的分子是其前项的分子乘上。,计算sinx的值,直到最后一项的绝对值小于。为项数),就可以通过代码来计算出指定项的值。对于更复杂的数列,像题目中涉及的用于近似计算。开始你的任务吧,祝你成功!
42 6
|
1月前
|
C语言
【C语言程序设计——循环程序设计】鸡兔同笼问题(头歌实践教学平台习题)【合集】
本教程介绍了循环控制和跳转语句的使用,包括 `for`、`while` 和 `do-while` 循环,以及 `break` 和 `continue` 语句。通过示例代码详细讲解了这些语句的应用场景,并展示了如何使用循环嵌套解决复杂问题,如计算最大公因数和模拟游戏关卡选择。最后,通过鸡兔同笼问题演示了穷举法编程的实际应用。文中还提供了编程要求、测试说明及通关代码,帮助读者掌握相关知识并完成任务。 任务描述:根据给定条件,编写程序计算鸡和兔的数量。鸡有1个头2只脚,兔子有1个头4只脚。
56 5
|
1月前
|
存储 编译器 C语言
【C语言程序设计——入门】C语言入门与基础语法(头歌实践教学平台习题)【合集】
本文档介绍了C语言环境配置和编程任务,主要内容包括: - **C语言环境配置**:详细讲解了在Windows系统上配置C语言开发环境的步骤。 - **第1关:程序改错**:包含任务描述、相关知识(如头文件引用、基本语法规则)、编程要求、测试说明及通关代码。 - **第2关:scanf函数**:涉及`scanf`和`printf`函数的格式与使用方法,提供编程要求、测试说明及通关代码。 文档结构清晰,涵盖从环境搭建到具体编程任务的完整流程,适合初学者学习和实践。
50 4
|
4月前
|
C语言
【c语言】分支语句
C语言通过三种基本结构——顺序、选择和循环,构建复杂的程序逻辑。本文主要介绍了C语言的选择结构,即if-else语句及其变体,包括简单的if语句、if-else组合、else if多分支判断、嵌套if以及解决悬空else问题的方法。此外,还详细讲解了逻辑运算符和关系运算符的使用,以及如何利用条件操作符简化逻辑判断。最后,文章对比了if-else与switch语句在实现多分支逻辑时的应用,并解释了switch语句中的break和default关键字的作用。
54 8
|
4月前
|
C语言
【c语言】循环语句
循环结构是C语言中用于简化重复操作的重要工具,主要包括while循环、do-while循环和for循环。while循环是最基本的形式,通过不断检查条件来决定是否继续执行循环体。do-while循环则先执行循环体,再检查条件,至少执行一次。for循环逻辑更复杂,但使用频率最高,适合初始化、条件判断和更新变量的集中管理。此外,循环中还可以使用break和continue语句来控制循环的提前终止或跳过当前迭代。最后,循环可以嵌套使用,解决更复杂的问题,如查找特定范围内的素数。
69 6

热门文章

最新文章