成信大807程序综合设计2019年试题答案(部分)

此答案系学长自己做出来的答案,并非官方答案,有问题欢迎留言交流!由于答案不完整,大家也可以将自己做的以及相关想法写在留言栏里面,方便大家交流查阅,谢谢!

一、单项选择题

  1. C
  2. D
  3. A
  4. C
  5. B
  6. C
  7. A
  8. D
  9. A
  10. B

二、判断题

  1. ×
  2. ×
  3. ×
  4. 应该是 ×
  5. ×
  6. ×
  7. ×

三、程序分析题

21题:

22题:
判断字符串2是否为字符串1的子串,如果是则输出“yes”,否则输出“no”

23题:

四、程序设计题

编程题答案请参考陈宏松同学的博客,在此我们由衷地对他表示感谢!
http://www.chenhongsong.top/index.php/2019/11/16/2019%e3%80%8a807%e3%80%8b%e7%bc%96%e7%a8%8b/

24题:

25题:

#include <stdio.h>
#define N 3

int main(void)
{
    struct student {
        int num;
        int math;
        int c_language;
    }stu[N];
    int i, max_score, count;
    for (i=0, max_score=0; i<N; i++)
    {
        scanf("%d%d%d", &stu[i].num, &stu[i].math, &stu[i].c_language);
        if (max_score < stu[i].c_language)
            max_score = stu[i].c_language;
    }
    printf("C语言分数最高的学生各项数据如下:\n");  
    for (i=0, count=0; i<N; i++)
    {
        if (max_score == stu[i].c_language)
        {
            printf("%d\t%d\t%d\n", stu[i].num, stu[i].math, stu[i].c_language);
            count++;
        }
    }
    printf("C语言分数最高的学生人数为:%d\n", count);
    return 0;
} 

const与#define相比,区别和优点超详解总结!

26题:

声明

此答案系学长自己做出来的答案,并非官方答案,有问题欢迎留言交流!由于答案不完整,大家也可以将自己做的以及相关想法写在留言栏里面,方便大家交流查阅,谢谢!

欢迎加入 成信大计算机考研交流群 343659014

文章最后更新时间为:2019 年 11 月 20 日 10:11:10

