當前位置:首頁 » 編程軟體 » 程序設計語言編譯原理第三版答案

程序設計語言編譯原理第三版答案

發布時間: 2022-05-26 00:31:08

1. 循環語句的語法分析及語義分析程序設計

目 錄
1 課程任務書····································(2)
1問題描述·······································(3)
2文法及屬性文法的描述···························(3)
2.1 while-do循環語句的文法·····················(3)
2.2while-do循環語句的結構翻譯·················(3)
3語法分析及中間代碼形式的描述···················(4)
3.1 語法分析方法·······························(4)
3.2 中間代碼形式描述···························(4)
4簡要的分析與概要設計···························(5)
4.1詞法分析··································(5)
4.2遞歸下降翻譯器的設計·······················(5)
4.3語法制導翻譯·······························(5)
5 詳細的演算法描述································(6)
5.1 文法·······································(6)
5.2 查錯·······································(6)
6 測試方法和測試結果···························(9)
6.1測試方法··································(9)
6.2測試結果··································(10)
7 設計的特點、不足、收獲與體會·················(10)
7.1 設計的特點································(10)
7.2 不足、收獲與體會··························(11)
8 參考文獻·····································(11)

課程設計任務書
題 目: 循環語句的語法分析及語義分析程序設計(遞歸下降法)
1.目的
通過設計、編制、調試一個語法及語義分析程序,加深對語法及語義分析原理的理解。

2.設計內容及要求
WHILE〈布爾表達式〉DO〈賦值語句〉
其中
(1)學號29至32的同學按順序分別選擇遞歸下降法、LL(1)、算符優先分析法(或簡單優先法)、LR法完成以上任務,中間代碼選用四元式。
(2)如1題寫出符合分析方法要求的文法,給出分析方法的思想,完成分析程序設計。
(3)編制好分析程序後,設計若干用例,上機測試並通過所設計的分析程序。

3.課程設計報告書的內容應包括:
1.設計題目、班級、學號、姓名、完成日期;
2.給出語法分析方法及中間代碼形式的描述、文法和屬性文法的設計;或者詞法分析方法
3.及符號表和TOKEN代碼的設計。
4.簡要的分析與概要設計;
5.詳細的演算法描述;
6.源程序清單;
7.給出軟體的測試方法和測試結果;
8.設計的評價、收獲與體會。

4.時間安排:
第17周,周1-周4上午,周五全天

指導教師簽名: 年 月 日
系主任(或責任教師)簽名: 年 月 日

1問題描述
設計一個WHILE〈布爾表達式〉DO〈賦值語句〉循環語句的詞法﹑語法及語義分析程序,語法分析選擇遞歸下降法,採用用語法制導翻譯輸出中間代碼四元式。
2文法及屬性文法的描述。
2.1 while-do循環語句的文法
產生式為S-> while E do A,為便於語法制導翻譯將其改寫如下:
文法G(s)如下:
S-->WEDG (意思是while E do G)
G-->c=R
R-->dTe|d
T-->+|-|*|/
E-->aFb
F--> >|==|<

2.2 whlie-do循環語句的結構翻譯:

3.語法分析方法及中間代碼形式的描述
3.1語法分析方法
遞歸下降法的實現思想是為文法的每個非終結符號設計一個相對應的遞歸子程序,識別程序由一組這樣的子程序組成。
它的優點是簡單直觀,易於構造,很多編譯系統所實現
缺點是對文法要求很高,由於遞歸調用多,影響分析器的效率
其文法可以表示為:
E→T│E+T
T→F│T*F
F→i│(E)
可以用語法圖來表示語言的文法,如圖:

E

T

F

