任务1-1

C__Users_johnwzq_Documents_55555.exe 2025_12_12 13_11_42

1.把数组中最大最小值赋给相应地址变量

2.min和max的地址

任务1-2

C__Users_johnwzq_Documents_55555.exe 2025_12_12 13_18_03

1.找到数组最大值,返回最早出现的最大值元素的地址。

2.可以

任务2

C__Users_johnwzq_Documents_55555.exe 2025_12_12 13_35_56

1.80Byte,s1占用字节数,s1实际上在\0截断前的占用字节数

2.不行。s1是地址常量。应该使用strcpy函数进行字符串拷贝赋值。

3.是。内容真的被交换了

C__Users_johnwzq_Documents_55555.exe 2025_12_12 13_44_22

1.新定义的字符串常量"Learning makes me happy"的首字符地址

这个地址的字节数

s1开头的字符串实际长度

可以。1是s1作为新定义的字符数组s1[ ]的首位元素地址,是地址常量。后者是char地址变量(指针)

常量不能赋值。变量可以。

交换s1s2存放的地址。只是指针指向的位置变了,字符串常量内存中不变位置。

任务3

C__Users_johnwzq_Documents_55555.exe 2025_12_12 13_59_38

数组名下标是利用数组的连续内存性质直接访问;元素指针每次++移动一个sizeof(int)字节大小;行指针每完成一行循环++移动sizeof(int)*N字节大小。

任务4

 

C__Users_johnwzq_Documents_55555.exe 2025_12_12 14_26_41

1.把字符数组里面的旧字符换成新字符

2.可以

任务5

 1 #include <stdio.h>
 2 #define N 80
 3 char *str_trunc(char *str, char x);
 4 int main() {
 5     char str[N];
 6     char ch;
 7     while(printf("ÊäÈë×Ö·û´®: "), gets(str) != NULL) {
 8         printf("ÊäÈëÒ»¸ö×Ö·û: ");
 9         ch = getchar();
10         printf("½Ø¶Ï´¦Àí...\n");
11         str_trunc(str, ch);         // º¯Êýµ÷ÓÃ
12         printf("½Ø¶Ï´¦ÀíºóµÄ×Ö·û´®: %s\n\n", str);
13         getchar();
14     }
15     return 0;
16 }
17 char *str_trunc(char *str, char x){
18     char *ptr=str;
19     while(true){
20         if(*ptr==x){
21             *ptr='\0';
22             return str;
23         }
24         ptr++;
25     }
26 }

C__Users_johnwzq_Documents_55555.exe 2025_12_12 14_46_10

会出现下一次字符串为空。因为回车键被错误读取识别。getchar()用来吸收多余的\n

任务6

 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] = {"31010120000721656X",
 8                     "3301061996X0203301",
 9                     "53010220051126571",
10                     "510104199211197977",
11                     "53010220051126133Y"};
12     int i;
13     for (i = 0; i < N; ++i)
14         if (check_id(pid[i])) // 函数调用
15             printf("%s\tTrue\n", pid[i]);
16         else
17             printf("%s\tFalse\n", pid[i]);
18     return 0;
19 }
20 int check_id(char *str) {
21     char *p=str;
22     int i;
23     if(strlen(str)!=18)return 0;
24     for(i=0;i<17;i++){
25         if(!(*(p+i)>='0'&&*(p+i)<='9'))
26             return 0;
27     }
28     if(! ( (*(p+i)>='0'&&*(p+i)<='9') ||(*(p+i)=='X')  ) )
29         return 0;
30     return 1;
31 }

C__Users_johnwzq_Documents_55555.exe 2025_12_12 15_17_45

任务7

 1 #include <stdio.h>
 2 #define N 80
 3 void encoder(char *str, int n); // 函数声明
 4 void decoder(char *str, int n); // 函数声明
 5 int main() {
 6 char words[N];
 7 int n;
 8 printf("输入英文文本: ");
 9 gets(words);
10 printf("输入n: ");
11 scanf("%d", &n);
12 printf("编码后的英文文本: ");
13 encoder(words, n);      
14 printf("%s\n", words);
15 // 函数调用
16 printf("对编码后的英文文本解码: ");
17 decoder(words, n); // 函数调用
18 printf("%s\n", words);
19 return 0;
20 }
21 
22 void encoder(char *str, int n) {
23     int i;
24     for(i=0;*(str+i);i++){
25         if(*(str+i)>='a'&&*(str+i)<='z')
26             *(str+i)='a'+((int)*(str+i)-'a'+n)%26;
27         if(*(str+i)>='A'&&*(str+i)<='Z')
28             *(str+i)='A'+((int)*(str+i)-'A'+n)%26;     
29     }
30 }
31 /*函数定义
32 功能:对str指向的字符串进行解码处理
33 解码规则:
34 对于a~z或A~Z之间的字母字符,用其前面第n个字符替换; 其它非字母字符,保持不变
35 */
36 void decoder(char *str, int n) {
37     int i;
38         for(i=0;*(str+i);i++){
39             if(*(str+i)>='a'&&*(str+i)<='z')
40                 *(str+i)='a'+((int)*(str+i)-'a'+26-n)%26;
41             if(*(str+i)>='A'&&*(str+i)<='Z')
42                 *(str+i)='A'+((int)*(str+i)-'A'+26-n)%26;     
43         }
44 }

C__Users_johnwzq_Documents_55555.exe 2025_12_12 15_36_36

8

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