分支与循环语句1

1分支语句:

1.1if语句

if(表达式) {语句}。if最常用的是和else联用。

那我问个问题:能不能写成6<n<18?如果这样写,判断条件又是怎样的呢?

 

为啥还是这情况呢?分析一下(6<n<18) 括号内是从左往右依次计算的

输入10,6<10为真,返回1所以把6<n这部分换成1,1<18为真,所以打印“青少年”这里挺有意思的。

注意if的表达式中0表示假,非0表示真,如-1也是非0,所以它也表示真。

1.2悬空else

看一下下面的代码:

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>

int main()
{
	int a = 0;
	int b = 0;
	if (a == 1)
		if (b == 2)
			printf("hehe\n");
	else
		printf("haha\n");
	return 0;
}

请问它会打印haha还是hehe?

 为啥啥也没打印?

这里就看出了代码风格的重要性,如果有需求的兄弟们可以看一下《高质量c/c++编程》 。

又有人该问左边这个if不加大括号为啥接两个语句,这里if,else是一个语句,两者是选择关系,不是两个都选。

1.3

接下来看看这个代码——

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
int test()
{
	int a = 1;
	if (a)
		return 1;
	return 0;
}
int main()
{
	int ret = test();
	printf("ret=%d", ret);
		
	return 0;
}

它是如何实现的?

那我现在有个疑问if if和if else两者有啥区别?

 我总结了以下几点:

条件判断上

1.1if if是所有条件都要判断一遍。

1.2if else满足一个条件就停止。

执行结果正确率上:

2.1 由于if if都回执行一遍,则可能会同一个需要判断的事情进入两个if if语句中,会出现错误问题。

2.2if else 不会发生如此问题。

2switch语句

switch(expression)

{statement-list}

这就是基本格式

而贯穿于statement—list之间的是一个或多个case标签,我们可以理解为这个case就是入口

接下来我们打印一周七天。

 你有没有看出switch的不同之处,执行流将贯穿各个case标签,而不是停留在某一个case标签上,这也是为啥case标签只是确定语句列表的进入点而不是划分他们的原因,入过你就想输入三,返回星期三,那么将用到break.

如果switch语句在执行过程中遇到break,执行流就会立即跳转到语句列表的末尾,几乎每个case中都存在一个break,当然有例外,一会再讲。

 为啥在星期日后边还要加break呢?,他在运行时并没有实际效果,因为他后边每一句了,但是也没坏处,如果以后再加一个case时可以避免前一个忘记加break1的情况。

continue只能作用在循环中,在switch中无任何意义。

那如果输入的数不是1-7而是其他数呢?那是不是要报错?那在引用一个default

这个东西是如果输入的数据不再case情况中,机器报错。

 那多个case 一个break情况是啥?

2.循环语句

2.1while循环

 

为啥打印的是1,2,3,4而不是     1,2,3,4,6,7,8,9,10?接下来我们调试一下看看

 

 将break换成continue为啥是死循环呢?

 

 总结一下:

break用于永久终止循环,在执行完break后,执行流将跳出while进行后边该执行的语句。

continue是跳过本次循环,至于是否进入下一次循环看是否满足判断条件。

如果两者出现在嵌套循环或循环内部时,只对最内部的while起作用,无法影响外层循环的作用。

那用字符写个循环试试

注意:EOF为计算机术语End Of File的缩写。在操作系统中表示资料源无更多的资料可读取。资料源通常称为档案或串流。在C标准库中,像getchar这样的数据读取函数返回一个与符号(宏)EOF相等的值来指明文件结束的情况发生,EOF的真实值与不同的平台有关(但通常是-1,比如在glibc中),并且不等于任何有效的字符代码。块读取函数返回读取的字节数,如果它小于要求读取的字节数,就会出现一个文件结束符。

就是我用getchar输入字符,如果合理返回该字符的a's'cll码值,如果不合理返回EOF,在定义里面EOF的值是-1,如果定义char ch来接受getchar返回值,那ch种装不下-1,所以定义int ch,

 如果ch!=EOF,循环一直进行,怎样让他结束呢,不同编译器做法不同,vs中ctrl+z一次不行就三次。

看一下下面这个代码

 为啥我没确认就确认失败?

 那我们改进一下。

有同学问,写这么多废话有啥含义,改进代码的意义是除去系统自加的\0。要不该代码毫无意义 

2.2for循环

 

这是他的运行图,我们发现for中也有break,continue,接下来,我们探寻一番。

break 

老生常谈,没新意。

continue就有点意思了。

 

只跳过了5,因为他是在判断中就改变值了,不像while在最后改变,但是直接跳过没改成,这是他俩的区别。先写到这,电脑没电了,下次再更!

  • 4
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值