分支和循环上

1.if语句

1.1 if

if语句的形式如下:

表达式为真则语句执行,表达式为假则语句不执行。在c语言中,0为假,非0为真,也就是说如果表达式的结果为0,则语句不执行,表达式的结果如果不是0,则语句执行。

例子:输入一个整数,判断是否为奇数

1.2 else

if...else...语句表达形式:

例子: 输入一个整数,判断是否为奇数,如果是奇数打印奇数,否则打印数偶数。

练习:输入一个年龄,>=18岁就输出:成年,否则就输出: 未成年

#include <stdio.h>

int main()
{ 
  int age = 0;
  scanf("%d", &age);
  if(age>=18)
    printf("成年\n");
  elae
    printf("未成年\n”);
  return 0;
}

1.3 分支中包含多条语句

if和else语句中默认都只控制一条语句,如果要控制多条语句 就要加{},如果控制多条语句不加{}则会出现如下情况:

这是因为printf(“可以谈恋爱了”)不受if语句的控制,独立存在,不管if语句是真是假都会被执行因此要用{},正确示范如下:

1.4 嵌套if

在 if else 语句中,else 可以与另一个if 语句连用,构成多重判断。

比如:要求输入一个整数,判断输入的整数是0,还是正数或者负数。请看如下代码:

上图灰色背景的代码就是嵌套在前面的else子句中,构成嵌套的if语句。

1.5 悬空else问题

如果有多个 if 和 else,可以记住这样一条规则,else总是跟最近的if匹配。那让我们猜测一下下面代码的运行结果。

很多初学者,以上来判断a是0,不等于1,那就执行else子句,打印haha,但是当你去运行代码,输出的结果啥也不是。

这是为什么呢? 

这就是悬空else问题,有如果多个if和else,可以记住这样一条规则,else 总是跟最近的if匹配

上图的代码实际上else是和第二个if匹配的,后面的if...else语句是嵌套在第一个if语句中的,如果第一个if语句不成立,嵌套 if和else就没机会执行了,最终啥都不打印。如果代码改成如下就好理解了。

只要带上大括号,代码的逻辑就会更加的清晰,所以大家以后再写代码的时候要注意括号的使用,让代码的可读性更高。

2.关系操作符

c语言用于比较的表达式,称为关系表达式,里面使用的运算符就称为关系运算符,主要有下面六个。

  1. >  大于运算符
  2.  <  小于运算符
  3. >=  大于等于运算符
  4. <=  小于等于运算符
  5. ==  相等运算符
  6. !=  不相等运算符

关系表达式通常返回0或1,表示真假。c语言中,0表示假,所有非零值表示真。比如,20>12 返回1,12>20返回0。关系表达式常用于 if 或 while 结构。

注意:相等运算符 == 与赋值运算符 = 是两个不一样的运算符,不要混淆。有时候,可能会不小心写成if( x = 3),这个式子表示对变量x赋值为3,它的返回值为3,所以if判断总是为真。

为了防止出现这种错误,有的程序喜欢将变量写在等号的右边,如 if( 3 == x),这样的话,如果把==误写成 = ,编译器就会报错。

另一个需要笔面的错误是:多个关系运算符不宜连用。

如:i <j <k

上面示列中,连续使用两个小于运算符。这是合法表达式,不会报错,但是通常达不到想要的效果,即不是保证变量j的值在j和k之间。因为关系运算符是从左到右计算,所以实际执行的是下面的表达式.

(i<j)<k

上面式子中,i<j 返回0或1,所以最终是0或1与变量k进行比较。如果想要判断j的值是否在i和k之间,应该使用下面的写法。

i < j  && j < k

比如:我们输入一个年龄,如果年龄在18~36之间,我们输出青年。

如果这样写 if(18<=age<=36),当我们输入10的时候,依然输出青年。

如果要判断则要按照如下方式书写

以上是关于操作符我们需要理解的。

3.条件操作符

条件操作符也叫三目操作符,需要接受三个操作数,形式如下:

条件操作符的逻辑是:如果 exp1 为真则 exp2结果代表整个表达式的结果;如果 exp1 为假则exp3 的结果代表整个表达式的结果。

练习1:

改写后:

4.逻辑操作符: && ,|| ,!

逻辑运算符提供逻辑判断功能,用于构建复杂的表达式,主要有下面三个运算符。

  1.  !:逻辑取反运算符。
  2. &&:与运算符,就是并且的意思(两侧的表达式都为真,则为真,否则为假)。
  3.   ||: 或运算符,就是或者的意思(两侧至少有一个表达式为真,则为真,否则为假)。

4.1 逻辑取反运算符 !

 0为真,非0表示假,如果a表示真,!a表示为假。

4.2 与运算符 &&

&&就是与运算符,也是并且的意思,&&是一个双目操作符,使用的方式是a&&b,&&两边的表达式都为真的时候,整个表带式才为真,只要有一个是假,整个表达式为假。

比如:我们说月份3到5月是春天,那使用代码怎么体现呢?

4.3 或运算符 ||

|| 就是或运算符,也就是或者的意思,||也是一个双目操作符,使用的方式a || b,||两边的表达式只要有一个为真,整个表达式就是真,两边的表达示都为假时才为假。

比如:我们说一年中月份是12月或者1月或者2月是冬天,那代码该如何实现?

4.4 练习:闰年的判断

4.5短路

c语言逻辑运算符还有一个特点,它总是先对左侧的表达式求值,再对右边的表达式求值。

如果左边的表达式满足逻辑运算的条件,就不再对右边的表达式求值。这种情况称为短路。

如前面的代码:

表达式中&&的左操作数month >= 3,右操作数是month <= 5,当左操作数month >=3 的结果为0的时候,即使不判断 右操作数整个表达式的结果也是0(不是春季)。

所以,对于&&操作符来说,左边操作数的结果为0的时候,右边操作数不再执行。

对与||操作符是怎样的呢? 我们结合前面的代码:

如果month==12整个表达式都为也是1(即为真是冬季),不用再判断month是否等于1或者2。

所以,|| 操作符的左操作数的结果不为0时,就无需执行右操作数。

像这种仅仅根据左操作数的结果就能知道整个表达式的结果,不再对右操作数进行计算的运算称为短路求值。

5.switch语句

除了if语句外,c语言还提供了Switch语句来实现分支结构。

Switch语句是一种特殊形式的if...else结构,用于判断条件有多个结果的情况。它把多重的else  if 改成易用可读的形式。

上面代码中,根据表达式expression不同的值,执行相应case分支。如果找不到对应的值,就执行default分支。

注:

  • Switch后的expression必须是整型表达式
  • case后的值,必须是整形常量表达式

5.1 if语句与Switch语句的对比

练习:输入一个整数值,计算除3之后的余数

如果使用if语句完成,如下:

如果使用Switch语句改写,就可以这样:

上面的代码,我们需要注意的点有:

  1. case 和后面的数字必须要有空格
  2. 每一个case语句中的代码执行完成后,需要加上break,才能跳出这个Switch语句。

5.2 Switch语句中的break

前面的代码中,如果我们去掉break,会怎样呢?

我们发现10除以3余数本来是1但是运行结果多出来一个“余数是2”的打印。

这是为什么呢?

原因是Switch语句也是分支效果的,只有在Switch语句在使用break才能跳出Switch语句,如果case后面没有break语句,代码会继续执行,有可能执行其他case语句中的代码,直到遇到break语句或者Switch语句结束。就比如上面的代码就执行了case2中的语句。

所以,Switch语句中的break语句非常重要,能实现真正的分支效果。

当然,break也不是每个case语句都得有,这就得根据事实看情况。

练习:

  1. 输入1~5输出“工作日”;
  2. 输入6~7输出“休息日”

5.3 Switch语句中的default

如果上式代码中的输入的不是1~7的数字,要提示输入错误,那代码就可以用default来完成,如下所示:

5.4 Switch语句中的case和default的顺序问题

在Switch语句中case子句和default子句有要求顺序吗?default只能放在最后吗?其实,在Switch语句中 case 语句和 default 语句没有顺序要求,只要你的顺序满足实际需求即可。不过我们通常把default放在最后。

6. while循环

while语句的语法结构和if语句十分相似,但是又有区别。

6.1 if 和 while 语句的对比

从上面我们可以看出两者的相似之处。6.3

从这里我们可以看出区别,while语句是可以实现循环的。

6.2 while循环的实践

练习:在屏幕上打印1~10的值

6.3 练习

输入一个正的整数,逆序打印这个整数的每一位

列如:

输入:1234, 输出:4 3 2 1

输入:521 ,输出:1 2 5

题目解析

  1. 想要得到n的最低位,可以使用n%10的运算,得到的余数就是最低位,如:1234%10得到4
  2. 要想去掉n的最低位,找出倒数第二位,则使用n=n/10操作就可以去掉最低位,如:n=1234/10得到123,123相较于1234就去掉了最低位,123%10就得到倒数第二位3。
  3. 循环1和2两个步骤,在n变成0之前,就能到所有的位。


7. for循环

7.1 语法形式

for循环是三种循环中使用最多的,for 循环的语法形式如下:

1   for(表达式1;表达式2;表达式3);

表达式1  用于循环变量的初始化

表达式2  用于循环结束条件的判断

表达式3  用于循环变量的调整

7.2 for循环的实践

练习:在屏幕上打印1~10的值

参考代码:

7.3 while循环和for循环的对比

for 和while 在实现循环的过程中都有初始化、判断、调整这三部分,但是for循环的三部分非常集中而while循环相对分散,因此for循环更便于代码维护,for形式更优一些。

7.5 练习

练习1:

计算1~100之间3的倍数的数字之和

优化后

8. do-while循环

8.1语法形式

在循环语句中 do  while语句的使用最少,它的语法如下:

do

  语句;

while(表达式);

while 和 for 这两种循环都是先判断,条件满足就进入循环,如果不满足就跳出循环;

而do while 循环则是先进入循环体,执行循环语句,然后在执行while后的判断表达式,表达式为真则会进入下一次,表达式为假,则不在继续循环。

8.2 do  while循环的实例

在屏幕上打印1~10的值

一般do while循环至少执行一次,所以使用较少。

8.3 练习

输入一个整正数,计算这个整数是几位数?

例如:

输入:1234  输出:4

输入:12     输出:2

这里并非必须要使用do while语句但是使用do while语句比较合适,因为即使数字是0也算一位。

  • 48
    点赞
  • 32
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
毕设新项目-基于Java开发的智慧养老院信息管理系统源码+数据库(含vue前端源码).zip 【备注】 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用!有问题请及时沟通交流。 2、适用人群:计算机相关专业(如计科、信息安全、数据科学与大数据技术、人工智能、通信、物联网、自动化、电子信息等)在校学生、专业老师或者企业员工下载使用。 3、用途:项目具有较高的学习借鉴价值,不仅适用于小白学习入门进阶。也可作为毕设项目、课程设计、大作业、初期项目立项演示等。 4、如果基础还行,或热爱钻研,亦可在此项目代码基础上进行修改添加,实现其他不同功能。 欢迎下载!欢迎交流学习!不清楚的可以私信问我! 毕设新项目-基于Java开发的智慧养老院信息管理系统源码+数据库(含vue前端源码).zip毕设新项目-基于Java开发的智慧养老院信息管理系统源码+数据库(含vue前端源码).zip毕设新项目-基于Java开发的智慧养老院信息管理系统源码+数据库(含vue前端源码).zip毕设新项目-基于Java开发的智慧养老院信息管理系统源码+数据库(含vue前端源码).zip毕设新项目-基于Java开发的智慧养老院信息管理系统源码+数据库(含vue前端源码).zip毕设新项目-基于Java开发的智慧养老院信息管理系统源码+数据库(含vue前端源码).zip毕设新项目-基于Java开发的智慧养老院信息管理系统源码+数据库(含vue前端源码).zip毕设新项目-基于Java开发的智慧养老院信息管理系统源码+数据库(含vue前端源码).zip毕设新项目-基于Java开发的智慧养老院信息管理系统源码+数据库(含vue前端源码).zip
综合小区管理系统管理系统按照操作主体分为管理员和用户。管理员的功能包括报修管理、车位管理、车位分配管理、出入管理、字典管理、房屋管理、物业费缴纳管理、公告管理、物业人员投诉管理、我的私信管理、物业人员管理、用户管理、管理员管理。用户的功能包括管理部门以及部门岗位信息,管理招聘信息,培训信息,薪资信息等。该系统采用了Mysql数据库,Java语言,Spring Boot框架等技术进行编程实现。 综合小区管理系统管理系统可以提高综合小区管理系统信息管理问题的解决效率,优化综合小区管理系统信息处理流程,保证综合小区管理系统信息数据的安全,它是一个非常可靠,非常安全的应用程序。 管理员权限操作的功能包括管理公告,管理综合小区管理系统信息,包括出入管理,报修管理,报修管理,物业费缴纳等,可以管理操作员。 出入管理界面,管理员在出入管理界面中可以对界面中显示,可以对招聘信息的招聘状态进行查看,可以添加新的招聘信息等。报修管理界面,管理员在报修管理界面中查看奖罚种类信息,奖罚描述信息,新增奖惩信息等。车位管理界面,管理员在车位管理界面中新增。公告管理界面,管理员在公告管理界面查看公告的工作状态,可以对公告的数据进行导出,可以添加新公告的信息,可以编辑公告信息,删除公告信息。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值