1.注意数据类型的范围,防止在运算过程中发生溢出现象。
例如:
#include<stdio.h>
int main(void)
{
int m; //m<1e6;
scanf("%d",&m); //若输入的m值过大;
printf("%d",m*m); //此处会发生溢出,因m*m超过int型最大值;
return 0;
}
注:
int : -2147483648-2147483647
unsigned int : 0-4294967295
long : -2147483648-2147483647 //本机long与int型相同,
unsigned long :0-4294967295 //均为4个字节
long long的最大值:-9223372036854775808---9223372036854775807
2.注意数据的比较方法,防止出现死循环。
例:
#include<stdio.h> //此程序为死循环。
int main(void)
{
double i;
for (i = 0; i != 10; i += 0.1)
printf("%.1f\n", i);
return 0;
}
注:
1.double型数据与int型数据不同,
nt型数据可以直接用==或者!=来判断,
double型数据只是近似值,大部分情况都不等,
所以会出现死循环。
2.改正方法
将for循环中判断条件改为fabs(i-10)<1e6,并加入math.h头文件;
(double fabs(double)可求实型绝对值,int abs(int)可求整型绝对值)。
3.计时方法。
例:
#include<stdio.h>
#include<time.h> //包含函数clock()
int main(void)
{
clock_t nTimeStart; //clock_t 记录时间的数据类型;
clock_t nTimeStop;
int n, sum = 0;
scanf_s("%d", &n);
nTimeStart = clock(); //nTimeStart 记录从进程开始到调用clock()函数所占用的CPU时间
for (int i = 1, term = 1; i <= n; i++, term *= i)
{
term %= 1000000;
sum += term;
sum %= 1000000;
}
printf("%d\n", sum);
nTimeStop = clock(); //nTimeStop 作用同nTimeStart
printf("Time used=%.2f\n", (double)(nTimeStop-nTimeStart) / CLOCKS_PER_SEC);
return 0; //记录最小的时间单位为毫秒
}