C/C++自动 21 级(含卓越 211)《软件技术基础》期末大作业

news2025/8/2 21:57:37

C/C++自动 21 级(含卓越 211)《软件技术基础》期末大作业

一、作业内容

题目一:请你设计一个算法,从顺序表中删除自第 i 个结点开始的 k 个结点。要求先输出整个顺序表,再输出删除自第 i 个结点开始的 k 个结点后的结果。

【编程提示】
假设 a[max]={1,2,3,4,5,6,7,8,9,10,11,12,13,14,15};
i=5;k=5;
输出结果为:
原顺序表:1,2,3,4,5,6,7,8,9,10,11,12,13,14,15
删除结点后:1,2,3,4,10,11,12,13,14,15

【上机要求】
要求采用 C/C++语言上机编程实现上述功能,并至少展示两组与所给编程提示不同的输
出结果。

题目二:请你运用数据结构中“栈”的思想,编写一个算法,要求把输入的中缀表达式转换成后缀表达式,并计算该表达式的值。

【编程提示】

  1. 用户在键盘上输入表达式时,通常是运算符位于两个操作数之间,即为中缀表达式。
    例如:3*(8+4)。计算时遵循“自左向右计算,先乘除后加减,先括号内后括号外”的规则。因此,中缀表达式的计算需要考虑括号、运算符优先级等诸多因素,比较麻烦。而后缀表达式(即波兰表达式)在格式上已经考虑了运算符优先级,消除了括号,运算时只需处理操作数和运算符,比较简洁。
  2. 该问题可分成两个部分:一个为中缀表达式转换为后缀表达式算法的实现;另一个是对后缀表达式求值。

【上机要求】
要求采用 C/C++语言上机编程实现上述功能,运行的输出结果中要包含以下信息:原表达式、后缀表达式及表达式计算结果,运行测试数据至少两组。

题目三:请你设计一个算法,实现文具店定期对销售商品的记录进行统计,要求按商品的单价进行升序排序。

【编程提示】

  1. 可以先从数据文件中读出各商品的记录信息,并存储在顺序表中。各商品信息包括:商品名、单价、销售量等。
  2. 假设文件 store.txt 的内容如下:
商品名称 单价 销售量
中性笔 2 100
铅笔 1 88
钢笔 15 35
笔记本 10 90
书包 100 10
水彩笔 18 73
……
  1. 编译运行后显示
商品名称 单价 销售量
铅笔 1 88
中性笔 2 100
笔记本 10 90
钢笔 15 35
水彩笔 18 73
书包 100 10
……

【上机要求】
要求对单价的排序采用冒泡排序法,C/C++语言编程实现。

【扩展功能】
选择其他排序算法(不包含冒泡排序法,如快速排序、堆排序等),实现对销售量进行排序(升序或降序均可)。(注:本功能为扩展功能,属于加分项)

扩展功能运行结果:

1——按单价排序(升序) 2——按销售量排序(升序) 0——退出
2(回车)
商品名称 单价 销售量
书包 100 10
钢笔 15 35
水彩笔 18 73
铅笔 1 88
笔记本 10 90
中性笔 2 100

题目四:要求利用带头结点的单链表,根据所提供的源代码,实现两个集合的并、交、差运算。

【具体功能描述】
1)要求用带头结点的单链表存储两个集合中的元素和最终的结果。
2)集合的元素限定为十进制数,程序应对出现重复的数据进行过滤,即使得链表中没有重复数据。
3)显示两个集合的内容及其并集、交集和差集的内容。
4)要求不改变原来的集合,并集、交集和差集分别另外存放。
【程序源代码】

#include <iostream>
#include <stdio.h>
#include <malloc.h>
#include <cstdio>
using namespace std;
typedef char datatype;

typedef struct LNode
{
    datatype data;
    struct LNode* next;
} LinkList;

void DispList(LinkList* L) {
    LinkList* p = L->next;
    while (p != NULL) {
        printf("%d ", p->data);
        p = p->next;
    }
    printf("\n");
}

void DestroyList(LinkList*& L) {
    LinkList* p = L->next, * pre = L;
    while (p != NULL) {
        free(pre);
        pre = p;
        p = pre->next;
    }
    free(pre);
}

LinkList* CreateListF()//尾插法建立单链表
{
    LinkList* head, * p, * r, * s;
    datatype CreateListF_num;
    int n;
    printf("创立一个链表,大小为:");
    scanf("%d", &n);
    head = (LinkList*)malloc(sizeof(LinkList));
    head->next = NULL;
    r = head;
    printf("输入以空格隔开的十进制整数:");
    for (int i = 1, k = 1; i <= n; i++, k++) {
        int flag = 1;
        s = head->next;
        scanf("%d", &CreateListF_num);
        for (int j = 1; j < k; j++, s = s->next) {
            if (CreateListF_num == s->data) {
                flag = 0;
                k--;
                break;
            }
        }
        if (flag) {
            p = (LinkList*)malloc(sizeof(LinkList));
            p->data = CreateListF_num;
            r->next = p;
            r = p;
        }
    }
    r->next = NULL;
    return head;
}

///从小到大排序
void sort(LinkList* L) {
    LinkList* pre, * p, * q;
    if (L->next != NULL) {
        p = L->next->next;
        5
            L->next->next = NULL;
        while (p != NULL) {
            q = p->next;
            pre = L;
            while (pre->next != NULL && pre->next->data < p->data)
                pre = pre->next;
            p->next = pre->next;
            pre->next = p;
            p = q;
        }
    }
}

void Delete(LinkList* head) {
    if (head->next != NULL) {
        LinkList* p = head->next, * r = head, * q;
        while (p->next) {
            if (p->data == p->next->data) {
                q = p->next;
                p->next = q->next;
                free(q);
            } else
                p = p->next;
        }
    }
}

///求集合的并
void Union(LinkList* ha, LinkList* hb, LinkList*& hc) {
    LinkList* pa = ha->next, * pb = hb->next, * pc, * s;
    hc = (LinkList*)malloc(sizeof(LinkList));
    pc = hc;
    while (pa != NULL && pb != NULL) {
        if (pa->data < pb->data) {
            s = (LinkList*)malloc(sizeof(LinkList));
            s->data = pa->data;
            pc->next = s;
            pc = s;
            pa = pa->next;
        } else if (pa->data > pb->data) {
            s = (LinkList*)malloc(sizeof(LinkList));
            s->data = pb->data;
            pc->next = s;
            pc = s;
            pb = pb->next;
        } else {
            s = (LinkList*)malloc(sizeof(LinkList));
            s->data = pa->data;
            pc->next = s;
            pc = s;
            pa = pa->next;
            pb = pb->next;
        }
    }
    if (pb != NULL)
        pa = pb;
    while (pa != NULL) {
        s = (LinkList*)malloc(sizeof(LinkList));
        s->data = pa->data;
        pc->next = s;
        pc = s;
        pa = pa->next;
    }
    pc->next = NULL;
}

///求两个有序集合的交用尾插法
void InterSect(LinkList* ha, LinkList* hb, LinkList*& hc) {
    LinkList* pa = ha->next, * pb, * pc, * s;
    hc = (LinkList*)malloc(sizeof(LinkList));
    pc = hc;
    while (pa != NULL) {
        pb = hb->next;
        while (pb != NULL && pb->data < pa->data)
            pb = pb->next;
        if (pb != NULL && pb->data == pa->data)///B 节点在 A 节点中复制 A 节点
        {
            s = (LinkList*)malloc(sizeof(LinkList));
            s->data = pa->data;
            pc->next = s;
            pc = s;
        }
        pa = pa->next;
    }
    pc->next = NULL;
}

///求两个有序集合的差
void Subs(LinkList* ha, LinkList* hb, LinkList*& hc) {
    LinkList* pa = ha->next, * pb, * pc, * s;
    hc = (LinkList*)malloc(sizeof(LinkList));
    pc = hc;
    while (pa != NULL) {
        pb = hb->next;
        while (pb != NULL && pb->data < pa->data)
            pb = pb->next;
        if (!(pb != NULL && pb->data == pa->data))///B 节点不在 A 节点中复制 A 节点
        {
            s = (LinkList*)malloc(sizeof(LinkList));
            s->data = pa->data;
            pc->next = s;
            pc = s;
        }
        pa = pa->next;
    }
    pc->next = NULL;
}

int main() {
    LinkList* ha, * hb, * hc;
    ha = CreateListF();
    hb = CreateListF();
    printf(" 集合的运算如下:\n");
    printf(" 原集合 A: ");
    DispList(ha);
    printf(" 原集合 B: ");
    DispList(hb);
    sort(ha);
    sort(hb);
    Delete(ha);
    Delete(hb);
    printf(" 有序集合 A: ");
    DispList(ha);
    printf(" 有序集合 A: ");
    DispList(ha);
    Union(ha, hb, hc);
    printf(" 集合的并 C: ");
    DispList(hc);
    InterSect(ha, hb, hc);
    printf(" 集合的交 C: ");
    DispList(hc);
    Subs(ha, hb, hc);
    printf(" 集合的差 C: ");
    DispList(hc);
    DestroyList(ha);
    DestroyList(hb);
    DestroyList(hc);
    return 0;
}

【运行结果示例】
图一.png

