代码:(环境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文本: