學C第4天上(溢出、隨機數)

來源:互聯網
上載者:User

標籤:

一、溢出 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 + 1, 0);//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()%n2.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天上(溢出、隨機數)

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.