C Primer Plus 第3章 數據和C

3.1示例程序程序員

程序清單3.1 rhodium.c程序函數

------編碼

/*rhodium.c用金屬銠衡量您的體重*/
#include <stdio.h>
int main (void)
{
folat weight,value;//folat類型能夠處理帶有小數點的數字

printf("Are you worth you weight in rhodium? \n");
printf("Let's check it out. \n");
printf("Please enter your weight in pounds: ");
scanf("%f",&weight);//%f指示scanf從鍵盤讀取一個浮點值,&weight指定將輸入值賦給名爲weight的變量中;
value=770*weight*14.5833;
printf("Your weight in rhodium is worth $%.2f. \n",value);//%f使用.2修飾詞使浮點值顯示到小數點後兩位;
printf("You are easily worth that ! If rhodium prices drop,\n");
printf("eat more to maintain your value.\n");
return 0;
}

3.2 變量與常量數據指針

有些數據能夠在程序使用以前預先設定並在整個運行過程當中沒有變化,這稱爲常量;code

另外的數據在程序運行過程當中可能變化或被賦值,這稱爲變量。字符串

變量與常量的區別在於,變量的值能夠在程序執行中變化與指定,而常量則不能夠。原型

3.3 數據類型關鍵字編譯器

C的數據關鍵字數學

原來的K&R關鍵字 C90添加2個關鍵字 C99添加3個關鍵字
int(基本的整數類型) signed(提供基本類型的變種) _Bool(布爾值)
long(提供基本類型的變種) void _Complex(複數)
short(提供基本類型的變種)   _Imaginary(虛數)
unsigned(提供基本類型的變種)    
char(表示字母及其餘字符或者小的整數)    
float(帶有小數點的數)    
double(帶有小數點的數)    

這些類型能夠按其在計算機中的存儲方式劃分爲兩個系列,即整數(integer)類型和浮點(floating-point)類型。it

3.3.1 整數類型與浮點數類型

對於計算機而言,區別在於它們的存儲方式。

3.3.2 整數

整數就是沒有小數部分的數。

整數以二進制數字存儲。

3.3.3 浮點數

浮點數差很少能夠和數學中的實數概念相應。實數包含了整數之間的那些數。

加了小數點的數是浮點型值,因此7是整數,而7.00是浮點型。

浮點數與整數的存儲方法不一樣,浮點數表示法將一個數分爲小數部分和指數部分並分別存儲。

整數和浮點數的區別:

*整數沒有小數部分,而浮點數能夠有小數部分;

*浮點數能夠表示比整數範圍大的多的數;

*對於一些大的算術運算,使用浮點數會損失更多的精度。

*因在任何區間內都存在無數個實數,因此計算機浮點數不能表示區域內全部的值。浮點數每每只是實際值的近似的值。

*浮點運算一般比整數運算慢。

3.4 數據類型

3.4.1 int 類型

C提供多種整數類型。

各類整數類型的區別在於所提供數值的範圍,以及數值是否能夠取負數。

int是有符號整數,即INT類型的值必須是整數,能夠是正的、負的或者是0,其取值範圍依賴於計算機系統。

通常的,int類型存儲在計算機的一個字中。系統經過使用一個指示正負符號的位來表示有符號整數。

1、聲明int變量

int關鍵字用於聲明基本的整數變量。

能夠直接賦值,也能夠經過scanf()函數爲變動賦值。

2、初始化變量

初始化(initialize)變量就是爲變量賦一個初始值。

簡言之,聲明語句爲變量建立、標定存儲空間併爲其指定初始值。

3、int類型常量

C把不含有小數點和指數的數做爲整數。把大多數整數看做是Int類型。

4、打印int類型

%d說明符能夠指示在一行中的什麼位置打印整數。

記住,使用printf()函數時,格式說明符的數目和要顯示的值的數目必定要相同。

5、八進制和十六進制

在C中,由專門的前綴代表是哪種進制。ox或OX表示使用十六進制值,0表示使用八進制。

6、顯示八進制和十六進制數

八進制說明符:%0;十六進制說明符:%x;

若是想顯示C語言前綴,可使用說明符%#0、%#x、%#X,要顯示0和ox前綴,必須在說明符中加入#符號。

3.4.3 使用字符:char類型

char類型用於存儲字母和標點符號之類的字符。可是技術實現上char倒是整數類型。

這是由於char類型實際存儲的是數字而不是字符。爲了處理字符,計算機使用一種數字編碼,用特定的整數表示特定的字符。

c把一個字節(byte)定義爲char類型使用的位(bit)數。

1、聲明char類型變量

2、字符常量及其初始化

char broiled;

broiled='T';

若是不使用單引號,編譯器會將T視爲一個變動名;若是使用雙引號,編譯器將其初爲一個字符串。

C將字符常量視爲int類型而非char類型。

3、非打印字符

轉義序列

給一個字符變量進行賦值時,轉義序列必須用單引號括起來。

