C语言中的基本语句

循环语句

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)死循环的效率要高。

有时候我们可能会想要从标准输入循环获取一些字符,我们可以使用getchar函数来实现,虽然getchar 函数是用于获取一个字符的,但是,它的返回值其实是一个整型,因为在C语言中,字符采用ASCII码编码来表示,所以,字符实际上也就是整型。所以使用一个整型来接收获取到的字符,没什么毛病。

getchar函数原型:int getchar(void);

关于提高循环语句的效率的几个建议

建议1----长内断外

在多重循环结构中,如果可能,将最短的循环放在最外层,将最长的循环放在最里层。

for(int i = 0; i<5; i++)
{
    for(int j = 0; j<100; j++)
    {
        printf("%d",i+j);
    }
}

建议2

如果循环体内有逻辑判断,且循环次数很大,宜将逻辑判断挪到循环体外边。

for(int i = 0; i<100; i++)
{
    if(condition)
        dosomething();
    else
        doOtherthing();
}
//上边的这种写法虽然看着比较简洁,但是循环100次,同样的也会进行100次的判断。效率较低。
//下边这种写法的效率会相对高一些的。
if(condition)
{
    for(int i = 0; i<100; i++)
        dosomething();
}
else
{
    for(int i = 0; i<100; i++)
        doOtherthing();
}

选择语句

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是跳出当前这一次的循环。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值