C程序設計(第四版)課后習題完整版 譚浩強編著


//復習過程中,純手打,持續更新,覺得好就點個贊吧。

第一章:程序設計和C語言

習題

1、什么是程序?什么是程序設計?

答:程序就是一組計算機能識別和執行的指令。
程序設計是指從確定任務到得到結果,寫出文檔的全過程。(一般經歷6個階段:①問題分析;②設計算法;③編寫程序;④對源程序進行編輯,編譯和連接;⑤運行程序,分析結果;⑥編寫程序文檔;)

2、為什么需要計算機語言?高級語言的特點?

答:如同和人類交流一樣,和哪個國家的人交流就需要哪個國家的語言來作為橋梁,想要和計算機進行交流溝通也就需要計算機語言,溝通以后就能用計算機做很多事情,更好的控制計算機 更好的用計算機完成我們的目的。高級語言同自然語言相近,便於人類理解和記憶,從人類的邏輯思維角度出發的計算機語言,抽象程度大大提高,需要經過編譯成特定機器上的目標代碼才能執行,一條高級語言的語句往往需要若干條機器指令來完成。

3、正確理解以下名詞及其含義

(1)源程序 目標程序  可執行程序

答:用高級語言編寫的代碼程序即為源程序。

(2)程序編輯  程序編譯  程序連接

答:

(3)程序  程序模塊 程序文件

答:程序就是一組計算機能識別和執行的指令。

(4)函數 主函數  被調用函數  庫函數

答:

(5)程序調試  程序測試

答:

4、 自學本書復錄A,熟悉上級運行C程序的方法,上級運行本章3個例題。

 

5、請參照本章列題,編寫一個C程序,輸出以下信息:

*******************************

Very good !

*******************************

 1  #include<stdio.h>
 2  int main()
 3 {
 4        for(int i=1;i<8;i++)
 5         {
 6               printf("**");
 7         } 
 8         printf("\n");
 9         printf("Very Good ! \n");
10        
11         for(int i=1;i<8;i++)
12         {
13               printf("**");
14         } 
15         
16         return 0;
17             
18 }   

6、編寫一個C程序,輸入a,b,c三個值,輸出其中最大者。

 1 #include <stdio.h>
 2 
 3 int main () {
 4     int max(int a,int b,int c);
 5     int x=92,y=100,z=70;
 6     int c=max(x,y,z);
 7     printf("%d\n",c);
 8     return 0;
 9 }
10 
11 int max(int a,int b ,int c)
12 {
13     if(a>b)
14     {
15         if(a>c)
16             return a;
17         else 
18             return c;
19     }    
20     else if(b>c)
21     {
22         return b;
23     }else
24         return c;
25         
26 }

第二章:算法-----程序的靈魂

讀書筆記:

1、一個程序主要包括數據結構和算法。在程序中指定用到哪些數據以及這些數據的類型和數據的組織形式就是數據結構。對操作的描述即為算法。

2、算法的特性:有窮性;確定性;有零個或多個輸入、輸出;有效性。

3、表示算法的方法:自然語言表示;程序流程圖表示;N-S流程圖表示;偽代碼表示;計算機語言表示。

4、程序流程圖的基本結構:順序結構;選擇結構;循環結構(當型循環、直到型循環)。

習題:

1、什么是算法?試從日常生活中找三個列子,描述他們的算法。

答:算法是對一個程序涉及到的操作的描述。eg1:機場過安檢:安檢口驗證登機人信息是否一致,驗證通過將自己的行李放到行李安檢區,此時安檢人員檢查登機者,都通過允許進入候機廳。

2、什么叫結構化的算法?為什么要提倡結構化的算法?

答:由順序結構,選擇結構,循環結構構成的算法即為結構化的算法。結構化的算法不存在無規律的轉向,只在本基本結構內才允許存在分支和向前或向后的跳轉。不會出現死循環,使算法的質量得到保證和提高,所以,要提倡結構化的算法。

3、試述3種基本結構的特點,請另外設計一種基本結構。

答:順序結構可以保證代碼從上到下一個總的編寫邏輯結構。選擇結構能夠靈活的進行分支判斷,增強代碼的健壯性。循環結構有效提高簡單重復率高程序的運行效率。 do{語句} while(條件);

 4、

5、

6、

7、

8、用自頂向下,逐步細化的方法進行以下算法的設計:

