知识碎片之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; //记录最小的时间单位为毫秒
}
相关文章推荐
- 【碎片知识(2)· C语言】链表的建立、输出、特定点的删除和插入以及malloc函数的应用
- 【碎片知识(3)· C语言】malloc函数动态分配内存空间在链表中的应用
- 知识碎片之网址保存
- c语言学习之基础知识点介绍(一):输出语句和变量简单介绍
- 文件碎片/磁盘碎片的一些知识
- c语言学习之基础知识点介绍(十一):字符串的介绍、使用
- 架构师知识碎片整理
- C语言相关知识集锦
- c语言学习之基础知识点介绍(十八):几个修饰关键字和内存分区
- C语言的问题,关于temp参数的一些知识
- 【C语言】【指针相关知识小结】
- IOS开发基础知识--碎片28
- 面试:C语言C++小知识总结(1)
- 转载大神IOS开发系列【3】--C语言之基础知识
- C语言复习之结构体基础知识
- javascript知识碎片
- C语言知识
- 浅谈c语言的知识体系
- 重温C语言----(一)储备性知识
- C语言的一些知识