"C语言大一课程设计报告:1~n的连续整数求和算法比较与性能分析"

需积分: 0 3 下载量 66 浏览量 更新于2023-12-27 1 收藏 802KB DOCX 举报
C语言数据结构课程设计报告 本报告着重讨论了C语言大一课程中的第一题,即求解1~n的连续整数之和的问题。本课程设计的目的在于通过对比同一问题的不同解法的绝对执行时间,来体会不同算法的优劣。具体问题描述如下:编写一个名为exp1的程序。对于给定的正整数n,要求分别采用逐个累加和n(n-1)/2高斯法两种解法。对于相同的n,需要给出两种解法的求和结果和求解时间,并用数据进行测试。 一.概要设计 1. 模块的层次结构及调用关系 本设计采用模块化的方式,主要功能被封装在各个函数中,并以模块的方式进行调用。主要的模块包括整数累加法和高斯法两种解决方法。其中,整数累加法的解法由函数add1()实现,高斯法的解法由函数add2()实现。在主函数中调用两个子函数AddTime1()和AddTime2(),以测定两种解法的绝对执行时间。 2. 实现功能的函数及主要代码 方法一,逐个累加法的解法 ```c long add1(long n){ long i, sum=0; for (i=1; i<=n; i++){ sum += i; } return sum; } ``` 方法二,高斯法的解法 ```c long add2(long n){ return n*(n+1)/2; } ``` 在主函数中进行调用的代码如下: ```c AddTime1() add1() AddTime2() add2() ``` 其中,在用两种方法使用之前,定义一个`clock_t t; t=clock();`作为算法开始的时间,方便记时。随后,`t=clock()-t;`用于计算所花费的时间。 二.源代码 ```c //文件名:exp1-1.cpp #include <stdio.h> #include <time.h> long add1(long n){ long i, sum=0; for (i=1; i<=n; i++){ sum += i; } return sum; } long add2(long n){ return n*(n+1)/2; } void AddTime1(){ clock_t t; t = clock(); t = clock() - t; printf("Add1 Time: %ld ticks\n", t); } void AddTime2(){ clock_t t; t = clock(); t = clock() - t; printf("Add2 Time: %ld ticks\n", t); } int main(){ long n = 1000000; printf("Add1 Result: %ld\n", add1(n)); AddTime1(); printf("Add2 Result: %ld\n", add2(n)); AddTime2(); return 0; } ``` 以上是本课程设计所包含的问题描述、概要设计和源代码。实现了对1~n的连续整数之和的逐个累加和高斯法两种解法,并通过测试数据进行了验证。通过本次课程设计,学生将会对不同算法的优劣有更深刻的体会,为以后的算法设计和性能优化奠定基础。