实验5

任务一

1.1

#include <stdio.h>

#define N 4

int main()

{

int x[N] = {1, 9, 8, 4};

int i;

int *p;



for (i = 0; i < N; ++i)

printf("%d", x[i]);

printf("\n");



for (p = x; p < x + N; ++p)

printf("%d", *p);

printf("\n");



p = x;

for (i = 0; i < N; ++i)

printf("%d", *(p + i));

printf("\n");



p = x;

for (i = 0; i < N; ++i)

printf("%d", p[i]);

printf("\n");

return 0;

}

 1.2

#include <stdio.h>

int main()

{

int x[2][4] = {{1, 9, 8, 4}, {2, 0, 4, 9}};

int i, j;

int *p; 
int(*q)[4]; 



for (i = 0; i < 2; ++i)

{

for (j = 0; j < 4; ++j)

printf("%d", x[i][j]);

printf("\n");

}



for (p = &x[0][0], i = 0; p < &x[0][0] + 8; ++p, ++i)

{

printf("%d", *p);

if ((i + 1) % 4 == 0)

printf("\n");

}
for (q = x; q < x + 2; ++q)

{

for (j = 0; j < 4; ++j)

printf("%d", *(*q + j));

printf("\n");

}

return 0;

}

 任务二

2.1

#include <stdio.h>

#include <string.h>

#define N 80

int main()

{

char s1[] = "Learning makes me happy";

char s2[] = "Learning makes me sleepy";

char tmp[N];

printf("sizeof(s1) vs. strlen(s1): \n");

printf("sizeof(s1) = %d\n", sizeof(s1));

printf("strlen(s1) = %d\n", strlen(s1));

printf("\nbefore swap: \n");

printf("s1: %s\n", s1);

printf("s2: %s\n", s2);

printf("\nswapping...\n");

strcpy(tmp, s1);

strcpy(s1, s2);

strcpy(s2, tmp);

printf("\nafter swap: \n");

printf("s1: %s\n", s1);

printf("s2: %s\n", s2);

return 0;
}

 2.2

#include <stdio.h>

#include <string.h>

#define N 80

int main()

{

char *s1 = "Learning makes me happy";

char *s2 = "Learning makes me sleepy";

char *tmp;

printf("sizeof(s1) vs. strlen(s1): \n");

printf("sizeof(s1) = %d\n", sizeof(s1));

printf("strlen(s1) = %d\n", strlen(s1));

printf("\nbefore swap: \n");

printf("s1: %s\n", s1);

printf("s2: %s\n", s2);

printf("\nswapping...\n");

tmp = s1;

s1 = s2;

s2 = tmp;

printf("\nafter swap: \n");

printf("s1: %s\n", s1);

printf("s2: %s\n", s2);

return 0;
}

 任务三

#include <stdio.h> 
void str_cpy(char *target, const char *source); 
void str_cat(char *str1, char *str2); 
int main() { 
char s1[80], s2[20] = "1984"; 
str_cpy(s1, s2); puts(s1); 
str_cat(s1, " Animal Farm"); 
puts(s1); 
return 0; }
void str_cpy(char *target, const char *source) { 
while (*target++ = *source++) ; 
}
void str_cat(char *str1, char *str2) 
{ 
while (*str1) str1++;
 while (*str1++ = *str2++) ;}

 任务四

#include <stdio.h>

#define N 80

void func(char *);

int main()

{

char s[N];

while (scanf("%s", s) != EOF)

{

func(s);

puts(s);

}

return 0;

}

void func(char *str)

{

int i;

char *p1, *p2, *p;

p1 = str;

while (*p1 == '*')

p1++;

p2 = str;

while (*p2)

p2++;

p2--;

while (*p2 == '*')

p2--;

p = str;

i = 0;

while (p < p1)

{

str[i] = *p;

p++;

i++;

}

while (p <= p2)

{

if (*p != '*')

{

str[i] = *p;

i++;

}

p++;

}

while (*p != '\0')

{

str[i] = *p;

p++;

i++;

}

str[i] = '\0';

}

 任务五

