# 实验五

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

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

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

1、s1大小为24，但是长度为23

sizeof(s1)表示数组所占的空间大小（因为“\0”也占了空间）

strlen（s1）表示数组的长度（不加上“\0”）

2、不能。因为结构不完整，即没有在char那一行对数组进行定义，计算机不知道s1的长度故会报错。

3、是

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

1、s1存放的是"Learning makes me happy"这组字符串

sizeof（s1）指的是s1这个地址，地址是8位

strlen（s1）统计的是数组元素的个数（不包括结束符）

2、能。数组需要一开始就定义长度。而指针只需要分配一个地址

3、有交换

 1 #include <stdio.h>
2 void str_cpy(char* target, const char* source);
3 void str_cat(char* str1, char* str2);
4 int main()
5 {
6     char s1[80], s2[20] = "1984";
7     str_cpy(s1, s2);
8     puts(s1);
9     str_cat(s1, " Animal Farm");
10     puts(s1);
11     return 0;
12 }
13 void str_cpy(char* target, const char* source)
14 {
15     while (*target++ = *source++)
16         ;
17 }
18 void str_cat(char* str1, char* str2)
19 {
20     while (*str1)
21         str1++;
22     while (*str1++ = *str2++)
23         ;
24 }

 1 int main()
2 {
3     char str[80];
4     while (gets(str) != NULL)
5     {
6         if (func(str))
7             printf("yes\n");
8         else
9             printf("no\n");
10     }
11     return 0;
12 }
13 int func(char* str)
14 {
15     char* begin, * end;
16     begin = end = str;
17     while (*end)
18         end++;
19     end--;
20     while (begin < end)
21     {
22         if (*begin != *end)
23             return 0;
24         else
25         {
26             begin++;
27             end--;
28         }
29     }
30     return 1;
31     }

 1 #include <stdio.h>
2 #define N 80
3 void func(char*);
4 int main()
5 {
6     char s[N];
7     while (scanf_s("%s", s,N) != EOF)
8     {
9         func(s);
10         puts(s);
11     }
12     return 0;
13 }
14 void func(char* str)
15 {
16     int i;
17     char* p1, * p2, * p;
18     p1 = str;
19     while (*p1 == '*')
20         p1++;
21     p2 = str;
22     while (*p2)
23         p2++;
24     p2--;
25     while (*p2 == '*')
26         p2--;
27     p = str;
28     i = 0;
29     while (p < p1)
30     {
31         str[i] = *p;
32         p++;
33         i++;
34     }
35     while (p <= p2)
36     {
37         if (*p != '*')
38         {
39             str[i] = *p;
40             i++;
41         }
42         p++;
43     }
44     while (*p != '\0')
45     {
46         str[i] = *p;
47         p++;
48         i++;
49     }
50     str[i] = '\0';
51 }

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

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

#include <stdio.h>
#include <string.h>
#define N 5
int check_id(char* str); // 函数声明
int main()
{
char* pid[N] = { "31010120000721656X",
"330106199609203301",
"53010220051126571",
"510104199211197977",
"53010220051126133Y" };
int i;
for (i = 0; i < N; ++i)
if (check_id(pid[i])) // 函数调用
printf("%s\tTrue\n", pid[i]);
else
printf("%s\tFalse\n", pid[i]);
return 0;
}
// 函数定义
// 功能: 检查指针str指向的身份证号码串形式上是否合法。
// 形式合法，返回1，否则，返回0
int check_id(char* str)
{
// 补足函数实现
// ...
int flag = 0, i, j, k;
char x[11] = "1234567890X";
for (i = 1; *str != '\0'; i++)
{
for (k = 0; k < 11; k++)
if (*str == x[k])
{
flag = 1;
break;
}
else
flag = 0;
*str++;
}
if (i == 19)
return flag;
else
return 0;
}

#include <stdio.h>
#define N 80
void encoder(char* s); // 函数声明
void decoder(char* s); // 函数声明
int main()
{
char words[N];
printf("输入英文文本: ");
gets(words);
printf("编码后的英文文本: ");
encoder(words); // 函数调用
printf("%s\n", words);
printf("对编码后的英文文本解码: ");
decoder(words); // 函数调用
printf("%s\n", words);
return 0;
}
/*函数定义

*/
void encoder(char* s)
{
// 补足函数实现
// ×××
for (; *s != '\0'; s++)
if (*s >= 'a' && *s <= 'z' || *s >= 'A' && *s <= 'Z')
(*s)++, * s = (*s == 'z' + 1 || *s == 'Z' + 1) ? *s - 26 : *s;
}
/*函数定义

*/
void decoder(char* s)
{
// 补足函数实现
// ×××
for (; *s != '\0'; s++)
if (*s >= 'a' && *s <= 'z' || *s >= 'A' && *s <= 'Z')
(*s)--, * s = (*s == 'a' - 1 || *s == 'A' - 1) ? *s + 26 : *s;
}

posted @ 2023-05-11 08:25  崩崩大圆帽  阅读(3)  评论(0编辑  收藏  举报