C语言从入门到精通(第二期分支和循环)

在学习分支和循环之前,我们先要认识一下什么是语句,知道语句简单的构成,了解一下continue和break语句是什么。这对我们学习分支和循环语句非常重要。
在这里插入图片描述我的博客计划是第一个,可惜执行起来却是…hhh
在这里插入图片描述

废话少说,正文如下。

什么是语句

  • C语句可分为以下四类:
    • 表达式语句
      • 初始化语句
      • 初始化的意思就是给变量赋值
      • 格式:基本类型 变量 = 数值
      • 在定义变量时最好都把它初始化,否则后面忘记初始化就难受了。
    int a = 10;
    int b = 20;
    a  = b + c;//这些都是最简单的表达式语句
  • 函数调用语句
    • 如下
printf ("hehe");//printf函数在调用的时候需要引用头文件stdio.h
  • 控制语句
    • 控制语句用于控制程序的执行流程,以实现程序的各种结构方式,它们由特定的语句定义符组成,C语言有九种控制语句。
    • 可分成以下三类:
    1. 条件判断语句也叫分支语句:if语句、switch语句;
    2. 循环执行语句:do while语句、while语句、for语句;
    3. 转向语句:break语句、goto语句、continue语句、return语句
  • 空语句
    • 最简单的空语句就是一个分号;
    • 空语句本身并不执行任何任务,但有时还是有用。他所使用的场合就是语法要求出现一条完整的语句。

break和continue语句

  • break语句用于永久终止循环,这里要注意,如果有多个嵌套循环的时候,指的是终止当前的一个循环。就是for花括号内的那个循环。
  • continue语句用于终止当前循环,然后直接跳到条件表达式的位置去测试条件表达式。

分支语句

if

  • 代码块
{
	expression;
}//就是一个花括号内的语句称为一个代码块。
  • if语法1
if(条件表达式)
    语句;// 如果条件表达式为真(即非0),则执行 语句,否则就为假跳过他不执行。

注意:

  1. 语法规定0为假,非零即为真。
  2. 如果语句为一条则不需要加花括号(即形成一个代码块),多条语句才加。(为了养成好习惯,一条语句也尽量加上。)
  • if语法2
if(条件表达式)
    语句1;
else
    语句2;//

注意: else不能单独脱离if使用

  • if语法3(多分支)
if(条件表达式1)
    {
    	语句1;
    }
else if(条件表达式2)
    {
    	语句2;
    }
else
    {
    	语句3;
    }
    
  • 如果"条件表达式1"为真,则执行"语句1",否则判断"条件表达式2",如果为真执行"语句2", 当表达 式1、2都不满足,会执行最后一个else语句。

  • 众多大括号中,只有一个大括号中的内容会被执行

  • 只有前面所有添加都不满足, 才会执行else大括号中的内容

  • 看下面这个if空语句的用法

if(3 > 2);
{
printf("3 > 2");
}
// 输出结果: 3 > 2
// 因为if(3 > 2)后面有一个分号, 所以系统会认为if省略了大括号
// if省略大括号时只能管控紧随其后的那条语句, 所以只能管控分号

switch

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

注意:整型常量表达式指的是这个地方只能是常量,比如1,10,5等等,也不能是float等浮点类型的小数。

  • 在switch语句中,我们没办法直接实现分支,搭配break使用才能实现真正的分支。

  • break语句 的实际效果是把语句列表划分为不同的分支部分。

  • 编程好习惯:在最后一个 case 语句的后面加上一条 break语句。
    (之所以这么写是可以避免出现在以前的最后一个 case 语句后面忘了添加 break语句)

  • 格式如下

switch(条件表达式)
{
    case 常量表达式1:
        语句1;
        break;
    case 常量表达式2:
        语句2; 
        break;
    case 常量表达式n:
        语句n;
        break;
    default:
        语句n+1;
        break;
}

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

解释:

  • 计算"条件表达式"的值, 逐个与其后的"常量表达式"值相比较,当"条件表达式"的值与某个"常量表达式"的值相等时, 即执行其后的语句, 然后跳出switch语句
  • 如果"表达式"的值与所有case后的"常量表达式"均不相同时,则执行default后的语句
  • 如果没有break;语句程序会按照顺序结构从上往下依次执行。
  • default语句可以放在代码块内的任何位置,只要没有可选择的case语句,就会执行default语句。
    • if和Switch转换
      看上去if和switch都可以实现同样的功能, 那么在企业开发中我们什么时候使用if, 什么时候使用switch呢?
