【Shp的C语言小厨房】语句篇

编程入门 行业动态 更新时间:2024-10-23 18:22:20

【Shp的C语言小厨房】<a href=https://www.elefans.com/category/jswz/34/1770772.html style=语句篇"/>

【Shp的C语言小厨房】语句篇

文章目录

  • 前言
  • 一、空语句
  • 二、选择语句
    • 1.if 语句
      • "悬空的else"问题
    • 2.switch 语句
      • switch语句中的break语句
      • default 子句
  • 三、循环语句
    • 1. while 语句
    • 2.for 语句
    • 3.do while 语句
  • 四、goto 语句
  • 今日份心灵鸡汤


前言

  哈喽哈喽!这里是Shp的C语言小厨房,不论新老朋友,不论基础如何,希望你们可以好好品尝,或多或少学到些什么,就算是不负我烹饪这道菜了。
  在上一节中我们讲到了常量、字符串等等
  不清楚上一节讲了什么的小伙伴可以戳这
  初识C语言2.0(这绝不是打广告)
  那么今天呢我们继续往下看,今天我们要探讨的是C语言当中的语句,请客官稍等片刻,我这就开始上菜


开胃小菜来咯

一、空语句

  空语句,见词会意,就是空的语句嘛。为什么先讲它呢,因为它是C语言里面最简单的语句,它本身只包含一个分号
看代码示例

