C语言大法 第二式 语句

  • 空语句
  • 表达式语句
    • 表达式
    • 左值和右值
  • 复合语句
  • 分支语句
    • if 语句
      • 悬空else
    • 新的_Bool类型
    • switch 语句
    • default子句
  • 循环语句
    • while语句
      • break 和 continue 语句
    • for语句
      • for语句的循环控制变量
    • do while 语句
  • goto语句

语句是C程序的基本构建块,一条语句相当于一条完整的计算机指令,在C中大部分语句以分号结尾

空语句

C最简单的语句就是空语句,它本身只包含一个分号,一般是为了语法要求来组成一条完整的语句

   while( (ch=getchar() !=EOF );      //这一条语句就是空语句,只需要保持循环的完整性不需要执行什么

表达式语句

表达式

表达式由运算符和运算对象组成
C表达式最重要的一个特性就是—每个表达上都有一个值
表达式的求值顺序一部分是由它所包含的操作符优先级和结合性决定的

表达式
- 4 + 6 2
a = 2 + 6 8
6 > 3 1
4 + ( a = 2 + 4 ) 10

比如判断的表达式( a >3 )这种表达式的值不是0就是1,如果条件为真那么就是1,
如果条件为假,表达式的值就是0.
这里的最后一个表达式[ 4 + ( a = 2 + 4 )]虽然完全合法但不建议使用.它是两个子表达式的和,每个子表达式都有值

在表达式后面加上一个分号,就将表达式转换成为语句

C语言的副作用—副作用是对数据对象或文件的修改

  int a = 10;printf("%d",a);

比如:第一条语句的副作用就是将变量a的值设置成10
调用printf函数时它的返回值我们通常不关心,它的显示作用就是其副作用

左值和右值

左值就是可以出现在赋值符号左边的东西,右值就是可以出现在赋值符号右边的数值

  a = b + 25;b + 25 = a;可以互换吗?

左值是一个表达式,可以出现在赋值符的左边,表示内存中的一个地址
右值表示一个值,它出现在赋值符的右边
每个左值表达式同时是一个右值,但右值不一定能作为左值

第一个句子:
a=b+25;a是一个左值它标定了一个存储的特定的位置,而b+25指定了一个值
第二个句子:
b+25=a;原先作为左值的a可以作为右值,但是b+25不能作为左值,
应为b+25的结果必定会保存于机器的某个位置,但是我们不能预测它
所存储的具体位置,也无法保证下次是否存储于同一位置。
同理: 字面值常量都不是左值。

复合语句

复合语句就是用花括号括起来的一条或者多条语句,复合语句也称为块

  while(girlfriend==1){if(不分手)printf("有女朋友!!!");elsegirlfriend--;}

这个{ }之间的整个语句就是一个复合语句或者一个块

分支语句

if 语句

表达式结果为真则语句执行,在C语言中非零表示真,零表示假
if 一般情况下只能控制一个语句如果想要控制多条语句则需要将语句用{ }括起来

悬空else

当if出现嵌套时就会出现“悬空else”的情况

  if(a>1)if(b>1)printf("%d",a);elseprintf("%d",b);

这种情况else字句是从属于最靠近的的if语句也就是if(b>1)
如果想让他从属于第一个if语句那么就需要加上一条空else语句
或者用{ }将他们包围在一个代码块内部(推荐这种)

新的_Bool类型

在C语言中一直用int类型的变量表示真/假值,C99专门针对这种类型的变量新增_Bool类型,表示真或假的变量称为布尔变量,_Bool是C语言中布尔变量的类型名。
_Bool类型的变量只能存储1(真)或0(假),如果把其他非零值的数值赋值给_Bool类型的变量,该变量会被设置成1,C把所有非零值视为真。

  int a = 10;_Bool b = a>0;if(b)printf("真");

如果不支持_Bool类型导致程序无法进行,可以将_Bool替换成int

switch 语句

switch语句也是一种分支语句,常常用于多分支的情况



这里我们只输入1,但是我们按照顺序将全部的case语句从上而下执行了,所以我们要实现一个case进入后退出,这时候我们需要在每个case语句结尾加上break语句

case决定入口而break决定出口
case后面只能接整形比如1 2 3不能接别的比如1.0 2.0等但是可以接字符,因为字符在存储中以它的ASCll码值存放

default子句

  switch(){case 1:printf("one");break;case 2:printf("two");break;default:printf("输入错误");    break;  }

循环语句

while语句

表达式为非零也就是真的情况下进入循环,循环的测试在循环体开始执行之前进行,如果测试结果一开始为假那么循环体就不会进行

   while(girlfriend == 1){if(不分手)printf("有女朋友!!");else if(分手)printf("失恋");else if(又找一个)printf("渣男!!");}

如果while在表达式内部就能完成目标任务,那么循环就无事可做,这种情况下循环体就用空语句来表示,但最好不要在后面之间就接分号容易产生错误

   while((ch = getchar()) !=EOF && ch !='\n' );

break 和 continue 语句

在while循环中使用break语句用于永久停止循环,在执行完break语句后下一句就是循环正常结束的下一句语句

continue语句用于永久终止当前的这次循环,执行完这次continue语句后直接重新判断表达式真假来决定是否继续循环

这两条语句如果出现在嵌套中那么只对它所处的循环内部有效,无法影响外层的循环,也就是只能退出一层循环

for语句

   for(有一个女朋友;现在是否有女朋友;分手){printf("不好好处对象!!");}

这个循环只执行了一次

for循环的三个表达式都是可选的,都可以省略,如果省略判断部分,那么判断就恒为真
在for语句中使用break与continue语句,使用break语句就是直接跳出循环,
使用continue语句就直接跳到调整部分,在while语句中因为调整部分也是循环体的一部分所以continue是直接跳过

for语句的循环控制变量

不可在for 循环体内修改循环变量,防止 for 循环失去控制

  for(i=0;i<10;i++){i=10;}

这种写法将会直接导致for循环终止,一般情况不可取

建议for语句的循环控制变量的取值采用“前闭后开区间”写法

  int i = 0;//前闭后开的写法for(i=0; i<10; i++){}//两边都是闭区间for(i=0; i<=9; i++){}

do while 语句

do while循环是至少执行一次

   int i = 10;do{printf("%d\n", i);}while(i<10);

循环是一个强大的编辑工具,在创建循环时一定要注意以下几点

  • 注意循环的测试条件要能使循环结束
  • 确保循环测试中的值在首次使用之前已初始化
  • 确保循环在每次迭代后都更新测试的值

goto语句

理论上 goto语句是没有必要的,实践中没有goto语句也可以很容易的写出代码
最常见的goto语句就是跳出多层循环

for(...)for(...){for(...){if(disaster)goto error;}}…
error:if(disaster)//处理错误

当使用break语句达不到想要的目的就使用goto语句
goto语句只能在一个函数里面跳转,不能跨函数

如果博客里面出现错误欢迎大家留言评论

从小白到武林之巅让我们一起学好c语言大法

武林秘籍之C语言大法.第二式 语句 带你走向武林之巅相关推荐

  1. 武林秘籍之C语言大法.第一式 数据 带你走向武林之巅

    C语言大法 第一式 数据 基本数据类型 整型 整形 类型 最小范围 字符 char 0~127 无符号字符 unsigned char 0~255 有符号字符 signed char -127~127 ...

  2. Qt武林秘籍学习笔记摘要

    1 原文链接 Qt开发经验: 自己总结的这十多年来做Qt开发以来的经验,以及Qt相关武林秘籍电子书,会一直持续更新增加,欢迎各位留言增加内容或者提出建议,谢谢! (gitee.com) 编程语录: 自 ...

  3. Sphinx武林秘籍(上)

    为什么80%的码农都做不了架构师?>>>    Sphinx武林秘籍(上) ――使用现有的语言模型与声学模型 一.     使用平台 Windows XP.VMware workst ...

  4. JAVAWEB增删改查武林秘籍

    增删改查武林秘籍 学之受用无穷,可在30分钟内写完增删改查所有后台代码 1.项目搭建 1:创建一个maven 带骨架webapp的项目 2:创建表:book表(你所要增删改查的表) 并且使用idea ...

  5. 计算机界的“武林秘籍”——经典教材推荐

    本文来源于网络,对最经典的教材进行了排行,堪称计算机界的"武林秘籍",秘籍在手,谁与争锋!整理后全文如下: 几年前,台湾著名技术作家侯捷先生曾经写过一篇影响很大的书评文章,叫做&l ...

  6. 武林秘籍之Spring AOP 切面编程的简单应用

    年轻人,我观你骨骼精奇,定是万里无一的练武奇才,老夫这里有一本失传已久的武林秘籍,现赠于你,望你勤加苦练,早日修成正果... AOP(面向切面编程):Aspect Oriented Programmi ...

  7. python武功秘籍解压密码_武林秘籍

    你好,我是一名极客!一个 75 后的老工程师! 我将花两分钟,表述清楚我喊你来这里的目的! 如果你看过武侠小说,你可以把这个经历理解为,你失足落入一个山洞遇到了一位垂暮 的老者!而这位老者打算传你一套 ...

  8. 『转』魔兽争霸秘籍之高手速成大法

    Tab -在编队中的相同单位的小组之间切换. Alt (如果在发出命令的同时按下) - Overrides formation movement during an action. Alt-G -在小 ...

  9. 大佬的QT武林秘籍(整理)

    根据大佬的武林秘籍,整理出来一些网的时候自己可以直接查看 大佬主页:https://blog.csdn.net/feiyangqingyun?type=blog 1.QTimer::singleSho ...

最新文章

  1. 适合小小白的完整建设流程
  2. python白名单验证-JWT黑名单和白名单
  3. Javascript模块化编程:AMD规范
  4. python中sendkeys.sendkeys_python的webbrowser模块和SendKeys模块
  5. 2017.9.11 海拔 思考记录
  6. linux环境下qt实验报告,青岛科技大学实验报告(实验一).doc
  7. mysql 使用内置函数来进行模糊搜索(locate()等)
  8. 网上商城项目总结报告
  9. 51NOD - 1381 1381 硬币游戏【思维+数学期望】
  10. 【阿狸的小伙伴win7主题】
  11. 【操作系统原理-2014年清华陈渝老师】索引
  12. 2019最新个税计算_python
  13. 智力答题源码php,php儿童智力测评系统
  14. 物流系统管理课程(二)
  15. 北邮计算机学院石川,祝贺石川教授团队两篇论文被ACM SIGKDD2019接收!
  16. 计算机电源 4pin,用电脑电源4PIN接口做的2mm插头插座,省钱方便~
  17. FL Studio 20音乐制作教程
  18. solidworks批量图号分离_SolidWorks2014怎么实现图号名称分离?
  19. eclipse出现编译错误:resolution will not be reattempted until the update interval o f central has elapsed
  20. 如何Disable Alfresco的Download以及打印功能

热门文章

  1. STM32 嵌入式 超超超超超轻量级操作系统
  2. 软考高级考完了,怎么评职称?
  3. 我就是那个在上海假装生活的人
  4. linux安装git环境
  5. jsp之bootstrap-datetimepicker日期插件
  6. soj 3172 Fisherman (01背包的装满)
  7. 大众点评大数据 hadoop 应用案例
  8. python爬虫之静态网页(以当当网图书畅销榜榜为例)
  9. SysML实践指南第二版(中文翻译:刘亚龙)第17章 OOSEM方法学
  10. 什么是服务器合租?产权如何分配?