重點數據類型:int,char,float,double,long double


int類型

int類型的值必須是整數(正負整數、0),儲存一個int要占用一個 機器字長(目前用32位儲存一個int,未來處理器發展到64位后能儲存更大的整數)。

1.聲明int變量

方法:先寫上int,然后寫變量名,最 后加上一個分號。

若要聲明多個變量,可以單獨聲明每個變量,也可在int后面 列出多個變量名,變量名之間用逗號分隔。如:

int erns; 

int hogs, cows, goats;


變量如何獲得值:

1.賦值,如

cows = 112;

2.通過函數獲得值,如

scanf()

2.初始化變量

def:為變量賦一個初始值。

--->可以直接在聲明中完成。只需在變量名后面加上賦值運算符(=)和待賦 給變量的值即可。如:

int hogs = 21;
int cows = 32, goats = 14;
int dogs, cats = 94; /* 有效,但是這種格式很糟糕 */

該示例的最后一行,只初始化了cats,並未初始化dogs。這種寫法很 容易讓人誤認為dogs也被初始化為94,所以最好不要把初始化的變量和未初 始化的變量放在同一條聲明中。

==》簡而言之,聲明為變量創建和標記存儲空間,並為其指定初始值。

3.int類型常量

整型常量或整型字面量:如21,65,94等

C語言把不含小數點和指數的數作為整數;把大多數整型常量視為int類型,但是非常大的整數除外。

4.打印int值

--->可以使用printf()函數打印int類型的值。

%d稱為轉換說明,它指定了printf()應使用什么格式來顯示一個值。

格式化字符串(def:使用Format函數將指定的字符串轉換為想要的輸出格式)中的每個%d都與待打印變量列表中相應的int 值匹配。這個值可以是int類型的變量、int類型的常量或其他任何值為int類型的表達式。

//程序清單3.2 print1.c程序
/* print1.c - 演示printf()的一些特性 */
#include <stdio.h>
int main(void)
{
	int ten = 10;
	int two = 2;
	printf("Doing it right: ");
	printf("%d minus %d is %d\n", ten, 2, ten - two);
	printf("Doing it wrong: ");
	printf("%d minus %d is %d\n", ten); // 遺漏2個參數
	return 0;
	}

20220116135516

!!-- printf()函數的參數數目不定,所以使用printf()函數時,要確保轉換說 明的數量與待打印值的數量相等。

5.八進制和十六進制

==》因為8和16都是2的冪,而10卻不是。顯然,八進制 和十六進制記數系統在表達與計算機相關的值時很方便。

在C語言中,用特定的前綴表示使用哪種進制。0x或0X前綴表示十六進 制值,所以十進制數16表示成十六進制是0x10或0X10。與此類似,0前綴表 示八進制。例如,十進制數16表示成八進制是020。

使用不同的進制數是為了方便,不會影響數被儲存的方式。也 就是說,無論把數字寫成16、020或0x10,儲存該數的方式都相同,因為計算機內部都以二進制進行編碼。

6.顯示八進制和十六進制

在C程序中,既可以使用和顯示不同進制的數。不同的進制要使用不同 的轉換說明。以十進制顯示數字,使用%d;以八進制顯示數字,使用%o; 以十六進制顯示數字,使用%x。另外,要顯示各進制數的前綴0、0x和0X, 必須分別使用%#o、%#x、%#X。

//程序清單3.3 bases.c程序
/* bases.c--以十進制、八進制、十六進制打印十進制數100 */
#include <stdio.h>
int main(void)
{
	int x = 100;
	printf("dec = %d; octal = %o; hex = %x\n", x, x, x);
	printf("dec = %d; octal = %#o; hex = %#x\n", x, x, x);
	return 0;
}

20220116140006

該程序以3種不同記數系統顯示同一個值。printf()函數做了相應的轉 換。注意,如果要在八進制和十六進制值前顯示0和0x前綴,要分別在轉換 說明中加入#。

char類型

char類型用於儲存字符(如,字母或標點符號),但是從技術層面看, char是整數類型。因為char類型實際上儲存的是整數而不是字符。

計算機使用數字編碼來處理字符,即用特定的整數表示特定的字符。

如,在ASCII碼中,整數65代表大寫字母A。

1.聲明char類型變量

char類型變量的聲明方式與其他類型變量的聲明方式相同。如:

char response;
char itable, latan;

2.字符常量和初始化

(ASCII 碼)

char grade = 'A';

在C語言中,用單引號括起來的單個字符被稱為字符常量。編譯器一發現'A',就會將其轉換成相應的代碼值。單引號必不可少。

char broiled; /* 聲明一個char類型的變量 */
broiled = 'T'; /* 為其賦值,正確 */
broiled = T; /* 錯誤!此時T是一個變量 */
broiled = "T"; /* 錯誤!此時"T"是一個字符串 */

!!—C語言將字符常量視為int類型而非char類型。

3.非打印字符

單引號只適用於字符、數字和標點符號。瀏覽ASCII表會發現,有些 ASCII字符打印不出來。例如,一些代表行為的字符(如,退格、換行、終 端響鈴或蜂鳴)。C語言提供了3種方法表示這些字符。

1.使用ASCII碼。例如,蜂鳴字符的ASCII值是 7,因此可以這樣寫:

 char beep = 7;

2.使用特殊的符號序列表示一些特殊的字符。這些符號序列叫作轉義序列。

​ 如下表:轉義序列及含義

20220116141615

\a:警報字符

\b、\f、\n、\r、\t和\v:常用的輸出設備控制字符

\、'、":用於打印\、'、"字符

