错误的程序之阶乘之和测试程序的快慢程度(加一个计时器)<time.h>和clock()函数
2014-10-07 12:00
567 查看
#include <stdio.h> int main(){ int i,j,n; int s=0; scanf("%d",&n); for(i=1;i<=n;i++){ int factorial=1.0; for(j=1;j<=i;j++){ factorial*=j; } s+=factorial; } printf("%d\n",s%1000000); return 0; }
1当n为100时输出的是一个负值说明乘法溢出了
2当n为10^6时速度很慢
3使用<time.h>和clock()函数可以在程序调用它之前获得整个程序的运行时间,这个时间除以常数CLOCKS_PER_SEC得到的值
#include <stdio.h> #include <time.h> int main(){ const int MOD=1000000; int i,j,n; int s=0; scanf("%d",&n); for(i=1;i<=n;i++){ int factorial=1.0; for(j=1;j<=i;j++){ factorial*=j; } s+=factorial; printf("%d\n",s); } s=s%MOD; printf("%d\n",s); printf("Time used=%.2lf\n",(double)clock()/CLOCKS_PER_SEC); return 0; }
注意:1上面的程序使用了常量定义,增加了程序的可读性,而且当题目该为求后5位的时候也方便修改
2输入20时候所用时间远远大于0是因为它把键盘输入的时间也计算在内(在程序启动之后所用的时间)
3为了避免时间影响测试结果我们使用一种称为管道的小技巧:在WINDOWS命令行下执行echo 20 | abs,操作系统会自动帮你把20输入,其中abs就是你的程序名
而Linux中则需要输入echo | /abs(具体abs旁边的不是/)(应为打不出来所以用了这个),因为在默认情况下当前目录不在可执行文件的搜索路线中
4很多程序的运行时间与规模n都存在着近似的简单关系。可以通过计是函数来发现或者验证这一规律
相关文章推荐
- # include <errno.h >查看错误代码errno是调试程序的一个重要方法。当Linux C API函数发生异常时,一般会将errno变量赋值一个整数,不同的值表示不同的含义,可以通过查看
- #include<time.h> 库函数详解
- [原]java专业程序代写(qq:928900200),学习笔记之基础入门<SQL_Server_视图_函数_存储过程_触发器等>(二十三)
- K&R TCPL 附录B中<time.h>中的函数的相关
- [原]java专业程序代写(qq:928900200),学习笔记之基础入门<Oracle_函数_触发器_游标_存储过程_视图>(三十五)
- c语言:有一函数:当x&lt;0,y=-1;x=0,y=0;x&gt;0,y=1;编一程序,输入一个x值,要求输出相应的y值。
- Java 中的 int 与 Integer 用于 List<Integer> 时,以及通过打印变量检测程序运行和函数调用次数计数
- <错误: 程序中有游离的‘357’>的解决方法
- MCAPI学习笔记<一>——简介与Linux下示例程序测试
- 黑马程序员 Java初级<三>---> 程序流程控制与函数
- #include<time.h> 库函数详解
- Java 中的 int 与 Integer 用于 List<Integer> 时,以及通过打印变量检測程序执行和函数调用次数计数
- <<c程序设计语言>>-4- 函数与程序结构
- <ctype.h> 字符测试函数:字符大小转换函数
- <深入理解计算机系统> 通过程序的机器级表示来理解函数栈
- 解决VC6 --> VC2005 --> VC2008 中没有<sys/time.h> 问题
- windows核心编程<读书笔记一>---重写Onchar函数
- Eclise中提示Start tag (<a>) not closed.错误的解决
- TQ2440裸奔程序>>串口UART打印printf测试程序
- HTTP 错误 500.19 - Internal Server Error | <compilation targetFramework="4.0">