实验5

实验任务1

task1_1.c

问题1:找到最大值和最小值。

问题2:pmin,pmax都指向a[0]。

 运行结果:

image

 task1_2.c

问题1:find_max功能是找到最大值,返回的是最大值对应数组的地址

问题2:可以。

运行结果:

image

实验任务2

task2_1.c

问题1:sizeof(s1)计算的是数组s1所占字节数,strlen(s1)统计的是数组s1有多少字符

问题2:不能,数组不能直接赋值。

问题3:交换了。

运行结果:

image

 task2_2.c

问题1:s1存放的是字符串的地址,sizeof(s1)计算的是地址占的内存,strlen(s1)统计的是字符数。

问题2:可以。task2_1.c中的line6是将字符串给到一个数组,task2_2.c中的line6是将字符串从指针的起始位置开始赋值。

问题3:交换的是s1和s2存储的地址,在内存中未交换。

运行结果:

image

实验任务3

问题1:指向一个二维数组的指针

问题2:指向4个指针的数组

运行结果:

image

实验任务4

问题1:将字符串中的指定字符替换为其他字符。

问题2:可以 。

运行结果:

image

实验任务5

源代码:

 1 #include <stdio.h>
 2 #define N 80
 3 
 4 char *str_trunc(char *str, char x);
 5 
 6 int main() {
 7     char str[N];
 8     char ch;
 9 
10     while(printf("输入字符串: "), gets(str) != NULL) {
11         printf("输入一个字符: ");
12         ch = getchar();
13 
14         printf("截断处理...\n");
15         str_trunc(str, ch);         // 函数调用
16 
17         printf("截断处理后的字符串: %s\n\n", str);
18         getchar();
19     }
20 
21     return 0;
22 }
23 char *str_trunc(char *str, char x) {
24     int i;
25     for(i=0;*str!=x;i++,str++){}
26     *str = '\0';
27     return str;
28 }
View Code

 运行结果:

image

问题1:多次输入时,只有第一次可以正常输入.。line18是为了清空已存储的字符串。

实验任务6

源代码

 1 #include <stdio.h>
 2 #include <string.h>
 3 #define N 5
 4 
 5 int check_id(char *str); // 函数声明
 6 
 7 int main()
 8 {
 9     char *pid[N] = {"31010120000721656X",
10                     "3301061996X0203301",
11                     "53010220051126571",
12                     "510104199211197977",
13                     "53010220051126133Y"};
14     int i;
15 
16     for (i = 0; i < N; ++i)
17         if (check_id(pid[i])) // 函数调用
18             printf("%s\tTrue\n", pid[i]);
19         else
20             printf("%s\tFalse\n", pid[i]);
21 
22     return 0;
23 }
24 
25 // 函数定义
26 // 功能: 检查指针str指向的身份证号码串形式上是否合法
27 // 形式合法,返回1,否则,返回0
28 int check_id(char *str) {
29     int i;
30     if(strlen(str)!=18) return 0;
31     for(i=0;i<17;i++) {
32         if(str[i]<'0'||str[i]>'9') return 0;
33     }
34     if((str[17]<'0'||str[17]>'9')&&str[17]!='X'){
35         return 0;
36     }
37     return 1;
38 }
View Code

运行结果

image

 实验任务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 功能:对str指向的字符串进行编码处理
23 编码规则:
24 对于a~z或A~Z之间的字母字符,用其后第n个字符替换; 其它非字母字符,保持不变
25 */
26 void encoder(char *str, int n) {
27     int i;
28     char s;
29     for (i=0;str[i]!='\0';i++) {
30         if (str[i]>'a'&&str[i]<='z') {
31             s=(str[i]-'a'+n+26)%26+'a';
32         }
33         else if (str[i]>='A'&&str[i]<='Z') {
34             s=(str[i]-'A'+n+26)%26+'A';
35         }
36         else {
37             s=str[i];
38         }
39         str[i]=s;
40     }
41 }
42 /*函数定义
43 功能:对str指向的字符串进行解码处理
44 解码规则:
45 对于a~z或A~Z之间的字母字符,用其前面第n个字符替换; 其它非字母字符,保持不变
46 */
47 void decoder(char *str, int n) {
48     int i;
49     char s;
50     for (i=0;str[i]!='\0';i++) {
51         if (str[i]>'a'&&str[i]<='z') {
52             s=(str[i]-'a'-n+26)%26+'a';
53         }
54         else if (str[i]>='A'&&str[i]<='Z') {
55             s=(str[i]-'A'-n+26)%26+'A';
56         }
57         else {
58             s=str[i];
59         }
60         str[i]=s;
61     }
62 }
View Code

运行结果

image

 

image

 

image

 实验任务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 (j=1;j<argc-1;j++) {
 8         for (i = 1; i < argc-j; i++) {
 9             if (strcmp(argv[i],argv[i+1])>0) {
10                 temp=argv[i];
11                 argv[i]=argv[i+1];
12                 argv[i+1]=temp;
13             }
14         }
15     }
16 
17     for(i = 1; i < argc; ++i)
18         printf("hello, %s\n", argv[i]);
19 
20     return 0;
21 }
View Code

运行结果

image

 

posted @ 2025-12-12 21:30  尚逸辰  阅读(4)  评论(0)    收藏  举报