#include <stdio.h> 
#define N 80 
void func(char *); 
int main() { 
char s[N]; 
while (scanf("%s", s) != EOF) 
{ func(s); puts(s); }
return 0; }
void func(char *str) 
{ 
int i; 
char *p1, *p2, *p; 
p1 = str; 
while (*p1 == '*') 
p1++;
p2 = str; 
while (*p2) 
p2++; 
p2--; 
while (*p2 == '*') 
p2--; 
p = str; 
i = 0; 
while (p < p1) 
{ str[i] = *p; p++; i++; }
while (p <= p2) { 
if (*p != '*') { str[i] = *p; i++; }p++; 
}
while (*p != '\0') { 
str[i] = *p; 
p++; 
i++; }
str[i] = '\0';}

 任务六

6.1

#include <stdio.h>
#include <string.h>

void sort(char *name[], int n);

int main()

{

char *course[4] = {"C Program",

"C++ Object Oriented Program",

"Operating System",

"Data Structure and Algorithms"};

int i;

sort(course, 4);

for (i = 0; i < 4; i++)

printf("%s\n", course[i]);

return 0;

}

void sort(char *name[], int n)

{

int i, j, k;

char *tmp;

for (i = 0; i < n - 1; i++)

{

k = i;

for (j = i + 1; j < n; j++)

if (strcmp(name[j], name[k]) < 0)

k = j;

if (k != i)

{

tmp = name[i];

name[i] = name[k];

name[k] = tmp;

}

}

}

 6.2

#include <stdio.h>
#include <string.h>

void sort(char *name[], int n);

int main()

{

char *course[4] = {"C Program",

"C++ Object Oriented Program",

"Operating System",

"Data Structure and Algorithms"};

int i;

sort(course, 4);

for (i = 0; i < 4; i++)

printf("%s\n", course[i]);

return 0;

}

void sort(char *name[], int n)

{

int i, j, k;

char *tmp;

for (i = 0; i < n - 1; i++)

{

k = i;

for (j = i + 1; j < n; j++)

if (strcmp(name[j], name[k]) < 0)

k = j;

if (k != i)

{

tmp = name[i];

name[i] = name[k];

name[k] = tmp;

}

}

}

 任务七

#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)
{
   
    if (strlen(str) != 18)
        return 0;
 int i1; 
    for(i1=0; i1<18; i1++) {
        if (i1 == 17 && str[i1] == 'X') 
            continue;
        
        if (str[i1] < '0' || str[i1] > '9')
            return 0;
    }

    return 1;
}

 任务八

#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;
}

/*函数定义
功能:对s指向的字符串进行编码处理
编码规则:
对于a~z或A~Z之间的字母字符,用其后的字符替换; 其中,z用a替换,Z用A替换
其它非字母字符,保持不变
*/
void encoder(char *s)
{
    int len = strlen(s);
    int i; 
    for(i = 0; i < len; i++) {
        if((s[i] >= 'a' && s[i] < 'z') || (s[i] >= 'a' && s[i] < 'z')) {
            s[i] = s[i] + 1;
        }else if(s[i] == 'z') {
            s[i] = 'a';
        }else if(s[i] == 'z') {
            s[i] = 'a';
        }
    }
}

/*函数定义
功能:对s指向的字符串进行解码处理
解码规则:
对于a~z或A~Z之间的字母字符,用其前面的字符替换; 其中,a用z替换,A用Z替换
其它非字母字符,保持不变
*/
void decoder(char *s)
{
    int len1 = strlen(s);
    int i1;
    for(i1 = 0; i1 < len1; i1++) {
        if((s[i1] > 'a' && s[i1] <= 'z') || (s[i1] > 'a' && s[i1] <= 'z')) {
            s[i1] = s[i1] - 1;
        }else if(s[i1] == 'a') {
            s[i1] = 'z';
        }else if(s[i1] == 'a') {
            s[i1] = 'z';
        }
    }
}

 

posted @ 2023-05-04 19:35  Anyazmh  阅读(18)  评论(0编辑  收藏  举报