数据结构之线性表实验(一)

【实验目的】

1. 理解和掌握线性关系的数据的顺序结构组织;

2. 设计算法。

【实验内容】

一、汉字输入法。

1. 附件程序201中,原程序只能显示1个汉字对应的五笔输入码,修改程序,实现命令行对输入的多个汉字,显示它们的五笔输入码。

2. 把一个由汉字组成的文本文件,转换成对应的五笔输入码,存在另一个文件中。

3. 输入汉字的五笔输入码,输出对应的汉字。

二、用顺序存储结构(动态数组)存储超长整数,实现加法和减法运算。

1.附件程序202中,已经提供程序的基本框架,请按要求完善各个函数,写出函数代码,加上必要的注释。

2.画出加法、减法函数的算法流程图。

3.写出测试用例,包括输入的数据、预期的结果、实际的结果、结果分析。设计尽量严密的用例,覆盖所有情况。

【实验要求】

1.按【实验内容】要求编程,加上必要的注释。写出测试用例,包括输入的数据、预期的结果、实际的结果、结果分析。设计尽量严密的用例,覆盖所有情况。附上程序运行结果的截图。(在【实验结果】中体现)

2.回答问题:(在【回答问题】中体现)

(1)数据结构包括什么内容?

(2)顺序存储方式的优点、缺点?

(3)分析程序202中加法、减法算法的时间复杂度和空间复杂度。

3.能否实现各项实验目标?实验过程碰到什么问题?怎么解决?实验的完成,有什么收获?(重要!在【总结反思】中体现)

【实验结果】

第一大问(汉字输入法)

1、多汉字转换五笔输入法

1.1程序部分:

#include <stdio.h>

#include <stdlib.h>

int main(int argc, char* argv[]) {

    // 如果命令行参数个数小于 2

    if (argc < 2) {

        printf("错误:未提供输入!\n");

        exit(1);

}

    FILE* fp = fopen("WB.IMD", "rb");

    // 如果打开文件失败

    if (fp == NULL) {

        printf("错误:无法打开文件 WB.IMD\n");

        exit(1);

}

    for (int j = 1; j < argc; j++) {

        char* input = argv[j];

        while (*input!= '\0') {

            unsigned char ch = *input;

            // 获取下一个字符的无符号字符表示

            unsigned char nextCh = *(input + 1);

            unsigned char ch1 = 0, ch2 = 0;

            // 如果当前字符是有效的中文字符

            if (ch >= 0xa0) {

                ch1 = ch - 0xa0;

                if (nextCh >= 0xa0) {

                    ch2 = nextCh - 0xa0;

                    input++;  

                }

            }

            if (ch1!= 0 && ch2!= 0) {

                // 输出信息

                printf("对于字符 '%c%c':\n", ch, nextCh);

                printf("ch1=%d, ch2=%d\n", ch1, ch2);

                printf("该汉字的五笔输入码为:");

                int i = (ch1 - 16) * 94 + ch2 - 1;

                // 将文件指针移动到指定位置

                fseek(fp, 128 + i * 4, SEEK_SET);

                // 循环读取并输出四个字符

                for (int k = 0; k < 4; k++) {

                    printf("%c", fgetc(fp));

                }

                printf("\n");

            }

            else if (ch1!= 0) {

                // 输出信息

                printf("对于字符 '%c':\n", ch);

                printf("ch1=%d, ch2=0\n", ch1);

                int i = (ch1 - 16) * 94;

                // 将文件指针移动到指定位置

                fseek(fp, 128 + i * 4, SEEK_SET);

                // 循环读取并输出四个字符

                for (int k = 0; k < 4; k++) {

                    printf("%c", fgetc(fp));

                }

                printf("\n");

            }

            // 如果不是中文字符

            else {

                // 输出信息

                printf("字符 '%c'不是中文字符。\n", ch);

            }

            // 将输入指针指向下一个字符

            input++;

        }

    }

    // 关闭文件

    fclose(fp);

    return 0;

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值