实验5

实验任务1:

1.1:

 

 

1.功能:寻找到输入的多个数据中最大的和最小的数据

2.指向该数组中的第一项

 

1.2:

 

 

1.返回的是该数组中最大数据的地址

2.不行,算法表达不正确

实验任务2:

2.1:

 

问题1:

 大小:24 

计算:数组s1的大小

统计:数组的数据字符串的长度

 

问题2:不行

表达不正确

 

 

 

2.2:

 

 问题1:

存放:Learning makes me happy

计算:占据字节数

统计:字符串长度

问题2;

可以

 

实验任务3:

 

 问题1:

表示指向包含4个int元素的一维数组

问题2:

表示第5个一维数组的第一位数据

 

 

实验任务4:

4.1:

 

 问题1:

功能:将数组中的特定字符换成另一选定字符

问题2:不行

4.2:

#include <stdio.h>
#define N 80

void str_trunc(char *str, char x);

int main() {
    char str[N];
    char ch;

    printf("输入字符串: ");
    gets(str);

    printf("输入一个字符: ");
    ch = getchar();

    printf("截断处理...\n");
    str_trunc(str, ch);

    printf("截断处理后的字符串: %s\n", str);

}

void str_trunc(char *str, char x) {
    while(*str) {
        if(*str == x)
            break;     // blank1

        str++;   // blank2
    }

    ;   // blank3
}

 

实验任务5:

5.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;
    char *tmp;

    for (i = 0; i < n - 1; ++i)
        for (j = 0; j < n - 1 - i; ++j)
            if (strcmp(name[j], name[j + 1]) > 0) {
                tmp = name[j];
                name[j] = name[j + 1];
                name[j + 1] = tmp;
            }
}

 5.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;
        }
    }
}

 内存中字符串的存储位置发生了交换

实验任务6:

#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 i,flag=1;
for(i = 0;*(str+i) != '\0';i++){
if(*(str+i)>='0'||*(str+i)=='X'&&*(str+i)<='9')
flag = 1;
else
flag = 0;
}
if(strlen(str) == 18&&flag == 1)
return 1;
else
return 0;
}

 

 

实验任务7:

#include <stdio.h>
#define N 80
void encoder(char *str); // 函数声明
void decoder(char *str); // 函数声明

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 *str) {
    while(*str != '\0'){
        if(*str >= 'A'&&*str<'Z'||*str>= 'a'&&*str<'z')
            (*str)++;
        else if(*str == 'z')
            *str = 'a';
        else if(*str == 'Z')
            *str = 'A';
        str++;
    }

}


void decoder(char *str) {
    while(*str!='\0'){
        if(*str > 'A'&&*str<='Z'||*str> 'a'&&*str<='z')
            (*str)--;
        else if(*str == 'a')
            *str = 'z';
        else if(*str == 'A')
            *str = 'Z';
        str++;
    }

}

 

实验任务8:

 

posted @ 2023-12-03 21:48  zy050101-  阅读(4)  评论(0编辑  收藏  举报