知識碎片之C語言

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






發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章