c - 相同的 C 程序但不同的执行时间
问题描述
我编写了一个 C 程序来找出给定参数中的素数。但是对于相同的输入输出,程序的执行时间不同。
#include <stdio.h>
int main(int argc, char const *argv[])
{
int n,p,k;
scanf("%d", &n);
int prime[n+1];
for (p = 2; p <= n; ++p)
{
if (prime[p]!=-1)
{
for (int i = p*2,k=2; i < n; k++,i=k*p)
{
prime[i]=-1;
}
}
}
for (int i = 1; i < n ; ++i)
{
if (prime[i]!=-1)
{
printf("%d ",i );
}
}
return 0;
}
解决方案
您正在测量的是用户输入输入所花费的时间,即 200。
在任何现代计算机上,在给出输入后计算结果都不会花费 2 到 5 秒。
确实,“计算机可能正在做其他事情”,因此会给出不同的执行时间——但这不会让你像这样的代码增加 3 秒。
为了使测量更可靠,您需要“删除”用户输入,即删除scanf
.
而不是scanf
您应该将值n
作为命令行参数。
使用类似的代码
// scanf("%d", &n); Dont use scanf but use lines like the two below.
if (argc < 2) exit(1); // user error - no number given
n = atoi(argv[1]); // convert command line arg to integer
并像这样启动程序:
test2.exe 200
现在测量的时间将远小于 2-5 秒,您不会看到执行时间变化如此之大。
注意:虽然atoi
使用起来很简单,但通常使用起来会更好strtol
推荐阅读
- java - 如何在 JFrame 中的 JPanel 中编写段落?
- c - 如何在STM32 Cube IDE中使用另一个全局变量Array中声明的全局变量而不会出现任何错误?
- javascript - 用点击链接替换 img
- tableau-api - 如何在画面中可视化多个答案问题
- image - 当与像素值乘以 int 时,cv::Mat 图像以退出代码 11 结束
- r - 在 R Markdown 中,为什么生成路径不起作用,但静态结果却起作用?
- android - 在 Android 上执行 room upsert unsing rxjava
- python-3.x - 使用 AIOHTTP 的非阻塞 websockets 客户端
- android - 如何将嵌套数组列表与 recyclerView 一起使用?
- php - 在 HTML 邮件中使用 PHP 循环