BeautifulMan

            BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理 ::
            16 隨筆 :: 0 文章 :: 0 評論 :: 0 Trackbacks
          第3章  數據和C
          復習題
          1、對下面的各種數據使用合適的數據類型:
               a.East Simpleton的人口
               b.DVD影碟的價格
               c.本章出現次數最多的字母
               d.這個字母出現的次數
          答:a.int類型,可以是short、unsigned或unsigned short;人口數是一個整數。
                b.float類型;價格不太可能正好是一個整數(您也可以使用double,但實際上并不需要那么高的精度)。
                c.char類型。
                d.int類型,可以是unsigned。
          2、需要用long類型變量代替int類型變量的原因是什么?
          答:一個原因是在您的系統中long可以容納比int類型更大的數;一個原因是如果您確實需要處理更大的值,那么使用一種在所有系統上都能保證至少是32位的類型會使程序的可移植性更好。
          3、獲得一個32位的有符號整數,可以使用哪些可移植的數據類型?每種選擇的原因是什么?
          答:要獲得正好是32位的數,您可以使用int32_t(如果在您的系統上有這一定義的話)。要獲得可存儲至少32位的最小類型,可以使用int_least32_t。如果要在32位的類型中獲得提供最快計算速度的類型,可以選擇int_fast32_t。(參考
          3.4.5  可移植的類型:inttypes.h,理解的不是很清楚!!!)
          4、指出下列常量的類型和意義(如果有的話):
               a.'\b'
               b.1066
               c.99.44
               d.0XAA
               e.2.0e30
          答:a.char常量(但以int類型存儲)
                b.int常量
                c.double常量
                d.unsigned int常量,十六進制格式
                e.double常量
          5、Dottie Cawm寫的下面這個程序中有很多錯誤,找出這些錯誤。
          1 include <stdio.h>
          2 main
          3 (
          4     float g; h;
          5     float tax, rate;
          6 
          7     g = e21;
          8     tax = rate * g;
          9 )
          答:第1行:應該是#include <stdio.h>
                第2行:應該是int main(void)
                第3行:使用{,而不是(
                第4行:在g和h之間應該是逗號而不是分號
                第5行:無錯誤
                第6行:(空行)無錯誤
                第7行:在e之前應該至少有一個數字,.1e21或1.e21都是正確的,盡管這個數有點大。
                第8行:無錯誤,至少在語法上沒有
                第9行:使用},而不是)
          缺少的行:首先,rate沒有被賦值。其次,變量h從來沒有被使用。而且程序永遠不會把它的計算結果通知給您。這些錯誤都不會阻止程序的運行(盡管可能會向您出示一個警告以說明變量沒有被使用),但是它們確實減弱了程序本來就不多的功能。而且在結尾處應該有一個return語句。
             下面是正確版本之一:  
           
           1 #include <stdio.h>
           2
           int main(void)
           3 {
           4     float g, h;
           5     float tax, rate;
           6     rate = 0.08;
           7     g = 1.0e5;
           8 
           9     tax = rate * g;
          10     h = g + tax;
          11     printf("You owe $%f plus $%f in taxes for a total of $%f.\n", g, tax, h);
          12     return 0;
          13 }
          6、指出下表中各常量的數據類型(在聲明語句中使用的數據類型)及其在printf()中的格式說明符。
                    常量         類型        說明符     

          12

          0x3
            'C'  
            2.34E07  
           '\040'   
           7.0   
           6L   
           6.0f   













          答:
                    常量           類型           說明符     

          12int%d

          0x3unsigned int%#x
            'C'char %c 
            2.34E07double  %f
           '\040' char  %c
           7.0 double  %f
           6L long  %ld
           6.0f float %e 












          7、
          指出下表中各常量的數據類型(在聲明語句中使用的數據類型)及其在printf()中的格式說明符,假設int類型為16位長。
                    常量         類型        說明符     

          012

          2.9e05L
            's'  
            100000  
           '\n'   
           20.0f   
           0x44   
















          答:
                    常量           類型           說明符     

          012int%#0

          2.9e05Llong double%Le
            's'char %c 
            100000long %ld 
           '\n' char%c 
           20.0f float %f 
           0x44 unsigned int %#x 
















          8、假設一個程序開始處有如下的聲明:
          1 int imate = 2;
          2 long shot = 53456;
          3 char grade = 'A';
          4 float log = 2.71828;
          在下面printf()語句中添上合適的類型說明符:
          1 printf("The odds against the %___ were %___ to 1.\n", imate, shot);
          2 printf("A score of %___ is not an %___ grade.\n", log, grade);
          答:
          1 printf("The odds against the %d were %ld to 1.\n", imate, shot);
          2 printf("A score of %f is not an %c grade.\n", log, grade);
          9、假設ch為char類型變量。使用轉義序列、十進制值、八進制字符常量以及十六進制字符常量等方法將其賦值為回車符(假設使用ASCII編碼)。
          答:
          1 char ch = '\r';
          2 char ch = 13;
          3 char ch = '\015';
          4 char ch = '\xd';
          10、改正下面程序(在C中/表示除法)。
          1 void main(int) / this progarm is perfect /
          2 {
          3    cows, legs integer;
          4    printf("How many cow legs did you count?\n);
          5    scanf("%c", legs);
          6    cows = legs / 4;
          7    printf("That implies there are %f cows.\n", cows)
          8 }
          答:
           1 #include <stdio.h>
           2 int main(void/* this progarm is perfect */
           3 {
           4    int cows, legs;
           5    printf("How many cow legs did you count?\n");
           6    scanf("%d", &legs);
           7    cows = legs / 4;
           8    printf("That implies there are %d cows.\n", cows);
           9    return 0;
          10 }
          11、指出下列轉義字符的含義:
          1 a.\n
          2 b.\\
          3 c.\"
          4 d.\t
          答:a.換行字符
                b.反斜線字符
                c.雙引號字符
                d.制表字符
          編程練習(如有錯誤,希望指正!!!)
          1、
           1 /* 整數上溢*/
           2 #include <stdio.h>
           3 int main(void)
           4 {
           5     int i = 2147483647;
           6     unsigned int j = 4294967295;
           7 
           8     /*
           9         無符號整數j像一個汽車里程指示表(形容的太好了,可參考《計算機科學導論》第3章 數據存儲,有圖),
          10        當達到最大值時,它將溢出到起始點。整數i也是同樣。它們的主要區別是unsigned int變量j的起始點是0(正像里程
          11        指示表那樣),而int變量i的起始點則是-2147483648。——參考《C Primer Plus》
          12     */
          13     printf("%d %d %d\n", i, i+1, i+2);
          14     printf("%u %u %u\n", j, j+1, j+2);
          15     return 0;
          16 }
          運行結果:
          2147483647 -2147483648 -2147483647
          4294967295 0 1
          浮點數的上溢和下溢???(理解的不是很清楚,回頭再來寫)
          2、
          1 #include <stdio.h>
          2 int main(void)
          3 {
          4     int asc;
          5     printf("Please enter an ASCII value: ");
          6     scanf("%d", &asc);
          7     printf("The code is %c.\n", asc);
          8     return 0;
          9 }
          3、
          1 #include <stdio.h>
          2 int main(void)
          3 {
          4     printf("\aStartled by the sudden sound, Sally shouted, ");
          5     printf("\"By the Great Pumpkin,what was that!\"\n");
          6     return 0;
          7 }
          4、
          1 #include <stdio.h>
          2 int main(void)
          3 {
          4     float number;
          5     printf("Please enter a float value: ");
          6     scanf("%f", &number);
          7     printf("The input is %f or %e", number, number);
          8     return 0;
          9 }
          5、
          1 #include <stdio.h>
          2 int main(void)
          3 {
          4     int age;
          5     printf("Please enter your age: ");
          6     scanf("%d", &age);
          7     printf("Your age has %e s", age*3.156e7);
          8     return 0;
          9 }
          6、
          1 #include <stdio.h>
          2 int main(void)
          3 {
          4     int num; // 夸脫數應該為整數吧!!
          5     printf("Please enter water: ");
          6     scanf("%d", &num);
          7     printf("The water has %e ", num*950/3.0e-23);
          8     return 0;
          9 }
          7、
          1 #include <stdio.h>
          2 int main(void)
          3 {
          4     float height;
          5     printf("Please enter your height: ");
          6     scanf("%f", &height);
          7     printf("Your height is %.2f cm.\n", height*2.54);
          8     return 0;
          9 }
          posted on 2015-10-31 22:22 李阿昀 閱讀(1425) 評論(0)  編輯  收藏 所屬分類: C Primer Plus 復習題與編程練習
          主站蜘蛛池模板: 乡宁县| 屏东县| 施秉县| 雅安市| 体育| 新竹县| 如东县| 永靖县| 息烽县| 神池县| 新田县| 泌阳县| 天镇县| 蒙山县| 西峡县| 高唐县| 年辖:市辖区| 游戏| 梅河口市| 白城市| 清苑县| 鸡泽县| 乌拉特后旗| 南皮县| 永川市| 新安县| 布拖县| 和林格尔县| 嵊州市| 普洱| 遂昌县| 永胜县| 临西县| 鄄城县| 施甸县| 武宣县| 锡林郭勒盟| 遵化市| 高平市| 广州市| 安乡县|