(1)輸出1900~2000年中是閏年的年份,符合下面兩個條件之一的年份是閏年:①能被4整除但不能被100整除  ②能被100整除且能被400整除

 1 #include <stdio.h>
 2     
 3 int checkYear(int year){
 4     if(year%100==0 && year%400==0)
 5         return year;
 6     else if(year%4==0 && year%100!=0)
 7         return year;    
 8     return 0;
 9 }
10         
11 int main () {
12     //printf("%d",checkYear(2000));
13     int i,result;
14     for(i=1900 ;i<2001 ;i++){
15         result=checkYear(i);
16         if(result==0)
17             continue;
18         else
19             printf("%d\n",result);
20     }
21 }

(2)求ax2+bx+c=0的根,分別考慮d=b2-4ac大於0、等於0和小於0這三種情況。

 

(3)輸入10個數,輸出其中最大的一個數。

 第三章 最簡單的C程序設計-----順序程序設計

讀書筆記:

1、常量的分類:

  1. 整形常量:即常見的整數
  2. 實型常量:十進制小數形式和指數形式。指數的表達形式舉例:12.34*103   -->12.34e3   0.14E-25---->0.14*10-25
  3. 字符常量:普通字符范圍在Ascii表中、轉義字符即有特殊含義的字符:常以\作為開始符號
  4. 字符串常量:用雙引號括起來的字符串,嚴格區分單引號,單引號只能表示單字符
  5. 符號常量:宏定義、#define  系列

2、變量必須先定義再使用

3、常變量用const'進行命名 eg:const float a=3.14 與符號常量#define a 3.14 的區別是:符號常量是預編譯指令,在預編譯時進行字符替換,預編譯完成后,符號常量就不存在了。常變量是占用存儲單元,有值的,只是不可變更。

4、標識符的命名標准:只能由字母數字下划線三種組成。數字不能作為變量名的開始。

5、數據類型:vc6.0下的變量

不同類型的數據在內存中占用的存儲單元長度是不同的。使用sizeoif()函數測量類型或者變量的長度的運算符。

常見數據類型長度:short 2個字節16位。long 4個字節32位  。int 4個字節32位 。一個指針 4位。

6、字符變量的輸出:當輸出值大於128時,減去128輸出對應的ASCII碼的字符。

 

習題:

 

第四章選擇結構程序設計:

讀書筆記:

 

 

習題:

1、什么是算數運算?什么是關系運算?什么是邏輯運算?

答:算數運算就是數字與數字之間的加減乘除等基本算數運算。關系運算為 > 、< 、>= 、<= 、==之間的關系運算。邏輯運算為以與或非進行排列組后以后的邏輯運算。

2、C語言中如何表示“真”和“假”?系統如何判斷一個量的“真”和“假”?

答:C語言中用非零表示真,用0表示假;也可用bool類型的true和false 進行真假的表示,依賴於c的編譯器是否支持bool類型數據。在判斷一個量是否為“真”時,以0代表“假”,以非0代表“真”

3、寫出下面各邏輯表達式的值。設a=3,b=4,c=5:  1. a+b>c && b==c      2. a || b+c && b-c    3. !(a>b)&&!c || 1     4. !(x=a)&&(y=b)&&0    5. !(a+b)+c-1&&b+c/2 

答:如下:

  1.  0因為a+b=7是大於c的,這個式子得1,b==c是不成立的,得0.1&&0得0。
  2. 因為&&的優先級高於||所以,a的得值為1,||后面的那個式子不管是多少都不會影響整個式子的結果了,所以結果為1;
  3. 結果為1.原因跟上面一樣。
  4. x=a的值為1,只有當a=0時,賦值表達式的結果才為0.其他狀態都為1.所以!(a>b)為0.整個式子是由&&組成的,結果就為0了。
  5. !(a+b)+c-1=0+5-1=4!=0,所以結果為1.b+c/2 =4+5/2=6!=0,根據整數整除是向下取整的原則,所以式子結果也為1。1&&1的結果為1.

4、有三個整數a,b,c由鍵盤輸入,輸出其中最大的數:

 1 #include<stdio.h>
 2 //查找輸入值的最大值
 3 int findMax(int a,int b,int c){
 4     if(a>b){
 5         if(a>c){
 6             return a;
 7         }else
 8             return c;
 9     }else if(b>c)
10         return b;
11     else
12         return c;
13 }
14 
15 void main(){
16 
17     int a,b,c;//定義三個變量 a,b,c
18     printf("請輸入三個整數,並以逗號隔開!!!\n");
19     scanf("%d,%d,%d",&a,&b,&c);
20     int result=findMax(a,b,c);
21     printf("最大的數為:%d\n",result);
22 }