3.2中間代碼形式描述
中間代碼採用四元式輸出,一個四元式是一個帶有四個域的記錄結構,這四個域分別稱為op﹑arg1﹑arg2及result。域op包含一個代表運算符的內部碼。語句while a<b do a=a+b的四元式輸出形式如下:
100 ( <, a , b , 102 )
101 ( j , _ , _ , 105 )
102 ( + , a , b , n )
103 ( = , n , _ , a )
104 ( j , _ , _ , 100)
105
4.簡要的分析與概要設計
4.1詞法分析
詞法分析程序的任務是:從左至右逐個字元地對源程序進行掃描,產生一個個的單詞符號,把作為字元串的源程序改造成為單詞符號的中間程序。詞法分析檢查的錯誤主要是挑出源程序中出現的非法符號。所謂非法符號是指不是程序設計語言中允許出現的符號,就像自然語句中的錯字。
4.2遞歸下降翻譯器的設計
1.:對每個非終結符A構造一個函數過程,對A的每個繼承屬性設置一個形式參數,函數的返回值為A的綜合屬性,A對應的函數過程中,為出現在A的產生式中的每一個文法符號的每一個屬性都設置一個局部變數。非終結符A對應的函數過程中,根據當前的輸入符號決定使用哪個產生式候選。
2:每個產生式對應的程序代碼中,按照從左到右的次序,對於單詞符號,非3:終結符和語義動作分別做以下工作。
(1)對於帶有綜合屬性x的終結符X,把x的值存入為X,x設置的變數中。然後產生一個匹配X的調用,並繼續讀入一個輸入符號。
(2)對於每個非終結符號B,產生一個右邊帶有函數調用的賦值語句c=B(b1,b2,…,bk)
(3)對於語義動作,把動作的代碼抄進分析器中,用代表屬性的變數來代替對應屬性的每一次引用。
4.3語法制導翻譯
在語法分析過程中,隨著分析的步步進展,根據每個產生式所對應的語義子程序(或語義規則描述的語義動作)進行翻譯。屬性文法的每個符號有屬性,所以每個符號入棧時,必須連屬性一起入棧,這樣,棧符號就由文法符號及存放該符號屬性的域所組成。由於屬性類型不同,屬性域存放的內容就要根據屬性的類型來定。有的可能直接存放屬性值,也有的存放的是指向屬性值的指針。對於綜合屬性,其屬性域不存放其屬性值,而是存放一個指針,指向存貯該屬性值的單元。對於繼承屬性,其屬性域直接保存其屬性值。繼承屬性的屬性域剛入棧時為空,但是在該棧符號變成棧頂符號之前的某一時刻,它們必須接受相應的屬性值,即在成為棧頂時,繼承屬性的屬性域必須有值。
5詳細的演算法描述
5.1 文法
/*
文法G(s)
s-->WEDG
G-->c=R
R-->dTe|d
T -> +|-|*|/|%E-->aFb
F--> >|==|<
*/
5.2 查錯
按照遞歸下降法求Wa<bDa=a+b,程序的執行順序應該是S()W()EF()D()G()R()T()
S()
void S()
{
printf("%d\tS-->WEDG\n",total);total++;
W();
E();
}

W()
void W()
{
if(ch!='W')
{
printf("有非法字元%c請按回車返回!!",ch);
getchar();
getchar();
exit(1);
}
}

E()
void E()
{
ch=a[++i1];
if(ch!='a')
{
printf("有非法字元%c %c請按回車返回!!",ch);
getchar();
getchar();
exit(1);
}
printf("%d\tE-->aFb\n",total);total++;
F();
}

F()
void F()
{
int i;
ch=a[++i1];
i=i1+1;
if(a[i]!='b')
{
printf("有非法字元%c請按回車返回!!",a[i]);
getchar();
getchar();
exit(1);
}
switch(ch)
{
case '>':
printf("%d\tF-->>\n",total);total++;
break;
case '==':
printf("%d\tF-->==\n",total);total++;
break;
default:
printf("%d\tF--><\n",total);total++;
break;
}
D();
G();
}

D()
void D()
{
++i1;
ch=a[++i1];
if(ch!='D')
{
printf("有非法字元%c請按回車返回!!",ch);
getchar();
getchar();
exit(1);}
ch=a[++i1];
}

