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在最后改变,但是直接跳过没改成,这是他俩的区别。先写到这,电脑没电了,下次再更!