5、從鍵盤輸入一個小於1000的正數,輸出它的平方根(如平方根不是整數,則輸出其整數部分)。要求在輸入數據后檢查是否為小於1000的正數,若不是則要求重新輸入。

 1 #include<stdio.h>
 2 #include<math.h>//平方根調用math類庫中的sqrt方法
 3 
 4 void main(){
 5 
 6     int a;
 7     printf("請輸一個小於1000的正數!!!\n");
 8     scanf("%d",&a);
 9     if(a<1000 && a>0){
10         int result=sqrt(a);
11         printf("該數的平方根為%d\n",result);
12     }else
13     {
14         printf("輸入錯誤,請重新輸一個小於1000的正數!!!\n");
15         main();//輸出錯誤,繼續輸入。
16     }
17     
18 
19 }

6、有一個函數:

寫程序,輸入x的值,輸出y相應的值。

 1 #include <stdio.h>
 2 #include <math.h>
 3 int main()
 4 {
 5     int x, y;
 6     printf("Please enter x: ");
 7     scanf("%d", &x);
 8     if (x < 1)
 9         y = x;
10     else if (x >= 1 && x <10)
11         y = 2 * x - 1;
12     else
13         y = 3 * x - 11;
14     printf("y = %d\n", y);
15     return 0;
16 }

8、習題 4.8 給出一百分制成績,要求輸出成績等級‘A’、‘B’、‘C’、‘D’、‘E’。90分以上為‘A’,80~89分為‘B’,70~79分為‘C’,60~69分為‘D’,60分以下為’E‘。

 1 #include <stdio.h>
 2 
 3 int main()
 4 {
 5     int score, g;
 6     scanf("%d", &score);
 7     while (score < 0 || score > 100){
 8         printf("Error! Retry!\n");
 9         scanf("%d", &score);
10     }
11     g = score / 10; //成績除以10的商進行判斷
12     if (g >= 9)
13         printf("Grade is A!\n");
14     switch(g){
15     case 0:
16     case 1:
17     case 2:
18     case 3:
19     case 4:
20     case 5: printf("Grade is E!\n"); break;//成績為60以下都會執行到這里
21     case 6: printf("Grade is D!\n"); break;
22     case 7: printf("Grade is C!\n"); break;
23     case 8: printf("Grade is B!\n"); break;
24     }
25     return 0;
26 }

9、給一個不多於5位的正整數,要求:1. 求出它是幾位數;2. 分別輸出每一位數字;3. 按逆序輸出各位數字,例如原數為321,應輸出123。

 

 1 #include <stdio.h>
 2 
 3 //計算數字的位數
 4 int calcSize(int x){
 5     int count=1;//cout定義為數字的位數,初始值為0
 6     while(x>10){
 7         x=x/10;
 8         count++;
 9     }
10     return count;
11 }
12 
13 //判斷數字是否合法
14 bool isLeagl(int x){
15     bool flag=false;
16     if(x<0)
17         return flag;
18     if(calcSize(x)>5)
19         return flag;
20     flag=true;
21     return flag;
22 }
23 
24 
25 //按位輸出每一位數字(從個位開始輸出)
26 void printNumOneByOne(int x){
27     int temp;
28     int xx;
29     printf("按位輸出每一位數字(從個位開始輸出):");
30     while(x>0){
31         temp=x;
32         temp=temp%10;
33         printf("%d,",temp);
34         x=x/10;
35     }
36     printf("\n");
37 }
38 
39 
40 //逆序輸出該數字
41 void reverseNum(int x){
42     int y;
43     for(y=0;x!=0;x=x/10 ){
44         y=y*10+x%10;
45     }
46     printf("%d\n",y);
47 
48 }
49 int main()
50 {
51     int x;
52     puts("請輸入一位不多於5位的正整數!!!");
53     scanf("%d",&x);
54     if(isLeagl(x)==false){
55         puts("輸入錯誤,請重新輸入一位不多於5位的正整數!!!");
56         return 0;
57     }
58     int s=calcSize(x);
59     printf("該數位數為:%d\n",s);
60     printNumOneByOne(x);
61     printf("逆序后的該數字:");
62     reverseNum(x);
63 }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM