BeautifulMan

            BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理 ::
            16 隨筆 :: 0 文章 :: 0 評論 :: 0 Trackbacks
          復習題
          1、再次運行程序清單4.1,但是在要求您輸入名字時,請輸入您的名字和姓氏。發生了什么?為什么?
          答:
           1 #include <stdio.h>
           2 #include <string.h>
           3 #define DENSITY 62.4
           4 int main(void)
           5 {
           6     float weight, volume;
           7     int size, letters;
           8     char name[40]; // name是一個有40個字符的數組
           9 
          10     printf("Hi! What's your first name?\n");
          11     scanf("%s", name);
          12     printf("%s, what's your weight in pounds?\n", name);
          13     scanf("%f", &weight);
          14     size = sizeof(name);
          15     letters = strlen(name);
          16     volume = weight / DENSITY;
          17     printf("Well, %s, your volume is %2.2f cubic feet.\n", name, volume);
          18     printf("Also, your first name has %d letters, \n", letters);
          19     printf("and we have %d bytes to store it in.\n", size);
          20     return 0;
          21 }
          如果輸入名字和姓氏,會輸出如下結果:
          Hi! What's your first name?
          Li Ayun
          Li, what's your weight in pounds?
          Well, Li, your volume is 0.00 cubic feet.
          Also, your first name has 2 letters,
          and we have 40 bytes to store it in.
          原因:(參考課后答案)程序不能正常工作。第一個scanf()語句只是讀入您的名而沒有讀入您的姓,您的姓依然存儲在輸入“緩沖區”(緩沖區只是一塊用來存放輸入的臨時存儲區域)中。當下一個scanf()語句想要讀入您的體重時,它從上次讀入結束的地方開始,這樣就試圖把您的姓作為體重來讀取。這會使scanf()失敗。一方面,如果您對姓名請求做出像Li 123這樣的響應,程序會使用123作為您的體重,雖然您是在程序請求體重之前輸入123的。
          2、假定下列每個示例都是某個完整程序的一部分。它們的打印結果分別是什么?
          a.printf("He sold the painting for $%2.2f.\n", 2.345e2);
          b.printf("%c%c%c\n", 'H', 105, '\41');
          c.#define Q "His Hamlet was funny without being vulgar. "
                   printf("%s\nhas %d characters.\n", Q, strlen(Q));
          d.printf("Is %2.2e the same as %2.2f?\n", 1201.0, 1201.0);
          答:
          a.He sold the painting for $234.50.
          b.Hi!
          c.His Hamlet was funny without being vulgar. (注意,與課后答案不一樣,是因為細看題目的話,此句末尾有一個空格,strlen()函數輸出字符串中字符(包括空格和標點符號)的準確數目)
             has 43 characters.
          d.Is 1.20e+003 the same as 1201.00?
          3、在問題2c中,應進行哪些修改以使字符串Q引在雙引號中輸出?
          答:
          使用\"。示例如下:
          printf("\"%s\"\nhas %d characters.\n", Q, strlen(Q));
          4、找出下列程序中的錯誤。
           1 define B booboo
           2 define X 10
           3 main(int)
           4 {
           5     int age;
           6     char name;
           7 
           8     printf("Please enter your first name. ");
           9     scanf("%s", name);
          10     printf("All right, %c, what's your age?\n", name);
          11     scanf("%f", age);
          12     xp = age + X;
          13     printf("That's a %s! You must be at least %d.\n", B, xp);
          14     rerun 0;
          15 }
          答:
          下面是一個正確的版本:
           1 #include <stdio.h>
           2 #include <string.h>
           3 #define B "booboo"
           4 #define X 10
           5 int main(void)
           6 {
           7     int age;
           8     int xp;
           9 
          10     char name[40];
          11 
          12     printf("Please enter your first name. \n");
          13     scanf("%s", name);
          14     printf("All right, %s, what's your age?\n", name);
          15     scanf("%d", &age);
          16     xp = age + X;
          17     printf("That's a %s! You must be at least %d.\n", B, xp);
          18     return 0;
          19 }
          5、假設一個程序這樣開始:
          1 #define BOOK "War and Peace"
          2 int main(void)
          3 {
          4     float cost = 12.99;
          5     float precent = 80.0;
          請構造一個printf()語句,使用BOOK、cost和percent打印下列內容:
          This copy of "War and Peace" sells for $12.99.
          That is 80% of list.
          答:
          printf("This copy of \"%s\" sells for $%.2f.\nThat is %.0f%% of list.", BOOK, cost, percent);
          6、您會使用什么轉換說明來打印下列各項內容?
          a.一個字段寬度等于數字位數的十進制整數。
          b.一個形如8A、字段寬度為4的十六進制整數。
          c.一個形如232.346、字段寬度為10的浮點數。
          d.一個形如2.33e+002、字段寬度為12的浮點數。
          e.一個字段寬度為30、左對齊的字符串。
          答:
          a.%d
          b.%4X
          c.%10.3f
          d.%12.2e
          e.%-30s
          對于浮點數來說,字段寬度包含了小數點右邊的數字的數目
          7、您會使用哪個轉換說明來打印下列各項內容?
          a.一個字段寬度為15的unsigned long整數
          b.一個形如0x8a、字段寬度為4的十六進制整數
          c.一個形如2.33E+02、字段寬度為12、左對齊的浮點數
          d.一個形如+232.346、字段寬度為10的浮點數
          e.一個字符串的前8個字符,字段寬度為8字符
          答:
          a.%15lu
          b.%#4x(字段寬度應放在#和x之間)
          c.%-12.2E("-"修飾符使浮點數左對齊輸出)
          d.%+10.3f
          e.%-8.8s("-"修飾符使文本左對齊輸出)
          8、您會使用什么轉換說明來打印下列各項內容?
          a.一個字段寬度為6、最少有4位數字的十進制整數
          b.一個字段寬度在參數列表中給定的八進制整數
          c.一個字段寬度為2的字符
          d.一個形如+3.13、字段寬度等于數字中字符個數的浮點數
          e.一個字符串的前5個字符,字段寬度為7、左對齊
          答:
          a.%6.4d
          b.%*o(此處為小寫字母o,而不是數字0)
          c.%2c
          d.%+.2f
          e.%-7.5s
          9、為下列每個輸入行提供一個對其進行讀取的scanf()語句,并聲明語句中用到的所有變量或數組。
          a.101
          b.22.32 8.34E-09
          c.linguini
          d.catch 22
          e.catch 22(但是跳過catch)
          答:
          a.
          1 int num;
          2 scanf("%d", &num);
          b.
          1 float kgs, share;
          2 scanf("%f%f", &kgs, &share);
          c.
          1 char str[40];
          2 scanf("%s", str);
          d.
          1 char str[40];
          2 int number;
          3 scanf("%s %d", str,&number);
          e.
          1 char str[40];
          2 int number;
          3 scanf("%s %d", str, &number);
          10、什么是空白字符?
          答:
          空白字符包括空格、制表符和換行符。C使用空白字符分隔各個語言符號;scanf()使用空白字符分隔相鄰的輸入項。
          11、假設您想在程序中使用圓括號代替花括號。以下方法可以嗎?
          #define ( {
          #define ) }
          答:
          會發生替換。但不幸的是,預處理器不能區別哪些圓括號應該被替換成花括號,哪些圓括號不應該被替換成花括號。因此:
          1 #include <stdio.h>
          2 #define ( {
          3 #define ) }
          4 int main(void)
          5 (
          6     printf("Hello World!\n");
          7     return 0;
          8 )
          會變為:
          1 #include <stdio.h>
          2 int main{void}
          3 {
          4     printf{"Hello World!\n"};
          5     return 0;
          6 }
          所有圓括號都要替換為花括號。
          編程練習
          1、
           1 #include <stdio.h>
           2 int main(void)
           3 {
           4     char name[40]; // 名字
           5     char surname[40]; // 姓氏
           6 
           7     printf("Please enter your name and surname: \n");
           8     scanf("%s%s", name, surname);
           9     printf("%s,%s", surname, name);
          10     return 0;
          11 }
          2、
           1 #include <stdio.h>
           2 #include <string.h>
           3 int main(void)
           4 {
           5     char name[40]; // 名字
           6 
           7     printf("Please enter your name: \n");
           8     scanf("%s", name);
           9     printf("\"%s\"\n", name);
          10     printf("\"%20s\"\n", name);
          11     printf("\"%-20s\"\n", name);
          12     printf("%*s\n", strlen(name)+3, name);
          13     return 0;
          14 }
          3、
           1 #include <stdio.h>
           2 int main(void)
           3 {
           4     float number;
           5 
           6     printf("Please enter a float number: \n");
           7     scanf("%f", &number);
           8     printf("The input is %.1f or %.1e\n", number, number);
           9     printf("The input is %+.3f or %.3E\n", number, number);
          10     return 0;
          11 }
          4、
           1 #include <stdio.h>
           2 int main(void)
           3 {
           4     /* 以厘米為單位輸入身高,并以米為單位進行顯示 */
           5     float weight;
           6     char name[40];
           7 
           8     printf("Please enter your weight(cm): \n");
           9     scanf("%f", &weight);
          10     printf("Please enter your name: \n");
          11     scanf("%s", name);
          12     printf("%s, you are %.2f meter tall\n", name, weight/100);
          13     return 0;
          14 }
          5、
           1 #include <stdio.h>
           2 #include <string.h>
           3 int main(void)
           4 {
           5     char name[40]; // 名字
           6     char surname[40]; // 姓氏
           7 
           8     printf("Please enter your name: \n");
           9     scanf("%s", name);
          10     printf("Please enter your surname: \n");
          11     scanf("%s", surname);
          12     printf("%10s %10s\n", surname, name);
          13     printf("%10d %10d\n", strlen(surname), strlen(name));
          14     printf("%-10s %-10s\n", surname, name);
          15     printf("%-10d %-10d\n", strlen(surname), strlen(name));
          16     return 0;
          17 }
          結果為:(看起來有一點怪啊!!!)
          Please enter your name:
          Ayun
          Please enter your surname:
          li
                  li       Ayun
                   2           4
          li         Ayun
          2         4
          6、
           1 #include <stdio.h>
           2 #include <float.h>
           3 int main(void)
           4 {
           5     double dblnum = 1.0/3.0;
           6     float fltnum = 1.0/3.0;
           7 
           8     printf("%.4f\n", dblnum);
           9     printf("%.12f\n", dblnum);
          10     printf("%.16f\n", dblnum);
          11     printf("%.4f\n", fltnum);
          12     printf("%.12f\n", fltnum);
          13     printf("%.16f\n", fltnum);
          14     printf("double precision = %d digits\n", DBL_DIG);
          15     printf("float precision = %d digits\n", FLT_DIG);
          16     return 0;
          17 }
          7、(定義浮點類型的時候是使用float,還是double好???)
           1 #include <stdio.h>
           2 #define LITRE 3.785
           3 #define KM 1.609
           4 int main(void)
           5 {
           6     float mile; // 英里數
           7     float gallon; // 加侖數
           8 
           9     printf("Please enter your mile: \n");
          10     scanf("%f", &mile);
          11     printf("Please enter your gallon: \n");
          12     scanf("%f", &gallon);
          13     printf("Miles per gallon of gasoline: %.1f\n", mile/gallon);
          14     printf("Liters per 100 kilometers: %.1f\n", gallon*LITRE*100/(mile*KM));
          15     return 0;
          16 }
          posted on 2015-11-14 02:01 李阿昀 閱讀(823) 評論(0)  編輯  收藏 所屬分類: C Primer Plus 復習題與編程練習
          主站蜘蛛池模板: 井冈山市| 阜新市| 东乌珠穆沁旗| 天门市| 兰考县| 嵊泗县| 夏河县| 万宁市| 塘沽区| 洱源县| 东海县| 永顺县| 昌吉市| 四子王旗| 汝南县| 绥阳县| 遵义县| 尼木县| 富平县| 广南县| 柳州市| 老河口市| 宿州市| 东宁县| 宁夏| 临武县| 资源县| 临猗县| 台江县| 盐亭县| 郸城县| 鲜城| 什邡市| 西城区| 扬中市| 武胜县| 平陆县| 永清县| 清丰县| 黔西县| 绥阳县|