实验6

task.1.1

 1 #include <stdio.h>
 2 #define N 4
 3 
 4 int main()
 5 {
 6     int x[N] = {1, 9, 8, 4};
 7     int i;
 8     int *p;
 9     
10     // 方式1:通过数组名和下标遍历输出数组元素
11     for(i=0; i<N; ++i)
12         printf("%d", x[i]);
13     printf("\n");
14     
15     // 方式2:通过指针变量遍历输出数组元素 (写法1) 
16     for(p=x; p<x+N; ++p)
17         printf("%d", *p);
18     printf("\n"); 
19     
20     // 方式2:通过指针变量遍历输出数组元素(写法2) 
21     p = x;
22     for(i=0; i<N; ++i)
23         printf("%d", *(p+i));
24     printf("\n");
25 
26     // 方式2:通过指针变量遍历输出数组元素(写法3) 
27     p = x;
28     for(i=0; i<N; ++i)
29         printf("%d", p[i]);
30     printf("\n");
31         
32     return 0;
33 }

1.2004

2.2001

3.因为整型占四个字节,字符型占一个字节

task.2.1

 1 #include<stdio.h>
 2 int main()
 3 {
 4     int x[2][4] = { {1,9,8,4,},{2,0,2,2} };
 5     int i, j;
 6     int* p;
 7     int(*q)[4];
 8     for (i = 0; i < 2; i++)
 9     {
10         for (j = 0; j < 4; j++)
11             printf("%d", x[i][j]);
12         printf("\n");
13     }
14     for (p = &x[0][0], i = 0; p < &x[0][0] + 8; p++, i++)
15     {
16         printf("%d", *p);
17         if ((i + 1) % 4 == 0)
18             printf("\n");
19     }
20     for (q = x; q < x + 2; q++)
21     {
22         for (j = 0; j < 4; j++)
23             printf("%d",*(*q+j));
24         printf("\n");
25     }
26     return 0;
27 }

 

 task.2.2

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

 1:2004、2016

2:2008、2032

3:列指针每次指向下一个、行指针每次指向下一行

task.3.1

 1 #include <stdio.h>
 2 #include <string.h>
 3 #define N 80
 4 
 5 int main()
 6 {
 7     char s1[] = "C, I love u.";
 8     char s2[] = "C, I hate u.";
 9     char tmp[N];
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     strcpy(tmp, s1);
21     strcpy(s1, s2);
22     strcpy(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.sizeof()计算的是字符数组的大小,strlen()统计的是字符串的长度

2.no

3.yes

task.3.2

 1 #include <stdio.h>
 2 #include <string.h>
 3 #define N 80
 4 
 5 int main()
 6 {
 7     char *s1 = "C, I love u.";
 8     char *s2 = "C, I hate u.";
 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.字符串的首地址,字符串首地址的存储大小,字符串的长度

2.可以

3.s1和s2的地址,没有

task.4

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

 

 task.5

 1 #include <stdio.h>
 2 #include <string.h>
 3 
 4 #define N 80
 5 int is_palindrome(char *s); 
 6 
 7 int main()
 8 {
 9     char str[N];
10     int flag;
11 
12     printf("Enter a string:\n");
13     gets(str);
14 
15     flag = is_palindrome(str); 
16 
17     if (flag)
18         printf("YES\n");
19     else
20         printf("NO\n");
21 
22     return 0;
23 }
24 
25 
26 int is_palindrome(char *s)
27 {
28     int i;
29     i=strlen(s);
30     char *p;
31     p=s+i-1;
32     while(*s)
33      {
34           if(*s!=*p)
35           return 0;
36           s++,p--;
37      }
38           return 1;
39 }

 

 task.6

 1 #include <stdio.h>
 2 #define N 80
 3 void encoder(char *s); 
 4 void decoder(char *s); 
 5 int main()
 6 {
 7    char words[N];
 8 
 9    printf("输入英文文本: ");
10    gets(words);
11    printf("编码后的英文文本: ");
12    encoder(words); 
13    printf("%s\n", words);
14    printf("对编码后的英文文本解码: ");
15    decoder(words);
16    printf("%s\n", words);
17    
18    return 0;
19 }
20 void encoder(char *s)
21 {
22     int i;
23     for(i=0;s[i]!=0;++i)
24     {
25         if((s[i]>='a'&&s[i]<='z')||(s[i]>='A'&&s[i]<='Z'))
26         s[i]=s[i]+1; 
27         if(s[i]=='Z')
28         s[i]='A';
29         else if(s[i]=='z')
30         s[i]='a';
31     }
32 }
33 void decoder(char *s)
34 {
35     int i;
36     for(i=0;s[i]!=0;++i)
37     {
38         if((s[i]>='a'&&s[i]<='z')||(s[i]>='A'&&s[i]<='Z'))
39         s[i]=s[i]-1; 
40         if(s[i]=='A')
41         s[i]='Z';
42         else if(s[i]=='a')
43         s[i]='z';
44     }
45 }

 

posted @ 2022-06-13 23:55  熊昊博  阅读(27)  评论(3编辑  收藏  举报