C语言是【结构化的】程序设计。包括顺序结构,选择结构,循环结构。
选择结构有if switch
循环结构有while for do while
什么是语句呢?语句分为1,表达式的语句;2,函数调用语句;3,控制语句;4,复合语句;5,空语句。
后面介绍的是控制语句:用于程序的执行流程,以实现程序的各种结构方式由特点的语句定义字符组成,C语言有9种控制语句。
可分为三类:
1分支语句(条件判断语句):if语句,switch语句。
2循环语句:do while语句,while语句,for语句。
3转向语句:goto语句,return语句,break语句,continue语句。
一,分支语句,
1,if语句
语法结构1:
if (表达式)
语句;
else
语句;
语法结构2:
if(表达式)
语句;
else if(表达式)
语句;
else
语句;
举例
注意不能写成(18<=a<30)只能写成(a>=18 && a<30)
if(表达式) 和 else if(表达式)后面的语句只是默认一个语句,如果为多个语句建议带上{}将多个语句括起来。{}代表代码块。
在C语言中:0表示假 非0表示真 (-1也是真 1也是真)
表达式的结果为真则执行语句
注意
两个结果都为不输出else总是与最近的if结合
但是结果为输出haha
要合理运用{}使结构更清晰
还要有好的代码风格
代码1和代码2都为一样的结果但是代码1容易让别人产生歧义应该用代码2的风格。
还有就是函数中返回的问题
如图中的返回的应该是1,不会返回零。在函数中当返回的第一个数以后他就结束了。如果后面还有也作废了。
2,switch语句
switch语句也一种分支语句,常常用于多分支。
语法结构:
switch(整型表达式)//如果给一个浮点型表达式不行 只能使整型int a
{ //只包含一个case语句时可以不用{},默认为一个
case 整型常量表达式://写成1也可以写成1+1也是整型常量表达式。
语句
}111
例如:
switch决定入口break决定出口
switch语句无法正真实现分支 加入break(跳出)才可以真正实现分支 但是也是按需加
这里前面几个case并没有加break(跳出)
如果没有输入的case后面的整型表达式,匹配失败的时候,这个时候就要用到default
default 也可以不加 程序也可以走。 与位置无关 也可以放在第一行 习惯放在最后面 但是在第一行一定要加break
二,循环语句
1,while语句
语法结构:
while(表达式)
循环语句;
例如:
while语句中可以加入 if 跳出循环
也可以加入continue:这里的continue是直接跳过本次循环continue后面的语句就不执行了,再从开始的while语句向下执行
这里的执行到i=5时if开始起作用 continue开始再从while开始执行,这样就是一个死循环。
break就是跳出循环,永久的终止循环。
continue是用于终止本次循环,也就是本次循环中continue后面的代码不会再执行,而是直接跳转到while语句的判断部分。进行下一次循环的入口判断。
拓展:
getchar():从键盘中读取一个字符,返回值是整型。读取正常的时候返回的是读取的那个字符的ascll值,但是遇到读取错误或者遇见文件结束标志会返回一个EOF。EOF(文件结束标识)是一个-1,
putchar();是打印一个字符
在while语句中getchar
可以按ctrl+z结束 ctrl+z可以让getchar返回EOF使他停下来(有时候按一下不行,这是编译器存在bug。本质上是可以停下来的。scanf也是如此)
getchar加上while可以清理缓冲区的字符
scanf读完缓冲区还有个‘\n’ 遇见getchar被getchar直接读入 输出“确认失败”
加上while((getchar()) !=‘\n’)或者
int a;
while((a=getchar())!=‘\n’)
用来清理缓存区 被getchar吃掉了,读取一个消失一个。
这个代码的作用是只打印数字字符:
2,for循环
语法结构:
for(表达式1; 表达式2; 表达式3)
循环语句;
表达式1:初始化部分
表达式2:条件判断部分
表达式3:调整部分
建议不要在for循环体内调整变量:i++不要放置在for{}内
执行的时候就是第一步i=1(初始化)
第二步i<10(判断)
第三步printf("%d",i);(执行语句)
第四步i++(调整)
这是for语句执行逻辑:也可以加入break 和 continue 。
for循环形式优于while,所以for循环用的最多其次是while循环 ,其次是do while循环。
for循环的变种:
也不要随便省略。会带来问题。
多个变量中间加逗号,