0%

2018年真题解析

2018年真题解析

网安的概念还有几十页要背,好好背一下好了。唉,考研是真的好痛苦啊。

临时存答案

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
一、单选题
1.A 2.C 3.A 4.D 5.A
6.C 7.B 8.C 9.C 10.B
//正确答案BCADA DBCCB 错两个,得16分
二、判断题
对对对错对
错错错对错
//我的就是正确答案!得20分
三、程序分析题
21.
程序功能:判断每个字母分别出现了几次,不区分大小写
程序运行结果:
A-2
E-1
G-1
H-1
I-2
K-1
M-1
O-2
P-1
R-2
S-3
T-3
//全对10分!
22.
程序功能:判断数组中成绩最高的学生和成绩最低的学生,并分别输出分数最大的学生和分数最小的学生的姓名和成绩。
程序运行结果:
Max is:Wanghai,93
Min is:Liuhong,62
//全对10分!
23.
程序功能:将一个正整数倒置
程序运行结果:result:54321
//全对10分!

四、程序设计题

24.

1
2
3
4
5
6
7
8
9
10
11
12
13
#include<stdio.h>
int main(){
int i,j;
int re;
for(j=1;j<=9;j++){
for(i=1;i<=j;i++){
re=j*i;
printf("%d*%d=%d ",j,i,re);
}
printf("\n");
}
return 0;
}

//能完成功能,我就算25分吧

25.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
#include<stdio.h>
int main() {
struct person {
char name[20];
int sex;//男人为0,女人为1
int age;
}arr[100];
int i = 0;
while (i < 100) {
printf("请输入第%d位人的姓名,性别(其中男人为0,女人为1)和年龄:\n", i+1);
scanf("%s%d%d", &arr[i].name, &arr[i].sex, &arr[i].age);
i++;
}//接收

struct person tee[100], adult[100], old[100];
int t = 0; int a = 0; int o = 0;
for (i = 0; i < 100; i++) {
if (( - 1 < arr[i].age) && (arr[i].age< 30)) {
tee[t] = arr[i];
t++;
}
if ((29 < arr[i].age) && (arr[i].age < 60)) {
adult[a] = arr[i];
a++;
}
if (arr[i].age >= 60) {
old[o] = arr[i];
o++;
}
}
printf("年轻人有%d,中年人有%d,老年人有%d", t, a, o);
return 0;
}

//能完成功能,我就算25分吧

26.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
#include<stdio.h>
#include<string.h>
int main() {
char arr1[50];
char arr2[50];
int i = 0;
int j = 0;
printf("请输入字符串1\n");
gets_s(arr1);

char a = '0';
char b = '9';
while (arr1[i] != '\0') {
if ((arr1[i] >= a) && (arr1[i] <= b)) {
arr1[i] == a;
}
if (arr1[i] != a) {
arr2[j] = arr1[i];
j++;
i++;
}
else {
i++;
}
}

int lenth = 0;
lenth = strlen(arr2);
printf("字符串2为:");
for (i = 0; i < lenth; i++) {
printf("%c", arr2[i]);
}
return 0;
}

未完成,我直接算0分好吧

这次总分116分!重点其实就是编程题,我要是最后一个编程题对了,基本上就是130分左右,但是好难啊,我两次编程题都没写对,所以要对编程题进行针对性的训练。

解析

填空题

1

image-20231004182136763

这道题我都能选错是我没想到的,脑子抽了。。

逻辑或是有一个是真的就是真的,所以选B

2

image-20231004182611730

选C

3

image-20231004182625830

选A

C语言源文件后缀名是“.c”,编译(就是将源代码转换为机器语言。编译器的输出结果成为目标代码,存放它们的文件称为目标文件)生成的文件后缀名是“.obj”,连接后可执行文件的后缀名是“.exe”。
而最后的cpp后缀,是c++的源文件。

4

image-20231004182933228

