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

 

         1.find_min_max的作用是找到给定数组x中的最小值和最大值

         2.指针都指向数组x的起始位置

      

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

  1. find_max() 函数的作用是找到给定数组 x中的最大值,返回一个地址
  2. 可以
 1 #include <stdio.h>
 2 #include <string.h>
 3 #define N 80
 4  
 5 int main() {
 6     char s1[N] = "Learning makes me happy";
 7     char s2[N] = "Learning makes me sleepy";
 8     char tmp[N];
 9  
10     printf("sizeof(s1) vs. strlen(s1): \n");
11     printf("sizeof(s1) = %d\n", sizeof(s1));
12     printf("strlen(s1) = %d\n", strlen(s1));
13  
14     printf("\nbefore swap: \n");
15     printf("s1: %s\n", s1);
16     printf("s2: %s\n", s2);
17  
18     printf("\nswapping...\n");
19     strcpy(tmp, s1);
20     strcpy(s1, s2);
21     strcpy(s2, tmp);
22  
23     printf("\nafter swap: \n");
24     printf("s1: %s\n", s1);
25     printf("s2: %s\n", s2);
26  
27     return 0;
28 }

1.sizeof(s1)计算的是s1的大小,即s1所占用的字节数。strlen(s1)统计的是s1中字符串的长度,即s1中字符的个数。

2.不能。因为s1是一个指针常量,它指向的内存空间是只读的,不能被修改。
task2_1.c
 
 1 #include <stdio.h>
 2 #include <string.h>
 3 #define N 80
 4  
 5 int main() {
 6     char s1[N] = "Learning makes me happy";
 7     char s2[N] = "Learning makes me sleepy";
 8     char tmp[N];
 9  
10     printf("sizeof(s1) vs. strlen(s1): \n");
11     printf("sizeof(s1) = %d\n", sizeof(s1));
12     printf("strlen(s1) = %d\n", strlen(s1));
13  
14     printf("\nbefore swap: \n");
15     printf("s1: %s\n", s1);
16     printf("s2: %s\n", s2);
17  
18     printf("\nswapping...\n");
19     strcpy(tmp, s1);
20     strcpy(s1, s2);
21     strcpy(s2, tmp);
22  
23     printf("\nafter swap: \n");
24     printf("s1: %s\n", s1);
25     printf("s2: %s\n", s2);
26  
27     return 0;
28 }

1.s1中存放的是字符串的起始地址。sizeof(s1)计算的是s1所占用的字节数。strlen(s1)统计的是s1指向的字符串的长度。

2.可以。原代码声明时直接初始化指针,改动后则是先声明,后将字符串的地址赋值,效果等同。

3.交换的是s1 s2中的地址。没有。

task3.c
 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; 
 7     int(*ptr2)[4]; 
 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 }

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

  1. replace()函数的功能是把文本中所有的"i"替换为"*"
  2. 是可以的

task5.c

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

令字符串变成换行符。吸收缓冲区残留的换行符。

task6.c

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

task7.c

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

task8.c

 1 #include <stdio.h>
 2 #include <string.h>
 3 #define N 100
 4  
 5 void sortText(char *str[], int n)
 6 {
 7     for (int i = 0; i < n - 1; i++)
 8     {
 9         for (int j = 0; j < n - i - 1; j++)
10         {
11             if (strcmp(str[j], str[j + 1]) > 0)
12             {
13                 char temp[100];
14                 strcpy(temp, str[j]);
15                 strcpy(str[j], str[j + 1]);
16                 strcpy(str[j + 1], temp);
17             }
18         }
19     }
20 }
21  
22 int main(int argc, char *argv[])
23 {
24     char *str[N];
25     int n = argc - 1;
26     for (int i = 1; i < argc; i++)
27     {
28         str[i - 1] = argv[i];
29     }
30     sortText(str, n);
31     for (int i = 0; i < n; i++)
32     {
33         printf("hello, %s\n", str[i]);
34     }
35  
36     return 0;
37 }