实验六

 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 }
34 
35 
36 //Q1: 2004

#include <stdio.h>
#define N 4

int main()
{
    char x[N] = {'1', '9', '8', '4'};
    int i;
    char *p;

    // 方式1:通过数组名和下标遍历输出数组元素
    for(i=0; i<N; ++i)
        printf("%c", x[i]);
    printf("\n");

    // 方式2:通过指针变量遍历输出数组元素 (写法1)
    for(p=x; p<x+N; ++p)
        printf("%c", *p);
    printf("\n");

    // 方式2:通过指针变量遍历输出数组元素(写法2)
    p = x;
    for(i=0; i<N; ++i)
        printf("%c", *(p+i));
    printf("\n");

    // 方式2:通过指针变量遍历输出数组元素(写法3)
    p = x;
    for(i=0; i<N; ++i)
        printf("%c", p[i]);
    printf("\n");

    return 0;
}


//Q2: 2001
//Q3: 因为 int类型占用 4字节,char类型占用 1字节

Q3: int 类数据储存用 4个字节,char 类数据储存用1个字节。

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

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

 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 }
30 
31 
32 //Q1: sizeof()计算的是包含'\0'的全部字符数  strlen()计算的是在'\0'前的全部字符数
33 //Q2: 不行,定义错误

 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("%d\n",*s1);
13     printf("sizeof(s1) = %d\n", sizeof(s1));
14     printf("strlen(s1) = %d\n", strlen(s1));
15 
16     printf("\nbefore swap: \n");
17     printf("s1: %s\n", s1);
18     printf("s2: %s\n", s2);
19 
20     printf("\nswapping...\n");
21     tmp = s1;
22     s1 = s2;
23     s2 = tmp;
24 
25     printf("\nafter swap: \n");
26     printf("s1: %s\n", s1);
27     printf("s2: %s\n", s2);
28 
29     return 0;
30 }
31 
32 
33 //Q1: 数组 s1的地址   sizeof(s1)计算的是 s1地址的字节数  strlen(s1)计算的是在'\0'之前的总字符数
34 //Q2: 可以
35 //Q3: 交换的是地址值   没有变化

 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                      "330106199609203301",
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 {
30     int i,j;
31 
32     if(strlen(str)==18)
33             ;
34     else return 0;
35 
36     for(i=0;*(str+i)!='\0';i++)
37     {
38         if((*(str+i) <= '9' && *(str+i) >= '0') || *(str+i) == 'X')
39             ;
40         else return 0;
41     }
42     return 1;
43 }

 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 // 功能:判断s指向的字符串是否是回文串
27 // 如果是,返回1;否则,返回0
28 int is_palindrome(char *s)
29 {
30     int i, j;
31 
32     for(i=0,j=strlen(s); i<j; i++,j--)
33     {
34         if(*(s+i)==*(s+j-1))
35             ;
36         else return 0;
37     }
38     return 1;
39 }

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

 

posted @ 2022-06-13 21:46  映月三花  阅读(15)  评论(2编辑  收藏  举报