输入输出(格式化IO函数)、c语言的运算符

输入输出(格式化IO函数)

1、输入scanf()

        (1)基本语法

                scanf(“格式控制符”,变量的地址);

                比如:

int a;

scanf(“%d”,&a);

float b;

scanf(“%f”,&b);

        写法1:一次读取一个数据       

 int a;

scanf(“%d”,&a);

        写法2:一次读取多个数据

int a;

float b;

scanf(“%d%f”,&a,&b);

        (2)scanf遇到的问题

                问题1:scanf在读取整数的时候有问题

                121hello------->读取121

                56.8------------->读取56

                问题2:scanf在读取数据的时候,用户不配合,输入的类型不正确,该怎么解决

                解决方法:scanf的返回值表示用户从键盘输入符合要求的数据类型个数

        (3)详解scanf的底层原理(知道如何工作)

                缓冲区:计算机内存中一块特殊的区域,这个区域专门留给scanf/printf使用

                底层原理:用户从键盘输入的任何数据,都会被当成字符串存放到系统的IO缓冲区里面

                scanf会依据程序员写的格式控制符,从IO缓冲区里面读取合适的字符串,然后把这个字符串转换成你需要的数据类型。

2、输出printf

        (1)基本语法

                printf(“格式控制符”,变量的名字);

int a=10;

printf(“%d”,a);

        写法1:一次输出一个数据      

  int a=10;

printf(“%d”,a);

        写法2:一次输出多个数据    

int a=10;

int b=20;

printf(“%d%d”,a,b);

        (2)详解printf底层原理

                底层原理:打印的数据先存放到IO缓冲区

               代码中所遇到的如下几种情况会自动刷新缓冲区(所谓的自动刷新,就是把缓冲区里面的内容显示屏幕上)

                情况1:return/exit/程序结束

                情况2:缓冲区满了,就会自动把缓冲区里面的内容显示到屏幕上

                情况3:回车

                后面会遇到printf打印不出来的问题,这里埋个伏笔,加个\n;

printf(“%d\n”,a);

 

C语言的运算符

1、运算符分类

        (1)算术运算符

        +-*/%

        除法:

                整数除以整数,结果取整

                例:1/3=0

                        1/2=0

                整数除以小数还是小数除以整数,结果都是小数

        实际用途:

                用来判断数是奇数还是偶数

                用除法来求出一个整数的每一位(1234)

                1234/1000 --------1

                1234/100%10-----2

                1234%100/10-----3

                1234%10-----------4

        51题型(数码管从0加到9999)   

                /:整除符号

                %:取余符号

                %:取余符号

                 取余:得到余数,只能针对整数取余,不能对小数取余

                        1%2=1

                        10%3=1

                实际用途:用取余来限制一个数的范围

                比如:产生一个随机数1111121212121,此时我想把随机数限制到一个范围,用随机数去取余100,既可以把这个数限制到(0-99) 1111121212121%100=21

        (2)逻辑运算符

                作用:用来表示多个条件是否满足,多个条件去一个

                &&  ||  ! 与或非

                2.1逻辑与--------->并且

  if(高&&富&&帅)     

  {

      printf(“是白天\n”);//同时满足才会执行这行语句

  }

 else

 {

      printf(“努力奋斗\n”);

 }

if(a>10&&b!=0)

                运算规则:从左至右依次判断每个表达式的值是否为真,如果有一个表达式为假,后面的表达式不参与计算,整个表达式全为假

If(条件1&&条件2&&条件3&&条件4)

        表达式有假为假

笔试题:      

 int a=85;

       int b=5;

       if((a>b)&&(a=a+10)&&(b=b-a)&&(a-b<3)&&(a=a-b+10))

          printf(“a,b=%d,%d\n”,a,b);

       else

         printf(“a,b=%d,%d\n”,a,b);  //     95 -90

                 2.2逻辑或|| ------->或者

                        运算规则:从左到右依次判断每个表达式是否为真,如果有一个为真,后面的表达式不参与计算,整个表达式为真

                if(条件1||条件2||条件3||条件4)

                        表达式有真为真

笔试题: 

 int a=85;

  int b=5;         

  if((a>b)||(a=a+10)||(b=b-a)||(a-b<3)||(a=a-b+10))

          printf(“a,b=%d,%d\n”,a,b); //85 5   

       else

         printf(“a,b=%d,%d\n”,a,b);  

                2.3笔试题提升难度,逻辑与与逻辑或混合计算

    int a=85;
    
    int b=5;         
    
    if((a>b)||(a=a+10)&&(b=b-a)||(a-b<3))
        
        printf(“a,b=%d,%d\n”,a,b);  
    
    else
        
        printf(“a,b=%d,%d\n”,a,b); 

                总结模型:

                情况1:条件1||条件2&&条件3||条件4

                        if((a>b)||(a=a+10)&&(b=b-a)||(a-b<3))

                        整体看成逻辑或,从左到右计算,把中间的条件2和3看成整体

                情况2:条件1&&条件2||条件3||条件4

                        if((a>b)&&(a=a+10)||(b=b-a)||(a-b<3))

                整体看成逻辑或,从左到右计算,把条件1和2看成整体

                情况3:条件1||条件2||条件3&&条件4

                        if((a>b)||(a=a+10)||(b=b-a)&&(a-b<3))

                领悟:混合计算,由于&&的优先级高,所有说先用括号把&&括起来作为一个整体,其他部分(逻辑或)按照从左到右的顺序计算

                2.4逻辑非!(取反)

                运算规则:真--------->假       假--------->真                

                例子:

