黑马程序员技术交流社区

标题: C语言要点4 [打印本页]

作者: brenthe    时间: 2016-5-15 22:02
标题: C语言要点4
#pragma mark - 0_14 自增与自减运算[掌握]

"强调
1.
a++ ----> 整个 a++ 的式子的值是a ---> a的值 是 a+1
++a ----> 整个 ++a 的式子的值是a+1 ---> a的值 是 a+1
a-- ----> 整个 a-- 的式子的值是a ---> a的值 是 a-1
--a ----> 整个 --a 的式子的值是a-1 ---> a的值 是 a-1


"技巧

int a = 1;

//int b1=a++;//1
//int b2=++a; //2

//int c1 = a--; //1
//int c2 = --a; //0

看与"="最近的是不是一个可以直接赋值的数字,如果是的话,就直接赋值给b,如果不是的话,就进行+1或者-1的操作之后再赋值给b




"练习
int main()
{
    int num =  5;
                 /*
                  (num++)是5,num是6       (++num)是7,num是7         (++num)是8 num是8      (num--)是8,num是7
                  */
    int result  =   num++            +        ++num         +           ++num            -     num--;
    printf("%d\n",result);
    return 0;
}








#pragma mark -  0_17 详解各类比较运算符[掌握]

"强调
1.结果
比较表达式的结果是0或者1,0表示不成立1表示成立

2,易错点
判断两个数据是否相等 是两个等号(等等于). 1个等号叫赋值(经常会有学生搞不清楚)


int m = 5;
if(6 == m )
{
    ....
}









#pragma mark - 0_18 比较运算表达式的场景 [掌握]


"例子

1>判断一个数是不是5的倍数

    (数%5 == 0)  ----> 结果有两种可能 0表示数不是5的倍数  1是表示数是5的倍数

2>实现
    int main()
    {
        //定义一个数用于接受用户输入,拿这个数来操作
        int caoZouShu = 0;
        scanf("%d",&caoZouShu);
        //对5取余数,如果结果 == 0 说明是5的倍数,反之就不是5的倍数
        printf("%d\n",caoZouShu%5==0);
        return 0;
    }


char类型的变量或者常量也可以参与比较运算符,比较的是相应的ASCII码

"例子:
让用户输入两个同大写同小写的且不相同的英文字母,比较这两个字母谁排名在前面
int main()
{
    char char_1,char_2;
    scanf("%c,%c",&char_1,char_2);
    int result = char_1<char_2;//如果是0表示char_2在前面
}


3>找最值: int a,b,c;  *************







#pragma mark - 01 逻辑运算符的简要介绍 [掌握]
"强调
1.为什么C语言给程序员提供逻辑运算符?
    1>比较表达式的最终结果0/1,只能表示一种情况,但是我们在开发中常常需要通过一个式子判断多个条件是否成立
    比如:  数字%3==0 并且 数字%5==0

2>例子
    1)开发中的例子
    判断是否登陆成功,判断密码和账号是否"都"正确
    输入的账号和服务器比对正确 && 输入的密码和服务器比对正确


2.什么是真?什么是假?
计算机的世界中,非0就是真,0就是假
    2--->真
    0---->假
    1--->真
    1.1f--->真
    -43---->真

3.逻辑表达式的值是0或者1







#pragma mark - 02 逻辑与运算符 [掌握]
"强调
A && B
1.&&逻辑与运算符运算规则
    A 和 B 都是真 结果才是真,A 和 B 有一个是假,结果就是假 (同真则真,一假为假)
2.短路问题
    A 是假,B将不会再进行判断,整个式子是假的

例子:i++不执行
    #include <stdio.h>
    int main()
    {
        int num = 0;
        int i = 0;
        int result = num&&i++;
        printf("%d----%d\n",result,i);
        return 0;
        
    }








#pragma mark - 03 逻辑或运算符 [掌握]

"强调
A || B
1.||逻辑与运算符运算规则
A 和 B 只要有一个是真 结果就是真,A 和 B 都是假,结果才是假 (一真则真,同假为假)

