2.3 循环的代价
发布日期:2021-05-04 20:16:33 浏览次数:34 分类:原创文章

本文共 1363 字,大约阅读时间需要 4 分钟。

2.3 循环的代价

前面两个小节,我们介绍了三种常用的循环结构。但是对于处理相同的问题,不同的处理方式,所花费的时间和占用的空间都是不同的。我们这章就着重介绍,如何得到一个代码运行花费的时间。


首先,我们写一个比较简单的循环(就不用书本上的例子了)

#include<stdio.h>int main(){   	int n,x=1;	scanf("%d",&n);	for (int i=1;i<=n;i++){   //这就是循环嵌套		for (int j=1;j<=n;j++){   			x=(x*3+2)%100;//随便写的		}	}	printf("%d",x);	return 0;}

上面的代码,当我们输入的值为10,100,1000的时候,计算机都能很快的给出答案。
当我们输入100000时:
在这里插入图片描述
响应了非常非常久。

那我们怎么的得到代码具体的运行时间呢?

我们在原来的代码上进行如下操作:

#include<stdio.h>#include<time.h>//调用clock()的库int main(){   	int n,x=1;	scanf("%d",&n);	for (int i=1;i<=n;i++){   		for (int j=1;j<=n;j++){   			x=(x*3+2)%100;		}	}	printf("%d\n",x);	printf("%.6f",(double)clock()/CLOCKS_PER_SEC);	return 0;}

我们导入time.h的库,调用其中的clock()函数,clock()能够得到整个代码运行开始到结束所用的时间。但是clock()得到cpu时间,并不是传统意义的秒,所以我们还要/CLOCKS_PER_SEC,将其转化为秒作单位。
CLOCKS_PER_SEC的值对与不同的编译器是不一样的,比如,linux C中,它是1000000,在VC6中,它是1000。

接下来我们运行这个代码,输入100
在这里插入图片描述
唉?怎么花费了三秒钟这么多!
事实上,clock()是会把你键盘输入花费的时间一起计算在内的,所以要怎么解决这个问题呢?

书上提供了一种方法:
在windows的命令行下执行echo x(输入的值)|abc(程序的文件名),操作系统会自动把x输入。
在这里插入图片描述
(操作系统不是很熟练T_T)

事实上,像这样,直接对要输入的内容欲赋值也是可行的:

#include<stdio.h>#include<time.h>int main(){   	int n,x=1;//	scanf("%d",&n);	n=1000;	for (int i=1;i<=n;i++){   		for (int j=1;j<=n;j++){   			x=(x*3+2)%100;		}	}	printf("%d\n",x);	printf("%.6f",(double)clock()/CLOCKS_PER_SEC);	return 0;}

事实上,如果你忘记了c++自带的计时器是怎么运用的也不要紧。粗略的计算一下代码的时间复杂度,然后gcc编译器一秒钟大概是做一亿次操作,通过这个也可以得到代码运行的大概时间。
(不会有人不会算时间复杂度的吧,不会吧不会吧)

上一篇:2.5 注释与习题
下一篇:2.2 while 循环和 do-while 循环

发表评论

最新留言

感谢大佬
[***.8.128.20]2025年04月03日 18时46分45秒