0%

2017年真题解析

2017年真题解析

好累,还有40+天了,感觉要死了,😋考研是真痛苦啊。

零时存答案

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
一、选择题 全对-20分
1.c 2.a 3.d 4.a 5.d
6.a 7.c 8.b 9.a 10.d
二、判断题 错了一个-18分
11~15:错 错(错了) 错 对 错
16~20:错 错 对 错 对
三、程序分析题 错了一个输出-23分
21.正确的
主要功能:将三个数据按从大到小排序
输出:67 56 48
22.错误的
主要功能:输出两个学生的姓名和总分
输出:
name: Zhangwei total=170.0//更正float 保留六位小数,double 保留12位小数
name :Wangfeng total=150.0
23.正确的
主要功能:找出用户输入的数组中的最大值和最大值对应的索引
输出:a[0][0]=77

四、程序设计题(52分把,毕竟第一个都弄错了)

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
//24.错完了!
#include <stdio.h>
int main() {
int yingwen, kongge, shuzi, qita;
printf("请输入一串字符:");
yingwen = 0;
kongge = 0;
shuzi = 0;
qita = 0;
char input[127] = "";
scanf("%s", input);
int index = 0;
while (input[index] == '\0') {
if ((('a' <= input[index]) && ('z' >= input[index])) || (('A' <= input[index]) && ('Z' >= input[index]))) {
yingwen++;
index++;
}
else if (input[index] == ' ') {
kongge++;
index++;
}
else if (('0' <= input[index]) && ('9' >= input[index])) {
shuzi++;
index++;
}
else {
qita++;
index++;
}
}

printf("\n这串字符中有%d个英文字母,%d个数字,%d个空格,%d个其他字符", yingwen, shuzi, kongge, qita);
}
1
2
3
4
5
6
7
8
9
10
11
//25
#include <stdio.h>
int main() {
char item[20] = "";
char xing[20] = "* * * * * * *";
for (int i = 0; i < 7; i++) {
printf("%s%s", item, xing);
item[i] = ' ' ;//每一次增加一个空格
printf("\n");//别忘记加换行!!!(扣一分)
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
//26
#include <stdio.h>
struct Student {
char name[20];
float yuwen;
float shuxue;
float waiyu;
};
int main() {
struct Student arr[4] = { {"zhao",97.5,69.0,78.0},{"qian",80.0,93.0,87.5},{"sun",75.0,89.5,68.5},{"li",72.5,68.5,54.0} };
float max;
int max_index;
max = 0;
for (int i = 0; i < 4; i++) {
float sum = arr[i].yuwen + arr[i].shuxue+arr[i].waiyu;
float average = sum / 3;
if (average > max) {
max = average;
max_index = i;
}
}
printf("平均分最高的是:%s,其语文成绩为:%f,数学成绩为:%f,外语成绩为:%f", arr[max_index].name, arr[max_index].yuwen, arr[max_index].shuxue, arr[max_index].waiyu;

}//注意输出时候的浮点数 扣一分把

113分

解析

选择题

这个不说了,都很简单

image-20231103194502239

判断题

image-20231103194511210

程序分析

image-20231103194521906

image-20231103194529206

这个也不说了

image-20231103194608200

这道题值得注意的一点是,float保留6位小数,double也是6位

image-20231103194810789

image-20231103194815148

这道题中间的scanf("%d",&a[i])这个a是二维数组,而a[i]就代表了第i行的首地址。如下

1
2
3
4
5
#include <stdio.h>
int main() {
int a[2][2] = { {1,2},{3,4} };
printf("%d", *(a[1]));
}//输出3
1
2
3
4
5
6
#include <stdio.h>
int main() {
int a[2][2] = { {1,2},{3,4} };
scanf("%d", a[1]);
printf("%d", *(a[1]));
}//若输入为6则输出6,加不加&都是一样

编程题

image-20231103195811226

其他两个看我前面的编程就行,现在着重讲一下第一题

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
#include <stdio.h>
#define SIZE 32
void main() {
char str[SIZE];
int english=0;
int space=0;
int number = 0;
int other=0;
//scanf("%s",str);
//scanf() 以 空格 或 回车符 结束读取,空格 或 回车符 会遗留在缓冲区。
//不能直接输入带空格的字符串。
//不能用scanf我在这被卡了半天
gets_s(str);
for (int i = 0; str[i]!='\0'; i++) {//判断字符串尾
if (str[i]>='a' && str[i]<='z' || str[i]>='A' && str[i]<='Z') {//这里面的条件都要变量在前面才行
english++;
}else if (str[i] == ' ') {
space++;
}else if (str[i] >= '0'&& str[i] <= '9') {
number++;
}else {
other++;
}
}
printf("english: %d\n", english);
printf("space: %d\n", space);
printf("number: %d\n", number);
printf("other: %d\n", other);
}