G()
void G()
{
int i=i1+1;
if(ch!='c'&&a[i]!='=')
{
printf("有非法字元%c %c請按回車返回!!",ch,a[i]);
getchar();
getchar();
exit(1);
}
printf("%d\tG-->c=R\n",total);total++;
R();
}

R()
void R()
{
int i;
i=i1+1;
i1=i1+2;
ch=a[i1];
if(a[i]!='='&&ch!='d')
{
printf("有非法字元%c %c請按回車返回!!",a[i],ch);
getchar();
getchar();
exit(1);
}
else
{
if((a[i1+1]=='+')||(a[i1+1]=='-')||(a[i1+1]=='*')||(a[i1+1]=='/'))
{
printf("%d\tR-->dTe\n",total);total++;
T();
}
else
{
printf("%d\tR-->d\n",total);total++;
W();
E();
}
}
}

T()
void T()
{
ch=a[++i1];
switch(ch)
{
case '+':
printf("%d\tT-->+\n",total);total++;
break;
case '-':
printf("%d\tT-->-\n",total);total++;
break;
case '*':
printf("%d\tT-->*\n",total);total++;
break;
default:
printf("%d\tT-->/\n",total);total++;
break;
}
ch='#';
}

6測試方法和測試結果
6.1測試方法
在C++環境下,設計幾個有代表的用例,進行測試,例如:輸入語句Wa<bDa=a+b#(其中d表示do ,w表示while)。若得出的不是預期的結果,那麼程序就出現問題。如果有問題的話就進行單步調試找到程序中出現的邏輯問題。

6.2測試結果
測試結果如下:

7設計的特點、不足、收獲與體會
7.1設計的特點
本次設計是採用遞歸下降的方法對輸入的while--do 循環語句進行語法,語義分析,並輸出四元式。因此程序中充分體現了遞歸下降的思想。

7.2設計的不足,收獲與體會
本次的設計的不足主要是我沒將程序一般化,實現不了用戶自動輸入代碼進行詞法分析的四元式輸出,此程序只能實現對Wa<bDa=a+b#的分析與四元式輸出,由於我所設計的棧中只能一個字元一個字元的存放,因此只能用D W分別表示do while;而且我對語法制導翻譯這一塊很不熟悉,因此我始終不能用程序實現語法制導翻譯輸出四元式,於是根據自己的理解,直接把四元式寫了出來。
本次課程設計鞏固了我所學習的關於遞歸下降法這一方面的知識,並且使我對WHILE—DO循環語句也有了更深刻的理解,提高了我的動手能力。

8 課程設計參考資料
1張幸兒 《編譯原理》(第二版)清華大學出版社
2何炎祥 《編譯原理》華中理工大學出版社
3陳火旺 《程序設計語言編譯原理》(第3版)國防工業出版社

本科生課程設計成績評定表
班級:軟體0701姓名:周璐萍學號:0120710680129
序號 評分項目 滿分 實得分
1 學習態度認真、遵守紀律 10
2 設計分析合理性 10
3 設計方案正確性、可行性、創造性 20
4 設計結果正確性 40
5 設計報告的規范性 10
6 設計驗收 10
總得分/等級
評語:

註:最終成績以五級分制記。優(90-100分)、良(80-89分)、中(70-79分)、
及格(60-69分)、60分以下為不及格
源程序
#include <stdio.h>
#include<dos.h>
#include<stdlib.h>
#include<string.h>

char a[50],g[50][50];
char ch;
int n1,i1=0,i2=0;
int total=0;

void S();
void D();
void G();
void W();
void E();
void R();
void T();
void F();

