一元多项式计算器 (c语言数据结构实验)

这篇实验报告详细介绍了使用C语言和链式存储实现的一元多项式计算器,包括加法、减法、乘法、求值、求导和不定积分等功能。程序通过读写文件操作随机生成多项式并进行计算,结果以仿日志模式记录,便于数据分析。实验结果显示,随着数据规模增大,乘法运算时间消耗显著增加,加法和减法在大规模数据下更为高效。此外,报告还讨论了代码调试过程中的问题及其解决方案,并提出了通过转换乘法为加法来优化性能的建议。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一元多项式计算器 (c语言数据结构实验)

班级 : ****
学号 : 201907020633
姓名 : ***
实验机号: A3
实验日期 :2020.12.04
报告日期 :2020.12.07

实验题目:一元多项式计算器

一、概述

此次实验实现的功能有:
1.多项式加法
2.多项式减法(poly1-poly 2)
3.多项式乘法
4.多项式求值
5.多项式求导
6.多项式求不定积分
亮点:
对于运行中产生的数据文件如生成的多项式,运行结果,操作次数以及运行时间的存储,存储方式为仿系统日志文件的模式进行记录。方便对生成数据的分析以及对于错误数据的筛查和追溯。每次运行结果都会产生时间戳,保证数据的可靠性。

二、实验方案

1.设计方案

存储方案: 链式存储(方便插入和删除,顺序存储的插入和删除需要移动大量的数据,造成许多不必要的时间消耗)
实验逻辑:
在poly 1.txt和poly 2.txt文件中生成随机数。
当程序开始运行时数据被读入程序,同时被写入log.txt中作以记录。
继而进行下一步操作,如加减法、乘法、求值、求导、求不定积分。
执行完运算操作之后,将运算结果同时输出至屏幕和log.txt文件中。
如果需要继续执行,则将poly 1.txt和ploy 2.txt文件中的数据擦除,并重复上述操作。

2.函数调用关系

函数调用关系

3.关键算法实现
  1. 创建多项式文件
    思想:运用文件操作,生成随机数存储入poly 1.txt和poly 2.txt中。
    控制生成项数在指定范围内(即,rand()%11),尽量保持运算结果和生成数据方便分析,避免因为数据过大,无法及时发现计算中出现的错误。
void creat() 
{
   
     char s1[20]="poly 1.txt", s2[20]="poly 2.txt";
     srand((int)time(0));
     int n1 = rand()%10+1;
     FILE *fp1=fopen(s1,"w");
     for (int i=1;i<=n1;i++)
      {
     if (i==1)
         fprintf(fp1,"%d", rand()%11);
         else fprintf(fp1," %d", rand()%11);
      }
       fclose (fp1);    
      int n2=rand()%10+1;
       FILE *fp2=fopen(s2,"w");
       for (int i=1;i<=n2;i++)
      {
     if (i==1)
         fprintf(fp2,"%d", rand()%11);
         else  fprintf(fp2," %d", rand()%11);
      }   
     fclose (fp2);      
}
  1. 从文件中读入数据,生成多项式
    思想:运用feof,当文件中数据未被完全读入程序中时,保持运行。
    且如果指数相同时,系数相加。
PolyPtr getPoly (char *filename) 
{
      
    PolyPtr poly=NULL,p;
    FILE *fp=fopen (filename,"r");
    if (!fp) return poly;
    poly= (PolyPtr)malloc(sizeof(Poly)) ;
    poly->coef=0;
    poly->expn=0;
    poly->next=NULL;
    while (!feof(fp))
      {
    
        p= (PolyPtr)malloc(
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值