if else if 针对于范围的多路选择
switch 是针对点的多路选择

最后警告:在使用if语句时

int main()
{
   int a =10;
if (a=10)
   {
	   printf(“%d”, a);
   }
}//错误写法,但编译器不会报错
int main()
{
   int a =10;
if (10=a)
   {
	   printf(“%d”, a);
   }
}//编译器会报错

  • 所以在遇见判断变量等于常量的时候,老司机的写法就是把常量写在前面,把变量写在后面。这样你的编译器,例如Devcpp或者vs才会报错,利于代码的维护和找错。否则你可能找半天都找不到错误在哪。

循环语句

while

while语句流程图while语句流程图

我们已经掌握了,if语句:

if(条件)
     语句;
  • 条件满足的情况下,if语句后的语句执行,否则不执行。
    但是这个语句只会执行一次。
    由于我们发现生活中很多的实际的例子是:同一件事情我们需要完成很多次。
    那我们怎么做呢?
    C语言中给我们引入了: while 语句,可以实现循环。
变量初始化;
while(条件表达式)
{
	循环语句;
	调整部分;
}
  • 过程:当变量满足条件表达式时,为真,则执行循环语句和调整部分,否则为假跳出代码块,即跳出花括号。
  • while有当……的意思。而if有如果……的意思。可以把while当作多个if的叠加。
  • break在while语句里的用法
    总结:其实在循环中只要遇到break,就停止后期的所有的循环,直接终止循环。
    所以:while中的break是用于永久终止循环的。
变量初始化;
while(条件表达式)
{
	循环语句;
	break;
	调整部分;
}          //在遇见break语句时直接跳出while循环,结束循环。

  • break在while语句里的用法
    continue是用于终止本次循环的,也就是本次循环中continue后边的代码不会再执行,
    而是直接跳转到while语句的判断部分。进行下一次循环入口的判断。
变量初始化;
while(条件表达式)
{
	循环语句;
	continue;
	调整部分;
}		//在遇见continue语句时直接跳到条件表达式的位置,对表达式测试。

for

在这里插入图片描述for循环流程图

  • 我们已经知道了while循环,但是我们为什么还要一个for循环呢?
    首先来看看for循环的语法:
    • 初始化部分,用于初始化循环变量的。(就是变量赋值)
    • 条件表达式部分,用于判断循环时候终止。
    • 调整部分,用于循环条件的调整。例如(i++,i- -)
for(变量初始化;条件表达式;调整部分)
{
	循环语句;
}
//在企业开发中,能用while解决的,用for几乎都能解决。
  • 可以发现在while循环中依然存在循环的三个必须条件,但是由于风格的问题使得三个部分很可能偏离较远,这样查找修改就不够集中和方便。所以,for循环的风格更胜一筹;for循环使用的频率也最高。
  • 虽然for循环和while差不多。但也是有区别的。但for和whlie的区别在于:for括号内变量初始化的值
    只能在后面执行一次,离开循环模块就不能再用了
变量初始化;
for(;条件表达式;调整部分)
{
	循环语句
}
//但是把变量初始化语句写在最前面的话,那个变量的值在后面还能用
  • 在这里需要说明一点就是:for括号里面的分号不能省略。
for(;;);
  • 以上就是最简单的死循环。

do whlie

在这里插入图片描述do while循环流程图

do
{
	 循环语句;
}
while(条件表达式);
  • 这里要注意的一点是 while()后面有分号!
  • 流程:
    • 和while语句一样,但循环至少执行一次,使用的场景有限,所以不是经常使用。

goto语句

  • 最后我们来介绍一下goto语句。
    • 要使用goto语句,你必须在你希望跳转的语句前面加上语句标签。语句标签就是标识符后面加个冒号。包含这些标签的goto语句可以出现在同一个函数中的任何位置。
      goto是一种危险的语句, 因为在学习C的过程中,很容易形成对它的依赖。经验欠缺的程序员有时使用goto语句来避免考虑程序的设计。这样写出来的程序较之细心编写的程序总是难以维护得多。

最后

在这里插入图片描述
如果你觉得文章对你有一些帮助。点赞,收藏是对我最大的鼓励。
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/qq2466200050/article/details/121098297