void main()
{
int j=0;

printf("文法G(s)為:\n");
printf("s-->DGWE\n");
printf("G-->c=R\n");
printf("R-->dTe|d\n");
printf("T-->+|-|*|/\n");
printf("E-->aFb\n");
printf("F--> >|==|<\n");

printf("請輸入while-do語句(D代表do,W代表while),並以#結束:\n");
do{
scanf("%c",&ch);
a[j]=ch;
j++;
}while(ch!='#');
n1=j;
ch=a[0];

S();
printf("\n");

if (ch=='#')
{ printf("輸出四元式為:\n");
printf("100 (<,a,b,102)\n");
printf("101 (j,_,_,105)\n");
printf("102 (+,a,b,n)\n");
printf("103 (=,n,_,a)\n");
printf("104 (j,_,_,100)\n");
printf("105 \n");

}

else {

printf("error\n");

printf("press any key to continue..\n");

getchar();getchar();

return;

}

printf("\n");

printf("press any key to continue..\n");

getchar();
getchar();
}

/*出錯情況分析*/

void S()
{
printf("%d\tS-->WEDG\n",total);total++;
W();
E();
}

void W()
{

if(ch!='W')
{
printf("有非法字元%c請按回車返回!!",ch);
getchar();
getchar();
exit(1);
}
}

void E()
{
ch=a[++i1];
if(ch!='a')
{
printf("有非法字元%c %c請按回車返回!!",ch);
getchar();
getchar();
exit(1);
}
printf("%d\tE-->aFb\n",total);total++;
F();
}

void F()
{
int i;
ch=a[++i1];
i=i1+1;
if(a[i]!='b')
{
printf("有非法字元%c請按回車返回!!",a[i]);
getchar();
getchar();
exit(1);
}
switch(ch)
{
case '>':
printf("%d\tF-->>\n",total);total++;

break;
case '==':
printf("%d\tF-->==\n",total);total++;

break;
default:
printf("%d\tF--><\n",total);total++;

break;

}
D();
G();
}

void D()
{ ++i1;
ch=a[++i1];
if(ch!='D')
{ printf("有非法字元%c請按回車返回!!",ch);
getchar();
getchar();
exit(1);}
ch=a[++i1];

}

void G()
{ int i=i1+1;

if(ch!='c'&&a[i]!='=')
{ printf("有非法字元%c %c請按回車返回!!",ch,a[i]);
getchar();
getchar();
exit(1);}
printf("%d\tG-->c=R\n",total);total++;
R();
}

void R()
{
int i;
i=i1+1;
i1=i1+2;
ch=a[i1];
if(a[i]!='='&&ch!='d')
{
printf("有非法字元%c %c請按回車返回!!",a[i],ch);
getchar();
getchar();
exit(1);
}
else
{
if((a[i1+1]=='+')||(a[i1+1]=='-')||(a[i1+1]=='*')||(a[i1+1]=='/'))
{
printf("%d\tR-->dTe\n",total);total++;

T();

}
else
{
printf("%d\tR-->d\n",total);total++;

W();
E();
}
}

}

void T()
{
ch=a[++i1];
switch(ch)
{
case '+':
printf("%d\tT-->+\n",total);total++;

break;
case '-':
printf("%d\tT-->-\n",total);total++;

break;
case '*':
printf("%d\tT-->*\n",total);total++;

break;

default:
printf("%d\tT-->/\n",total);total++;

break;
}
ch='#';

}

指導教師簽名:
2010 年月日

2. 請問關於編譯原理有什麼好的書及網站介紹啊(中英文都可以的)

Compilers:Principles,Techniques,and Tools
Alfred V.Aho, Ravi Sethi, Jeffrey D.Ullman, 1986
人民郵電版影印,2002. 機械工業版中譯本,2003

《程序設計語言編譯原理》第3版
陳火旺 等 編著,國防工業出版社,2000

Advanced Compiler Design and Implementation
Steven S. Muchnick, 1997. 機械工業出版社影印,2003

Modern Compiler Implementation in C
Andrew W.Appel,人民郵電出版社影印,2005

Programming Language Pragmatics
Michaeil. Scott etc.,電子工業出版社中譯本,2005
這些都是編譯原理非常好的書,網上貌似也有電子版。

3. 急需程序設計語言編譯原理(第3版)國防工業出版社 陳火旺 的習題解析

