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; 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
这道题我都能选错是我没想到的,脑子抽了。。
逻辑或是有一个是真的就是真的,所以选B
2
选C
3
选A
C语言源文件后缀名是“.c”,编译(就是将源代码转换为机器语言。编译器的输出结果成为目标代码,存放它们的文件称为目标文件)生成的文件后缀名是“.obj”,连接后可执行文件的后缀名是“.exe”。 而最后的cpp后缀,是c++的源文件。
4
最后一个只是单纯的表达式,并不具备赋值的功能。 选D
5
这个是老生常谈了,选A
6
这个我还是真是触及到知识盲区了,我一直以为是3能省略,结果是全部都可以省略,但表达式之间的间隔符 ( 分号 )不能缺省。for(;;)
的功能就和while(1)一样了 选D
7
判断长度当然使用strlen函数啦 选B
8
老生常谈的问题了,不说了,选C
9
定义结构体,太基础啦!首先必不可少的就是struct,后面的结构体名称和变量名都是可以省略的,然后前面的结构体名称是不能使用数组的,所以最后答案就选C
10
首先是输入,所以排除A,如果要直接接收数组的话,scanf直接用数组名即可,gets也是直接用数组名即可,但是gets里面是不能打引号的,所以这道题选B
判断题 11
对的
12
对的
13
对的
14
错的,定义数组要使用方括号,定义函数的时候才使用圆括号,且圆括号中的形参也不能以数字开头。
15
对的
16
错的,应该如下,p=a
17
错误的,viod函数不需要return的返回值
18
错误的,是按照从上到下执行的
19
正确的
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 ; }
20
肯定是错误的啦,变量E等于1的时候才执行,而后面是变量E等于0的时候才执行.
程序分析题 21
这些分析题我就不解释了,毕竟我都全对,直接看我之前写的答案就好了 值得注意的一点就是,程序中的printf必须要好好的看,避免漏过一些重要的输出内容。
22
23
编程题 不多解释了,前面两个看我的答案就可以了,现在说说第三个
24-25
26
我的思路是,首先接收字符串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 () { char arr1[50 ]; char arr2[50 ] = {"" }; scanf ("%s" , arr1); int len = strlen (arr1); 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] = arr1[i]; j++; } } int len2; len2 = strlen (arr2); for (int i = 0 ; i < len; i++) { printf ("%c" , arr2[i]); } }