已有 19 条评论
  1. 豆

    判断题6题(原16题)答案是不是错了?

    1. 是的,错了,应该是以形参为准

  2. 唐钦檄 唐钦檄

    想问下学长有该试题得真题嘛

    1. 文末有群号,群里面有

  3. cd cd

    //24题

    #include<iostream>
    using namespace std;
    #define M 4
    #define N 5
    int fun(int a[][N], int m, int n) {
        int sum = 0;
        for (int i = 0; i < m; ++i)
        {
            for (int j = 0; j < n; ++j)
            {
                if (i == 0 || j == 0 || i == m - 1 || j == n - 1)
                {
                    sum += a[i][j];
                }
            }
        }
        return sum;
    }
    int main()
    {
        int a[M][N] = { 1,3,5,7,9,
            2,9,9,9,4,
            6,9,9,9,8,
            1,3,5,7,0
        };
        int sum = fun(a, M, N);
        cout << "sum is:" << sum<<endl;
        system("pause");
        return 0;
    }
  4. cd cd

    //25题

    #include<iostream>
    #include<vector>
    using namespace std;
    #define N 5
    typedef struct student{
        int num;
        int math;
        int C;
    };
    int main() {
        student Stu[N] = { {1000, 100,107},
        {1001, 101,104},
        {1002,102,104},
        {1003,103,104},
        {1004,104,104} };
        student max = Stu[0];
        vector<student> maxC;
        for (int i = 1; i < N; ++i) {
            if (Stu[i].C>max.C)
            {
                max = Stu[i];
            }
        }
        for (int i = 0; i < N; ++i) {
            if (Stu[i].C == max.C)
            {
                maxC.push_back(Stu[i]);
            }
        }
        //通过迭代器遍历
        cout << "C语言成绩最高分学生共有:" << maxC.size() << "个" << endl;
        cout << "C语言成绩最高分学生信息如下:" << endl;
        for (vector<student>::iterator iter = maxC.begin(); iter != maxC.end(); iter++)
        {
            cout << "学号:" << iter->num<<"  math:"<<iter->math<<" C:"<<iter->C<<endl;
        }
        return 0;
    }
  5. cd cd

    //25题不用迭代器做的方法

    #include<iostream>
    
    #include<vector>
    
    using namespace std;
    
    #define N 5
    
    typedef struct student{
        int num;
        int math;
        int C;
    };
    int main() {
        student Stu[N] = { {1000, 100,107},
        {1001, 101,107},
        {1002,102,100},
        {1003,103,107},
        {1004,104,104} };
        student max = Stu[0];
        student max_C[N];//记录C语言成绩最高分学生信息,可能不止一个
        //vector<student> maxC;//迭代器方法记录C语言成绩最高分学生信息,可能不止一个
        for (int i = 1; i < N; ++i) {//找出其中一个最高分成绩的学生信息
            if (Stu[i].C>max.C)
            {
                max = Stu[i];
            }
        }
        int count=0;//统计最高分人数
        for (int i = 0; i < N; ++i) {
            if (Stu[i].C == max.C)
            {
                max_C[count++] = Stu[i];
                //maxC.push_back(Stu[i]);//通过迭代器遍历
            }
        }
        cout << "C语言成绩最高分学生共有:" << count << "个" << endl;
        cout << "C语言成绩最高分学生信息如下:" << endl;
        for (int j = 0; j < count; j++)
        {
            cout << "学号:" << max_C[j].num << "  math:" << max_C[j].math << " C:" << max_C[j].C << endl;
    
        }
        //通过迭代器方法遍历
        //cout << "C语言成绩最高分学生共有:" << maxC.size() << "个" << endl;
        //for (vector<student>::iterator iter = maxC.begin(); iter != maxC.end(); iter++)
        //{
        //    cout << "学号:" << iter->num << "  math:" << iter->math << " C:" << iter->C << endl;
        //}
        return 0;
    }
  6. cd cd

    //26题C++写的简单版本

    #include<string>
    #include<iostream>
    using namespace std;
    void sort(string ss[10], int means) {//means表示排序方式,1则字母递增排序,0则字母递减排序
        int i, j;
        string temp;
        if (means==1)//字母递增排序
        {
            for ( i = 0; i < 10-1; i++){//冒泡排序
                for (j = 0; j < 10 - 1 - i; j++) {
                    if (ss[j]>ss[j+1]){
                        temp = ss[j];
                        ss[j] = ss[j + 1];
                        ss[j + 1] = temp;
                    }
                }//end for 内
            }//end for 外
        }//end if
        else if (means == 0)//字母递减排序
        {
            for (i = 0; i < 10 - 1; i++) {//冒泡排序
                for (j = 0; j < 10 - 1 - i; j++) {
                    if (ss[j] < ss[j + 1]) {
                        temp = ss[j];
                        ss[j] = ss[j + 1];
                        ss[j + 1] = temp;
                    }
                }//end for 内
            }//end for 外
        }//end if
    }
    int main() {
        string ss[10];
        int means;//means表示排序方式,0则字母递增排序,1则字母递减排序
        int i;//控制输入
        printf("请输入10个字符串,以空格隔开:\n");
        for (i = 0; i < 10; i++)//键盘录入10个字符串
        {
            cin >> ss[i];
        }
        printf("请输入排序方式,1则字母递增排序,0则字母递减排序:");
        cin >> means;
        sort(ss, means);
        for (i = 0; i < 10; i++)//输出排序后的字符串
        {
            cout << ss[i]<<" ";
        }
        return 0;
    }
  7. 行者张 行者张

    26.

    #include<stdio.h>
    #include<string.h>
    
    void sort(char str[20],int a){
        int i,j;
        char A;
        if(a){//为1时顺序输出
            for(i=0;i<strlen(str)-1;i++){
                for(j=0;j<strlen(str)-1-i;j++){
                    if(str[j]>str[j+1]){
                        A=str[j];
                        str[j]=str[j+1];
                        str[j+1]=A;
                    }
                }
            }
        }else{//为0时逆序输出
            for(i=0;i<strlen(str)-1;i++){
                for(j=0;j<strlen(str)-1-i;j++){
                    if(str[j]<str[j+1]){
                        A=str[j];
                        str[j]=str[j+1];
                        str[j+1]=A;
                    }
                }
            }
        }
        printf("result:");
        for(i=0;i<strlen(str);i++){//字符循环输出str
            printf("%c",str[i]);
        }
        printf("\n");
    }
    
    void main(){
        void sort(char str[20],int a);
        char str[20];
        int a,i;
        printf("input 0 or 1:");scanf("%d",&a);
        for(i=0;i<10;i++){//逐个输入输出
            printf("input str%d:",i+1);
            scanf("%s",str);
            sort(str,a);
        }
        return 0;
    }
  8. 墨可 墨可

    26题是字符串比较大小不是 字符

    #include<stdio.h>
    #include<string.h>
    
    void sort(char string[10][20], int mode);
    int main(void)
    {
        int i, mode;
        char arr[10][20];
        printf("请选择排序方式1或者0:");
        scanf("%d", &mode);
        getchar();
        printf("please input datas:");
        for (i = 0; i < 10; i++)
        {
            gets(arr[i]);
        }
        sort(arr, mode);
        printf("排序结果为:");
        for (i = 0; i < 10; i++)
        {
            puts(arr[i]);
        }
        return 0;
    }
    void sort(char string[10][20], int mode) 
    { 
        char temp[20];
        int i,j;
        for (j = 1; j < 10; j++)
        {
            for (i = 0; i < 10 - j; i++)
            {
                if (mode == 1)
                {
                    if (strcmp(string[i], string[i+1]) > 0)
                    {
                        strcpy(temp,string[i]);
                        strcpy(string[i], string[i+1]);
                        strcpy(string[i+1], temp);
    
                    }
                }
                else if(mode == 0)
                {
                    if (strcmp(string[i], string[i + 1]) < 0)
                    {
                        strcpy(temp, string[i]);
                        strcpy(string[i], string[i + 1]);
                        strcpy(string[i + 1], temp);
    
                    }
    
                }
            }
        }
    }
  9. hhh hhh

    师兄 选择题那题位运算算不算超纲呀

    1. 我觉得还好吧,学了计算机的应该都会,没学的自己举个例子比划一下也能得出答案

      1. hhh hhh

        那道题单纯概念学了之后是不难 但我感觉要是涉及补码和进制转换就有点难(对跨考来说)

        1. 补码的确是计算机方面的知识,但是进制转换属于是数学知识,高中应该就学过的

          1. 还好我叫周杰伦 还好我叫周杰伦

            好的 谢谢师兄

  10. 补码的确是计算机方面的知识,但是进制转换属于是数学知识,高中应该就学过的

  11. Tiger Tiger

    选择题第六题 应该选择D吧? 题目要求输入三行两列元素 a2,C选项是输出a2的地址,D选项*(a[2]+1)才是输出元素
    第22题:出题错误了吧?while语句中 应改为if(p2[k] ==p1[j] !) {k++ ; j++}

    1. 第22题,我不做评价。
      第6题,你自己的描述中你自己也说得很清楚,C是地址,D是元素,题目要求用scanf进行输入操作,那后面难道不该是地址吗?

      1. Tiger Tiger

        噗!对的噶 尴尬 我是自己在家打印出来的机器有点断墨 一直下意识以为是printf 太粗心了

添加新评论