(不好意思小宣傳一下我的繪圖 希望大家喜歡)
\\♥
謝謝大家:))
希望大家支持我會繼續努力
【C語言教學手冊(四版)-練習題解答】第三章 基本資料型態
----第2題, 試修改 prog3_1,使得第 9 行與第 10 行可分別印出 num1 與 num2 的平方值。第 9 行 與第 10 行的輸出結果應如下所示:
#include <stdio.h>
#include <stdlib.h>
int main()
{
int num1=12400;
double num2=5.234;
printf("num1 的平方為 %d\n",num1*num1);
printf("num2 的平方為 %f\n",num2*num2);
}
----第3題,下列何者是錯誤的函數
- 134.45L
- 10km24
- a2048
- 1.3453F
- 錯,L 代表 long 不能使用浮點數,只能使用於整數。
- 錯,常數不能有字母。
- 錯,常數不能有字母。
- 對,F 代表浮點常數 1.3453 使用 4 bytes 的空間 (否則編譯器會預設為 8 bytes)。
----第4題, 試指出下列常數各是屬於哪一種型態: (a) 124.23 (b) 3.23E12F (c) 2.436F (d) 311980L (e) 1024
- 124.23 是 double 型態,佔 8 bytes。
- 3.23E12F 是指數科學符號的 float 型態,佔 4 bytes。
- 若寫成 3.23E12 則是指數科學符號的double 型態,佔 8 bytes)
- 2.436F 是 float 型態,佔 4 bytes。
- 311980L 是長整數型態,佔 4 bytes。(在目前的機器長整數與一般整數都是佔 4 bytes,故 311980是整數型態,佔 4 bytes。)
- 1024 是整數型態,佔 4 bytes。
----第5題, 試將下列各數以 C 語言的指數寫法來表示: (a) –96.43 (b) 1974.56 (c) 0.01234 (d) 0.000432
(a) – 9.643000e+001
(b) 1.974560e+003
(c) 1.234000e-002
(d) 4.320000e-004
----第6題, 試將下列各指數改寫成 C 語言的浮點數表示方式: (a) –9.5e-4 (b) 3.78e+5 (c) 5.12e-2 (d) 6.1732e+12
(a) -0.000950
(b) 378000.000000
(c) 0.051200
(d) 6173200000000.000000
----第7題 試說明下列字元的意義。 (a) \b (b) \n (c) \t (d) \a
\b (a) 後退一格
\n (b) 跳一行
\t (c) 跳格 (tab)
\a (d) 警告聲 (嗶一聲)
----第8題, int、char、float 與 double 資料型態的變數,各佔有多少個位元組?它們能夠表示的數 值範圍是多少?
int 佔 4 bytes, 數值範圍 -2147483648 到 2147483647
char 佔 1 byte, 數值範圍 0 到 255
float 佔 4 bytes, 數值範圍 1.2e-38 到 3.4e38
double 佔 8 bytes, 數值範圍 2.2e-308 到 1.8e308
----第9題, unsigned 型態適用在何種資料型態?它有什麼特點?
unsigned 是沒有負值的正整數,例如:short int 佔 2 bytes,範圍 -32768 到 32767,但加入 unsigned後變成 unsigned short int,範圍變成 0 到 65535,能儲存的數值範圍是原來的兩倍。
----第12題, 試寫一程式,利用設定字元變數 ch 為 ASCII 碼的方式,讓電腦發出一個警告音(警告 音的 ascii 碼為 7)。
#include <stdio.h>
int main(){
char ch=7;
printf("%c", ch);
}
----第13題, 下面的兩行敘述是程式碼的片斷:
char ch=312;
printf("%c\n",ch);
(a) 試問第一行代表什麼意義?
(b) 試說明第 2 行所得的結果,並說明為什麼會得到這個結果?
(a) 宣告變數 ch 為字元的資料型態,其值為 312。
(b) 由於 char 佔 1 byte, 數值範圍是 0 到 255,312 發生溢位只取後面之值,故為 312 -256 = 56。而 ASCII code 56 是數字 8,所以會印出 8。
----第14題, 請參閱下面的程式碼,然後回答接續的問題:
- 因為 short (或 short int) 只佔 2 bytes,unsigned 的範圍是 0 到 65535,而 80000 超出範圍發生溢位只取後面之值,會得到 80000 – 65536 = 14464。
- 將第七行的 short 改為 int。
----第15題, 請參閱下面的程式碼,然後回答接續的問題:
01 /* hw3_15.c */
02 #include
03 #include
04 int main(void)
05 {
06 float num1=30000.1F;
07 float num2=0.0004F;
08 printf("%f\n",num1+num2);
09
10 system("pause");
11 return 0;
12 }
(a) 試執行此程式碼,您會得到什麼結果?
(b) 於數學上,30000.1+0.0004=30000.1004,試說明執行此程式碼後,為什麼 得不到這個結果?
(c) 如果想讓本題的執行結果恰好為 30000.1004,應如何改進?試撰寫一個完整的程 式碼來改進之。
- 30000.100009
- 發生誤差現象。因為 float 只有 4 bytes,精確度只有 7-8 位數,而整數部分已有 5 位數,故小數只有 2-3 位數是精確的。
- 改為 double num1 = 30000.1;
double num2 = 0.0004;
- “f\n”, num1 + num2); 會印出 30000.100400
若寫成 printf(“.4f\n”, num1+num2); 規定小數後只有 4 位,則印出 30000.1004
----第16題, 試撰寫一程式,利用 sizeof 關鍵字查詢下列各種資料型態所佔的位元組:
#include <stdio.h>
int main(){
printf(“unsigned int 佔用 %d bytes\n”, sizeof(unsigned int));
printf(“double 佔用 %d bytes\n”, sizeof(double));
printf(“unsigned short int 佔用 %d bytes\n”, sizeof(unsigned short int));
}
----第17題, 試撰寫一程式,利用 sizeof 關鍵字查詢下列各常數所佔的位元組: (a) 578 (b) 784000000 (c) 6.78f (d) 718.26 (e) 6.42e127
(a) 4 (b) 4 (c) 4 (d) 8 (e) 8
----第18題, 假設浮點數變數 num1 與 num2 的值分別為 123.39f 與 3.8e5f,試撰寫一程式,將這兩個變數值轉換成整數。
#include <stdio.h>
int main(){
float num1=123.39f;
float num2=3.8e5f;
printf("num1 的整數值為 %d\n", (int)num1);
printf("num2 的整數值為 %d\n", (int)num2);
}
ps
新的貼圖終於出來了
海苔貓繪圖作品\\
希望大家支持~~
留言列表