VS2015+程序运行QueryPerformance()计时+C语言素数求和

代码:(环境windows+VS2015)

#include<stdio.h>
#include<stdlib.h>
#include<Windows.h>
#include<math.h>
void main()
{
 int  x,a, b, flag, sum = 0;
 float X;
 FILE *fp;
 fp = fopen("text.txt", "a+");
 LARGE_INTEGER ts,td,ff;
 double dff; 
 QueryPerformanceFrequency(&ff); //获取时钟计时器频率
 dff = ff.QuadPart; 
 printf("input the num X:");
 scanf_s("%f", &X);
 fprintf(fp,"input the num X is:%f\n",X);
 QueryPerformanceCounter(&ts);//计数值1
 x = (int)X; 
 if (X >= 3&&X<=5000) {       //X>=3
  for (a = 3; a <= x; a+=2) {
   flag = 0;
   for (b = 2; b <= sqrt(a); b++) {
    if (a%b == 0) {
     flag = 1;
     break;
    }
   }
   if (flag == 0) {
    sum += a; 
   }
  }
  sum += 2;
  printf("the sum is : %d\n", sum); fprintf(fp, "the sum is : %d\n", sum);
 }else if (X>=2&&X<3) {    //2=<X<3
  printf("the sum is 2\n"); fprintf(fp, "the sum is 2\n");
 }else if (X>=1&&X<2) {     //1=<X<2
  printf("the sum is 0\n"); fprintf(fp, "the sum is 0\n");
 }else {        //X<1或X>5000,非法!
  printf("error input!!!\n"); fprintf(fp, "error input!!!\n");
 }
 QueryPerformanceCounter(&td);//计数值2
 printf("freq is %lf\n running time is  %lf s \n", dff,(double)(td.QuadPart-ts.QuadPart)/(double)dff);
 fprintf(fp,"freq is %lf\n running time is  %lf s \n", dff, (double)(td.QuadPart - ts.QuadPart) / (double)dff);
 fprintf(fp, "-------------------------------------------------------------\n\n");
 fclose(fp);
 system("pause");
}

在这里插入图片描述
结果:保存至 text.txt 文件中。
一开始使用#include<time.h>,虽然方便,但是只精确到 1ms,数值小的时侯显示运行时间
为 0,所以改成了另一种方法。
期间遇到一个错误。
在这里插入图片描述
原因是 sqrt()函数需要头文件 math.h。
遇到一个问题,fopen 无法创建 txt。原因是 VStudio 默认 fopen 不安全,需要改成 fopen_s。
我这里百度一下,通过在预处理器定义下粘贴_CRT_SECURE_NO_WARNINGS 使之通过。
用到的新东西是QueryPerformanceFrequency()返回计时器频率,QueryPerformanceCounter()
返回计时器计数大小。
LARGE_INTEGER 是一个联合结构。如果编译器具有内置支持 64 位整数,可以使用 QuadPart
成员中存储的 64 位整数。否则,使用 LowPart 和 HighPart 成员的存储的 64 位整数。我采
用的是 QuadPart。
txt文本:

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值