8.华清嵌入式--控制语句

控制语句在c语言中是基础的基础了,不学好怎么编程,学习它就要多练,多练,多练,当然在学的时候我们要把他们的一些规则搞清楚。

8.华清嵌入式--控制语句

一.控制语句分类

顺序语句 分支语句 循环语句 循环辅助语句
分支语句:if()else  ,switch~case。
循环语句 for(), while(), do~while(),goto()~loop:
循环辅助控制:continue, break, return;

二.分支语句

1.If ()else

常见形式:
简化形式
阶梯形式
嵌套形式

If为很多公司喜欢考的地方一个考点是,if 非0即为真if(-1),if(32)这些都是为真的
第二个考点就是考简化格式例如
int a=2,b=3,c=2;
If(a<b)
If(a<c)
c- -;
else
c+=1;
printf(“%d”,c);

最后结果是3,你的代码不规范就是导致这种理解错误
if后面的语句如果只有一句,可以省略{};没括号情况下默认else跟谁近与谁配对。
int a= -2,b=3,c=2;
If(a)
If(a<c)
c- -;
else
c+=1;
printf(“%d”,c);

这个结果是1;

通过vi命令行模式下:gg=G //用来调整文件格式

当有若干条语句时,必须用{}括起来
注意== 和 = 的应用。

If中比较时数字写前面防止编译器不报错。(好习惯)
小练习:
求三角形面积
已知三角形三边a,b,c,则p=(a+b+c)/2
S= √[p(p-a)(p-b)(p-c)]

程序编写思路:
1.让用户输入a,b,c  
2.检查输入合法性(两边只和大于第三边,两边之差小于第三边)
3.套用公式,得出答案。

2.Switch
多分支选择结构(使用switch case代码更简洁)
Switch中的表达式可以是整型,字符型表达式或枚举(不能为浮点数)
Case 常量只起到语句标号的作用。
Break语句用来强行跳出switch体,default分支后的break可以省略。
多个case可以执行一组语句。
int aa;
Switch(aa)
{
case 0:
case 1:
break;
default:
}

三.循环语句

1.goto语句

loop:  //定义一个标号
Sum+=i;
i++;
goto loop;  //goto这个标号

//goto影响流水线,影响执行效率,生成汇编语言后会有一些跳转指令,但是有时使用goto代码更容易理解

goto可以集中到一处退出函数(当函数有多个出口时,使用goto把这些出口集中到一处更方便,特别是函数中有许多重复清理的工作)
原因:无条件跳转易于理解,可以减少嵌套,可以避免忘记更新某一出口点的问题,算是帮助编译器做了代码优化。

2.

while(i<=100)
{
i++;
}

3.

do{}while(); //先执行后判断,最少执行一次

pow (a,3)   #include <math.h>
编译时 gcc a.c -Wall -lm

4.

for
for(i=0;i<10;i++)
{
}
另外一种形式
i=1;
for(;i<=100;i++)
{

}
还可以省;
i=1;
for(;i<=100;)
{
i++
}

for(;;){}  等价于while(1)

for循环嵌套
练习:
利用for循环打印下面的图案。

int i,j,k;
        for(i=0;i<=5;i++)
        {
                for(j=0;j<i;j++)
                putchar('_');
                for(j=0;j<=i;j++)
                putchar('F'-j);
                putchar('\n');
         }

四.循环辅助语句:
1.break(提前退出一层循环)只能用在循环语句和switch语句中
break只能跳出一层循环

sqrt()//开方  #include<math.h>

注意梳理逻辑来解题

2.continue
结束本次循环,接着判断下一次是否执行循环
continue结束一次循环,break结束一层循环

for(n=100;n<=200;n++)
{
if(n%3==0)
continue;
printf(“%d”,n);
}
使用很巧妙

scanf执行时会检测输入缓冲区,用户输入的字符会放到缓冲区
缓冲区不空,程序不会停顿。
利用getchar();清空输入错误字符。

3.return
主要用于终止包含它的函数的执行
若终止的为主函数,则主程序结束。

如何使用break退出多层循环??
先使外层的条件不成立,然后return,退出内层同时,退出外层。