若是想用一個數值的八進制ASCII碼錶明它,能夠在編碼值前加一個反斜槓(\)並用單引號引發來。

beep='\007'

‘07’、‘7’、這種寫法會使數值被解釋爲八進制。

關於轉義序列的三個疑問

一、不管普通字符仍是轉義序列,若是做爲雙引號字符集合的一部分,則無需單引號。不在轉義序列中的數字將像普通字符那樣被打印出來。

二、若是要在某個轉義序列和其對應的ASCII碼之間作出選擇,則應當使用轉義序列。

三、當須要使用數值編碼時,爲何使用'\032'而不是032?首先,'\032'能更清晰的表達程序員表示一個字符編碼的意圖;其次'\032'這樣的轉義序列能夠嵌入到C字符串中,好比「Hello!\007\n」中就嵌入了'\007'.

4、打印字符

printf()使用%c說明符打印一個字符。

5、有符號仍是無符號

根據C90標準,C容許在關鍵字char前使用signed和unsigned。這樣使用字符類型處理小整數十分有用。

若是處理字符,則只須使用不帶修飾詞的標準char類型。

3.4.4 _Bool類型

_Bool類型由C99引入,用於表示布爾值。由於C用1表示true,用0表示false,因此_Bool類型實際上也是整數類型,只是原則上它僅須要1位來存儲。

3.4.5 可移植的類型:inttypes.h

3.4.6 float、double、long double

C語言中的浮點數包括float\double\long double類型。

浮點數表示相似於科學記數法。

C標準規定,folat類型必須至少能表示6位有效數字,取值範圍至少10的-37次方到10的37次方。

一般,系統使用32位存儲一個浮點數。其中8位表示指數及其符號,24位用於表示非指數(稱爲尾數或有效數字)部分及其符號。

C還提供一種稱爲double(意爲雙精度)的浮點類型。

double類型和float類型具備相同的最小取值範圍,但它必須最少能表示10位有效數字。

通常的,double使用64位而不是32位長度。

C提供第三種浮點類型long double,以知足比double類型更高的精度。不過C只保證long double類型至少同double類型同樣的精確。

1、聲明浮點變量

浮點變量的聲明與初始化方法同整形變量相同。

2、浮點常量

一個浮點常量最基本的形式是:包含小數點的一個帶符號的數字序列,接着是字母e或E,而後是表明10的指數的一個有符號值。

-1.56E+12

2.87e-3

能夠省略正號。能夠沒有小數點(2E5)或指數部分(19.28),但不能同時沒有二者。

能夠省略純小數部分(3.E16)或整數部分(.45E-6),但二者不能同時省略。

默認狀況下,編譯器將浮點常量看成double類型。

C使您能夠經過f或F後綴使編譯器把浮點常量看成folat類型,好比2.3f或9.11E9F。l或L後綴使一個數字成爲long double類型,好比54.3l或4.32e4L,建議使用L。

沒有後綴的浮點常量爲double類型。

C99爲表示新浮點常量添加了種十六進制格式。這種格式使用前綴ox或OX,接着是十六進制數字,而後是p或P(而不是E或e),最後是2的指數。

oxa.1fp10

3、打印浮點值

printf()函數使用%f格式說明符打印十進制記數法的float或double數字,用%e打印指數記數法的數字。

若是系統支持C99的十六進制格式浮點數,您可使用a或A代替e或E。

打印long double類型,須要%Lf、%Le、%La說明符。

注意,float和double類型的輸出都使用%f,%e、%a說明符。這是因爲當它們向那些未在原型中顯示說明參數類型的函數(如printf())傳遞參數時,C自動將float類型的參數轉換爲double類型。

4、浮點值的上溢和下溢

當計算結果是一個大得不能表達的數時,會發生上溢。

以十進制爲例,把一個包含4位有效數字的數0.1234E-10除以10,將獲得結果0.0123E-10,可是損失了一位有效數字,此過程稱爲下溢。

C將損失了類型精度的浮點值稱爲低於正常的。

3.4.7 複數和虛數

有3種複數類型:float_Complex  double_Complex 和 long double_Complex;

有3種虛數類型:float_Imaginary  double_Imaginary 和 long double_Imaginary;

若是您 包含了頭文件complex.h,就能夠用complex代替_Complex,用Imaginary代替_Imiginary.

3.4.8 其餘數據類型

C從基本類型中衍生出其餘數據類型,包括數據、指針、結構和聯合。


3.4.9類型大小

C的內置運算符sizeof以字節爲單位給出類型的大小。

3.5 使用數據類型

3.6參數和易犯的錯誤

注意,使用%d顯示float值不會把該float值轉換爲近似的int值,而是顯示垃圾值。與之相似,使用%f顯示int值也不會把該int值轉換爲浮點值。並且,參數數目的不足和類型不匹配所形成的結果也將隨平臺不一樣而不一樣。

相關文章
相關標籤/搜索