C Primer Plus(第六版)第三章 数据和C
筆記記錄
1、float 類型可以儲存帶小數(shù)的數(shù)字。
2、printf()中使用%f來處理浮點(diǎn)值。%.2f中的.2用于精確控制輸出,指定輸出的浮點(diǎn)數(shù)只顯示小數(shù)點(diǎn)后面兩位。
3、scanf()函數(shù)用于讀取鍵盤的輸入。
4、有些數(shù)據(jù)類型在程序使用之前已經(jīng)預(yù)先設(shè)定好了,在整個程序的運(yùn)行過程中沒有變化,這些稱為常量(constant)。其他數(shù)據(jù)類型在程序運(yùn)行期間可能會改變或被賦值,這些稱為變量(variable)。
5、C語言數(shù)據(jù)類型關(guān)鍵字: int 、short 、long 、unsigned 、char 、float 、double 、signed、void、_Bool、_Complex、_Imaginary。用int關(guān)鍵字來表示基本的整數(shù)類型。后3個關(guān)鍵字
(long、short和unsigned)和C90新增的signed用于提供基本整數(shù)類型的變式,例如unsigned short int和long long int。char關(guān)鍵字用于指定字母和其他字符(如,#、$、%和*)。另外,char類型也可以表示較小的整數(shù)。float、double和long double表示帶小數(shù)點(diǎn)的數(shù)。_Bool類型表示布
爾值(true或false),_complex和_Imaginary分別表示復(fù)數(shù)和虛數(shù)。
7、最小的存儲單元是位(bit),可以儲存0或1(或者說,位用于設(shè)置“開”或“關(guān)”)。雖然1位儲存的信息有限,但是計(jì)算機(jī)中位的數(shù)量十分龐大。位是計(jì)算機(jī)內(nèi)存的基本構(gòu)建塊。字節(jié)(byte)是常用的計(jì)算機(jī)存儲單位。對于幾乎所有的機(jī)器,1字節(jié)均為8位。即1字節(jié) = 8 bit。
8、浮點(diǎn)數(shù)與數(shù)學(xué)中實(shí)數(shù)的概念差不多。2.75、3.16E7、7.00 和 2e-8都是浮點(diǎn)數(shù)。注意,在一個值后面加上一個小數(shù)點(diǎn),該值就成為一個浮點(diǎn)值。所以,7是整數(shù),7.00是浮點(diǎn)數(shù)。顯然,書寫浮點(diǎn)數(shù)有多種形式。稍后將詳細(xì)介紹e 記數(shù)法, 這里先做簡要介紹: 3.16E7 表示3.16×107(3.16 乘以10 的7次方)。其中, 107=10000000,7被稱為10的指數(shù)。
9、整數(shù)與浮點(diǎn)數(shù)的區(qū)別:①整數(shù)沒有小數(shù)部分,浮點(diǎn)數(shù)有小數(shù)部分。
???????????????????????????????????????? ②浮點(diǎn)數(shù)可以表示的范圍比整數(shù)大。
10、不同的進(jìn)制要使用不同的轉(zhuǎn)換說明。以十進(jìn)制顯示數(shù)字,使用%d;以八進(jìn)制顯示數(shù)字,使用%o;以十六進(jìn)制顯示數(shù)字,使用%x。另外,要顯示各進(jìn)制數(shù)的前綴0、0x和0X,必須分別使用%#o、%#x、%#X。下面舉個例子,
#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; } //編譯并運(yùn)行該程序,輸出如下: dec = 100; octal = 144; hex = 64 dec = 100; octal = 0144; hex = 0x64注意,如果要在八進(jìn)制和十六進(jìn)制值前顯示0和0x前綴,要分別在轉(zhuǎn)換說明中加入#。
11、打印unsigned int類型的值,使用%u轉(zhuǎn)換說明;打印long類型的值,使用%ld轉(zhuǎn)換說明。如果系統(tǒng)中int和long的大小相同,使用%d就行。在x和o前面可以使用l前綴,%lx表示以十六進(jìn)制格式打印long類型整數(shù),%lo表示以八進(jìn)制格式打印long類型整數(shù)。注意,雖然C允許使用大寫或小寫的常量后綴,但是在轉(zhuǎn)換說明中只能用小寫。
12、char broiled; /* 聲明一個char類型的變量 */,broiled = 'T'; /* 為其賦值,正確 */用單引號括起來的單個字符被稱為字符常量(character constant)。broiled = T; /* 錯誤!此時T是一個變量 */如果省略單引號,編譯器認(rèn)為T是一個變量名,broiled = "T"; /* 錯誤!此時"T"是一個字符串 */如果把
T用雙引號括起來,編譯器則認(rèn)為"T"是一個字符串。
關(guān)鍵字:
基本數(shù)據(jù)類型由11個關(guān)鍵字組成:int、long、short、unsigned、
char、float、double、signed、_Bool、_Complex和_Imaginary。
有符號整型:
有符號整型可用于表示正整數(shù)和負(fù)整數(shù)。
int ——系統(tǒng)給定的基本整數(shù)類型。C語言規(guī)定int類型不小于16位。
short或short int ——最大的short類型整數(shù)小于或等于最大的int類型
整數(shù)。C語言規(guī)定short類型至少占16位。
long或long int ——該類型可表示的整數(shù)大于或等于最大的int類型
整數(shù)。C語言規(guī)定long類型至少占32位。
long long或long long int ——該類型可表示的整數(shù)大于或等于最大
的long類型整數(shù)。Long long類型至少占64位。
一般而言,long類型占用的內(nèi)存比short類型大,int類型的寬度要么
和long類型相同,要么和short類型相同。例如,舊DOS系統(tǒng)的PC提供
16位的short和int,以及32位的long;Windows 95系統(tǒng)提供16位的short以
及32位的int和long。
無符號整型:
無符號整型只能用于表示零和正整數(shù),因此無符號整型可表示的
正整數(shù)比有符號整型的大。在整型類型前加上關(guān)鍵字unsigned表明該類
型是無符號整型:unsignedint、unsigned long、unsigned short。單獨(dú)的
unsigned相當(dāng)于unsignedint。
字符類型:
可打印出來的符號(如A、&和+)都是字符。根據(jù)定義,char類型
表示一個字符要占用1字節(jié)內(nèi)存。出于歷史原因,1字節(jié)通常是8位,但
是如果要表示基本字符集,也可以是16位或更大。
char ——字符類型的關(guān)鍵字。有些編譯器使用有符號的char,而有
些則使用無符號的char。在需要時,可在char前面加上關(guān)鍵字signed或
unsigned來指明具體使用哪一種類型。
布爾類型:
布爾值表示true和false。C語言用1表示true,0表示false。
_Bool ——布爾類型的關(guān)鍵字。布爾類型是無符號 int類型,所占用的空間只要能儲存0或1。
實(shí)浮點(diǎn)類型:
實(shí)浮點(diǎn)類型可表示正浮點(diǎn)數(shù)和負(fù)浮點(diǎn)數(shù)。
float ——系統(tǒng)的基本浮點(diǎn)類型,可精確表示至少6位有效數(shù)字。
double ——儲存浮點(diǎn)數(shù)的范圍(可能)更大,能表示比 float 類型
更多的有效數(shù)字(至少 10位,通常會更多)和更大的指數(shù)。
long long ——儲存浮點(diǎn)數(shù)的范圍(可能)比double更大,能表示比
double更多的有效數(shù)字和更大的指數(shù)。
復(fù)數(shù)和虛數(shù)浮點(diǎn)數(shù):
虛數(shù)類型是可選的類型。復(fù)數(shù)的實(shí)部和虛部類型都基于實(shí)浮點(diǎn)類型來構(gòu)成:
float _Complex
double _Complex
long double _Complex
float _Imaginary
double _Imaginary
long long _Imaginary
?13、如何知道當(dāng)前系統(tǒng)的指定類型的大小是多少?運(yùn)行下面程序,會列出當(dāng)前系統(tǒng)的各類型的大小。
//* typesize.c -- 打印類型大小 */ #include <stdio.h> int main(void) {/* C99為類型大小提供%zd轉(zhuǎn)換說明 */printf("Type int has a size of %zd bytes.\n",sizeof(int));printf("Type char has a size of %zd bytes.\n",sizeof(char));printf("Type long has a size of %zd bytes.\n",sizeof(long));printf("Type long long has a size of %zd bytes.\n",sizeof(long long));printf("Type double has a size of %zd bytes.\n",sizeof(double));printf("Type long double has a size of %zd bytes.\n",sizeof(long double));return 0; } //sizeof是C語言的內(nèi)置運(yùn)算符,以字節(jié)為單位給出指定類型的大小。C99和C11提供%zd轉(zhuǎn)換說明匹配sizeof的返//回類型[2]。一些不支持C99和C11的編譯器可用%u或%lu代替%zd。 //該程序的輸出如下: Type int has a size of 4 bytes. Type char has a size of 1 bytes. Type long has a size of 8 bytes. Type long long has a size of 8 bytes. Type double has a size of 8 bytes. Type long double has a size of 16 bytes.14、C 有多種的數(shù)據(jù)類型。基本數(shù)據(jù)類型分為兩大類:整數(shù)類型和浮點(diǎn)數(shù)類型。
最后,第三章的筆記記錄就到這里了,下面進(jìn)行編程練習(xí)的編寫。
/*第一題*/ #include <stdio.h> int main(void) {int i = 2147483647;unsigned int j = 4294967295;printf("%d %d %d\n", i, i+1, i+2);printf("%u %u %u\n", j, j+1, j+2);float float_max = 3.40e38;float float_min = 3.40e-38;printf("%f %f\n",float_max,float_max+1);printf("%f %f\n",float_min,float_min-1);return 0; }//輸出的結(jié)果是: 2147483647 -2147483648 -2147483647 4294967295 0 1/*主要的區(qū)別是,在超過最大值時,unsigned int 類型的變量 j 從 0開始;而int類型的 變量i則從?2147483648開始。float的輸出結(jié)果太長了這里就不放出來了,有興趣的自己去復(fù)制運(yùn)行一下看結(jié)果。 /*第二題*/ #include <stdio.h> int main(void) {char ASCII;printf("Please enter a character.\n");scanf("%d", &ASCII); /* 用戶輸入字符 */printf("The code for %d is %c.\n", ASCII, ASCII);return 0; } //運(yùn)行該程序后,輸出示例如下: Please enter a character. 67 The code for 67 is C. /*第三題*/ #include<stdio.h> int main(void) {printf("\aStartled by the sudden sound, Sally shouted,\n");printf("\"By the Great Pumpkin, what was that!\"");return 0; } /*第四題*/ #include<stdio.h> int main() {float n;printf("Enter a floating-point values: \n");scanf("%f",&n);printf("fixed-point notation: %f\n",n);printf("exponential notation: %e\n",n);printf("p notation: %#a",n);return 0; } /*輸出結(jié)果如下*/ /* [user@CentOS84 test3.4]$ ./test3.4 */ Enter a floating-point values: 64.25 fixed-point notation: 64.250000 exponential notation: 6.425000e+01 p notation: 0x1.01p+6 /*printf()函數(shù)使用%f轉(zhuǎn)換說明打印十進(jìn)制記數(shù)法的float和double類型 浮點(diǎn)數(shù),用%e打印指數(shù)記數(shù)法的浮點(diǎn)數(shù)。十六進(jìn)制P計(jì)數(shù)法float類型用%#a打印。 /*第五題*/ #include<stdio.h> int main() {int age;double times;printf("please input your age: \n");scanf("%d",&age);times = 3.156e7 * age;printf("fixed-point notation: %lf\n",times);printf("exponential notation: %e\n",times);return 0; }/* 輸出結(jié)果[user@CentOS84 test3.4]$ ./test3.4 */ please input your age: 23 fixed-point notation: 725880000.000000 exponential notation: 7.258800e+08 //讓程序分別輸出小數(shù)和指數(shù)形式 /*第六題*/ #include <stdio.h> int main() {float a = 3.0e-23; //可寫可不寫float b = 950; //可寫可不寫float kuatuo;float water;printf("Please enter the quarts of water:");scanf("\n%f", &kuatuo);water = b * kuatuo / a;printf("The number of water molecules is : %e。\n", water);return 0; }*/終端命令 [user@CentOS84 test3.6]$ ./test3.6*/ //下面是輸出結(jié)果 Please enter the quarts of water:3 The number of water molecules is : 9.499999e+25。 /*第七題*/ #include <stdio.h> int main() {int inch;float cm;printf("Please enter your height (inch):");scanf("\n%d", &inch);cm = inch * 2.54;printf("Your height is : %f cm!\n", cm);return 0; } /*下面是終端三個輸出結(jié)果*/ //[user@CentOS84 test3.7]$ ./test3.7 Please enter your height (inch):160 Your height is : 406.399994 cm!//[user@CentOS84 test3.7]$ ./test3.7 Please enter your height (inch):60 Your height is : 152.399994 cm!//[user@CentOS84 test3.7]$ ./test3.7 Please enter your height (inch):95 Your height is : 241.300003 cm! /*第八題*/ #include <stdio.h> int main() {float cup, pint, ounce, spoon, teaspoon;printf("Please enter your cup count: ");scanf("\n%f", &cup);printf("%f cup is equal to the %f pint!\n", cup, cup/2);printf("%f cup is equal to the %f ounce!\n", cup, cup*8);printf("%f cup is equal to the %f spoon!\n", cup, cup*16);printf("%f cup is equal to the %f teaspoon!\n", cup, cup*48);return 0; }/*輸出結(jié)果*/ Please enter your cup number: 2 2.000000 cup is equal to the 1.000000 pint! 2.000000 cup is equal to the 16.000000 ounce! 2.000000 cup is equal to the 32.000000 spoon! 2.000000 cup is equal to the 96.000000 teaspoon!//浮點(diǎn)類型比整數(shù)類型更加合適,如果是3杯的時候用整數(shù)類型的話就會舍掉小數(shù)了,這顯然不符合等量交換的意義。好了,第三章也完結(jié)了,說明一下,本系列的代碼都是經(jīng)過編譯運(yùn)行通過后才放出來給大家看的,所以請放心,在Linux操作系統(tǒng)上安裝的Vscode下編寫運(yùn)行的!請各位發(fā)現(xiàn)有問題的地方請留言,煩請各位多多指正!
總結(jié)
以上是生活随笔為你收集整理的C Primer Plus(第六版)第三章 数据和C的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 程序员成为“备胎”的5年,我一直在等..
- 下一篇: 微信小程序开发者工具的使用