BeautifulMan

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

          #

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

          復(fù)習(xí)題
          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行:應(yīng)該有#include <stdio.h>。
          第3行:應(yīng)該以分號而不是逗號結(jié)尾。
          第6行:while語句建立一個無限循環(huán)。因為i的值保持為1,所以它總是小于30。推測一下它的意思大概是要寫成while(i++ < 30)。
          第6到8行:這樣的縮排說明我們想要使第7行和8行組成一個代碼塊,但是缺少了花括號會使while循環(huán)只包括第7行。應(yīng)該添加花括號。
          第7行:因為1和i都是整數(shù),所以當i為1時除法運算的結(jié)果會是1,而當i為更大的數(shù)時結(jié)果為0。使用n = 1.0/i;會使i在進行除法運算之前先轉(zhuǎn)換為浮點數(shù),這樣就會產(chǎn)生非0的答案。
          第8行:我們在控制語句中漏掉了換行符(\n),這會使數(shù)字只要可能就在一行中打印。
          第10行:應(yīng)該是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的其他一種設(shè)計方法。表面上看,它使用了一個scanf()函數(shù)替代了程序清單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()語句之間的關(guān)系。具體地說,第一次進行判斷時,程序還沒有機會來獲得sec的值,這樣就會對碰巧處在那個內(nèi)存位置的一個垃圾值進行比較。一個比較笨拙的解決方法是對sec進行初始化,比如把它初始化為1,這樣就可以通過第一次判斷。但是還有一個問題,當最后輸入0來停止程序時,在循環(huán)結(jié)束之前不會檢查sec,因而0秒的結(jié)果也被打印出來。更好的方法是使scanf()語句在進行while判斷之前執(zhí)行。可以通過像下面這樣改變程序的讀取部分來做到這一點:
          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 }
          第一次獲取輸入使用循環(huán)外部的scanf(),以后就使用在循環(huán)結(jié)尾處(也即在循環(huán)再次執(zhí)行之前)的scanf()語句。這是處理這類問題的一個常用方法。
          5、下面的程序?qū)⒋蛴∈裁矗?br />
           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、下面的程序?qū)⒋蛴∈裁矗?br />
           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、下面的程序?qū)⒋蛴〕鍪裁矗?br />
           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(注意:每個數(shù)字占據(jù)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循環(huán)的一部分。因此它只是在while循環(huán)結(jié)束之后被調(diào)用一次,我看成一個代碼塊了)
          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、下面的程序?qū)⒋蛴∈裁矗?br />
           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 }
          答:
          這是一個構(gòu)造有缺陷的程序。因為while語句沒有使用花括號,只有printf()語句作為循環(huán)的一部分,所以程序無休止地打印消息COMPUTER BYTES DOG直到您強行關(guān)閉程序為止。
          11、構(gòu)造完成下面功能(或者用一個術(shù)語來說,有下面的副作用)的語句:
          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、構(gòu)造具有下面功能的語句:
          a.把變量x的值減1
          b.把n除以k所得的余數(shù)賦給m
          c.用b減去a的差去除q,并將結(jié)果賦給p
          d.用a與b的和除以c與d的乘積,并將結(jié)果賦給x
          答:
          a.x--; or --x; or x = x - 1;
          b.m = n % k;
          c.p = q / (b - a);
          d.x = (a + b) / (c * d);
          編程練習(xí)
          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()函數(shù),還是用目前的知識弄不出來,啊!
           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章 循環(huán)部分,原來可以這樣做,是我讀書太不用心了!
           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 李阿昀 閱讀(484) | 評論 (0)編輯 收藏

          復(fù)習(xí)題
          1、再次運行程序清單4.1,但是在要求您輸入名字時,請輸入您的名字和姓氏。發(fā)生了什么?為什么?
          答:
           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個字符的數(shù)組
           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 }
          如果輸入名字和姓氏,會輸出如下結(jié)果:
          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()語句只是讀入您的名而沒有讀入您的姓,您的姓依然存儲在輸入“緩沖區(qū)”(緩沖區(qū)只是一塊用來存放輸入的臨時存儲區(qū)域)中。當下一個scanf()語句想要讀入您的體重時,它從上次讀入結(jié)束的地方開始,這樣就試圖把您的姓作為體重來讀取。這會使scanf()失敗。一方面,如果您對姓名請求做出像Li 123這樣的響應(yīng),程序會使用123作為您的體重,雖然您是在程序請求體重之前輸入123的。
          2、假定下列每個示例都是某個完整程序的一部分。它們的打印結(jié)果分別是什么?
          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()函數(shù)輸出字符串中字符(包括空格和標點符號)的準確數(shù)目)
             has 43 characters.
          d.Is 1.20e+003 the same as 1201.00?
          3、在問題2c中,應(yīng)進行哪些修改以使字符串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、假設(shè)一個程序這樣開始:
          1 #define BOOK "War and Peace"
          2 int main(void)
          3 {
          4     float cost = 12.99;
          5     float precent = 80.0;
          請構(gòu)造一個printf()語句,使用BOOK、cost和percent打印下列內(nèi)容:
          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、您會使用什么轉(zhuǎn)換說明來打印下列各項內(nèi)容?
          a.一個字段寬度等于數(shù)字位數(shù)的十進制整數(shù)。
          b.一個形如8A、字段寬度為4的十六進制整數(shù)。
          c.一個形如232.346、字段寬度為10的浮點數(shù)。
          d.一個形如2.33e+002、字段寬度為12的浮點數(shù)。
          e.一個字段寬度為30、左對齊的字符串。
          答:
          a.%d
          b.%4X
          c.%10.3f
          d.%12.2e
          e.%-30s
          對于浮點數(shù)來說,字段寬度包含了小數(shù)點右邊的數(shù)字的數(shù)目
          7、您會使用哪個轉(zhuǎn)換說明來打印下列各項內(nèi)容?
          a.一個字段寬度為15的unsigned long整數(shù)
          b.一個形如0x8a、字段寬度為4的十六進制整數(shù)
          c.一個形如2.33E+02、字段寬度為12、左對齊的浮點數(shù)
          d.一個形如+232.346、字段寬度為10的浮點數(shù)
          e.一個字符串的前8個字符,字段寬度為8字符
          答:
          a.%15lu
          b.%#4x(字段寬度應(yīng)放在#和x之間)
          c.%-12.2E("-"修飾符使浮點數(shù)左對齊輸出)
          d.%+10.3f
          e.%-8.8s("-"修飾符使文本左對齊輸出)
          8、您會使用什么轉(zhuǎn)換說明來打印下列各項內(nèi)容?
          a.一個字段寬度為6、最少有4位數(shù)字的十進制整數(shù)
          b.一個字段寬度在參數(shù)列表中給定的八進制整數(shù)
          c.一個字段寬度為2的字符
          d.一個形如+3.13、字段寬度等于數(shù)字中字符個數(shù)的浮點數(shù)
          e.一個字符串的前5個字符,字段寬度為7、左對齊
          答:
          a.%6.4d
          b.%*o(此處為小寫字母o,而不是數(shù)字0)
          c.%2c
          d.%+.2f
          e.%-7.5s
          9、為下列每個輸入行提供一個對其進行讀取的scanf()語句,并聲明語句中用到的所有變量或數(shù)組。
          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、假設(shè)您想在程序中使用圓括號代替花括號。以下方法可以嗎?
          #define ( {
          #define ) }
          答:
          會發(fā)生替換。但不幸的是,預(yù)處理器不能區(qū)別哪些圓括號應(yīng)該被替換成花括號,哪些圓括號不應(yīng)該被替換成花括號。因此:
          1 #include <stdio.h>
          2 #define ( {
          3 #define ) }
          4 int main(void)
          5 (
          6     printf("Hello World!\n");
          7     return 0;
          8 )
          會變?yōu)椋?br />
          1 #include <stdio.h>
          2 int main{void}
          3 {
          4     printf{"Hello World!\n"};
          5     return 0;
          6 }
          所有圓括號都要替換為花括號。
          編程練習(xí)
          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 }
          結(jié)果為:(看起來有一點怪啊!!!)
          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; // 英里數(shù)
           7     float gallon; // 加侖數(shù)
           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 李阿昀 閱讀(822) | 評論 (0)編輯 收藏

          第3章  數(shù)據(jù)和C
          復(fù)習(xí)題
          1、對下面的各種數(shù)據(jù)使用合適的數(shù)據(jù)類型:
               a.East Simpleton的人口
               b.DVD影碟的價格
               c.本章出現(xiàn)次數(shù)最多的字母
               d.這個字母出現(xiàn)的次數(shù)
          答:a.int類型,可以是short、unsigned或unsigned short;人口數(shù)是一個整數(shù)。
                b.float類型;價格不太可能正好是一個整數(shù)(您也可以使用double,但實際上并不需要那么高的精度)。
                c.char類型。
                d.int類型,可以是unsigned。
          2、需要用long類型變量代替int類型變量的原因是什么?
          答:一個原因是在您的系統(tǒng)中l(wèi)ong可以容納比int類型更大的數(shù);一個原因是如果您確實需要處理更大的值,那么使用一種在所有系統(tǒng)上都能保證至少是32位的類型會使程序的可移植性更好。
          3、獲得一個32位的有符號整數(shù),可以使用哪些可移植的數(shù)據(jù)類型?每種選擇的原因是什么?
          答:要獲得正好是32位的數(shù),您可以使用int32_t(如果在您的系統(tǒng)上有這一定義的話)。要獲得可存儲至少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行:應(yīng)該是#include <stdio.h>
                第2行:應(yīng)該是int main(void)
                第3行:使用{,而不是(
                第4行:在g和h之間應(yīng)該是逗號而不是分號
                第5行:無錯誤
                第6行:(空行)無錯誤
                第7行:在e之前應(yīng)該至少有一個數(shù)字,.1e21或1.e21都是正確的,盡管這個數(shù)有點大。
                第8行:無錯誤,至少在語法上沒有
                第9行:使用},而不是)
          缺少的行:首先,rate沒有被賦值。其次,變量h從來沒有被使用。而且程序永遠不會把它的計算結(jié)果通知給您。這些錯誤都不會阻止程序的運行(盡管可能會向您出示一個警告以說明變量沒有被使用),但是它們確實減弱了程序本來就不多的功能。而且在結(jié)尾處應(yīng)該有一個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、指出下表中各常量的數(shù)據(jù)類型(在聲明語句中使用的數(shù)據(jù)類型)及其在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、
          指出下表中各常量的數(shù)據(jù)類型(在聲明語句中使用的數(shù)據(jù)類型)及其在printf()中的格式說明符,假設(shè)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、假設(shè)一個程序開始處有如下的聲明:
          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、假設(shè)ch為char類型變量。使用轉(zhuǎn)義序列、十進制值、八進制字符常量以及十六進制字符常量等方法將其賦值為回車符(假設(shè)使用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、指出下列轉(zhuǎn)義字符的含義:
          1 a.\n
          2 b.\\
          3 c.\"
          4 d.\t
          答:a.換行字符
                b.反斜線字符
                c.雙引號字符
                d.制表字符
          編程練習(xí)(如有錯誤,希望指正!!!)
          1、
           1 /* 整數(shù)上溢*/
           2 #include <stdio.h>
           3 int main(void)
           4 {
           5     int i = 2147483647;
           6     unsigned int j = 4294967295;
           7 
           8     /*
           9         無符號整數(shù)j像一個汽車里程指示表(形容的太好了,可參考《計算機科學(xué)導(dǎo)論》第3章 數(shù)據(jù)存儲,有圖),
          10        當達到最大值時,它將溢出到起始點。整數(shù)i也是同樣。它們的主要區(qū)別是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 }
          運行結(jié)果:
          2147483647 -2147483648 -2147483647
          4294967295 0 1
          浮點數(shù)的上溢和下溢???(理解的不是很清楚,回頭再來寫)
          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; // 夸脫數(shù)應(yīng)該為整數(shù)吧!!
          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 李阿昀 閱讀(1426) | 評論 (0)編輯 收藏

          第2章 C語言概述
          復(fù)習(xí)題
          1、如何稱呼C程序的基本模塊?
          答:它們被稱為函數(shù)。
          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 已經(jīng)編好了下面的程序,并想征求你的意見。請幫助他評定。
          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行:使用(),而不是使用{};使用*/來結(jié)束注釋,而不是使用/*。
               第3行:使用{,而不是(。
               第4行:使用分號來結(jié)束語句。
               第5行:Indiana使這一行(空白行)正確!
               第6行:使用=,而不是使用:=進行賦值(顯然,Indiana 了解一些Pascal)。每年有52周而不是56周。
               第7行:應(yīng)該是printf("There are %d weeks in a year.\n",s);
               第9行:源程序沒有第9行,但是應(yīng)該有,它應(yīng)該包含一個結(jié)束花括號}。
          在進行這些修改之后,代碼如下:
          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、假設(shè)下面的每一個例子都是某個完整程序的一部分,它們每個將輸出什么結(jié)果?
          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行結(jié)束處。)
               c.What?
                  No/nBonzo?(注意斜線符號”/“沒有反斜線符號”\“所具有的作用,它只是簡單地作為斜線符號被打印出來。)
               d.2 + 2 = 4
          6、下面哪幾個是C的關(guān)鍵字?main,int,function,char,=
          答:int,char(注意main只是一個函數(shù)名,函數(shù)是C中的一個技術(shù)術(shù)語。=是一個運算符)
          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行之后程序的狀態(tài)分別是什么?
          答:第7行之后,a為5,b為2。第8行之后,a為5,b為5。第9行之后,a為5,b為5。
          編程練習(xí)(新手初學(xué),僅供參考!!!)
          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 李阿昀 閱讀(396) | 評論 (0)編輯 收藏

          第1章  概覽
             復(fù)習(xí)題
             1、就編程而言,可移植性表示什么?
             答:可移植性意味著在一個系統(tǒng)上編寫的C程序經(jīng)過很少改動或不經(jīng)修改就可以在其他系統(tǒng)上運行。如果修改是必要的,則通常只須改變伴隨主程序的一個頭文件(header)中的幾項內(nèi)容即可。
             2、解釋源代碼文件、目標代碼文件和可執(zhí)行文件之間的區(qū)別。
             答:源代碼文件中包含著程序員使用任何語言編寫的代碼。目標代碼文件包含著機器語言代碼,它并不需要是完整的程序代碼。可執(zhí)行文件包含著組成可執(zhí)行程序的全部機器語言代碼。
             3、編程的7個主要步驟是什么?
             答:第1步:定義程序目標
                   第2步:設(shè)計程序
                   第3步:編寫代碼
                   第4步:編譯
                   第5步:運行程序
                   第6步:調(diào)試 
                   第7步:維護和修改程序
             4、編譯器的任務(wù)是什么?
             答:編譯器把源代碼(例如,用C語言寫成的代碼)轉(zhuǎn)換成機器語言代碼,也稱對象代碼。
             5、鏈接器的任務(wù)是什么?
             答:鏈接器把多個來源(例如,已編寫的源代碼、庫代碼和啟動代碼)的目標代碼連接成一個單獨的可執(zhí)行程序。
             編程練習(xí)
             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 李阿昀 閱讀(283) | 評論 (0)編輯 收藏

          僅列出標題
          共2頁: 上一頁 1 2 
          主站蜘蛛池模板: 丹寨县| 泗水县| 武宣县| 郎溪县| 祁门县| 海门市| 镇宁| 长宁县| 靖宇县| 上蔡县| 鄂托克旗| 大足县| 雷州市| 广汉市| 万山特区| 宿松县| 安庆市| 扶余县| 城市| 桑日县| 德安县| 怀远县| 绥江县| 阿荣旗| 尚义县| 张家界市| 巩义市| 鄂伦春自治旗| 孟村| 新兴县| 沈阳市| 桓台县| 蒲城县| 喀喇沁旗| 武胜县| 本溪| 北川| 婺源县| 蒲江县| 宁远县| 敦煌市|