2017年真题解析

  1. 2017年真题解析
  2. 零时存答案
  3. 解析
    1. 选择题
    2. 判断题
    3. 程序分析
  4. 编程题

2017年真题解析

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

零时存答案

一、选择题 全对-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分把,毕竟第一个都弄错了)

//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);
}
//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");//别忘记加换行!!!(扣一分)
    }
}
//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行的首地址。如下

#include <stdio.h>
int main() {
    int a[2][2] = { {1,2},{3,4} };
    printf("%d", *(a[1]));
}//输出3
#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

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

#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);
}

转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。后续可能会有评论区,不过也可以在github联系我。