C Primer Plus(第六版)第三章 数据和C
筆記記錄
1、float 類型可以儲存帶小數的數字。
2、printf()中使用%f來處理浮點值。%.2f中的.2用于精確控制輸出,指定輸出的浮點數只顯示小數點后面兩位。
3、scanf()函數用于讀取鍵盤的輸入。
4、有些數據類型在程序使用之前已經預先設定好了,在整個程序的運行過程中沒有變化,這些稱為常量(constant)。其他數據類型在程序運行期間可能會改變或被賦值,這些稱為變量(variable)。
5、C語言數據類型關鍵字: int 、short 、long 、unsigned 、char 、float 、double 、signed、void、_Bool、_Complex、_Imaginary。用int關鍵字來表示基本的整數類型。后3個關鍵字
(long、short和unsigned)和C90新增的signed用于提供基本整數類型的變式,例如unsigned short int和long long int。char關鍵字用于指定字母和其他字符(如,#、$、%和*)。另外,char類型也可以表示較小的整數。float、double和long double表示帶小數點的數。_Bool類型表示布
爾值(true或false),_complex和_Imaginary分別表示復數和虛數。
7、最小的存儲單元是位(bit),可以儲存0或1(或者說,位用于設置“開”或“關”)。雖然1位儲存的信息有限,但是計算機中位的數量十分龐大。位是計算機內存的基本構建塊。字節(byte)是常用的計算機存儲單位。對于幾乎所有的機器,1字節均為8位。即1字節 = 8 bit。
8、浮點數與數學中實數的概念差不多。2.75、3.16E7、7.00 和 2e-8都是浮點數。注意,在一個值后面加上一個小數點,該值就成為一個浮點值。所以,7是整數,7.00是浮點數。顯然,書寫浮點數有多種形式。稍后將詳細介紹e 記數法, 這里先做簡要介紹: 3.16E7 表示3.16×107(3.16 乘以10 的7次方)。其中, 107=10000000,7被稱為10的指數。
9、整數與浮點數的區別:①整數沒有小數部分,浮點數有小數部分。
???????????????????????????????????????? ②浮點數可以表示的范圍比整數大。
10、不同的進制要使用不同的轉換說明。以十進制顯示數字,使用%d;以八進制顯示數字,使用%o;以十六進制顯示數字,使用%x。另外,要顯示各進制數的前綴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; } //編譯并運行該程序,輸出如下: dec = 100; octal = 144; hex = 64 dec = 100; octal = 0144; hex = 0x64注意,如果要在八進制和十六進制值前顯示0和0x前綴,要分別在轉換說明中加入#。
11、打印unsigned int類型的值,使用%u轉換說明;打印long類型的值,使用%ld轉換說明。如果系統中int和long的大小相同,使用%d就行。在x和o前面可以使用l前綴,%lx表示以十六進制格式打印long類型整數,%lo表示以八進制格式打印long類型整數。注意,雖然C允許使用大寫或小寫的常量后綴,但是在轉換說明中只能用小寫。
12、char broiled; /* 聲明一個char類型的變量 */,broiled = 'T'; /* 為其賦值,正確 */用單引號括起來的單個字符被稱為字符常量(character constant)。broiled = T; /* 錯誤!此時T是一個變量 */如果省略單引號,編譯器認為T是一個變量名,broiled = "T"; /* 錯誤!此時"T"是一個字符串 */如果把
T用雙引號括起來,編譯器則認為"T"是一個字符串。
關鍵字:
基本數據類型由11個關鍵字組成:int、long、short、unsigned、
char、float、double、signed、_Bool、_Complex和_Imaginary。
有符號整型:
有符號整型可用于表示正整數和負整數。
int ——系統給定的基本整數類型。C語言規定int類型不小于16位。
short或short int ——最大的short類型整數小于或等于最大的int類型
整數。C語言規定short類型至少占16位。
long或long int ——該類型可表示的整數大于或等于最大的int類型
整數。C語言規定long類型至少占32位。
long long或long long int ——該類型可表示的整數大于或等于最大
的long類型整數。Long long類型至少占64位。
一般而言,long類型占用的內存比short類型大,int類型的寬度要么
和long類型相同,要么和short類型相同。例如,舊DOS系統的PC提供
16位的short和int,以及32位的long;Windows 95系統提供16位的short以
及32位的int和long。
無符號整型:
無符號整型只能用于表示零和正整數,因此無符號整型可表示的
正整數比有符號整型的大。在整型類型前加上關鍵字unsigned表明該類
型是無符號整型:unsignedint、unsigned long、unsigned short。單獨的
unsigned相當于unsignedint。
字符類型:
可打印出來的符號(如A、&和+)都是字符。根據定義,char類型
表示一個字符要占用1字節內存。出于歷史原因,1字節通常是8位,但
是如果要表示基本字符集,也可以是16位或更大。
char ——字符類型的關鍵字。有些編譯器使用有符號的char,而有
些則使用無符號的char。在需要時,可在char前面加上關鍵字signed或
unsigned來指明具體使用哪一種類型。
布爾類型:
布爾值表示true和false。C語言用1表示true,0表示false。
_Bool ——布爾類型的關鍵字。布爾類型是無符號 int類型,所占用的空間只要能儲存0或1。
實浮點類型:
實浮點類型可表示正浮點數和負浮點數。
float ——系統的基本浮點類型,可精確表示至少6位有效數字。
double ——儲存浮點數的范圍(可能)更大,能表示比 float 類型
更多的有效數字(至少 10位,通常會更多)和更大的指數。
long long ——儲存浮點數的范圍(可能)比double更大,能表示比
double更多的有效數字和更大的指數。
復數和虛數浮點數:
虛數類型是可選的類型。復數的實部和虛部類型都基于實浮點類型來構成:
float _Complex
double _Complex
long double _Complex
float _Imaginary
double _Imaginary
long long _Imaginary
?13、如何知道當前系統的指定類型的大小是多少?運行下面程序,會列出當前系統的各類型的大小。
//* typesize.c -- 打印類型大小 */ #include <stdio.h> int main(void) {/* C99為類型大小提供%zd轉換說明 */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語言的內置運算符,以字節為單位給出指定類型的大小。C99和C11提供%zd轉換說明匹配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 有多種的數據類型。基本數據類型分為兩大類:整數類型和浮點數類型。
最后,第三章的筆記記錄就到這里了,下面進行編程練習的編寫。
/*第一題*/ #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; }//輸出的結果是: 2147483647 -2147483648 -2147483647 4294967295 0 1/*主要的區別是,在超過最大值時,unsigned int 類型的變量 j 從 0開始;而int類型的 變量i則從?2147483648開始。float的輸出結果太長了這里就不放出來了,有興趣的自己去復制運行一下看結果。 /*第二題*/ #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; } //運行該程序后,輸出示例如下: 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; } /*輸出結果如下*/ /* [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()函數使用%f轉換說明打印十進制記數法的float和double類型 浮點數,用%e打印指數記數法的浮點數。十六進制P計數法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; }/* 輸出結果[user@CentOS84 test3.4]$ ./test3.4 */ please input your age: 23 fixed-point notation: 725880000.000000 exponential notation: 7.258800e+08 //讓程序分別輸出小數和指數形式 /*第六題*/ #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*/ //下面是輸出結果 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; } /*下面是終端三個輸出結果*/ //[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; }/*輸出結果*/ 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!//浮點類型比整數類型更加合適,如果是3杯的時候用整數類型的話就會舍掉小數了,這顯然不符合等量交換的意義。好了,第三章也完結了,說明一下,本系列的代碼都是經過編譯運行通過后才放出來給大家看的,所以請放心,在Linux操作系統上安裝的Vscode下編寫運行的!請各位發現有問題的地方請留言,煩請各位多多指正!
總結
以上是生活随笔為你收集整理的C Primer Plus(第六版)第三章 数据和C的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 程序员成为“备胎”的5年,我一直在等..
- 下一篇: 微信小程序开发者工具的使用