码迷,mamicode.com
首页 > 其他好文 > 详细

学C第4天上(溢出、随机数)

时间:2015-03-13 00:02:59      阅读:235      评论:0      收藏:0      [点我收藏+]

标签:

一、溢出

1.short类型

数据使用必须在范围内,否则无符号产生溢出,有符号出错。

 1      print("short极大值%d","short极小值",SHRT_MAX,SHRT_MIN);//32767,-32767
 2      print("unsigned short极大值%d","unsigned short极小值",USHRT_MAX,0);//65535,0
 3 
 4      unsigned short num1=65535+2;
 5      printf("%d",sizeof(num));//2个字节
 6      print("%d",num1);//num1=1,溢出
 7       
 8      short num2=32767+1;
 9      printf("%d",);//num2=-32768,出错 
 

 

 2.int类型

 1).32位平台,%d能表示的范围就是int的范围,根据平台的不同,int的表示范围也不同,32位是4byte.

 

1     printf("%d,%d", INT_MAX, INT_MIN);//2147483647,-2147483648
2     //前两个数越界,后一个正常
3     printf("\n%d,%d,%u", INT_MAX + 1, INT_MIN - 1, INT_MAX + 1);//-2147483648,2147483647,2147483648
4     //UINT_MAX超过了%d所表示的范围
5     printf("\n%d,%d", UINT_MAX, 0);//-1,0  
6     //正常情况
7     printf("\n%u,%d", UINT_MAX, 0);//4294967295,0
8     //UINT_MAX超过了%u所表示的范围
9     printf("\n%u,%d", UINT_MAX + 10);//0,0

 3.float类型

1).为什么int和float都是分配了4个字节,而两者的取值范围却不一样
 因为int采用的是普通计数法,而float是科学计数法,故两者存储的格式不一样,float型的二进制里面有一部分表示的是指数。为何要采取指数,因为float型中两个数之间的数的个数是无穷无尽的,所以不能用普通计数法一一对应。

 

2).所占字节数

1     printf("%d",sizeof(1.0));//8
2     printf("%d"sizeof(1.0f));//4
3     printf("%d"sizeof(1u));//4(无符号整形)

 3).示例.计算三角形的周长与面积

 1 #define _CRT_SECURE_NO_WARNINGS
 2 #include<stdio.h>
 3 #include<math.h>
 4 void main()
 5 {
 6     float a, b, c,s,p;
 7     scanf("%f%f%f",&a,&b,&c);
 8     p= (a + b + c) / 2;
 9     s = sqrt(p*(p-a)*(p-b)*(p-c));
10     printf("%f,%f", p, s);
11     system("pause");//不用getchar()是因为回车也被当成一个字符
12 }

4.使用printf函数注意事项

 

1).printf的本质:不管什么类型,都按照自己的方式转换为字符串

 

1     int num1=1;
2     printf("%d",num1);//1
3     printf("%f",num1);//0.000000

 2).使用printf打印的时候必须要类型匹配,否则出错

   
1 printf("%d,%u",-1,-1);//-1,4294967295

2 printf("%x",-10);//fffffff6,无符号十六进制

3 printf("%o",-10);//37777777766,无符号八进制

 

 

二、随机数

1.rand()函数

1).rand函数是真正的随机数生成器,而srand()会设置供rand()使用的随机数种子。如果你在第一次调用rand()之前没有调用srand(),那么系统会为你自动调用srand()。而使用同种子相同的数调用 rand()会导致相同的随机数序列被生成。
2).返回一个[0,RAND_MAX]间的随机整数。
 如果程序被调用一次,则每次调用时产生的随机数相同。但是如果循环调用,产生的随机数不一样。

 

1 int num = rand();
2 printf("%d\n", num);

 每次产生的随机数都是相同的(41).

 

1     for (size_t i = 0; i < 10; i++)
2     {
3         int num = rand();
4         printf("%d\n", num);
5     }

 

技术分享

2).生成0~n的随机数 rand()%n

2.srand()函数

1).void srand(unsigned seed)参数seed是rand()的种子,用来初始化rand()的起始值。系统在调用rand()之前都会自动调用srand(),如果用户在rand()之前曾调用过srand()给参数seed指定了一个值,那么 rand()就会将seed的值作为产生伪随机数的初始值;而如果用户在rand()前没有调用过srand(),那么系统默认将1作为伪随机数的初始 值。如果给了一个定值,那么每次rand()产生的随机数序列都是一样的。

 示例:
1     time_t time1;//定义时间类型的变量
2     srand((unsigned int)time(&time1));//随机数发生器,根据时间,time(&time1)函数获取时间赋值给time1
3     int num=rand();
4     printf("%d",num);

 

 2).生成100~200的随机数方法: rand()%100+100

 

 

 


 

学C第4天上(溢出、随机数)

标签:

原文地址:http://www.cnblogs.com/ginb/p/4332365.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!