2.短路问题
A 是真,B将不会再进行判断,整个式子是真

例子:i++不执行
#include <stdio.h>
int main()
{
    int num = 1;
    int i = 0;
    int result = num||i++;
    printf("%d----%d\n",result,i);
    return 0;
   
}







#pragma mark - 04 逻辑运算符的优先级 [掌握]

"强调
1. !逻辑非运算规则
真变假 假变1 非零变0 0变1 (真变假,假变真)

int main()
{
    int i=2,j=1,k=0;
    printf("%d----%d---%d\n",!i,!j,!k);
    return 0;
   
}

2.优先级的万能公式
()  ">" -(负号) ">" ! ">" 算数运算符(+-*/%) ">" 比较运算符(><==...) ">"  && ">" ||



里面有一个错误:
逻辑运算符的优先级比 比较运算符的优先级要 (低).







#pragma mark - 04_2 练习讲解

a  请用户输入小明的语文成绩和数学成绩,输出以下判断的结果.
    1). 两门成绩都大于90分. 1  0
    2). 任意1门成绩大于90分. 1  0


b. 定义1个变量year int  保存年份.
    写1个表达式 判断这个年份是不是闰年.

    满足如下两个条件之一 那么年份就是闰年.
    1). 年份可以被400整除.
    2). 年份可以被4整除 但是 不能被100整除.








#pragma mark - 05 运算符的优先级和结合性 [掌握]


"强调
1.什么是优先级
当一个表达式中,有各种各样的不同类型的运算符的时候,此时应该先计算哪一个运算符?解决这个问题的方案就是优先级


优先级 万能公式
()  ">" -(负号) ">" ! ">" 算数运算符(+-*/%) ">" 比较运算符(><==...) ">"  && ">" ||

2.什么是结合性
当一个表达式中存在的运算符的优先级相等时候,此时应该从左向右运算还是从右向左运算?解决这个问题的方案就是结合性

例子
    1>
    1+2-3-4
    左到右


    2>
    int i,j,k;
    i = j = k = 3;
    右到左


    3>
    i += j += k += 2;
    右到左




#warning 短路问题大全
1.当自增自减运算和逻辑运算组合时,编译器编译代码的时候,放弃优先级,去从左向右扫描,最后去判断自增自减要不要去执行

int main()
{
    int num = 1;
    int i =1;
    int result = num||i++;
    printf("i==%d--result==%d\n",i,result);//1,1
   
    return 0;
}

2.当逻辑&&和逻辑||组合运算时,仍然是放弃优先级,从左向右扫描
如果有短路,后面的就不执行,如果没有短路,那么就按照正常的优先级来计算
1>
int main()
{
    int i = 1;
    int result = 1||i++&&i;
    printf("%d\n",result);//1
    printf("%d\n",i);//1
    return 0;
}
2>
int main()
{
    int i = 0;
    int result = 0||i++&&i;
    printf("%d\n",result);//0
    printf("%d\n",i);//1
    return 0;
}


3>
int main()
{
    int i = 0;
    int result = 0||i++&&i++;//
    printf("%d\n",result);//0
    printf("%d\n",i);//1
    return 0;
}






#pragma mark - 06_2 练习讲解 [掌握]
请用户输入他的儿子的语数外三门课的成绩,如果平均分>=60,给他一个吻.








#pragma mark - 07 使用IF结构注意[掌握]

1.空语句: 一个;表示一个空语句,什么都不做,但是是符合C语言语法规则的
int main()
{
    ;
   
    return 0;
}


2.if结构中if后面的()后面不要加;如果你加了,就认为你满足条件执行依据空语句

int main()
{
    int num = 11;
    if(num > 10);//这里添加分号,if管控的代码块就只有一个空语句
    {
        printf("真的大于10!\n");
        
    }
   
    return 0;
}

//等价于
int main()
{
    int num = 11;
    if(num > 10)
    {
        ;
    }
    {
        printf("真的大于10!\n");
        
    }
    return 0;
}






欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2