DOC文件下載地址:http://www.teach.ustc.e.cn/jxcg/sj/sj15/zj.doc

購買網頁:http://www.maihaoshu.com/cate/855.htm

更多此書信息:http://www..com/s?tn=sitehao123&ie=gb2312&bs=%B1%E0%D2%EB%D4%AD%C0%ED%CF%B0%CC%E2%BD%E2%CE%F6&sr=&z=&cl=3&f=8&wd=%B1%E0%D2%EB%D4%AD%C0%ED%CF%B0%CC%E2%BD%E2%CE%F6%B9%FA%B7%C0%B9%A4%D2%B5%B3%F6%B0%E6%C9%E7&ct=0

4. 編譯原理優化遵循哪些原則

真好奇的話,可以去翻翻《編譯原理》。不然,咱們只需要知道:1、優化有執行速度優化和空間優化兩種;2、優化級別越高,對代碼編寫質量的要求越高。如恰當地應用遞歸,使用volatile關鍵字等等,所以現實工程中一般不會開到最高優化級;3、想不出來了。。

5. 漢語程序設計語言的編譯原理


漢編系統是一個互動式的程序設計環境,最初是為程序員在小型和微型計算機上開發應用程序而設計的。主要應用於科學計算和工業控制,比如儀器、機器人、過程式控制制、圖形和圖像處理、人工智慧和商業應用。漢編語言的主要優點是軟體開發快速、互動式、計算機硬體的高效使用等。
漢編語言與傳統語言最大的不同是它的可擴展性。漢編語言的編程過程就是定義新的詞,詞實際上就是語言的新命令。詞可以用一系列以前定義的詞來定義,這個過程與教育孩子的過程相似:我們總是用孩子們以前理解的概念來教給孩子們新的概念,而這些詞被稱為「高級定義」。同樣,新的詞也可以用匯編代碼定義。
可擴展性的結果是我們在開發一個應用的同時,也間接地開發了一個特殊的、針對這一類應用的「面向應用的模塊,它可以用於或者經過修改之後被用於相似的應用。
漢編語言的可擴展性並不僅僅是為語言自身增加新的命令,所以不要把定義詞與傳統高級語言定義函數、過程等同。漢編系統還能對定義詞(建詞)進行擴展,創建一個可以定義其它詞的詞,這種詞被稱為「定義詞」。在創建這樣一個定義詞的時候,程序員能夠指定它所創建的詞在編譯時間、運行時間或者這兩種狀態下的特殊行為。這個能力允許我們定義特殊的數據類型,並對其行為和結構實施完全的控制。又由於這種詞的運行時行為可以用高級語言或者匯編語言來定義,所以由定義詞創建的詞將具有與其它漢編詞一樣的性能。系統也允許我們增加一個新的「編譯指示符」以實現特殊類型的循環或者其它的控制結構。比如,漢語言定義一個程序變數的詞:給,其代碼大概如下:
編給(32位數-<變數名>-)編譯時
(---32位數)運行時
建詞可用地址4位元組空出寫
動作讀

定義變數時
5給變數一
則5被自動寫入變數一的實體域中
運行「變數一」時
變數一
則變數一實體域中的數字5被自動讀取,放到數摞上 漢編詞可以使用以前定義的詞或者匯編代碼來定義,它們與其它語言的子程序相似,也與其它語言的命令等效。漢編系統允許我們在鍵盤上打入一條指令的詞名,這個詞將被立即執行。然而,如果我們把功能的詞名放到定義中,將編譯成對於這個詞的引用。
高級詞是由其它詞的集合來定義的,我們可以把這個過程想像成是其它語言的宏。新的詞被加入到它們可以使用的存儲器中,其定義被加入到詞典中。在一個漢編詞的命名規則中,只有很少的幾個字元不能作為詞名使用。
當遇到一個詞的時候,漢編系統就通過詞典搜索希望找到這個詞的定義,如果找到這個詞定義的功能,或者被立即執行,或者作為引用而被編譯到新的定義中。然而,如果在詞典中沒有找到這個詞,系統就試著把它轉換成一個數。如果轉換成功,就把它放在數摞上。如果不能轉換成數字,就顯示這個未定義的詞名並列印出一個錯誤的信息來報告這個詞是系統所不知道的。
漢編詞的執行流程大概可以用一個詞來模擬如下:

