一、数据在计算机的表示法
考点:十进制数 在计算机中表示为 二进制数的补码形式。
错因:负数应该转换为二进制后取反再加一
二、关于自动类型转换
自动类型转换有一定优先级
图自教材P36
要点如下:
1、数据类型不同,要进行转换再运算;
2、图中横向的箭头,必定转换;纵向的箭头,表示不同类型时的优先级,由下而上。
需要注意的是:从int–>long直接转换,无需变换为中间类型。
三、关于标准输入输出。
题目:
scanf("%d,%d",&a,&b);
下列输入格式正确的是:
scanf中%d的内容之外的东西,之前也遇到过,但是没有钻研。
首先 scanf 格式输出函数。
从键盘输入内容,必须和函数内部的格式严格一致。
例1、
int a,b;
scanf("%d %d",&a,&b);
此情况下,两个%d之间有一个空格,那么必须输入时也有两个空格,多一个空格或者少一个都不行。
例2、
int a,b;
scanf("%d,%d!",&a,&b);
此时函数内部有一个逗号 , 所以输入的时候,就必须为
34,67!
其他字符同理。
但是!
在第一个内容输入之前,输入多少个空格是允许的。但是一旦开始输入内容,就必须严格遵循scanf内部的格式 。
四、三元运算符。
对于if-else语句的简单改写。
不使用if-else语句
if(a>b){
max=a;
}
这题很明显是考察三元运算符
a>b?a:b;
但是基础知识不牢固,导致我忽视了赋值的问题。
应该修改为
max= a>b?a:b ;
五、运算符的优先级
问题:和p->data 等价的表示法。
这里考察的就是 * 和 . 的优先级了。
因为. 优先级大于 *
所以需要先取值,再访问。
(*p). data
六、指针、取值符和自加符号
题目:
a[5]={6,3,4,7,9};
int *p=a;
写出++*p; *p++ ; *++p; *a++; *++a;各自的值。
首先查询优先级:
左置和右置的优先级不同,和取值符相同的,还需要满足结合性(左结合还是右结合)
++ *p :此时p指向a[0],也就是6,然后自加,所以为7;
此时p仍然指向第一个元素a[0];
*p++ :先取指针p指向的值(数组第一个元素),再将指针p向后移动一个元素。所以值为6,然后此时p指向a[1];
*++p:这里p又得先向右移动一个元素单位,然后再取值,故得到a[2]=4;
接下来,a在这里表示首地址即a[0].
*a++:也是先取此时a的值,然后移动一个单元,故为6,此时指向第二个元素;
*++a:a再次移动,然后取值,故此时取第三个元素的值—4。