【上机要求】

  1. 要求修改源代码中的结构名、结构类型名、结构变量以及相关参数,而且命名时要
    包含自己的名字或姓名首字母或学号等信息。
  2. 要求至少展示与图 1 所示运行示例不同的三种测试结果,并且要包含一种边界条件的测试结果(如其中一个集合为空)。

源码传送门

传送门:https://pan.baidu.com/s/1JJs9vbZahUCB6cQvXLgAVg?pwd=1111

二、报告要求
大作业中的所有题目都要形成文字材料,具体报告内容要求如下:

  1. 要求进行需求分析,陈述要解决的问题及要实现的功能。
  2. 所有代码要在报告中体现,同时要求包含以下内容:程序的总体设计,子程序设计,算法流程图,算法分析(如:算法的时间复杂度),使用的数据结构及存储结构,详细说明使用的逻辑结构及存储结构的优缺点。
  3. 报告中要包括对测试数据及测试结果的截图及分析。
  4. 记录程序调试过程中遇到的主要问题,以及是如何解决的,并截图在报告中展示。
  5. 是否有尚未解决的问题?是否考虑了一些应对的策略?如果有,可撰写到报告中。
  6. 总结课程学习过程中及完成大作业过程中的收获与心得体会。
  7. 报告模板见附件 1。

三、特别说明
1)要求大作业中涉及到的程序,统一存放在以本人学号命名的文件夹中,不得存放在他人电脑中,如发现两人共用一台电脑,此二人均无成绩。对运行结果截图时要包含存储路径,否则无效,具体如图 2 所示:
图二.png

2)不得复制他人代码,如发现雷同,无论抄与被抄者,均无成绩。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/16030.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

高性能计算(HPC)存储高校科研应用分析

育人为本&#xff0c;国之根本&#xff0c;高校从理论教学到实操教学&#xff0c;从教室到实验室&#xff0c;改变了传统的教学模式&#xff0c;以数据的力量塑造新技术型高科技人才。随着科研项目多元化与数据量的增多&#xff0c;对计算速度与存储空间的要求不断提升&#xf…

rae众筹首个新目标,Tinkering开发板来了~

编辑&#xff1a;OAK中国 首发&#xff1a;oakchina.cn 喜欢的话&#xff0c;请多多&#x1f44d;⭐️✍ 内容可能会不定期更新&#xff0c;官网内容都是最新的&#xff0c;请查看首发地址链接。 ▌前言 Hello&#xff0c;大家好&#xff0c;这里是OAK中国&#xff0c;我是助手…

安全进阶:SSH实验配置指导

实验拓扑 实验需求 完成PC及交换机的配置&#xff0c;使得PC能够通过SSH的方式登录到交换机。 实验步骤及配置 交换机完成基础配置 [SW] interface Vlanif 1 [SW-Vlanif1] ip address 192.168.1.100 24简单起见&#xff0c;我们就直接使用VLAN1与PC对接&#xff0c;因此将交…

[附源码]java毕业设计企业物资信息管理系统

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

基于Simulink模拟具有两个目标的双基地雷达(附源码)

目录 一、示例 二、发射机 三、目标 四、接收机 五、结果和显示 六、总结 七、程序 此示例演示如何仿真具有两个目标的双基地雷达系统。双基地雷达的发射器和接收器不位于同一位置&#xff0c;而是沿着不同的路径移动。 一、示例 以下模型显示了双基地雷达系统的端到…

Failed to connect to any host resolved for DNS name第一次测试Redis/Jedis时报错(虚拟机)

有很多方法都会导致报这个错&#xff0c;后面提&#xff0c;先说解决方案 0. 尝试重启Redis&#xff0c;再运行测试代码 1. 检查配置文件环节 1⃣️是否设置后台启动(设置为yes) 2⃣️检查是否设置运行远程访问 这一步需要注意两个地方 注释掉bind和将protected-mode设置为…

项目八 51单片机WIFI控制继电器

前言&#xff1a;作者想要帮助一些童鞋和爱好者进行项目构建&#xff0c;但自知能力有限&#xff0c;不喜可论&#xff0c;创作不易&#xff0c;勿喷。 系统由STC89C51单片机、4路继电器、wifi esp8266模块及电源组成。 可以说是一个非常简单的设计&#xff0c;但这里我来说明…

(六)笔记.net core学习之泛型、逆变/协变、泛型缓存

1.泛型&#xff1a;延迟声明&#xff1a;不指定参数类型&#xff0c;调用是才指定&#xff0c;把参数类型的声明推迟到调用 2.泛型包含&#xff1a;泛型类、泛型方法、泛型接口、泛型委托、逆变/协变、泛型缓存 3.泛型约束 1.接口约束 Where T : 接口 2.基类约束 Where…

i++的错误使用

文章目录问题题目完整代码问题 在执行以下代码之前&#xff0c;i的值为8&#xff0c;length的值为10。 while (i < length) {tempArray[i] middle[i]; }我预想中的结果应该是tempArray[8] middle[8];&#xff0c;然后i。 结果tempArray[8]没有被赋值&#xff1a; 反倒是…

树/二叉树/森林之间的相互转换 与遍历

森林就是多棵树的集合&#xff0c;但是森林也可以只有一棵树&#xff0c;二叉树是一种特殊的树&#xff0c;固定的度为2&#xff0c;这是基本前情提要&#xff5e; 树常见的存储方式有三种&#xff1a; &#xff08;1&#xff09;双亲表示法 仅用定义一个结点对象&#xff0…

windows添加node环境

参考&#xff1a;npm和cnpm&#xff08;windows&#xff09;安装步骤_李疆~的博客-CSDN博客_cnpm一、什么是npm和cnpmnpm&#xff08;node package manager&#xff09;&#xff1a;nodejs的包管理器&#xff0c;用于node插件管理&#xff08;包括安装、卸载、管理依赖等&#…

YRCloudFile V6.9.0 加速企业在大数据应用技术创新

近日&#xff0c;焱融科技发布分布式文件存储产品 YRCloudFile 6.9.0 版本。该版本在功能和性能方面有多项技术性突破&#xff0c;主要包括大数据应用无缝对接 Hadoop &#xff0c;为大数据应用提供高性能存储平台&#xff1b;独有的 Dataload 功能和智能分层细粒度化&#xff…

查询不为空的字段

数据&#x1f4ca; idnameparent_id1党组织02陕西党委1314Null25渭南党委Null 实验⁉️ 查询int类型不为空的字段 select * from org where parent_id <> ""❌mybatis 中的 if判断会把整形中的 0 识别为false(空) select * from org where parent_id ! &quo…

体会多态的好

目录 继承和组合&#xff1a; 区别和联系 1.安全性角度&#xff08;封装性&#xff09; 2.灵活性角度&#xff08;牵一发动全身&#xff09; 多态&#xff1a; 一.怎样实现多态 1.完成向上转型 直接赋值&#xff1a;​​​​​​​ 方法传参 方法的返回值 2.完成方法重…

零基础数据科学学习 Python 的 4 个阶段

前言 如果你一直在自学 Python&#xff0c;那么你可能看过无数教程并遵循许多指南来获得这项技能&#xff0c;但是你怎么知道自己走在正确的道路上来掌握这项数据科学的基本技能&#xff1f; &#xff08;文末送读者福利&#xff09; Python 是一种实用的编程语言&#xff0c…

获取CSV文件,转成Excel格式的文件供用户从浏览器下载

前言 最近这十几天每天都很充实&#xff0c;刚完成了几个小需求&#xff1b;今天简单记录一下其中一个&#xff1a;从某系统获取csv文件&#xff0c;然后处理成可供用户在浏览器中下载的Excel文件&#xff1b; 这其中有解除到新的内容&#xff0c;也有利用项目已有的部分功能…

智慧图书馆解决方案-最新全套文件

智慧图书馆解决方案-最新全套文件一、建设背景二、思路架构三、建设方案四、获取 - 智慧图书馆全套最新解决方案合集一、建设背景 现下&#xff0c;传统图书馆已经难以适应时代的发展&#xff0c;图书盘点繁琐、管理模式落后、阅读时间和场地受限等问题&#xff0c;迫使传统图…

148. SAP UI5 表格数据如何导出成 Excel 文件(Table Export As Excel)

本教程前一步骤,我们在介绍 SAP UI5 SmartTable 时,提到了它的 Excel 导出功能。如果将 iseExportToExcel 设置为 true,就可以启用 Excel 导出功能,将 Table 控件显示的数据,导出成本地 Excel 文件。 我们仍然秉承本教程一贯从易到难的学习思路,先暂时不去碰 Smart Table…

30天消化MyBatis源码解析笔记,吊打面试官,offer接到手软

MyBatis 是一个优秀的 Java 持久化框架&#xff0c;SSM 框架组合&#xff08;Spring SpringMVC Mybatis&#xff09;&#xff0c;依赖 MyBatis 搭建的项目更是数不胜数&#xff0c;在互联网公司的使用中&#xff0c;占据了大片江山&#xff0c;你在使用 MyBatis 吗&#xff1…

嵌入式开发:RTOS调试——处理计时问题

毫无疑问&#xff0c;当你开始在嵌入式开发中使用实时操作系统(RTOS)时&#xff0c;会有一个学习曲线。你将在更高的抽象层次上工作&#xff0c;使用或多或少的并行任务&#xff0c;而不仅仅是子例程&#xff0c;并且你需要考虑你的任务应该如何彼此共享数据和处理器时间。你需…