20年三道编程大题

  1. 20年三道编程大题
  2. 第一题-字符串中找出英文数组
  3. 第二题-求数组列和
  4. 第三题-结构体指针

20年三道编程大题

题库有些简单,换新的题来写一下,自从20年之后,专业课难度感觉直线飙升啊。

第一题-字符串中找出英文数组

image-20231011225540518

#include<stdio.h>
#include<string.h>

void fun(char str[], char *p) {
    int len;
    len = strlen(str);
    char item;
    int cishu = 0;
    for (int i = 0; i < len; i++) {
        if ((('a' <= str[i]) && ('z' >= str[i])) || (('A' <= str[i]) && ('Z' >= str[i]))) {
            item = str[i];
            for (int j = i; j < len-1; j++) {
                str[j] = str[j + 1];
            }
            str[len - 1] = item;
            i--;//避免有连续的字母,这样就可以不断检测这一位是否是字母
        }
        cishu++;
        if (cishu >= len) {//避免无限循环
            return;
        }
    }
}

int main() {
    printf("请输入一串字符串:");
    char ch[128] = "";
    char* p;
    p = ch;
    scanf("%s", ch);
    fun(ch, p);
    printf("\n处理如下:%s", ch);
    return 0;
}

image-20231011231316782

第二题-求数组列和

image-20231011232331406

#include <stdio.h>
#include <string.h>
int fun(int arr[][3], int n);

int main()
{
    //我们这里就求一个3行3列数组的第一列和最后一列之和。
    int arr[3][3] = { {1,2,3},{7,8,2},{2,3,4} };
    printf("%d", fun(arr, 3));
}

int fun(int arr[][3], int n) {//n为n行数组的意思
    int sum = 0;
    for (int i = 0; i < n; i++) {
        //循环第一列
        sum += arr[i][0];
    }

    for (int i = 0; i < n; i++) {
        //循环最后一列
        sum += arr[i][2];
    }
    return sum;
}

第三题-结构体指针

image-20231021194501769

#include <stdio.h>
#include <string.h>

struct Student {
    char name[20];
    int english;
    int math;
    int politics;
    int specialised;
    int SUM = english + math + politics + specialised;
};

int fun(struct Student aa[], int (*p)(struct Student aa[])) {
    //p指向fun2
    return     p(aa);;
}

int fun2(struct Student aa[]);

int main()
{

    struct Student aa[4] = {
    {"越江", 65, 85, 60, 110},
    {"张三", 77, 100, 60, 60},
    {"李四", 60, 60, 60, 60},
    {"王五", 75, 75, 75, 75}
    };
    int max_index = fun(aa,fun2);
    printf("获得最高分的是国服%s,分数为:%d", aa[max_index].name, aa[max_index].SUM);
}


int fun2(struct Student aa[]) {
    int av_english, av_math, av_politcs, av_specialised;
    char av_name[20];
    int sum = 0;
    int sum2 = 0;
    int sum3 = 0;
    int sum4 = 0;
    for (int i = 0; i < 4; i++) {
        sum += aa[i].english;
        sum2 += aa[i].math;
        sum3 += aa[i].politics;
        sum4 += aa[i].specialised;
    }
    av_english = sum / 4;
    av_math = sum2 / 4;
    av_politcs = sum3 / 4;
    av_specialised = sum4 / 4;
    printf("平均成绩\n英语:%d\n数学:%d\n政治:%d\n专业课:%d\n", av_english, av_math, av_politcs, av_specialised);

    int max_index = 0;//只记录一个最大分就可
    for (int i = 0; i < 4; i++) {
        if (aa[i].SUM > aa[max_index].SUM) {
            max_index = i;
        }
    }

    return max_index;
}

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