編查詞測試
{詞名串--}
255個位元組空給詞名串
詞名串255填0
詞名串字串傳送
詞名串(查詞)
0=

計位元組
串>數


否則
字串未定義詞名串字串+傳送
詞名串計位元組
回車印字串
全復位
然後
否則
執行
然後
。★
字串看數摞查詞測試數摞已空!★
字串123456查詞測試★.
看數摞[1]123456★.
顯123456★
字串看方法查詞測試
看方法未定義
漢編系統編譯流程如右圖(流程圖來源:漢編新浪博客)所示。
漢編語言堅持「結構化程序設計」原理:
·詞必須在引用之前被定義;
·邏輯流限制只有順序、條件和循環,有專門的詞用於實現常用的程序控制結構;
·程序員使用許多小的、獨立的模塊(詞)來實現最大的可測試性和可靠性;
這種方法有兩個明顯的優點
·新的詞總是用以前定義和測試過的詞來構造,所以調試更容易。模塊可以單獨執行以測試它的功能;
·固有的模塊性使漢編語言成為一個「設計性語言」,允許自頂向下的設計同時保持自底向上的測試。一個詞可以在不同的程序中使用,但是它的功能只需要定義一次;
這些都保證了漢編軟體能夠快速和有效地被開發,同時,如果管理得當,也可以作為自身文檔的基礎。
漢編語言的5個主要元素決定了它的特點:
·一個詞典;
·兩個數摞,一個是參數摞,另一個是用於嵌套的返回摞;
·鍵盤(輸入流)解釋器;
·一個編譯器;
·虛擬存儲; 詞典是漢編定義詞的數據和代碼存儲空間,也為編譯建立了詞的索引。詞典中的詞包括漢編程序代碼詞、常數定義詞、變數定義詞、不定量定義詞,面向對象部分還有模板、對象、對象事件、消息。
漢編代碼存儲在詞典中。詞典占據了系統存儲器的很大部分,它由一個串線鏈接的可變長度的項目組成,每個項目定義了一個詞。每個定義的內容根據詞的類型(數據項、常數、操作序列等)而有所不同,詞典是可擴展的。
詞是由「定義詞」加入詞典的,最常用的定義詞是「編。」當「編」執行的時候,馬上就把後面的詞名掃描,建立一個詞典項,然後進入「編譯」模式。有許多不同的編譯方法,最常用的是「串線編碼」,這種方法把定義編譯成一系列以前定義詞的地址引用。詞的定義由「。」(句號)結束。下面就是一個詞的定義:
編平方(--)♂*顯。

當一個詞名項被編譯到詞典中的時候(稱為定義的首部),它包含一個指向詞典中前一個首部的指針。新詞的詞名加入詞典(這里就是平方),接著一個指向詞名為「(編)」子程序調用的指針編譯到詞典中作為定義的第一部分,這個指針指向一段在解釋定義體時需要執行的代碼。當然,這里所說的不是唯一的編譯技術,但它的應用最為普遍,這種技術稱為間接串線編碼,因為定義中的第一個項目是一段代碼的引用,這段代碼知道如何解釋定義的其它部分。
定義的其它部分稱為這個定義的體。在編譯模式下,系統將依次尋找每個詞的首部。每個首部地址依次放到定義體中,這樣就產生了一個地址列表。最後在到達「。」時,詞名為「。」的子程序地址被編譯進詞典。「。」子程序用來將控制返回到調用詞,就像一個子程序返回一樣。

6. 哈工大計算機考研參考書目

