C语言中的基本语句

来源:互联网 发布:手机三维立体制图软件 编辑:程序博客网 时间:2024/06/11 05:52
循环语句

1、for循环
    先初始化,在比较判断,后执行循环体
2、while循环
    先比较判断,在执行循环体
3、do while 循环
    先执行循环体,在比较判断
4、goto
    可以实现在函数体内进行跳转,但建议尽量不要使用goto语言。

do/while/for三种循环的比较
do while 循环的效率最高,因为do循环结构上非常精简,利用了程序执行时有低地址到高地址的特点,只使用一个条件跳转指令就完成了循环;while循环结构是先比较再循环,因此无法利用执行执行顺序来完成循环,同时,while循环使用了两个跳转指令,因此,while循环的效率比do while 循环的效率低;for循环需要三个跳转指才能完成循环,所以其效率是最低的。

死循环:
1、while(1);
2、for(;;);
上面两种死循环有什么区别?哪种效率高一点?为什么?
for(;;)死循环里的两个 ; ;代表两个空语句,编译器一般会优化它们,直接进入循环体。
while(1)死循环里的1被看成表达式,没循环一次都要判断常量表达式1是否等于0.
所以,for(;;)死循环的效率比while(1)死循环的效率要高。

选择语句
if----------(判断时 0为假,非0为真)
if-------else-------
if-------else if------else------
。。。
各类型数据与零值得比较
1、bool值与零比较 (0为false/假,非0为true/真)
    
int flag = 6 ;
if ( flag )    //如果是真
{
    //...
}
if ( !flag )   //如果是假
{
    //...
}

2、整型变量和零值比较
int num = 10 ;
if ( num == 0)
{
    //...
}
3、指针和零值比较
char *p = NULL;
if ( p == NULL)
{
    p = "abcd";
}
4、浮点型和零值比较
因为浮点数在内存中的存储方式使得有些浮点数在内存中无法精确的存储,这样就必然有精度的丢失,一旦丢失,就可能使计算不够准确。
设置一个能接收的精度,保证误差在精度范围内就OK了
# define EXP 0.0000001

float f = 0.00001 ;
if (( f > -EXP )&&( f < EXP))
{
    printf("f 约等于 0\n") ;
}
推广
# define EXP 0.0000001

float f = 12.00001 ;
if (((f-12) > -EXP )&&( (f-12) < EXP))
{
    printf("f 约等于 12\n") ;
}

switch分支语句
switch()
{
 case 1:
               。。。
               break;
 case 2:
               。。。
               break;
 case 3:
               。。。
               break;
 default:
               。。。
               break;
}
说明:case后边只能跟整型或枚举类型(字符类型的值也算是整型值),当想实现分支的情况下才加break。

if-else和switch分支的区别
1、两者的本质区别是if-else语句更适合于区间(范围)的判断,而switch语句跟适合于离散值得判断。
2、所有的switch语句都可以用if-else语句来代替(if-else只需对每个离散值分别做出判断即可),而并不是所有的if-else都可以用switch语句来替换。
3、if-else结构会在条件跳转后紧跟语句块;而switch结构则将所有的条件跳转都放置在一起,通过条件跳转指令,跳转到相应的case语句块中,所有case语句块是连在一起的,这样是为了实现C语法的要求,在case语句块中没有break语句时,可以顺序执行后续case语句块。

break和continue的区别
break是跳出一层循环,而continue是跳出当前这一次的循环。

原创粉丝点击