实验5

实验任务1.1

源代码

 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     for(i=0;i<n;++i)
30     scanf("%d",&x[i]);
31 }
32 
33 void output(int x[],int n){
34     int i;
35     for(i=0;i<n;++i)
36     printf("%d",x[i]);
37     printf("\n");
38 }
39 
40 void find_min_max(int x[],int n, int *pmin,int *pmax){
41     int i;
42     *pmin=*pmax=x[0];
43     for(i=0;i<n;++i)
44     if(x[i]<*pmin)
45     *pmin=x[i];
46     else if(x[i]>*pmax)
47     *pmax=x[i];
48 }

运行结果

1,找到最大值和最小值

2.指向min和max

1.2

源代码

 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     return 0;
24 }
25 
26 void input(int x[],int n){
27     int i;
28     for(i=0;i<n;++i)
29     scanf("%d",&x[i]);
30 }
31 
32 void output(int x[],int n){
33     int i;
34     for(i=0;i<n;++i)
35     printf("%d ",x[i]);
36     printf("\n");
37 }
38 int *find_max(int x[],int n){
39     int i;
40     int max_index=0;
41     for(i=1;i<n;++i)
42     if(x[i]>x[max_index])
43     max_index=i;
44     
45     return &x[max_index];
46 }
 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     return 0;
24 }
25 
26 void input(int x[],int n){
27     int i;
28     for(i=0;i<n;++i)
29     scanf("%d",&x[i]);
30 }
31 
32 void output(int x[],int n){
33     int i;
34     for(i=0;i<n;++i)
35     printf("%d ",x[i]);
36     printf("\n");
37 }
38 
39 int *find_max(int x[],int n){
40     int i;
41     int *ptr=&x[0];
42     for(i=1;i<n;++i)
43     if(x[i]>*ptr)
44     *ptr=x[i];
45     
46     return ptr;
47 }

运行结果

1.返回最大值的地址

2.可以

实验任务2.1

源代码

 1 #include <stdio.h>
 2 #include <string.h>
 3 #define N 80
 4 
 5 int main() {
 6     char s1[] = "Learning makes me happy";
 7     char s2[] = "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.24个字节,s1变量所占内存,s1字符串的长度

2.不能,s1是数组的起始地址,不能赋值

3.交换

2.2

源代码

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

运行结果

1.字符串起始地址,s1变量所占内存,字符串的长度

2.可以,2.1中是定义一个字符数组,存放learning,2.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;
 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     printf("输出2:使用使用指向元素的指针间接访问二维数组元素\n");
16     for(ptr1=&x[0][0],i=0;ptr1<&x[0][0]+8;++ptr1,++i){
17         printf("%d ",*ptr1);
18         
19         if((i+1)%4==0)
20         printf("\n");
21     } 
22     printf("输出3:使用指向一位数组的指针变量间接访问二维数组元素\n");
23     for(ptr2=x;ptr2<x+2;++ptr2){
24         for(j=0;j<4;++j)
25         printf("%d ",*(*ptr2+j));
26         printf("\n");
27     }
28 
29     return 0;
30 }

运行结果

实验任务4.1

源代码

 

 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] = "c 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 void replace(char *str, char old_char, char new_char) {
21     int i;
22 
23     while(*str) {
24         if(*str == old_char)
25             *str = new_char;
26         str++;
27     }
28 }

运行结果

4.2

源代码

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

运行结果

实验任务5.1

源代码

 1 #include <stdio.h>
 2 #include <string.h>
 3 void sort(char *name[], int n);
 4 
 5 int main() {
 6     char *course[4] = {"C Program",
 7                        "C++ Object Oriented Program",
 8                        "Operating System",
 9                        "Data Structure and Algorithms"};
10     int i;
11 
12     sort(course, 4);
13 
14     for (i = 0; i < 4; i++)
15         printf("%s\n", course[i]);
16 
17     return 0;
18 }
19 
20 void sort(char *name[], int n) {
21     int i, j;
22     char *tmp;
23 
24     for (i = 0; i < n - 1; ++i)
25         for (j = 0; j < n - 1 - i; ++j)
26             if (strcmp(name[j], name[j + 1]) > 0) {
27                 tmp = name[j];
28                 name[j] = name[j + 1];
29                 name[j + 1] = tmp;
30             }
31 }