哈工大計算機考研簡介
初試:
1)計算機組成原理
本系核心課程,主講:唐朔飛老師,全國名師,考研出題人。
參考書目:
唐朔飛,計算機組成原理,高等教育出版社,2000
唐朔飛,計算機組成原理--學習指導與習題解答,高教出版社
2)數據結構
這是本系的核心課程,主講人是張岩老師,考研出題人。
參考書目:
郭福順,廖明宏等,數據結構與演算法基礎(三版),大連理工出版社
嚴蔚敏,吳偉民,數據結構(C語言版),清華大學出版社,1997
復試:
1)集合與圖論
復試核心課程,主講:王義和老師,全國名師,考研出題人
參考書目:
王義和,離散數學引論,哈爾濱工業大學出版社,2002年
2)計算機體系結構
主講:方連眾老師
參考書目:
李學干,計算機系統結構(第三版),西安電子科技大學出版社,
3)操作系統
主講:周明德老師,出題教師。
參考書目:
計算機操作系統 湯子瀛等編著 西安電子科技大學 2004年
操作系統—內核與設計原理 魏迎梅等譯 電子工業 2005年
4)編譯原理
主講:辛明影老師,出題老師。
本系編譯原理很厲害的李建中老師,要到他們的實驗室都是很好地。
參考書目:
Alfred V. Aho著,李建中,姜守旭譯,編譯原理,機械工業出版社
陳火旺,劉春林等,程序設計語言編譯原理(第三版),國防出版社
5)計算機網路
主講:李全龍老師。出題老師。
參考書目:
James F.Kurose著《計算機網路—自頂向下方法與Internet特色》
-第三版(影印版),高等教育出版社。
6)資料庫系統
主講:戰德臣老師,博導。很有實力,出題老師。
參考書目:
Patrick O』Neil,(周傲英譯) 《Database: Principles.
資料庫原理、編程與性能》, 機械工業出版社, 2002.01
薩師煊, 王珊, 《資料庫系統概論》第三版, 高教出版社, 2000.02

7. 求C語言程序設計學習指導(蘇小紅) 第3版.pdf

中文名:C語言程序設計
作者:吳國鳳
圖書分類:科技
資源格式:PDF
版本:高清文字版
出版社:合肥工業大學出版社
書號:9787565008405
發行時間:2012年8月1日
地區:大陸
語言:簡體中文
本書是高清文字版.非掃描.拒絕模糊.享受清晰!

無法下載的用戶請到評論區一樓查看網盤地址!

內容介紹:

本文章由第1章 C語言概述、第2章 數據類型、運算符與表達式等組成。

內容截圖:

目錄:

第1章 C語言概述10
1.1 程序設計與C語言10
1.2 C程序初識12
1.3 程序設計方法與演算法16
1.4 C程序運行環境與學習方法20
1.5 例題精解24
1.6 本章小結25
習題25
第2章 數據類型、運算符與表達式27
2.1 C語言基礎27
2.2 常量30
2.3 變數32
2.4 基本運算符與表達式33
2.5 不同數據類型間的轉換和運算39
2.6 例題精解41
2.7 本章小結42
習題43
第3章 順序結構程序設計45
3.1 C語言中的語句45
3.2 數據的輸入輸出47
3.3 例題精解54
3.4 本章小結57
習題57
第4章 選擇結構程序設計62
4.1 關系運算和邏輯運算62
4.2 if語句65
4.3 switch語句70
4.4 例題精解72
4.5 本章小結75
習題75
第5章 循環結構程序設計80
5.1 概述80
5.2 while語句80
5.3 dowhile語句82
5.4 for語句84
5.5 循環嵌套88
5.6 break語句、continue語句和goto語句與標號90
5.7 例題精解92
5.8 本章小結97
習題97
第6章 數組105
6.1 一維數組105
6.2 二維數組108
6.3 字元數組和字元串112
6.4 例題精解117
6.5 本章小結121
習題122
第7章 指針126
7.1 指針的基本概念126
7.2 指針與數組133
7.3 指針數組和指向指針的指針142
7.4 例題精解147
7.5 本章小結149
習題150
第8章 函數154
8.1 函數的基本概念154
8.2 函數參數和函數的值155
8.3 函數的調用157
8.4 數組作為函數參數158
8.5 指針作為函數參數161
8.6 嵌套調用與遞歸調用163
8.7 存儲類型166
8.8 命令行參數170
8.9 例題精解171
8.10 本章小結175
習題175
第9章 編譯預處理181
9.1 宏定義181
9.2 文件包含184
9.3 條件編譯185
9.4 例題精解186
9.5 本章小結188
習題189
第10章 結構體與共用體192
10.1 結構體192
10.2 共用體208
10.3 枚舉211
10.4 用戶定義類型212
10.5 例題精解213
10.6 本章小結214
習題215
第11章 位運算219
11.1 位運算的概念219
11.2 位運算219
11.3 位域(位段)223
11.4 本章小結226
習題226
第12章 文件228
12.1 文件概念228
12.2 文件指針229
12.3 文件的打開與關閉230
12.4 文件的讀寫231
12.5 文件的定位操作238
12.6 文件的錯誤檢測240
12.7 本章小結241
習題241
附錄243
1. 常用字元與ASCII代碼對照表243
2. C語言運算符的優先順序與結合性244
3. C庫函數245
4. 常見錯誤信息表252

