第三节课
1.格式控制符:printf("%2d",a);
printf("%-5d",a);
表示输出结果间距的字符,正数在前加空格,负数在后加空格
转义字符:\t,加了一个TAB
2.字符类型char(1个字符),8位,-128~127
char a;
's',单引号,表示字符常量
'a'编码是97。'A'编码是65。'0'编码是48
char a1 = 'a';容器=值
scanf("%c",&a1);
printf("%d",a1);输出97
printf("%c",a1);输出a
printf("%d",a1+1);输出98
printf("%c",a1+1);输出b
3.for(i=0;i<100,i=i+1)
i++:i=i+1 i--:i=i-1
i++先赋值后加。++i先加后赋值
1、赋值顺序不同
++ i 是先加e68a847a686964616f31333366303839后赋值;i ++ 是先赋值后加;++i和i++都 是分两步完成的。因为++i 是后面一步才赋值的,所以它能够当作一个变量进行级联赋值,++i = a =b,即 ++i 是一个左值;i++ 的后面一步是自增,不是左值。形象的理解可以是i++先做别的事,再自己加1,++i先自己加1,再做别的事情。
2、效率不同
比如i=3,b=i++就是说b=3,完成之后让i变成4,b=++i就是先让i++变成4,然后b=4,其中++i比i++效率要高些。一般来说在循环域里面,这两者并没有什么很大的区别,但是要注意其生存周期,以及i值在程序流中的变化。
3、 i++ 不能作为左值,而++i 可以。
左值是对应内存中有确定存储地址的对象的表达式的值,而右值是所有不是左值的表达式的值。一般来说,左值是可以放到赋值符号左边的变量。
但能否被赋值不是区分左值与右值的依据。比如,C++的const左值是不可赋值的;而作为临时对象的右值可能允许被赋值。左值与右值的根本区别在于是否允许取地址&运算符获得对应的内存地址。
当i=5时,s=(++i)+(++i)和s=(i++)+(i++)的值:
1、当i=5时,s=(++i)+(++i)=13 先算第一个(++i),++在前面,就把i先加1再把赋值,即先把i变为6然后再得出(++i)的值为6,这时i已经变为6了,
再计算第二个(++i),++在前面也是先把i加1后再赋值,不过这时的i已经为6了,第一步的时候把i变成6了的,然后加1的话就变成7了,所以第二个(++i)的值为7,s=(++i)+(++i)=6+7=13。
2、s=(i++)+(i++)=11
先算第一个(i++),i在前面,就先赋值再把i加1,即(i++)的值为5,i的值变为6,第二个(i++),i在前面,先赋值再把i加1,这个时候的i已经为6了,即(i++)的值为6,而i已经变为7了。所以s=(i++)+(i++)=5+6=11。
4.复合赋值运算符
sum=sum+i ====》sum+=i
sum=sum-i ====》sum-=i
sum=sum*i ====》sum*=i
sum=sum/i ====》sum/=i
sum=sum%i ====》sum%=i