知识碎片之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;                             //记录最小的时间单位为毫秒
}






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