2021年9月全国计算机等级考试真题(二级C语言)
1.a++与++a
#include<stdio.h>
int main()
{
int a = -5;
printf("%d", a++);
}
输出结果为-5
#include<stdio.h>
int main()
{
int a = -5;
printf("%d", ++a);
}
输出结果为-4
而如果++a或者a++之后再printf(%d,a),结果都是-5
已知int a=6;则执行a+=a-=a*a;语句后,a的值为(-60)。
a-=36,相当于a=a-36,即a=-30;
又a+=a,a=a-30=-60
2.冒泡排序与选择排序
3.二叉树
1、前序、中序、后序遍历
前序:先访问根节点,再依次向下访问左右节点 ,深度优先。
中序:左节点——根节点——右节点
后序:左节点——右节点——根节点
参考:一文搞懂二叉树的前序遍历,中序遍历,后序遍历 - 知乎
本题根据前序序列,根节点为A,根据中序序列,左节点有BDEGH,右节点有CIFJ
二叉数习题:第6章 树和二叉树(习题) | PDF (scribd.com)
2.算数表达式的前缀、中缀、后缀
算数表达式的中缀运算符放在两个运算对象。
中缀表达式:运算符放在两个运算对象中间,如:(2+1)*3 后缀表达式:不包含括号,运算符放在两个运算对象的后面,所有的计算按运算符出现的顺序,严格从左向右进行(不再考虑运算符的优先规则,如:2 1 + 3 * 前缀表达式:同后缀表达式一样,不包含括号,运算符放在两个运算对象的前面,如:* + 2 1 3
参考:如何把算术表达式转化为后缀表达式 (sogou.com)
4.C语言规定,在一个C程序中,main()函数的位置()。
5.各个变量类型的优先级
6.赋值:a=b+c=2赋值是错的,因为不能把2赋值给b+c这个整体
7.逻辑运算符:c语言中提供了三种逻辑运算符,分别为&&,||和!,优先级为!,&&和||,逻辑运算符与其他运算符的关系。
赋值运算符<&&和||<关系运算府<算数运算府<!(从右往左)
8.数据类型转换:整型、实型和字符型数据可以进行混合运算,在进行运算时,一般类型的数据先转换成标准类型的数据,不同类型的数据要先转换成相同类型的数据,转换规则如下表所示。
一般类型 | 转换为标准数据类型 | 级别 |
char short int int | int | 最低 |
unsigned int unsigned short int | unsigned int | 次低 |
long int | long int | 中 |
unsigned long | unsigned long | 次高 |
float double | double | 最高 |
1/2结果为0,因为两者都是整型,而1.0/2则是0.5,因为可以隐式转换可以换成两个double类型相除。
这道考的是强制类型转换,(int)(x+y)和(int)x+y是不同的两个概念,并且强制类型转换并不改变变量原有的值,只是得到一个中间值。
2.5+7%3*7%2/4=2.5+0=2.5
9.if语句的嵌套:if-else if-else语句
这个语句是if语句的多层嵌套,仅执行表达式为真的那个else if 后面的语句。若所有表达式的值都为0,则执行最后一个else后面的语句。
10.switch语句:见20题
#include<stdio.h>
main()
{
int x=1,y=0,a=0,b=0;
switch(x)
{
case 1:
switch(y)
{
case 0:a++;break;
case 1:b++;break;
}
case 2:
a++;b++;break;
}
printf("a=%d,b=%d\n",a,b);
}
这道题的输出结果是a=2,b=1;因为case后的常量表达式只起到语句标点的作用,不进行条件判断,所以在执行完某个case语句后将自动转移到下一个case语句执行,直到遇到switch语句的右花括号或者break语句为止。而case1后没有break,所以会执行case2。
11.指针
要背的
1.软件需求分析阶段任务:包括需求获取、需求分析、需求审评,不包括需求配置(第五题)
2.算法复杂度是指算法在编写成可执行程序后,运行时所需要的资源,包括时间复杂度和空间复杂度(第一题)
3.对象构成成份包括三种:属性 ,标识,方法(或操作),不包括规则(第七题)
4.C语言规定,在一个C程序中,main()函数可以在任何位置。(第十一题)
白痴题
12、14