!!—使用ASCII碼時,注意數字和數字字符的區別。例如,字符4對應的 ASCII碼是52。'4'表示字符4,而不是數值4。

4.打印字符

printf()函數用%c指明待打印的字符。

程序清單3.5演示了打印char類型變量的兩種方式。

//程序清單3.5 charcode.c程序
/* charcode.c-顯示字符的代碼編號 */
#include <stdio.h>
int main(void)
{
	char ch;
	printf("Please enter a character.\n");
	scanf("%c", &ch); /* 用戶輸入字符 */
	printf("The code for %c is %d.\n", ch, ch);
	return 0;
}

20220116142249

5.有符號還是無符號

在關鍵字char前面使用signed或unsigned。無論編譯器默認char是什么類型,signed char表示有符號類型,而 unsigned char表示無符號類型。這在用char類型處理小整數時很有用。如果只用char處理字符,那么char前面無需使用任何修飾符。

float、double和long double

==》C語言中的浮點類型有float、double和long double 類型。它們與FORTRAN和Pascal中的real類型一致。

浮點數的表示類似於科學記數法:

20220117165830

第1列是一般記數法;第2列是科學記數法;第3列是指數記數法(或稱為e記數法)

C標准規定:

float類型必須至少能表示6位有效數字,且取值范圍至少是 10-37~10+37;C語言提供的另一種浮點類型是double(意為雙精度)

double類型和float類型的最小取值范圍相同,但至少必須能表示10位有效數字

第3種浮點類型是long double,以滿足比double類型更高的精度要求。不過,C只保證long double類型至少與double類型的精度相同。

1.聲明浮點型變量

浮點型變量的聲明和初始化方式與整型變量相同。如:

float noah, jonah;
double trouble;
float planck = 6.63e-34;
long double gnp;

2.浮點型常量

浮點型常量的基本形式:有符號的數字(包括小數點),后面緊跟e或E,最后是一個有符號數表示10的指數。如:

-1.56E+12

2.87e-3

正號可以省略。可以沒有小數點(如,2E5)或指數部分(如, 19.28),但是不能同時省略兩者。

可以省略小數部分(如,3.E16)或整數 部分(如,.45E-6),但是不能同時省略兩者。

--->更多有效浮點型常量栗子:

3.14159

.2

4e16

.8E-5

!!:不要在浮點型常量中間加空格。

3.打印浮點值

一些特性:

printf()函數使用%f轉換說明打印十進制記數法的float和double類型浮點數,用%e打印指數記數法的浮點數。

打印long double類型要使用%Lf、%Le或%La 轉換說明。

給那些未在函數原型中顯式說明參數類型的函數(如,printf())傳遞參數時,C編譯器會把float類型的值自動轉換成double類型。

//程序清單3.7 showf_pt.c程序
/* showf_pt.c -- 以兩種方式顯示float類型的值 */
#include <stdio.h>
int main(void)
{
    float aboat = 32000.0;
    double abet = 2.14e9;
    long double dip = 5.32e-5;
    printf("%f can be written %e\n", aboat, aboat);
    
    // 下一行要求編譯器支持C99或其中的相關特性
    printf("And it's %a in hexadecimal, powers of 2 notation\n",
    aboat);
    printf("%f can be written %e\n", abet, abet);
    printf("%Lf can be written %Le\n", dip, dip);
    return 0;
}

20220117171713

4.浮點值的上溢和下溢

計算導致數字過大,超過當前類型能表達的范圍時,就會發生上溢。如:

設3.4E38為系統最大float類型值:

float toobig = 3.4E38 * 100.0f;
printf("%e\n", toobig);

以十進制為例,把一個有4位有效數字的數(如,0.1234E-10)除以10,

得到:0.0123E-10。

雖然得到了結果,但是在計算過程中卻損失了原末尾有效位上的數字。這種情況叫 作下溢。

特殊的浮點值:NaN(not a number的縮寫)

如:給asin() 函數傳遞一個值,該函數將返回一個角度,該角度的正弦就是傳入函數的值。

但是正弦值不能大於1,因此,如果傳入的參數大於1,該函數的行為是 未定義的。在這種情況下,該函數將返回NaN值,printf()函數可將其顯示為 nan、NaN或其他類似的內容。

浮點數舍入錯誤

/* floaterr.c--演示舍入錯誤 */
#include <stdio.h>
int main(void)
{
    float a,b;
    b = 2.0e20 + 1.0;
    a = b - 2.0e20;
    printf("%f \n", a);
    return 0;
}

20220117172606

原因:計算機缺少足夠的小數位來完成正確的運算。

3.11編程練習

  1. 編寫一個程序,發出一聲警報,然后打印下面的文本:

Startled by the sudden sound, Sally shouted,

"By the Great Pumpkin, what was that!"

#include <stdio.h>

int main(void)
{
    printf("\a");
    printf("Startled by the sudden sound, ");
    printf("Sally shouted,\n");
    printf("\"By the Great Pumpkin, what was that!\"\n");

    return 0;
}

20220117173011

  1. 1個水分子的質量約為3.0×10 −23克。1誇脫水大約是950克。編寫一個程序,提示用戶輸入水的誇脫數,並顯示水分子的數量。
#include <stdio.h>
#define MASS_PER_MOLE 3.0e-23
#define MASS_PER_QUART 950

int main(void)
{
    double quart, molecules;

    printf("Please enter a quart for water:");
    scanf("%lf", &quart);
    //1誇脫水大約是950克;
    //1個水分子質量約為3.0 * 10^(-23)克;
    molecules = quart * MASS_PER_QUART / MASS_PER_MOLE;
    printf("%g quart water includes %e water molecules.\n", quart, molecules);

    return 0;
}

20220117173153


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM