




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、福建农林大学计算机与信息学院(程序设计类课程)实验报告课程名称:姓 名:系:专 业:年 级:学 号:指导教师:职 称:福建农林大学计算机与信息学院实验报告系: 计算机 专业: 计算机科学与技术 年级: 姓名: 学号: 实验室号_ 计算机号 实验一 线性表及其应用(多项式相加、相乘)一、 实验目的和要求1、 熟悉tc的运行环境,并可以熟练的使用tc;2、掌握链表存储的方法以及基本操作;3、掌握内存的动态分配和释放方法;4、熟悉C语言程序的基本格式与规范。二、 实验内容和原理1、实验内容:设计一个一元多项式的简单计算程序,其基本功能有:(1)输入并建立多项式;(2)输出多项式;(3)多项式的相加减
2、;(4)多项式的相乘。利用单链表实现。2、实验原理:将两多项式存入链表lianbiao1、lianbiao2,用pointer1扫描lianbiao1,pointer2扫描lianbiao2,结果保存在lianbiao3中(用pointer3来创建lianbiao3)三、 实验环境硬件:(1)学生用微机(2)多媒体实验教室(3)局域网环境软件:(1)Windows XP中文操作系统 (2)Turbo C 3.0四、 算法描述及实验步骤1、描述1. 定义创建链表的函数,然后创建三个链表,一个用于存放结果。2. 定义多项式相加的函数实现多项式的相加功能,定义多项式的相乘功能。3. 定义打印链表和释
3、放链表的函数。4. 最后在主函数里面调用这些函数,实现多项式的相加和相乘。例子:A(X)=3X+7X6-9X9B(X)=2X-3+7-3X+8X3+X5(1)执行加法操作,输出“lianbiao1+lianbiao2:(2,-3) (7,0) (8,5) (1,5) (7,6) (-9,9)”(2)执行乘法操作,输出“lianbiao1*lianbiao2:(6,-2) (21,1) (-9,2) (14,3) (55,6) (3,6) (-21,7) (-63,9) (27,10) (56,11) (7,11) (-72,14) (-9,14)”2、框图3、代码(注释)#include &q
4、uot;stdio.h" /* 输入输出函数的头文件 */#include "alloc.h" /* alloc.h是动态分配内存空间头文件 */typedef struct node/* 定义节点,包含两个数据域(c和e)和一个指针域(*next)*/int c,e;/*c是指多项式的系数, e是项的指数*/struct node *next;/* 定义next为指向下一个结点的指针*/Pn;/*定义Pn类型*/Pn *create()/*创建链表*/Pn *pointer,*lianbiao;int n;lianbiao=malloc(sizeof(Pn);/
5、*用malloc动态分配函数给链表分配内存空间*/printf("n:");/*提示用户输入多项式的项数*/scanf("%d",&n);/*接收用户输入的多项式的项数*/pointer=lianbiao;while(n)/*对n进行判断,当n不为零时执行while循环语句*/pointer->next=malloc(sizeof(Pn);/*为链表新的节点申请空间*/pointer=pointer->next;/*将pointer下移*/printf("c e:");scanf("%d %d"
6、,&pointer->c,&pointer->e);/*将系数c,指数e存入链表中的新节点*/n-;/*没当输入一项时,项数n就减一*/pointer->next=NULL;/*如果pointer指向的下一个结点的指针域为空,说明链表已经创建好了*/return lianbiao; void OUT(Pn *lianbiao)/*打印输出链表*/Pn *pointer=lianbiao->next;while(pointer)/*打印出当前的结点系数c和指数e, 直到链表为空*/printf("(%d,%d) ",pointer-&g
7、t;c,pointer->e);/*打印出多项式系数c和指数e*/pointer=pointer->next;/*打印出当前结点后,将指针移到下一个节点*/printf("n");/*用n换行*/void Free(Pn *lianbiao)/*释放链表空间*/Pn *pointer=lianbiao;/*将pointer指向头节点*/while(pointer)/*释放链表中的结点,直到pointer链表为空时推出循体*/lianbiao=lianbiao->next;/*删除当前节点*/free(pointer);/*释放当前结点的空间*/pointe
8、r=lianbiao;/* 当pointer指向头结点指针时结束循环*/Pn *add(Pn *lianbiao1,Pn *lianbiao2)/*多项式相加*/Pn *lianbiao3,*pointer3,*pointer1=lianbiao1->next,*pointer2=lianbiao2->next;/*建立新的链表lianbiao3,用于存放lianbiao1与lianbiao2相加后的结果*/int c,e;/*这里的c为多项式相加后的系数,而e为结点相加后的指数*/pointer3=lianbiao3=malloc(sizeof(Pn);/*用malloc为lia
9、nbiao3申请空间*/lianbiao3->next=NULL;while(pointer1|pointer2) /*当pointer1或pointer2不为空时,分成3种情况*/if(pointer1&&(pointer2=NULL|pointer1->e<pointer2->e)/*第一种是当pointer1不空并且pointer2为空,或者pointer1所指的指数e小于pointer2所指的指数e时*/c=pointer1->c;/*将pointer1当前所指结点的系数c赋值给c*/e=pointer1->e;/*将pointer1
10、当前所指结点的系数e赋值给e*/pointer1=pointer1->next;/*将pointer1移到下一结点*/else if(pointer2&&(pointer1=NULL|pointer2->e<pointer1->e) /*第二种是当pointer2不空且pointer1为空或者pointer2所指的指数e小于pointer1所指的指数e时*/c=pointer2->c;e=pointer2->e;pointer2=pointer2->next;else /*第三种是当pointer1、pointer2都不为空且point
11、er1的指数e等于pointer2的指数e时*/c=pointer1->c+pointer2->c;/*将pointer1与pointer2所指的系数相加*/e=pointer1->e;pointer1=pointer1->next;/*将pointer1下移*/pointer2=pointer2->next;/*将pointer2下移*/if(c)pointer3->next=malloc(sizeof(Pn);/*申请新结点的空间*/pointer3=pointer3->next;/*pointer3下移*/pointer3->c=c;/*把
12、系数c放入新结点*/pointer3->e=e;/*把指数e放入新结点*/pointer3->next=NULL;/*当所指的指针为NULL时,链表结束*/return lianbiao3;/* 返回两个多项式相加的结果lianbiao3 */Pn *mx1(Pn *pointer1,Pn *lianbiao2) /*多项式相乘*/Pn *lianbiao3,*pointer3,*pointer2=lianbiao2->next;/*定义链表lianbiao3 */pointer3=lianbiao3=malloc(sizeof(Pn);/*为lianbiao3申请空间, 并
13、将pointer3指向lianbiao3*/lianbiao3->next=NULL;while(pointer2)/* 当pointer2不为空时, 执行while循环*/pointer3->next=malloc(sizeof(Pn);/*为新创结点申请空间*/pointer3=pointer3->next;/*将pointer3指向新结点*/pointer3->c=pointer1->c*pointer2->c;/*将pointer1的系数乘以pointer2->c*/pointer3->e=pointer1->e+pointer2-
14、>e;/*将pointer1的指数乘以pointer2->e*/pointer2=pointer2->next;/*pointer2下移*/pointer3->next=NULL;return lianbiao3;/*将结果lianbiao3返回*/Pn *mxm(Pn *lianbiao1,Pn *lianbiao2)/*多项式相乘*/Pn *lianbiao3,*pointer1=lianbiao1->next,*htemp;lianbiao3=malloc(sizeof(Pn);lianbiao3->next=NULL;while(pointer1)/
15、*当pointer1不为空,执行while循环*/htemp=mx1(pointer1,lianbiao2);/*将相乘结果放到链表htemp*/lianbiao3=add(lianbiao3,htemp);/*将htemp中的多项式加上lianbiao3中的多项式*/pointer1=pointer1->next;Free(htemp);/*释放链表htemp*/return lianbiao3;/*返回结果lianbiao3 */main()Pn *lianbiao1,*lianbiao2,*lianbiao3; /*定义三个链表lianbiao1,lianbiao2,lianbia
16、o3*/clrscr();printf("Create lianbiao1n");lianbiao1=create(); /*创建链表lianbiao1*/printf("nPrintf lianbiao1n");OUT(lianbiao1);/*打印出链表lianbiao1*/printf("nCreate lianbiao2n");lianbiao2=create();/*创建链表lianbiao2*/printf("nPrintf lianbiao2n");OUT(lianbiao2); /*打印出链表lia
17、nbiao2*/printf("nlianbiao1+lianbiao2:");lianbiao3=add(lianbiao1,lianbiao2);/*把lianbiao1和lianbiao2相加的结果赋给lianbiao3*/OUT(lianbiao3);/*打印出lianbiao3*/Free(lianbiao3);/*释放lianbiao3 */printf("nlianbiao1*lianbiao2:");lianbiao3=mxm(lianbiao1,lianbiao2);/*把lianbiao1和lianbiao2相乘的结果赋给lianbi
18、ao3*/OUT(lianbiao3);/*输出lianbiao3*/Free(lianbiao1);/*释放lianbiao1*/Free(lianbiao2);Free(lianbiao3);getch();五、 调试过程#include "malloc.h"语句出错, 多了一个m,后来改为#include "alloc.h", 就编译通过了。六、 实验结果测试数据(1):取两项多项式为: 9+3x取一项多项式为: 2X-3实验结果(1):这两个项式相加结果为:lianbiao1+lianbiao2: 2X-3+9+3X这两个项式相乘结果为:lianbiao1*lianbiao2: 18X-3+6X-2 实验截图(1):测试数据(2):取三项多项式为:(3,1) (7,6) (-9,9)取五项多项式为:(2,-3) (7,0) (-3,1) (8,5) (1,5)实验结果(2):这两个项式相加:lianbiao1+lianbiao2:(2,-3)(7,0) (8,5) (1,5) (7,6)(-9,9)这两个项式相乘:lianbiao1*lianbiao2:(6,-2) (21,1) (-9,2) (14,3) (55,6) (3,6) (-21,7) (-63,9) (27,10) (56,11) (7,11) (-72,
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年清洁车项目可行性分析报告
- 新型抗菌剂策划书
- 合股美容院合同协议书
- 潮汕当地文化美食策划书3
- 美团大数据营销策划方案
- 影视动漫行业创业计划书范本
- 聚丙烯热塑性弹性体项目可行性分析报告(模板参考范文)
- 2025年整体衣柜项目评估报告
- 中国乙烯与四氟乙烯共聚物项目投资计划书
- 2025年中国电镉项目商业计划书
- 食品科学与工程实践试题集及答案
- 消防设备维护质量控制及保障措施
- 人教版七年级下册数学压轴题训练(含解析)
- 2025年共青团入团积极分子考试测试试卷题库及答案
- 注射泵培训课件
- 牙外伤的治疗
- DB34-T2087-2014石油和石油产品酸值测定方法电位滴定法
- 小学科学教育中的实验教学策略研究报告
- GB/T 44994-2024声学助听器验配管理
- 2025年湖北省新华书店有限公司招聘笔试参考题库含答案解析
- IT桌面运维培训
评论
0/150
提交评论