您的位置:首页 > 编程语言 > C语言/C++

知识碎片之C语言

2015-02-20 20:15 106 查看

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; //记录最小的时间单位为毫秒

}



内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: