8种机械键盘轴体对比
本人程序员,要买一个写代码的键盘,请问红轴和茶轴怎么选?
对应数学中的概念特性变量x、y等未知数值可以被修改
常量系数、常数项等有确定值的数值不可以修改重点考察:常量不可被修改
哪些是合法的字符常量
变量命名怎样才是合法的
C语言中对大小写敏感,所以A和a可以命名不同的变量
基本数据类型类型包括输入输出时使用备注字符型char%c %s(字符串/字符数组)本质上还是整型的一种
整型short int long%d.
浮点型float double%f (float) %lf(double).重点考察:浮点型赋值或转换为整型时有精度损失,只保留整数部分
C语言中,在代码中定义的以0开头的数字代表八进制数字,以0x开头代表十六进制数字int a=011,b=0x10 则a是十进制的9,b是十进制的16
char 类型的各种特性的知识点,比如大小写字母、数字的ASCII值需要记住(书后有表)包括转义字符、结束符、字符常量等等
计算过程中,存在数据类型的自动转换,所有参与运算的变量,会先全部转换为最高级别的数据类型,然后再计算,得到的结果的类型是参与运算的变量中最高级别的类型(这就是为什么整数相除,结果是整数的原因)类型的优先级别参照上表顺序,从上至下,从左至右依次递增,double级别最高
e.g. int a=3; float b=3.5; double c=2.1; 那么 值 a+b+c 的数据类型是double , a+b 的数据类型是 float
运算符(以下内容均为重点考察部分)优先级顺序查阅课本后表算术关系逻辑,条件赋值逗号
C语言中一个等号代表赋值,两个等号才代表判断是否相等
取余数运算%只能对整型使用
赋值表达式的值,就是他被赋的值比如if(x=3)这个条件是成立的,因为x=3的值为3,所以逻辑值为真
而if(x=0)则不成立,因为x=0的值为0,逻辑值为假
C语言中与数学中一样,不允许除以零,因此在使用/和%时应注意变量的值不可为0比如 int x,y,z;问x%(y-z)是否正确? 错误,因为y与z相等时,表达式会变成x%0
自加自减运算符类型名称功能++i –i前置自加/自减先加一,后使用
i++ i–后置自加/自减先使用,后加一逻辑运算符的短路特性特性举例 int a=3,b=4; 问运算后b是多少P && Q条件P成立,才执行Q;P不成立时,不执行Qa==2 && ++b 结果为 b=4
P 或 Q条件P不成立才执行Q;P成立时,不执行Q++a 或 ++b 结果为 b=4条件运算符?:相当于一个小型的if-else语句,条件成立时执行冒号前边的内容,不成立时执行冒号后边的
逗号表达式,会执行前边每一项,然后将最后一项的值作为整个表达式的值比如printf(“%d”,(3,4)); 此时输出的是4
C语言中用0代表假,所有非零值都是真若由系统返回判断结果时,假用0表示,真用1表示,常见于将一个逻辑表达式赋值给变量的情况
e.g. y=x==3 运算时,先判断x==3是否成立,若成立,则逻辑表达式值为真,y=1;不成立则y=0
sizeof的用法:返回变量或数组的在内存中占的字节数注意对字符数组使用时,与strlen的区别,群内有例题,昨晚也讲过
对字符数组来说,他的长度就是sizeof的值,但对其他类型数组来说,sizeof取得的值是数组长度*该类型变量所占字节数 比如 int a[10]; 那么sizeof(a)=40 ,因为int占4个字节
输入输出(以下均为重点考察)C语言没有自己的输入输出语句,输入输出是由库函数实现的
使用形如 %m.nf 的语句可以控制输出格式,m代表输出占m位,n代表小数点后有n位注意!n对于小数点后的控制只能用于printf输出时,输入时不可用n来控制小数点后的位数
对整型也有类似用法%md,可以用来输入/输出,输出时代表占用的最大宽度;输入时代表最多读取多少位用%3d来输入 123456 则只能读到前三位123
scanf输入时记得使用&来取得变量地址,唯一不用使用&的是用%s输入字符串时
空格与回车是系统默认的分隔符,用来在输入时分隔数据
输入与输出的格式与你在scanf/printf的格式控制字符串中指定的格式严格对应所以,当你使用scanf("%d,%d",&a,&b)输入数据时,必须在两个数据中间写上逗号,如3,5.
而使用scanf("%d%d",&a,&b)输入时,用空格或回车分隔就行,比如35或35
预编译指令使用include时注意<>与""的区别重点考察:预编译指令前一定要加#
预编译指令不是C语言的语句,因此后边不加分号
define的宏替换是一种傻瓜式替换,展开式只会按照指定的格式展开。比如1
2
3
4
5
6>
> int (){
> printf("a=%d ",f(3));
> printf("b=%d",f(5-2));
> }
>输出为:a=9 b=-7原因:f(3) 展开为 3*3 计算得到9
f(5-2) 展开为 5-2*5-2 计算为5-10-2,得到-7
所以,使用时一般写为 #define f(x) (x)*(x)这种形式来避免这种错误
选择结构与循环结构(重点考察)switch的条件判断只能对整型使用字符型的本质是整型,因此可以用switch来判断字符类型,比如
switch(c){
case ‘a’ :xxxxxx;break;
case ‘b’;yyyyyy;break;
}
使用switch时,记得在每个case语句块后边加break
循环结构中break与continue的作用和区别两者在嵌套循环中使用时,都只能作用于一层循环,而不能作用于所有循环
for语句的条件判断和逗号表达式搭配使用时,注意逗号表达式的特性,此时循环只受逗号表达式的最后一项控制
数组(重点考察)数组定义时,必须指定数组长度,因为需要按照给定的长度给数组分配内存空间
关于可变长数组C99标准之前规定是“不能用变量作为数组长度来创建数组”,但C99标准开始又支持了可变长数组。两种标准现在同时被广泛使用,因此两种说法都算正确。
考试时遇到像int a[n];这种情况,可以这样来判断如果是n是由键盘输入,然后用n为长度来创建数组,那么他的考点应该就是可变长数组,就是对的
如果是自己定义的int n=5这种,或者没有告诉你n是怎么来的,那考点应该就是不能用变量做长度,那就是错的
数组名在很多时候,当作首元素的地址来使用。因此在很多情况下,数组名具有指针的特性
因为以上原因,数组名是不可被修改的,因为系统分配给数组的内存地址是已经确定了的,不能被改变比如 对于数组a,你可以使用a+1来表示给首元素地址+1之后的地址,也就是元素a[1]的地址
但不能使用a++,因为这相当于a=a+1,他企图改变数组a的地址值,这是错误的
注意字符数组与字符串的区别字符串隐藏的含义就是其一定有结束符,比如字符串"abc",它的可见字符只有三个,但包含有结束符,因此像char a[3]="abc";这样的语句就是错误的,因为数组空间只有3,存不下它。
只有字符数组可以通过字符串的形式来整体输入,注意是输入不是赋值。其他类型的数组都只能通过循环来挨个给元素输入所有数组赋值时,都只能对每个元素逐个赋值
函数(重点考察)可以理解为一种方法、操作、模式,对比数学中的函数概念来理解定义数学中的函数 z=x+y ,那么 z=5+3 得到的z的值就是81
2
3
4
5
6> int func(int x,int y)
> {
> return x+y;
> }
> int z=func(5,3)
>解释例子,比如在上边的函数中实参运算中实际使用到的参数5和3是实参
形参用来表达函数执行的操作的一个符号x和y是为了方便描述这个运算过程使用的符号,也就是形参函数的声明比如下边递归里使用的那个函数,我们声明时写为 void f(int x);
写出它的返回值类型、函数名、参数有哪些、参数类型就行
函数没有返回值时使用void类型
传址调用与传值调用的区别传值调用,只是在函数所在的内存空间里复制了一份实参的备份,对这个备份做的所有修改,都不会影响到主函数里的实参真正的值
传址调用,是将实参在内存中的地址作为参数传递给函数,因此,函数可以根据这个地址,直接找到实参存放在哪里,来修改实参本身的值
变量的作用域可以由花括号来判断,一个变量,只在定义它的花括号区间之内起作用
静态变量的生存期是从定义开始,到整个程序执行结束为止因此,如果有函数里定义了静态变量,那么只有在第一次调用这个函数时,才会初始化它,使用完之后,它的值不会被销毁,会一直在内存中保留
之后再调用的时候,会接着使用上一次的值作为初始值
关于函数的递归调用,以下边这个函数为例1
2
3
4
5
6
7
8void f(int x){
if(x/3>1) f(x/3);
printf("%d ",x);
}
void (){
f(13);
printf("n");
}第一次调用函数的时候,传的参数是13,运算到里边if的时候,条件成立
所以要执行一下f(13/3)也就是执行一下f(4)
这会儿程序就先暂停了f(13)这边的工作,开始执行f(4)了
在f(4)里边,if不成立了,所以直接执行了printf,因此输出来的第一个数是4
输出完后f(4)执行完了,就又回到了f(13)继续执行剩下的工作
,也就是在f(13)里执行printf,把13输出来因此这道题最后的输出为 4 13
指针星号的作用:只有定义与声明的时候用到的,告诉你这个变量是指针类型
取指针指向的地址里边的值
为什么有的题里使用了指针作为参数,但最后输出的还是没改变的值?注意它在函数里做的操作,一般这种情况,它在函数中都仅仅只是改变了一下指针指向的地址,而没有改变那块地址里存的值
比如1
2
3void func(int *p){
p=p+1;
}在上边这个函数里,虽然是传址调用,但它只是把指针的指向往后移了一下,并没有对值进行操作,所以原函数里的值没有变。
如果那条语句换成*p=*p+1。那么,就代表把p指向的那个地址里的值加一,主函数里的值才会被改变
结构体重点考察搞清楚 结构体 结构体变量 结构体成员 三者的区别比如struct KUN{
int work;
double time;
}
struct KUN cxk
KUN是结构体 ,cxk是由这个结构体定义的结构体变量 ,work和time是结构体成员
2019年最终版本,剩下的内容今年就先咕咕咕了
祝考试顺利!:smiley: