实验5

实验任务1

源代码:

 1 #include<stdio.h>
 2 #define N 5
 3 void input(int x[], int n);
 4 void output(int x[], int n);
 5 int* find_max(int x[], int n);
 6 int main() {
 7     int a[N];
 8     int* pmax;
 9     printf("录入%d个数据:\n", N);
10     input(a, N);
11     printf("数据是:\n");
12     output(a, N);
13     printf("数据处理\n");
14     pmax = find_max(a, N);
15     printf("输出结果\n");
16     printf("max=%d\n", *pmax);
17     return 0;
18 }
19 void input(int x[], int n) {
20     for (int i = 0; i < n; i++)
21         scanf_s("%d", &x[i]);
22 
23 }
24 void output(int x[], int n) {
25     for (int i = 0; i < n; i++)
26         printf("%d", x[i]);
27     printf("\n");
28 }
29 int* find_max(int x[], int n) {
30     int i = 0;
31     int max = 0;
32     for (; i < n; i++) 
33         if (x[i] > x[max])
34             max = i;
35         return &x[max];
36     
37 }
View Code

图片屏幕截图 2025-12-04 233404

问题1:找到数组最大数的地址,最大数的地址

问题2:可以

 1 #include<stdio.h>
 2 #define N 5
 3 void input(int x[], int n);
 4 void output(int x[], int n);
 5 void find_min_max(int x[], int n,int *pmin,int *pmax);
 6 int main() {
 7     int a[N];
 8     int min, max;
 9     printf("录入%d个数据:\n", N);
10     input(a, N);
11     printf("数据是:\n");
12     output(a, N);
13     printf("数据处理\n");
14      find_min_max(a, N,&min,&max);
15     printf("输出结果\n");
16     printf("max=%d,min=%d\n", max,min);
17     return 0;
18 }
19 void input(int x[], int n) {
20     for (int i = 0; i < n; i++)
21         scanf_s("%d", &x[i]);
22 
23 }
24 void output(int x[], int n) {
25     for (int i = 0; i < n; i++)
26         printf("%d", x[i]);
27     printf("\n");
28 }
29 void find_min_max(int x[], int n,int *pmin,int *pmax) {
30     int i = 0;
31     *pmax =*pmin=x[0];
32     for (; i < n; i++)
33         if (x[i] > *pmax)
34             *pmax = x[i];
35         else if (x[i] < *pmin)
36             *pmin = x[i];
37     
38 }
View Code

问题1:找数组最大值与最小值

问题2:min,max

实验任务2:

 源代码:

 1 #include<stdio.h>
 2 #include<string.h>
 3 #define N 80
 4 int main() {
 5     char s1[N] = "Learning makes me happy";
 6     char s2[N] = "Learning makes me sleepy";
 7     char temp[N];
 8     printf("sizeof(s1) vs strlen(s1)\n");
 9     printf("sizeof(s1)=%d\n", sizeof(s1));
10     printf("strlen(s1)=%d\n", strlen(s1));
11     printf("\nbefore swap:\n");
12     printf("s1:%s\n", s1);
13     printf("s2:%s\n", s2);
14     printf("\nswapping...\n");
15     strcpy(temp, s1);
16     strcpy(s1, s2);
17     strcpy(s2, temp);
18     printf("\nafter swap:\n");
19     printf("s1:%s\n", s1);
20     printf("s2:%s\n", s2);
21     return 0;}
View Code

图片屏幕截图 2025-12-05 135126

问题1:80,数组的大小,字符串的大小

问题2:不可以,s1表示的是地址

问题3:是

 

 1 #include<stdio.h>
 2 #include<string.h>
 3 #define N 80
 4 int main() {
 5     char *s1 = "Learning makes me happy";
 6     char *s2 = "Learning makes me sleepy";
 7     char *temp;
 8     printf("sizeof(s1) vs strlen(s1)\n");
 9     printf("sizeof(s1)=%d\n", sizeof(s1));
10     printf("strlen(s1)=%d\n", strlen(s1));
11     printf("\nbefore swap:\n");
12     printf("s1:%s\n", s1);
13     printf("s2:%s\n", s2);
14     printf("\nswapping...\n");
15     temp = s1;
16     s1 = s2;
17     s2 = temp;
18     printf("\nafter swap:\n");
19     printf("s1:%s\n", s1);
20     printf("s2:%s\n", s2);
21     return 0;
22     
23 }
View Code

图片屏幕截图 2025-12-05 215101

 

1.字符串第一个字符的地址;指针变量s1的大小;字符串长度

2.可以,一个储存字符串,一个是地址

3.地址,没有

 实验任务3

 1 #include <stdio.h>
 2 
 3 int main() {
 4     int x[2][4] = {{1, 9, 8, 4}, {2, 0, 4, 9}};
 5     int i, j;
 6     int *ptr1;     // 指针变量,存放int类型数据的地址
 7     int(*ptr2)[4]; // 指针变量,指向包含4个int元素的一维数组
 8 
 9     printf("输出1: 使用数组名、下标直接访问二维数组元素\n");
10     for (i = 0; i < 2; ++i) {
11         for (j = 0; j < 4; ++j)
12             printf("%d ", x[i][j]);
13         printf("\n");
14     }
15 
16     printf("\n输出2: 使用指针变量ptr1(指向元素)间接访问\n");
17     for (ptr1 = &x[0][0], i = 0; ptr1 < &x[0][0] + 8; ++ptr1, ++i) {
18         printf("%d ", *ptr1);
19 
20         if ((i + 1) % 4 == 0)
21             printf("\n");
22     }
23                          
24     printf("\n输出3: 使用指针变量ptr2(指向一维数组)间接访问\n");
25     for (ptr2 = x; ptr2 < x + 2; ++ptr2) {
26         for (j = 0; j < 4; ++j)
27             printf("%d ", *(*ptr2 + j));
28         printf("\n");
29     }
30 
31     return 0;
32 }
View Code

图片捕获

 

试验任务4

源代码:

 1 #include<stdio.h>
 2 #define N 80
 3 void replace(char* str, char old_char, char new_char);
 4 int main() {
 5     char text[N] = "Programming is difficult or not ,it is a question.";
 6     printf("原始文本\n");
 7     printf("%s\n", text);
 8     replace(text, 'i', '*');
 9     printf("处理后的文本\n");
10     printf("%s\n", text);
11     return 0;
12 }
13 void replace(char* str, char old_char, char new_char) {
14     int i;
15     while (*str) {
16         if (*str == old_char)
17             *str = new_char;
18         str++;
19     }
20 }
View Code

图片:屏幕截图 2025-12-05 191636

将字符替换

可以

实验任务5

源代码

 1 #include<stdio.h>
 2 #define N 80
 3 char *str_trunc(char* str, char x);
 4 char* sgets(char* m, int n);
 5 int main() {
 6     char str[N];
 7     char ch;
 8     while (printf("输入字符串:"), sgets(str, N) != NULL) {
 9         printf("输入一个字符:");
10         ch = getchar();
11         printf("截断处理...\n");
12         str_trunc(str, ch);
13         printf("截断处理后的字符串:%s\n\n", str);
14         getchar();
15     }return 0;
16 }
17 char* sgets(char* m, int n) {
18     char* real;
19     int i = 0;
20     real = fgets(m, n, stdin);
21     if (real) {
22         while (real[i] != '\n' && real[i] != '\0')
23             i++;
24         if (real[i] == '\n')
25             real[i] = '\0';
26         else
27             while (getchar() != '\n')
28                 continue;
29     }
30     return real;
31 }
32 char* str_trunc(char* str, char x) {
33     while (*str != x && *str != '\0')
34         str++;
35     if (*str == x)
36         *str = '\0';
37     return str;
38 
39 }
View Code

图片:屏幕截图 2025-12-05 193257

第二组开始输出都是空字符串;line18是在吞掉输入输入字符时多输入的'\n',

