软协 第一次考核 题目纠错+知识点总结

一、数据在计算机的表示法

考点:十进制数 在计算机中表示为 二进制数的补码形式。
错因:负数应该转换为二进制后取反再加一

二、关于自动类型转换

自动类型转换有一定优先级
图自教材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。

总结

平时编程都是“能用就行”,没有去细想过底层原理。 简而言之---不知其所以然。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值