用C语言编写一个程序exp1-1.cpp,对于给定的正整数n,求1+2+…+n,采用逐个累加与n(n+1)/2(高斯法)两种解法。对于相同的n,给出这两种解法的求和结果和求解时间,并用相关数据进行测试。
时间: 2024-09-15 07:03:23 浏览: 78
首先,需要注意的是,C语言的文件通常以`.c`为扩展名,而不是`.cpp`,后者通常用于C++语言。这里假设你的文件命名为`exp1-1.c`。下面是使用C语言编写的程序,它包含了两种求和方法,并测量了它们的执行时间。
```c
#include <stdio.h>
#include <time.h>
// 逐个累加求和
long long sum_by_addition(int n) {
long long sum = 0;
for (int i = 1; i <= n; i++) {
sum += i;
}
return sum;
}
// 使用高斯公式求和
long long sum_by_gauss(int n) {
return (long long)n * (n + 1) / 2;
}
int main() {
int n;
printf("请输入正整数n: ");
scanf("%d", &n);
clock_t start, end;
double cpu_time_used;
// 测量逐个累加的时间
start = clock();
long long sum_addition = sum_by_addition(n);
end = clock();
cpu_time_used = ((double) (end - start)) / CLOCKS_PER_SEC;
printf("逐个累加求和结果:%lld,耗时:%f秒\n", sum_addition, cpu_time_used);
// 测量高斯公式的时间
start = clock();
long long sum_gauss = sum_by_gauss(n);
end = clock();
cpu_time_used = ((double) (end - start)) / CLOCKS_PER_SEC;
printf("高斯公式求和结果:%lld,耗时:%f秒\n", sum_gauss, cpu_time_used);
// 验证两种方法的结果是否相同
if (sum_addition == sum_gauss) {
printf("两种方法求得的和相同。\n");
} else {
printf("两种方法求得的和不同!\n");
}
return 0;
}
```
这个程序首先定义了两个函数,`sum_by_addition`用于逐个累加求和,`sum_by_gauss`用于应用高斯求和公式。在`main`函数中,程序接收用户输入的正整数`n`,然后分别用两种方法计算求和,并测量它们的执行时间。
阅读全文