下載地址:

8. 《C語言程序設計》第三版(譚浩強著)錯誤集

我沒第三版的,以前看過第二版的,感覺通俗易懂,就是太啰嗦,呵呵,初學用不錯!樓主看的很仔細,看來也做過試驗了,呵呵,不過還是有問題的。
2 signed 貌似是 有符號類型 無符號是unsigned
4 專業術語就叫增值,增值包含負值
6 有這個要求的,你這樣試試就明白了。
char a[10];
char b[10];
strcpy(a, "0123456789012345");
printf("%s", b);
我給a賦值,溢出了,影響到了b,這在大型工程里就是不可估量的隱患。
7 不是兩個字元串都遇到'\0',是任一字元串遇到'\0'
10 Fun 這個一般是Function(函數)的縮寫,至於前邊加個Li,是什麼縮寫我不知道,Line?或者就是李(某個姓李的寫的這個函數)?
11 我覺得把字元串改叫表達式更好一點,因為宏定義不僅能替換常量的,比如判斷表達式a與b(注意可以是表達式)誰大的「宏函數」
#define MAX(a, b) ((a) > (b) ? (a) : (b))
貌似作者的「字元串」的意思很單純,就是字元串,而不是一種類型,我現在寫的東西不都是「字元串」嗎?o(∩_∩)o...
還有,BS一下二樓的,有本事你寫一本賣1000萬冊的?

9. 求編譯原理說明下列循環語句可以用那種優化方法進行優化給出優化後的等價 語句,並寫出優化後的三元

1.等價原則。經過優化後不應該改變程序運行的結果。
2.等效原則。使優化後所產生的目標代碼運行時間較短,佔用的儲存空間較小。
3.合算原則。應盡可能以較低的代價取得較好的優化效果。
更詳細的參考程序設計語言編譯原理(第三版)P272

熱點內容
java返回this 發布:2025-10-20 08:28:16 瀏覽:648
製作腳本網站 發布:2025-10-20 08:17:34 瀏覽:939
python中的init方法 發布:2025-10-20 08:17:33 瀏覽:634
圖案密碼什麼意思 發布:2025-10-20 08:16:56 瀏覽:823
怎麼清理微信視頻緩存 發布:2025-10-20 08:12:37 瀏覽:734
c語言編譯器怎麼看執行過程 發布:2025-10-20 08:00:32 瀏覽:1069
郵箱如何填寫發信伺服器 發布:2025-10-20 07:45:27 瀏覽:302
shell腳本入門案例 發布:2025-10-20 07:44:45 瀏覽:163
怎麼上傳照片瀏覽上傳 發布:2025-10-20 07:44:03 瀏覽:855
python股票數據獲取 發布:2025-10-20 07:39:44 瀏覽:765