0%

20年三道编程大题

20年三道编程大题

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

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

image-20231011225540518

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>

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#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

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
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
#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;
}