最后一个只是单纯的表达式,并不具备赋值的功能。
选D

5

image-20231004183005784

这个是老生常谈了,选A

6

image-20231004183026483

这个我还是真是触及到知识盲区了,我一直以为是3能省略,结果是全部都可以省略,但表达式之间的间隔符 ( 分号 )不能缺省。for(;;)的功能就和while(1)一样了
选D

7

image-20231004183740621

判断长度当然使用strlen函数啦
选B

8

image-20231004183848474

老生常谈的问题了,不说了,选C

9

image-20231005133809796

定义结构体,太基础啦!首先必不可少的就是struct,后面的结构体名称和变量名都是可以省略的,然后前面的结构体名称是不能使用数组的,所以最后答案就选C

10

image-20231005134540301

首先是输入,所以排除A,如果要直接接收数组的话,scanf直接用数组名即可,gets也是直接用数组名即可,但是gets里面是不能打引号的,所以这道题选B

判断题

11

image-20231005135432175

对的

12

image-20231005135448133

对的

13

image-20231005135455889

对的

14

image-20231005135511505

错的,定义数组要使用方括号,定义函数的时候才使用圆括号,且圆括号中的形参也不能以数字开头。

15

image-20231005135554642

对的

16

image-20231005135608260

错的,应该如下,p=a

image-20231005135705681

17

image-20231005135725130

错误的,viod函数不需要return的返回值

18

image-20231005135745158

错误的,是按照从上到下执行的

19

image-20231005135815722

正确的

image-20231005140832833

viod指针就能做到这一点,但是后面却无法正确间接寻址,原因是void指针必须要进行转换之后,才能进行正确的引用

1
2
3
4
5
6
7
8
9
10
11
12
13
#include <string.h>
#include<stdio.h>

int main() {
char arr[5] = "arrs";
int arr2[5] = { 1,2,3,4,5 };
void* p;
p = &arr[1]; // 指向字符数组的第二个元素
printf("%c\n", *(char*)p); // 打印字符数组的第二个元素
p = &arr2[1]; // 指向整数数组的第二个元素
printf("%d\n", *(int*)p); // 打印整数数组的第二个元素
return 0;
}

image-20231005141250833

20

image-20231005141318466

肯定是错误的啦,变量E等于1的时候才执行,而后面是变量E等于0的时候才执行.

程序分析题

21

image-20231005141535365

这些分析题我就不解释了,毕竟我都全对,直接看我之前写的答案就好了
值得注意的一点就是,程序中的printf必须要好好的看,避免漏过一些重要的输出内容。

22

image-20231005142350476

23

image-20231005142402355

编程题

不多解释了,前面两个看我的答案就可以了,现在说说第三个

24-25

image-20231005143304921

26

image-20231005143317971

我的思路是,首先接收字符串1和2,然后遍历字符串1,遇到0~9之间的元素就跳过,其他时候直接存入字符串2

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
#include <string.h>
#include<stdio.h>

int main() {
// 定义两个字符数组,arr1用于接收输入,arr2用于存储非数字字符
char arr1[50];
char arr2[50] = {""};

// 从用户那里获取字符串,并存入arr1
scanf("%s", arr1);

// 计算输入字符串的长度
int len = strlen(arr1);

// 初始化索引变量j
int j = 0;

// 遍历输入字符串中的每个字符
for (int i = 0; i < len; i++) {
// 如果当前字符是数字,则打印提示信息并跳过
if (arr1[i] >= '0' && arr1[i] <= '9') {
printf("排除%c!\n", arr1[i]);
}
else {
// 如果当前字符不是数字,则将其添加到arr2,并增加索引j
arr2[j] = arr1[i];
j++;
}
}

// 计算arr2的长度
int len2;
len2 = strlen(arr2);

// 打印出arr2中的所有字符
for (int i = 0; i < len; i++) {
printf("%c", arr2[i]);
}
}

image-20231005144842718