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; //記錄最小的時間單位爲毫秒
}