运行结果

5.2

源代码

 1 #include <stdio.h>
 2 #include <string.h>
 3 void sort(char *name[], int n);
 4 
 5 int main() {
 6     char *course[4] = {"C Program",
 7                        "C++ Object Oriented Program",
 8                        "Operating System",
 9                        "Data Structure and Algorithms"};
10     int i;
11 
12     sort(course, 4);
13     for (i = 0; i < 4; i++)
14         printf("%s\n", course[i]);
15 
16     return 0;
17 }
18 
19 void sort(char *name[], int n) {
20     int i, j, k;
21     char *tmp;
22 
23     for (i = 0; i < n - 1; i++) {
24         k = i;
25         for (j = i + 1; j < n; j++)
26             if (strcmp(name[j], name[k]) < 0)
27                 k = j;
28 
29         if (k != i) {
30             tmp = name[i];
31             name[i] = name[k];
32             name[k] = tmp;
33         }
34     }
35 }

运行结果

交换的是指针变量的值。

实验任务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     char *pid[N] = {"31010120000721656X",
 9                     "330106199609203301",
10                     "53010220051126571",
11                     "510104199211197977",
12                     "53010220051126133Y"};
13     int i;
14 
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 
21     return 0;
22 }
23 
24 
25 int check_id(char *str) {
26    if(strlen(str)==18){
27        while(*str!='\0')
28        str++;
29            str--;
30            if(*str=='X'||(*str>='0'&&*str<='9'))
31            return 1;
32            else
33            return 0;
34    }
35    else
36    return 0;
37 }

运行结果

实验任务7

源代码

 1 #include <stdio.h>
 2 #define N 80
 3 void encoder(char *str); // 函数声明
 4 void decoder(char *str); // 函数声明
 5 
 6 int main() {
 7     char words[N];
 8 
 9     printf("输入英文文本: ");
10     gets(words);
11 
12     printf("编码后的英文文本: ");
13     encoder(words); // 函数调用
14     printf("%s\n", words);
15 
16     printf("对编码后的英文文本解码: ");
17     decoder(words); // 函数调用
18     printf("%s\n", words);
19 
20     return 0;
21 }
22 
23 /*函数定义
24 功能:对s指向的字符串进行编码处理
25 编码规则:
26 对于a~z或A~Z之间的字母字符,用其后的字符替换; 其中,z用a替换,Z用A替换
27 其它非字母字符,保持不变
28 */
29 void encoder(char *str) {
30     int i=0;
31     char x[N]={'a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z','a'};
32     char y[N]={'A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z','A'};
33     while(*str){
34         i=0;
35         if(*str>='a'&&*str<='z'){
36             while(*str!=x[i++]&&i<26);
37             *str=x[i]; 
38         }
39         i=0;
40         if(*str>='A'&&*str<='Z'){
41             while(*str!=y[i++]&&i<26);
42             *str=y[i]; 
43         }
44         str++;
45     }
46 }
47 
48 
49 void decoder(char *str) {
50         int i=0;
51     char x[N]={'z','a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z'};
52     char y[N]={'Z','A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z'};
53     while(*str){
54         i=1;
55         if(*str>='a'&&*str<='z'){
56             while(*str!=x[i++]&&i<=26);
57             *str=x[i-2]; 
58         }
59         i=1;
60         if(*str>='A'&&*str<='Z'){
61             while(*str!=y[i++]&&i<=26);
62             *str=y[i-2]; 
63         }
64         str++;
65     }
66     
67 }

运行结果

实验任务8

 

posted @ 2023-11-28 14:57  笔墨书稠  阅读(20)  评论(0编辑  收藏  举报