<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    BeautifulMan

      BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理 ::
      16 隨筆 :: 0 文章 :: 0 評論 :: 0 Trackbacks

    #

         摘要: 復習題1、給出每行之后quack的值Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/-->    int quack = 2;    quack +...  閱讀全文
    posted @ 2015-11-19 14:04 李阿昀 閱讀(614) | 評論 (0)編輯 收藏

    復習題
    1、假定所有的變量都是int類型。找出下面每一個變量的值:
    a.x = (2 + 3) * 6;
    b.x = (12 + 6) / 2 * 3;
    c.y = x = (2 + 3) / 4;
    d.y = 3 + 2 * (x = 7 / 2);
    答:
    a.
    x = 30
    b.
    x = 27
    c.
    x = 1
    y = 1
    d.
    x = 3
    y = 9
    2、假定所有的變量都是int類型。找出下面每一個變量的值:
    a.x = (int) 3.8 + 3.3;
    b.x = (2 + 3) * 10.5;
    c.x = 3 / 5 * 22.0;
    d.x = 22.0 * 3 /5;
    答:
    a.
    x = 6
    b.
    x = 52
    c.
    x = 0
    d.
    x = 13
    3、您懷疑下面的程序里有一些錯誤。您能找出這些錯誤嗎?
     1 int main(void)
     2 {
     3     int i = 1,
     4     float n;
     5     printf("Watch out! Here come a bunch of fractions!\n");
     6     while(i < 30)
     7         n = 1/i;
     8         printf("%f", n);
     9     printf("That's all, folks!\n");
    10     return;
    11 }
    答:
    第0行:應該有#include <stdio.h>。
    第3行:應該以分號而不是逗號結尾。
    第6行:while語句建立一個無限循環。因為i的值保持為1,所以它總是小于30。推測一下它的意思大概是要寫成while(i++ < 30)。
    第6到8行:這樣的縮排說明我們想要使第7行和8行組成一個代碼塊,但是缺少了花括號會使while循環只包括第7行。應該添加花括號。
    第7行:因為1和i都是整數,所以當i為1時除法運算的結果會是1,而當i為更大的數時結果為0。使用n = 1.0/i;會使i在進行除法運算之前先轉換為浮點數,這樣就會產生非0的答案。
    第8行:我們在控制語句中漏掉了換行符(\n),這會使數字只要可能就在一行中打印。
    第10行:應該是return 0;。
    下面是一個正確的版本:
     1 #include <stdio.h>
     2 int main(void)
     3 {
     4     int i = 1;
     5     float n;
     6     printf("Watch out! Here come a bunch of fractions!\n");
     7     while(i++ < 30)
     8     {
     9         n = 1.0/i;
    10         printf("%f\n", n);
    11     }
    12     printf("That's all, folks!\n");
    13     return 0;
    14 }
    4、這是程序清單5.9的其他一種設計方法。表面上看,它使用了一個scanf()函數替代了程序清單5.9中的兩個scanf()。但是該程序不令人滿意。和程序清單5.9相比,它有什么缺點?
     1 #include <stdio.h>
     2 #define S_TO_M 60
     3 int main(void)
     4 {
     5     int sec, min, left;
     6     printf("This program converts seconds to minutes and ");
     7     printf("seconds.\n");
     8     printf("Just enter the number of seconds.\n");
     9     printf("Enter 0 to end the program.\n");
    10     while(sec > 0)
    11     {
    12         scanf("%d", &sec);
    13         min = sec / S_TO_M;
    14         left = sec % S_TO_M;
    15         printf("%d sec is %d min, %d sec.\n", sec, min, left);
    16         printf("Next input?\n");
    17     }
    18     printf("Bye!\n");
    19     return 0;
    20 }
    答:(參考課后答案)
    主要問題在于判斷語句(sec是否大于0?)和獲取sec值的scanf()語句之間的關系。具體地說,第一次進行判斷時,程序還沒有機會來獲得sec的值,這樣就會對碰巧處在那個內存位置的一個垃圾值進行比較。一個比較笨拙的解決方法是對sec進行初始化,比如把它初始化為1,這樣就可以通過第一次判斷。但是還有一個問題,當最后輸入0來停止程序時,在循環結束之前不會檢查sec,因而0秒的結果也被打印出來。更好的方法是使scanf()語句在進行while判斷之前執行。可以通過像下面這樣改變程序的讀取部分來做到這一點:
    1 scanf("%d", &sec);
    2 while(sec > 0)
    3 {
    4      min = sec / S_TO_M;
    5      left = sec % S_TO_M;
    6      printf("%d sec is %d min, %d sec.\n", sec, min, left);
    7      printf("Next input?\n");
    8      scanf("%d", &sec);
    9 }
    第一次獲取輸入使用循環外部的scanf(),以后就使用在循環結尾處(也即在循環再次執行之前)的scanf()語句。這是處理這類問題的一個常用方法。
    5、下面的程序將打印什么?
     1 #include <stdio.h>
     2 #define FORMAT "%s! C is cool!\n"
     3 int main(void)
     4 {
     5     int num = 10;
     6 
     7     printf(FORMAT, FORMAT);
     8     printf("%d\n", ++num);
     9     printf("%d\n", num++);
    10     printf("%d\n", num--);
    11     printf("%d\n", num);
    12     return 0;
    13 }
    答:
    %s! C is cool!
    ! C is cool!
    11
    11
    12
    11
    6、下面的程序將打印什么?
     1 #include <stdio.h>
     2 int main(void)
     3 {
     4     char c1, c2;
     5     int diff;
     6     float num;
     7 
     8     c1 = 'S';
     9     c2 = 'O';
    10     diff = c1 - c2;
    11     num = diff;
    12     printf("%c%c%c: %d %3.2f\n", c1, c2,c1, diff, num);
    13     return 0;
    14 }
    答:
    SOS: 4 4.00
    7、下面的程序將打印出什么?
     1 #include <stdio.h>
     2 #define TEN 10
     3 int main(void)
     4 {
     5     int n = 0;
     6     while(n++ < TEN)
     7         printf("%5d", n);
     8     printf("\n");
     9     return 0;
    10 }
    答:
       1   2   3   4   5   6   7   8   9   10(注意:每個數字占據5列的寬度)  
    8、修改上一個程序,讓它打印從a到g的字母。
    答:
     1 #include <stdio.h>
     2 #define CHARACTER 'g'
     3 int main(void)
     4 {
     5     char ch = 'a' - 1;
     6     while(ch++ < CHARACTER)
     7         printf("%3c", ch);
     8     printf("\n");
     9     return 0;
    10 }
    9、如果下面的片段是一個完整程序的一部分,它們將打印出什么?
    a.
    1 int x = 0;
    2 while(++x < 3)
    3    printf("%4d", x);
    b.(注意:使第二個printf()語句縮進并不能使它成為while循環的一部分。因此它只是在while循環結束之后被調用一次,我看成一個代碼塊了)
    1 int x = 100;
    2 
    3 while(x++ < 103)
    4    printf("%4d\n", x);
    5    printf("%4d\n", x);
    c.
    1 char ch = 's';
    2 
    3 while(ch < 'w')
    4 {
    5     printf("%c", ch);
    6     ch++;
    7 }
    8 printf("%c\n", ch);
    答:
    a.
       1   2
    b.
     101
     102
     103
     104
    c.
    stuvw
    10、下面的程序將打印什么?
     1 #define MESG "COMPUTER BYTES DOG"
     2 #include <stdio.h>
     3 int main(void)
     4 {
     5     int n = 0;
     6 
     7     while(n < 5)
     8         printf("%s\n", MESG);
     9         n++;
    10     printf("That's all.\n");
    11     return 0;
    12 }
    答:
    這是一個構造有缺陷的程序。因為while語句沒有使用花括號,只有printf()語句作為循環的一部分,所以程序無休止地打印消息COMPUTER BYTES DOG直到您強行關閉程序為止。
    11、構造完成下面功能(或者用一個術語來說,有下面的副作用)的語句:
    a.把變量x的值增加10
    b.把變量x的值增加1
    c.將a與b之和的兩倍賦給c
    d.將a與兩倍的b之和賦給c
    答:
    a.x = x + 10;
    b.x++; or ++x; or x = x + 1;
    c.c = (a + b) * 2;
    d.c = a + 2 * b;
    12、構造具有下面功能的語句:
    a.把變量x的值減1
    b.把n除以k所得的余數賦給m
    c.用b減去a的差去除q,并將結果賦給p
    d.用a與b的和除以c與d的乘積,并將結果賦給x
    答:
    a.x--; or --x; or x = x - 1;
    b.m = n % k;
    c.p = q / (b - a);
    d.x = (a + b) / (c * d);
    編程練習
    1、
     1 #include <stdio.h>
     2 const int PARAM = 60;
     3 int main(void)
     4 {
     5     int min, hour, left;
     6 
     7     printf("Convert minutes to hours and minutes!\n");
     8     printf("Enter the number of minutes (<=0 to quit):\n");
     9     scanf("%d", &min);
    10     while(min > 0)
    11     {
    12         hour = min / PARAM;
    13         left = min % PARAM;
    14         printf("%d minutes is %d hours, %d minutes.\n", min, hour, left);
    15         printf("Enter next value (<=0 to quit): \n");
    16         scanf("%d", &min);
    17     }
    18     printf("Done!\n");
    19     return 0;
    20 }
    2、
     1 #include <stdio.h>
     2 int main(void)
     3 {
     4     int number, maxnum;
     5     printf("Please enter a int number:\n");
     6     scanf("%d", &number);
     7     maxnum = number + 10;
     8     while(number <= maxnum)
     9     {
    10         printf("%5d", number++);
    11     }
    12     printf("\n");
    13     return 0;
    14 }
    3、(與題目1類似)
     1  #include <stdio.h>
     2  const int PARAM = 7;
     3  int main(void)
     4  {
     5      int day, week, left;
     6 
     7      printf("Convert days to weeks and days!\n");
     8      printf("Enter the number of days (<=0 to quit):\n");
     9      scanf("%d", &day);
    10      while(day > 0)
    11      {
    12          week = day / PARAM;
    13          left = day % PARAM;
    14          printf("%d days are %d weeks, %d days.\n", day, week, left);
    15          printf("Enter next value (<=0 to quit): \n");
    16          scanf("%d", &day);
    17      }
    18      printf("Done!\n");
    19      return 0;
    20 }
    4、
     1  #include <stdio.h>
     2  #define CM_PER_INCH 0.3937
     3  #define FEET_PER_INCH 12
     4  int main(void)
     5  {
     6      float cm, inch, left;
     7      int feet;
     8 
     9      printf("Enter a height in centimeters: ");
    10      scanf("%f", &cm);
    11      while(cm > 0)
    12      {
    13          inch = cm * CM_PER_INCH;
    14          feet = inch / FEET_PER_INCH;
    15          left = (inch / FEET_PER_INCH - feet) * FEET_PER_INCH ;
    16          printf("%.1f cm = %d feet, %.1f inches.\n", cm, feet, left);
    17          printf("Enter a height in centimeters (<=0 to quit): ");
    18          scanf("%f", &cm);
    19      }
    20      printf("bye\n");
    21      return 0;
    22 }
    5、
     1 #include <stdio.h>
     2 int main(void)
     3 {
     4     int count, sum, limit;
     5     count = 0;
     6     sum = 0;
     7 
     8     printf("Please enter a limit number: ");
     9     scanf("%d", &limit);
    10     while(count++ < limit)
    11     {
    12         sum = sum + count;
    13     }
    14     printf("sum = %d\n", sum);
    15     return 0;
    16 }
    6、
     1 #include <stdio.h>
     2 int main(void)
     3 {
     4     int count, sum, limit;
     5     count = 0;
     6     sum = 0;
     7 
     8     printf("Please enter a limit number: ");
     9     scanf("%d", &limit);
    10     while(count++ < limit)
    11     {
    12         sum = sum + count * count;
    13     }
    14     printf("sum = %d\n", sum);
    15     return 0;
    16 }
    7、
     1 #include <stdio.h>
     2 float cube(float num);
     3 int main(void)
     4 {
     5     float number;
     6     printf("Please enter a number: ");
     7     scanf("%f", &number);
     8     printf("The cube of the %.2f is %.2f", number, cube(number));
     9     return 0;
    10 }
    11 float cube(float num)
    12 {
    13     return num * num * num;
    14 }
    8、(注意:我用到了<string.h>頭文件中的getchar()函數,還是用目前的知識弄不出來,啊!
     1 #include <stdio.h>
     2 #include <string.h>
     3 const float ONE_PARAM = 1.8;
     4 const float TWO_PARAM = 32.0;
     5 const float THREE_PARAM = 273.16;
     6 void temperatures(double fahrenheit);
     7 int main(void)
     8 {
     9     float number;
    10     while(1==1)
    11     {
    12         printf("Please again enter a fahrenheit's temperature: ");
    13         scanf("%f", &number);
    14         if(getchar() == 'q')
    15         {
    16             break;
    17         }
    18         temperatures(number);
    19     }
    20     printf("Done!\n");
    21     return 0;
    22 }
    23 void temperatures(double fahrenheit)
    24 {
    25     float celsius, kelvin;
    26     celsius = ONE_PARAM * fahrenheit + 32.0;
    27     kelvin = celsius + 273.16;
    28     printf("fahrenheit is %.2f, celsius is %.2f, kelvin is %.2f.\n", fahrenheit, celsius, kelvin);
    29 }
    今天看到第6章 循環部分,原來可以這樣做,是我讀書太不用心了!
     1  #include <stdio.h>
     2  #include <string.h>
     3  const float ONE_PARAM = 1.8;
     4  const float TWO_PARAM = 32.0;
     5  const float THREE_PARAM = 273.16;
     6  void temperatures(double fahrenheit);
     7  int main(void)
     8  {
     9     float number;
    10 
    11     printf("Please again enter a fahrenheit's temperature: ");
    12     while(scanf("%f", &number) == 1)
    13     {
    14         temperatures(number);
    15         printf("Please again enter a fahrenheit's temperature: ");
    16     }
    17     printf("Done!\n");
    18     return 0;
    19 }
    20 void temperatures(double fahrenheit)
    21 {
    22     float celsius, kelvin;
    23     celsius = ONE_PARAM * fahrenheit + 32.0;
    24     kelvin = celsius + 273.16;
    25     printf("fahrenheit is %.2f, celsius is %.2f, kelvin is %.2f.\n", fahrenheit, celsius, kelvin);
    26 }
    posted @ 2015-11-14 16:33 李阿昀 閱讀(481) | 評論 (0)編輯 收藏

    復習題
    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 @ 2015-11-14 02:01 李阿昀 閱讀(818) | 評論 (0)編輯 收藏

    第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 @ 2015-10-31 22:22 李阿昀 閱讀(1420) | 評論 (0)編輯 收藏

    第2章 C語言概述
    復習題
    1、如何稱呼C程序的基本模塊?
    答:它們被稱為函數。
    2、什么是語法錯誤?給出它的一個英語例子和C語言例子。 
    答:C的語法錯誤是指把正確的C符號放在了錯誤的位置。這是英語中的一個例子:"Me speak English good.";這是C語言的一個例子:printf "Where are the parentheses?";
    3、什么是語義錯誤?給出它的一個英語例子和C語言例子。
    答:語義錯誤就是在意思上的錯誤。這是英語中的一個例子:"The sentence is excellent Italian.";這是C語言中的一個例子:thrice_n = 3 + n;
    4、Indiana Sloth 已經編好了下面的程序,并想征求你的意見。請幫助他評定。
    1 include studio.h
    int main{void/*該程序可顯示出一年中有多少周/*
    3 (
    4 int s

    6 s: = 56;
    7 print(There are s weeks in a year.);
    8 return 0;
    答:第1行:以一個#開始,拼寫出文件名stdio.h,然后把文件名放在一對尖括號中。
         第2行:使用(),而不是使用{};使用*/來結束注釋,而不是使用/*。
         第3行:使用{,而不是(。
         第4行:使用分號來結束語句。
         第5行:Indiana使這一行(空白行)正確!
         第6行:使用=,而不是使用:=進行賦值(顯然,Indiana 了解一些Pascal)。每年有52周而不是56周。
         第7行:應該是printf("There are %d weeks in a year.\n",s);
         第9行:源程序沒有第9行,但是應該有,它應該包含一個結束花括號}。
    在進行這些修改之后,代碼如下:
    1 #include<stdio.h>
    int main(void/*該程序可顯示出一年中有多少周/*
    3 {
    4 int s;

    6 s = 52;
    7 printf("There are %d weeks in a year.\n",s);
    8 return 0;
    9 }
    5、假設下面的每一個例子都是某個完整程序的一部分,它們每個將輸出什么結果?
    a.printf("Baa Baa Black Sheep.");
       printf("Have you any wool?\n");
    b.printf("Begone!\n0 creature of lard!");
    c.printf("What?\nNo/nBonzo?\n");
    d.int num;

      num = 2;
      printf("%d + %d = %d",num,num,num + num);
    答:a.Baa Baa Black Sheep.Have you any wool?(注意:在句號之后沒有空格。)
         b.Begone!
            0 creature of lard!(注意光標仍留在第2行結束處。)
         c.What?
            No/nBonzo?(注意斜線符號”/“沒有反斜線符號”\“所具有的作用,它只是簡單地作為斜線符號被打印出來。)
         d.2 + 2 = 4
    6、下面哪幾個是C的關鍵字?main,int,function,char,=
    答:int,char(注意main只是一個函數名,函數是C中的一個技術術語。=是一個運算符)
    7、如何以下面的格式輸出words和lines的值:"There were 3020 words and 350 lines"?這里,3020和350代表兩個變量的值。
    答: 
     1 #include <stdio.h>
     2
     int main(void)
     3 {
     4     int num1,num2;
     5     num1 = 3020;
     6     num2 = 350;
     7 
     8     printf("There were %d words and %d lines\n",num1,num2);
     9     return 0;
    10 }
    8、考慮下面的程序:
     1 #include <stdio.h>
     2 int main(void)
     3 {
     4     int a, b;
     5 
     6     a = 5;
     7     b = 2; /*第7行*/
     8     b = a; /*第8行*/
     9     a = b; /*第9行*/
    10     printf("%d %d\n", b, a);
    11     return 0;
    12 }
    請問在第7行、第8行和第9行之后程序的狀態分別是什么?
    答:第7行之后,a為5,b為2。第8行之后,a為5,b為5。第9行之后,a為5,b為5。
    編程練習(新手初學,僅供參考!!!)
    1、
    1 #include <stdio.h>
    2 int main(void)
    3 {
    4     printf("Li Ayun\n");
    5     printf("Li\nAyun\n");
    6     printf("Li ");
    7     printf("Ayun\n");
    8     return 0;
    9 }
    2、
    1 #include <stdio.h>
    2 int main(void)
    3 {
    4     printf("My name is Li Ayun!\n");
    5     printf("I live in BeiJing now!\n");
    6     return 0;
    7 }
    3、
    1 #include <stdio.h>
    2 int main(void)
    3 {
    4     int age;
    5     age = 23;
    6     printf("age = %d, days = %d\n", age, age * 365);
    7     return 0;
    8 }
    4、
     1 #include <stdio.h>
     2 void show(void);
     3 void end(void);
     4 int main(void)
     5 {
     6     show();
     7     show();
     8     show();
     9     end();
    10     return 0;
    11 }
    12 void show(void)
    13 {
    14    printf("For he's a jolly good fellow!\n");
    15 }
    16 void end(void)
    17 {
    18     printf("Which nobody can deny!\n");
    19 }
    5、
    1 #include <stdio.h>
    2 int main(void)
    3 {
    4     int toes;
    5     toes = 10;
    6 
    7     printf("toes = %d\ntoes + toes = %d\ntoes * toes = %d", toes, toes + toes, toes * toes);
    8     return 0;
    9 }
    6、
     1 #include <stdio.h>
     2 void showSmile(void);
     3 int main(void)
     4 {
     5     showSmile();
     6     showSmile();
     7     showSmile();
     8     printf("\n");
     9     showSmile();
    10     showSmile();
    11     printf("\n");
    12     showSmile();
    13     return 0;
    14 }
    15 void showSmile(void)
    16 {
    17     printf("Smile!");
    18 }
    7、
     1 #include <stdio.h>
     2 void one_three(void);
     3 void two(void);
     4 int main(void)
     5 {
     6     printf("starting now:\n");
     7     one_three();
     8     two();
     9     printf("done!");
    10     return 0;
    11 }
    12 void one_three(void)
    13 {
    14     printf("one\n");
    15 }
    16 void two(void)
    17 {
    18     printf("two\nthree\n");
    19 }

    posted @ 2015-10-28 20:22 李阿昀 閱讀(392) | 評論 (0)編輯 收藏

    第1章  概覽
       復習題
       1、就編程而言,可移植性表示什么?
       答:可移植性意味著在一個系統上編寫的C程序經過很少改動或不經修改就可以在其他系統上運行。如果修改是必要的,則通常只須改變伴隨主程序的一個頭文件(header)中的幾項內容即可。
       2、解釋源代碼文件、目標代碼文件和可執行文件之間的區別。
       答:源代碼文件中包含著程序員使用任何語言編寫的代碼。目標代碼文件包含著機器語言代碼,它并不需要是完整的程序代碼。可執行文件包含著組成可執行程序的全部機器語言代碼。
       3、編程的7個主要步驟是什么?
       答:第1步:定義程序目標
             第2步:設計程序
             第3步:編寫代碼
             第4步:編譯
             第5步:運行程序
             第6步:調試 
             第7步:維護和修改程序
       4、編譯器的任務是什么?
       答:編譯器把源代碼(例如,用C語言寫成的代碼)轉換成機器語言代碼,也稱對象代碼。
       5、鏈接器的任務是什么?
       答:鏈接器把多個來源(例如,已編寫的源代碼、庫代碼和啟動代碼)的目標代碼連接成一個單獨的可執行程序。
       編程練習
       1、
     1 #include <stdio.h>
     2
     int main(void)
     3 {
     4     float feet,cm;
     5 
     6     printf("Please enter your feet:");
     7     scanf("%f",&feet);
     8     cm = feet * 2.54;
     9     printf("So you have %.2f cm!\n",cm);
    10    return 0;
    11 }
    posted @ 2015-10-28 19:39 李阿昀 閱讀(279) | 評論 (0)編輯 收藏

    僅列出標題
    共2頁: 上一頁 1 2 
    主站蜘蛛池模板: 国产 亚洲 中文在线 字幕| 国产精品1024永久免费视频| ASS亚洲熟妇毛茸茸PICS| 亚洲人成人无码网www电影首页| 免费无码A片一区二三区| 日韩免费在线观看视频| 一进一出60分钟免费视频| 亚洲色大成网站www永久网站| 久久亚洲精品成人777大小说| 亚洲AV无码一区二区三区国产| 日韩视频在线精品视频免费观看| 欧美在线看片A免费观看| 中文字幕在线免费看线人| 污视频网站免费观看| 亚洲午夜理论片在线观看| 亚洲精品视频专区| 亚洲另类激情综合偷自拍 | 亚洲中文字幕久在线| 亚洲精品高清视频| 亚洲人成网7777777国产| 亚洲av无码国产精品色在线看不卡 | 在线观看亚洲视频| 亚洲国产精品无码观看久久| 一区二区三区亚洲| 亚洲午夜免费视频| 亚洲精品自产拍在线观看动漫| 国产亚洲av片在线观看播放| 亚洲成人免费网址| 免费无码成人AV在线播放不卡| 青青操免费在线视频| 中文字幕视频在线免费观看| 国产免费福利体检区久久| jyzzjyzz国产免费观看| 国产国产人免费人成成免视频| 国产精品美女久久久免费| 本道天堂成在人线av无码免费| 免费又黄又爽又猛大片午夜 | 搡女人真爽免费视频大全| 大地资源二在线观看免费高清| 国产精品美女午夜爽爽爽免费| 无码精品A∨在线观看免费|