实验任务6:

源代码:

 1 #include<stdio.h>
 2 #include<string.h>
 3 #define N 5
 4 int check_id(char* str);
 5 int main() {
 6     char *str[N] = {
 7         "31010120000721656X",
 8         "3301061996x0203301",
 9         "53010220051126571",
10         "510104199211197977",
11         "53010220051126133Y"};
12     int i;
13     for (i = 0; i < N; i++) {
14         if (check_id(str[i]))
15             printf("%s\tTure\n", str[i]);
16         else
17             printf("%s\tFalse\n", str[i]);
18     }
19     
20     
21     return 0;
22 }
23 int check_id(char* str) {
24     
25     if (strlen(str) != 18)
26         return 0;
27     int i = 0;
28     
29     while (*str)
30     {
31         if (*str < '0') 
32 
33             return 0;
34             
35         
36 
37         else if (*str > '9' && *str != 'X') 
38 
39             return 0;
40             
41         
42         else if (*str == 'X' && i != 17) 
43             return 0;
44         i++;
45         
46         str++;
47     }
48     
49         return 1;
50     
51 }
View Code

图片屏幕截图 2025-12-05 214925

实验任务7

源代码:

 1 #include<stdio.h>
 2 #define N 80
 3 void encoder(char* str, int n);
 4 void decoder(char* str, int n);
 5 char* sgets(char* str, int n);
 6 int main() {
 7     char word[N];
 8     int n;
 9     printf("输入英文文本\n");
10     sgets(word, 80);
11     printf("输入n:\n");
12     scanf_s("%d", &n);
13     printf("输入编码后的英文文本");
14     encoder(word, n);
15     puts(word);
16     printf("对编码后的英文文本解码:");
17     decoder(word, n);
18     puts(word);
19     return 0;
20 }char* sgets(char* str, int n) {
21     int i = 0;
22     char* real;
23     real = fgets(str, n, stdin);
24     if (real) {
25         while (str[i] != '\n' && str[i] != '\0')
26             i++;
27         if (str[i] == '\n')
28             str[i] = '\0';
29         else
30             while (getchar() != '\n')
31                 continue;
32 
33     }
34     return real;
35 }
36 void encoder(char* str, int n) {
37     while (*str) {
38         if ((*str >= 'a' && *str <= 'z') || (*str >= 'A' && *str <= 'Z')) {
39             if (*str <= 'Z' && (*str + n) > 'Z')
40                 *str = *str + n - 26;
41             else if (*str + n > 'z')
42                 *str = *str + n - 26;
43             else
44                 *str = *str + n;
45         }
46         
47         str++;
48     }
49 }
50 void decoder(char* str, int n) {
51     while (*str) {
52         if ((*str >= 'a' && *str <= 'z') || (*str >= 'A' && *str <= 'Z')) {
53             if (*str >= 'a' && (*str - n)<'a')
54                 *str = *str -n + 26;
55             else if (*str + n < 'A')
56                 *str = *str - n + 26;
57             else
58                 *str = *str - n;
59         }
60 
61         str++;
62     }
63 }
View Code

图片屏幕截图 2025-12-05 214025屏幕截图 2025-12-05 213959

实验任务8:

 源代码

 1 #include <stdio.h>
 2 #include <string.h>
 3 
 4 int main(int argc, char* argv[]) {
 5     int i, j;
 6     char* temp;
 7     for (i = 1; i < argc - 1; ++i) {
 8         for (j = 1; j < argc - 1; ++j) {
 9             if (strcmp(argv[j], argv[j + 1])>0) {
10                 temp = argv[j];
11                 argv[j] = argv[j + 1];
12                 argv[j + 1] = temp;
13             }
14         }
15     }
16     for (i = 1; i < argc; ++i)
17         printf("hello, %s\n", argv[i]);
18 
19     return 0;
20 }
View Code

屏幕截图 2025-12-11 161033

 

posted @ 2025-12-11 16:11  空元  阅读(4)  评论(0)    收藏  举报