if(a>b)

    if(!(a>b))------->if(a<=b)

        (3)关系运算符

                > <  ==  != >=  <=

                3.1 请你把“=”和 “ ==”分清楚

                =------------->赋值

                ==--------------->相等

                经典错误示范

int a=888;

if(a==123)//容易写成a=123,有时候编译还不报错

{

}

                3.2左值和右值

                左值:赋值运算左边的那个式子,就叫左值

                左值只能是变量名,不可以是表达式,不可以是常量

                数学:x+y=10;完全ok

                c语言:x+y=10;错误的

                                x+6=10;错误的

                右值:赋值运算右边的那个式子,就叫右值

                右值可以是任何合法的C语言表达式      

a=a+4;

a=b+c;

                3.3数值的取值范围(注意点)

int a=20;

if(10<a<100) //错的,语法上没有错,逻辑有错

编译器会这么算

第一步:10<a;

第二步:利用第一步结果,再去跟100比较

if(a>10&&a<100)

        (4)位运算

        作用:根据整数的二进制来计算结果,把一个二进制数清零或置1

        &(与)|(或) ^(异或) ~(取反)

                4.1按位与&

                运算规则:根据整数的二进制来计算结果,然后根据二进制来求按位与,两个为1,就是1,有一个为0,结果为0(有0为0)

                比如:23&19结果是?

                第一步:23的二进制10111

                        19的二进制10011

                第二步:10111

                          &  10011   

          ------------------------------------

                               10011

                公式1:任何二进制在跟1按位与,结果都是保持不变的

                            任何二进制跟0按位与,结果都是0

                4.2按位或

                运算规则:根据整数的二进制来计算结果,然后根据二进制来求按位或,两个为0,就是0,有一个为1,结果为1(有1为1)

                比如:23|19结果是?

                第一步:23的二进制10111

                                19的二进制10011

                第二步:10111

                           |  10011   

           ------------------------------------

                             10111

                公式1:任何二进制在跟0按位或,结果都是保持不变的

                             任何二进制跟1按位或,结果都是1

                4.3取反~

                运算规则:根据整数的二进制来计算结果,然后根据二进制来求按位取反,0--->1 ,1-->0

                比如:~19

                第一步:19的二进制10011

                第二步:计算按位取反

                ~10011---->01100

                4.4异或^

                运算规则:根据整数的二进制来计算结果,然后根据二进制来求按位异或,相同为0,不同为1

                比如:23^19结果是?

                第一步:23的二进制10111

                              19的二进制10011

                第二步:10111

                           ^  10011   

        ------------------------------------

                              00100

   

                公式1:任何一个数跟自己异或,结果0

        (5)三目运算符?:

        单目运算符:只有一个操作数 ~

        双目运算符:有两个目标数,+ - * / > <

        三目运算符:?:

        运算规则:表达式1?表达式2:表达式3

                表达式1为真-------->最终结果由表达式2决定的

                表达式1为假-------->最终结果由表达式3决定的

                (a>b)?a:b;

        (6)其他运算符

         ++ -- 逗号表达式 << >> 组合运算符 sizeof 成员运算符 取地址 解引用

                6.1 自增和自减

                自增分为两种:前置的自增与后置的自增

                语法规则:     

  int a=98;

       ++a;//前置的自增,先把a的值加1,然后再使用加1之后的结果

       a++: //后置的自增,先使用a原本的值,然后再把a加1

自减分为两种:前置的自减与后置的自减

   语法规则:

       int a=98;

       --a;//前置的自减,先把a的值减1,然后再使用减1之后的结果
       -: //后置的自减,先使用a原本的值,然后再把a减1

                6.2逗号表达式

                语法规则:变量=(表达式1,表达式2,表达式3.........);

                用圆括号括起来的整体叫做逗号表达式

                从左向右计算,最后的结果由最右边的表达式来决定            

int a=89;

int b=45;

int c=(a++,b--,a-b);

a=90,b=44,a-b=46

                6.3左移<<   右移>>

                        左移:把一个整数的二进制向左边移动若干位(舍弃高位),低位补0

                        a=0b1110 0111;

                        a<<3     0011 1000

                        比如:12<<3

                        第一步:计算12的二进制000000000....1100 ------->1100000  (放大)

                                        1100*2^3

                        第二步:把12进制最高的三位二进制剔除,在低位补三个0

                        右移:把一个整数的二进制向右边移动若干位(舍弃低位),高位补0

                        a=0b1110 0111;

                        a>>3      0001 1100     

                        比如:12>>2

                        第一步:计算12的二进制000000000....1100 ------->11  (缩小)

                                        1100*2^(-2)

                        第二步:把12进制最低的二位二进制剔除,在高位补两个0

                6.4组合运算符

                        +=  -=  *=   /=  %=   <<=    >>=   &=   |=   ^=

                        a+=10;等价于a=a+10;

                        a<<=2;等价于a=a<<2;

                6.5 sizeof求数据类型,变量的大小

                        sizeof(int);

                6.6成员运算符

                        .和-> 学习结构体和共用体会用到

                如果是普通的结构体变量、共用体就使用.

                如果是结构体指针,共用体指针,就使用->

                6.7取地址和解引用

                  &取地址

                *解引用 学习指针会用到

 2.运算符的优先级

        实际搞开发,不会去记优先级

        复杂的表达式用,用括号括起来

        笔试题,临时抱佛脚,看看优先级

优先级的网址:运算符的优先级和结合性,《带你学C带你飞》【第一季】,C\C++交流,鱼C论坛 - Powered by Discuz!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值