#include <stdio.h>int main()
{int x = 10;while (x>0){;//这就是一段空语句}return 0;
}

空语句本身并不执行任何任务,当C语言语法要求出现一条完整的语句,但并不需要它执行任何任务,此时,空语句就派上用场啦

现在才是正餐,请客官慢慢享用

二、选择语句

1.if 语句

C语言的if语句语法如下

if (expression)//括号是if语句的一部分,必须出现,末尾不要加分号
{			   //expression为表达式statement 1//statement表示代码块
}	
else
{statement 2
}

  如果statement里只有一条语句,那么花括号{ }可加可不加,而如果statement里不止一条语句,而你又恰巧没加花括号,那么这时候代码输出的结果可能不是你所期望的结果,所以许多程序员倾向于在任何时候都添加花括号以避免这种错误

if语句的执行过程如下,其中expression的结果为0则为假,非0则为真

来看具体的代码示例吧

#include <stdio.h>int main()
{int x = 10;if (x >= 10){printf("好offer");}else{printf("卖红薯");}return 0;
}

附上运行结果,和你想得一样吗

如果不止两条支路,有三条、四条支路呢,这时只需要像这样

if (expression)//括号是if语句的一部分,必须出现,末尾不要加分号
{			   //expression为表达式statement 1//statement表示代码块
}	
else if (expression)
{statement 2
}
else if (expression)
{statement 3
}
……
else
{statement n
}

诺,就像这样,具体运用如下,输入成绩程序就可以进行判断啦

//输入学生成绩加以判断
#include <stdio.h>int main()
{int i = 0;scanf("%d", &i);if (i >= 90){printf("优秀");}else if(i >= 80)    //括号里你也可以写成i>=80 && i<90,我不这样写的原因是	{				    //if语句括号里的条件为真的话,程序就输出对应结果并且不再向下进行了printf("良好"); //为假的话则要继续向下判断}else if (i >= 60){printf("及格");}else{printf("不及格");}return 0;
}

"悬空的else"问题

这里,我们稍微来拓展一下,一般我们认为一个if对应一个else不是吗,那么当if语句嵌套出现时,就会出现“悬空的else”问题,来看具体例子

if (i > 1) //1if (j > 2) //2printf("i>1 and j>2\n");elseprintf("no they are not\n");

我们并不关心代码的运行结果是什么,我问一句,你认为else子句从属于哪一个if语句呢?是第1个呢,还是第2个?

3,2,1,好的,揭晓答案,else子句从属于最靠近它的不完整的if语句,在该题中,else语句就从属于第2个if语句

怎么样,以上代码的风格是不是很差,代码是要给人看的,一个好的程序员要会站
在别人的角度考虑问题

如果我想要else子句从属于第1个if语句的话,只需要像这样就行了

if (i > 1)
{if (j > 2){printf("i>1 and j>2\n");}
}
else
{printf("no they are not\n");
}

怎么样,是不是清楚多了
那么看到这,你对if语句的理解是不是更深了呢
消化一下,我马上来上第二道菜

2.switch 语句

C语言的switch语句语法如下,常用于多分支语句

switch (expression)//expression表示表达式,其结果必须为整型值
{
case constant—expression://constant—expression表示常量表达式,它不能是任何变量statement 1//statement表示代码块,以下均是break;//break语句
case constant—expression:statement 2break;
case constant—expression:statement 3break;
……
case constant—expression:statement nbreak;
}

switch语句的执行过程:先计算expression的值,然后,程序跳转到语句列表中case标签值与expression的值相匹配的语句,从这条语句起,直到语句列表的结束也就是switch语句的底部,它们之间的语句均被执行
图解如下

switch语句中的break语句

如果在switch语句的执行过程中遇到了break语句,程序就会立即跳到语句列表的末尾,事实上在所有的switch语句中,几乎所有的case后面都会跟上一句break
让我们从一段代码中来进一步理解

//输入一个值,输出对应的星期
#include <stdio.h>int main()
{int day = 0;scanf("%d", &day);switch(day){case 1:printf("星期一\n");break;//终止打印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;
}

以上就是switch语句的经典列子,比如我们输入3的话,程序就会打印星期三,但是如果我们删去全部的break,再次输入3的话,程序就会依次打印星期三、星期四……星期天,大家可以复制代码到自己的编译器里去试试哦

我们习惯上在最后一个case的语句后面加上一条break语句,尽管加与不加在代码运行时并没有什么区别,但是为了以后维护方便,我们最好加上,这样如果你以后决定在这个switch语句中再添加一个case,就可以避免出现在以前的最后一个case语句后面忘记添加break语句这个情况

如果你想在输入1、2、3、4、5时输出weekday,输入6、7时输出weekend时该怎么办,请小伙伴们先思考思考
我们可以像这样暴力求解

//输入1、2、3、4、5时输出weekday,输入6、7时输出weekend
#include <stdio.h>int main()
{int day = 0;scanf("%d", &day);switch(day){case 1:printf("weekday\n");break;//终止打印case 2:printf("weekday\n");break;case 3:printf("weekday\n");break;case 4:printf("weekday\n");break;case 5:printf("weekday\n");break;case 6:printf("weekend\n");break;case 7:printf("weekend\n");break;}return 0;
}

但是,我们一般这样编写代码,以下代码的执行过程没有任何问题,在缺少break语句的情况下,case语句将依次被执行,直到遇到break跳出语句

//输入1、2、3、4、5时输出weekday,输入6、7时输出weekend
#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;
}

default 子句

在上面的代码中,你可能会想如果表达式的值与所有的case标签的值都不匹配怎么办?比如在上面的代码中我输入一个8,但是没有case 8呀,其实没有什么错,就是所有语句都被跳过而已,也就是什么都不会打印,大家可以复制代码自己运行试试

我们编写这样一条代码,如果用户输入8,我们就提示他请输入1~7之间的数字,这时候就要用到default子句,代码如下

#include <stdio.h>int main()
{int day = 0;scanf("%d", &day);switch(day){case 1:printf("星期一\n");break;//终止打印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("请输入1-7之间的数字\n");break;}return 0;
}

当表达式的值与所有的case标签的值都不匹配时,default子句后面的语句就会执行

注意:每个switch语句只能出现一条default子句
   default子句可以出现在语句列表的任何位置

接下来可是主食哦,细品哦客官

三、循环语句

1. while 语句

C语言的while语句语法如下

while (expression)//expression表示表达式,其值为0则为假,其值非0则为真
{statement//statement表示代码块
}

while语句的执行过程

图中,break语句用于永久终止循环,也就是跳出break语句所在的循环。continue语句用于永久终止当前的那次循环,也就是跳过一次循环,直接去判断部分进行是否继续循环的判断

值得注意的是这两条语句的任何一条如果出现于嵌套的循环内部,那么它只对最内层的循环起作用,也就是你无法通过它影响外层循环的执行

来写一段while语句的代码吧

//打印1-100以内3的倍数
#include <stdio.h>int main()
{int i = 1;while (i <= 100)//while循环{if (i % 3 == 0){printf("%d ", i);}i++;}return 0;
}

while语句+continue语句代码演示

//只打印数字字符
#include <stdio.h>int main()
{char ch = 0;while ((ch = getchar()) != EOF)//此语句用于多组输入	EOF - end of file{								if (ch < '0' || ch>'9')//判断ch是否为字母,是返回非0,不是返回0{continue;//若输入为字母则执行continue,跳过此次循环,不继续执行下面的语}			 //直接进行下一次判断putchar(ch);}return 0;
}

while语句+break语句代码演示

//如果输入为负值,程序结束
#include <stdio.h>int main()
{float value = 0;while (scanf("%f", &value) == 1)//scanf的返回值为1,1 == 1,进入循环{if (value < 0)//负数小于0,表达式为真,则执行break终止循环{break;}}return 0;
}

2.for 语句

C语言的for语句语法如下

for (expression1; expression2; expression3)//expression表示表达式
{statement//statement表示代码块,是for语句中的循环体
}

其中,expression1为初始化部分,只在循环开始时执行一次,expression2为条件部分,它在循环体每次执行前都要执行一次,expression3为调整部分,它在循环体每次执行完毕,在条件部分即将执行之前执行

所有三个表达式都是可选的,都可以省略,如果省略条件部分,则表达式的结果始终为真

在for循环里也可以使用continue语句和break语句,而且continue语句把程序直接转移到调整部分

for语句的执行过程

用一段for循环代码来加以理解吧

//打印1-100以内3的倍数(for循环版本)
#include <stdio.h>int main()
{int i = 0;for (i = 1; i <= 100; i++){if (i % 3 == 0){printf("%d ", i);}}return 0;
}

我们会发现for循环与while循环非常类似,观察它们的执行过程,会发现它们的区别在于continue语句。

在for语句中,continue语句跳过循环体的剩余部分,直接回到调整部分,而在while语句中,调整部分是循环体的一部分,所以continue也会跳过它

for循环相较于while循环在风格上有优势,for循环的所有用于操纵循环的表达式是放在一起的(位于括号内),便于寻找,这样当循环体比较大时你可以更加快速的确定循环是如何进行的

我个人最喜欢的就是for语句了,嘿嘿

3.do while 语句

C语言的do while语句语法如下

do
{statement//statement表示代码块,是do while语句中的循环体
}while (expression);//expression表示表达式,注意语法,末尾要加分号

do while语句的执行过程

别看它的执行过程歪七扭八,但实际用起来和while语句差不多,最大的区别就是do while循环的循环体至少执行一次,所以,当你想要循环体至少执行一次时,选择do
while语句

看一段代码加深理解

//打印8个A
#include <stdio.h>int main()
{int column = 0;do{column += 1;putchar('A');} while (column % 8 != 0);return 0;
}

主菜上完了以后,不如来点小甜点吧!

四、goto 语句

C语言的goto语句语法如下

goto 语句标签;

使用goto语句时,你必须在你想要跳转的语句前面加上语句标签,语句标签就是标识符后面加个冒号,包含这些标签的goto语句可以出现在同一个函数的任何位置

用代码来理解

//陷入打印hehehaha的死循环
#include <stdio.h>int main()
{
flag:printf("hehe");printf("haha");goto flag;//回到句首flagreturn 0;
}
//goto语句不常用,不能再两个函数之间跳跃,与break相比能跳出更多的循环

在一种情况下使用goto语句非常适合,那就是跳出多层嵌套的循环,因为break语句只能跳出包围它的最内层循环,如下面这种情况

while (expression1)
{while (expression2){while (expression3){if (expression4){goto quit;}}}
}
quit: ;

goto语句是一种危险的语句,因为在学习C的过程中,很容易形成对它的依赖
                                ——《C和指针》

用goto语句写出来的程序总是难以维护的多,一般情况下,我们应该避免使用goto语句

今日份心灵鸡汤

人生的每一笔经历,都在书写你的简历。原本你以为微不足道的事情,回头看的时候,都有着无法细数的刻度。自己拼出来的东西,和别人送到嘴边的东西,意义和珍惜的程度都大为不同。

希望大家在忙碌的生活中能够暂且停下脚步,休憩片刻,C语言小厨房欢迎大家光临

我试着改变了自己的博客风格,希望你们能够喜欢,好嘞,客官慢走,欢迎下次光临

更多推荐

【Shp的C语言小厨房】语句篇

本文发布于:2024-03-06 14:50:32,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1715595.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:语句   语言   小厨房   Shp

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!