導航:首頁 > 源碼編譯 > 編譯設計與開發技術答案

編譯設計與開發技術答案

發布時間:2023-01-17 01:06:36

① 軟體工程試題,誰知道答案

軟體工程試題及答案免費下載

鏈接:https://pan..com/s/12gIJovXWNsAu530CPnVPgQ

提取碼:j3l1

軟體工程是一門研究用工程化方法構建和維護有效、實用和高質量的軟體的學科。它涉及程序設計語言、資料庫、軟體開發工具、系統平台、標准、設計件有電子郵件、嵌入式系統、人機界面、辦公套件、操作系統、編譯器、資料庫、游戲等。同時,各個行業幾乎都有計算機軟體的應用,如工業、農業、銀行、航空、政府部門等。這些應用促進了經濟和社會的發展,也提高了工作效率和生活效率 。

② c++程序設計基礎教程課後答案(清華大學出版社鄭莉 董淵著)

第 一 章 概述

1-1 簡述計算機程序設計語言的發展歷程。

解:
迄今為止計算機程序設計語言的發展經歷了機器語言、匯編語言、高級語言等階段,C++語言是一種面向對象的編程語言,也屬於高級語言。

1-2 面向對象的編程語言有哪些特點?

解:
面向對象的編程語言與以往各種編程語言有根本的不同,它設計的出發點就是為了能更直接的描述客觀世界中存在的事物以及它們之間的關系。面向對象的編程語言將客觀事物看作具有屬性和行為的對象,通過抽象找出同一類對象的共同屬性(靜態特徵)和行為(動態特徵),形成類。通過類的繼承與多態可以很方便地實現代碼重用,大大縮短了軟體開發周期,並使得軟體風格統一。因此,面向對象的編程語言使程序能夠比較直接地反問題域的本來面目,軟體開發人員能夠利用人類認識事物所採用的一般思維方法來進行軟體開發。C++語言是目前應用最廣的面向對象的編程語言。

1-3 什麼是結構化程序設計方法?這種方法有哪些優點和缺點?

解:
結構化程序設計的思路是:自頂向下、逐步求精;其程序結構是按功能劃分為若干個基本模塊;各模塊之間的關系盡可能簡單,在功能上相對獨立;每一模塊內部均是由順序、選擇和循環三種基本結構組成;其模塊化實現的具體方法是使用子程序。結構化程序設計由於採用了模塊分解與功能抽象,自頂向下、分而治之的方法,從而有效地將一個較復雜的程序系統設計任務分解成許多易於控制和處理的子任務,便於開發和維護。
雖然結構化程序設計方法具有很多的優點,但它仍是一種面向過程的程序設計方法,它把數據和處理數據的過程分離為相互獨立的實體。當數據結構改變時,所有相關的處理過程都要進行相應的修改,每一種相對於老問題的新方法都要帶來額外的開銷,程序的可重用性差。
由於圖形用戶界面的應用,程序運行由順序運行演變為事件驅動,使得軟體使用起來越來越方便,但開發起來卻越來越困難,對這種軟體的功能很難用過程來描述和實現,使用面向過程的方法來開發和維護都將非常困難。

1-4 什麼是對象?什麼是面向對象方法?這種方法有哪些特點?

解:
從一般意義上講,對象是現實世界中一個實際存在的事物,它可以是有形的,也可以是無形的。對象是構成世界的一個獨立單位,它具有自己的靜態特徵和動態特徵。面向對象方法中的對象,是系統中用來描述客觀事物的一個實體,它是用來構成系統的一個基本單位,由一組屬性和一組行為構成。
面向對象的方法將數據及對數據的操作方法放在一起,作為一個相互依存、不可分離的整體--對象。對同類型對象抽象出其共性,形成類。類中的大多數數據,只能用本類的方法進行處理。類通過一個簡單的外部介面,與外界發生關系,對象與對象之間通過消息進行通訊。這樣,程序模塊間的關系更為簡單,程序模塊的獨立性、數據的安全性就有了良好的保障。通過實現繼承與多態性,還可以大大提高程序的可重用性,使得軟體的開發和維護都更為方便。
面向對象方法所強調的基本原則,就是直接面對客觀存在的事物來進行軟體開發,將人們在日常生活中習慣的思維方式和表達方式應用在軟體開發中,使軟體開發從過分專業化的方法、規則和技巧中回到客觀世界,回到人們通常的思維。

1-5 什麼叫做封裝?

解:
封裝是面向對象方法的一個重要原則,就是把對象的屬性和服務結合成一個獨立的系統單位,並盡可能隱蔽對象的內部細節。

1-6 面向對象的軟體工程包括哪些主要內容?

解:
面向對象的軟體工程是面向對象方法在軟體工程領域的全面應用,它包括面向對象的分析(OOA)、面向對象的設計(OOD)、面向對象的編程(OOP)、面向對象的測試(OOT)和面向對象的軟體維護(OOSM)等主要內容。

1-7 簡述計算機內部的信息可分為幾類?

解:
計算機內部的信息可以分成控制信息和數據信息二大類;控制信息可分為指令和控制字兩類;數據信息可分為數值信息和非數值信息兩類。

1-8 什麼叫二進制?使用二進制有何優點和缺點?

解:
二進制是基數為2,每位的權是以2 為底的冪的進制,遵循逢二進一原則,基本符號為0和1。採用二進制碼表示信息,有如下幾個優點:1.易於物理實現;2.二進制數運算簡單;3.機器可靠性高;4.通用性強。其缺點是它表示數的容量較小,表示同一個數,二進制較其他進制需要更多的位數。

1-9 請將以下十進制數值轉換為二進制和十六進制補碼:
(1)2 (2)9 (3)93
(4)-32 (5)65535 (6)-1

解:
(1) (2)10 = (10)2 = (2)16
(2) (9)10 = (1001)2 = (9)16
(3) (93)10 = (1011101)2 = (5D)16
(4) (-32)10 = (11100000)2 = (E0)16
(5) (65535)10 = (11111111 11111111)2 = (FFFF)16
(6) (-1)10 = (11111111 11111111)2 = (FFFF)16

1-10 請將以下數值轉換為十進制:
(1)(1010)2 (2)(10001111)2 (3)(01011111 11000011)2
(4)(7F)16 (5)(2D3E)16 (6)(F10E)16

解:
(1)(1010)2 = (10)10
(2)(10001111)2 = (143)10
(3)(01011111 11000011)2 = (24515)10
(4)(7F)16 = (127)10
(5)(2D3E)16 = (11582)10
(6)(F10E)16 = (61710)10

1-11 簡要比較原碼、反碼、補碼等幾種編碼方法。
解:
原碼:將符號位數字化為 0 或 1,數的絕對值與符號一起編碼,即所謂"符號——絕對值表示"的編碼。
正數的反碼和補碼與原碼表示相同。
負數的反碼與原碼有如下關系:
符號位相同(仍用1表示),其餘各位取反(0變1,1變0)。
補碼由該數反碼的最末位加1求得。

第 二 章 C++簡單程序設計

2-1 C++語言有那些主要特點和優點?

解:
C++語言的主要特點表現在兩個方面,一是全面兼容C,二是支持面向對象的方法。C++是一個更好的C,它保持了C的簡潔、高效、接近匯編語言、具有良好的可讀性和可移植性等特點,對C的類型系統進行了改革和擴充,因此C++比C更安全,C++的編譯系統能檢查出更多的類型錯誤。 C++語言最重要的特點是支持面向對象。

2-2 下列標識符哪些是合法的?
Program, -page, _lock, test2, 3in1, @mail, A_B_C_D

解:
Program, _lock, test2, A_B_C_D是合法的標識符,其它的不是。

2-3 例2.1中每條語句的作用是什麼?
#include <iostream.h>
void main(void)
{
cout<<"Hello!\n";
cout<<"Welcome to c++!\n";
}

解:
#include <iostream.h> //指示編譯器將文件iostream.h中的代碼
//嵌入到該程序中該指令所在的地方
void main() //主函數名,void 表示函數沒有返回值
{ //函數體標志
cout<<"Hello!\n"; //輸出字元串Hello!到標准輸出設備(顯示器)上。
cout<<"Welcome to c++!\n"; //輸出字元串Welcome to c++!
}
在屏幕輸出如下:
Hello!
Welcome to c++!

2-4 使用關鍵字const而不是#define語句的好處有哪些?

解:
const定義的常量是有類型的,所以在使用它們時編譯器可以查錯;而且,這些變數在調試時仍然是可見的。

2-5 請寫出C++語句聲明一個常量PI,值為3.1416;再聲明一個浮點型變數a,把PI的值賦給a。

解:
const float PI = 3.1416;
float a = PI;

2-6 在下面的枚舉類型中,Blue的值是多少?
enum COLOR ;

解:
Blue = 102

2-7 注釋有什麼作用?C++中有哪幾種注釋的方法?他們之間有什麼區別?

解:
注釋在程序中的作用是對程序進行註解和說明,以便於閱讀。編譯系統在對源程序進行編譯時不理會注釋部分,因此注釋對於程序的功能實現不起任何作用。而且由於編譯時忽略注釋部分,所以注釋內容不會增加最終產生的可執行程序的大小。適當地使用注釋,能夠提高程序的可讀性。在C++中,有兩種給出注釋的方法:一種是延用C語言方法,使用"/*"和"*/"括起注釋文字。另一種方法是使用"//",從"//"開始,直到它所在行的行尾,所有字元都被作為注釋處理。

2-8 什麼叫做表達式?x = 5 + 7是一個表達式嗎?它的值是多少?

解:
任何一個用於計算值的公式都可稱為表達式。x = 5 + 7是一個表達式,它的值為12。

2-9 下列表達式的值是多少?
1. 201 / 4
2. 201 % 4
3. 201 / 4.0

解:
1. 50
2. 1
3. 50.25

2-10 執行完下列語句後,a、b、c三個變數的值為多少?
a = 30;
b = a++;
c = ++a;

解:
a:32 ; b:30 ; c:32;

2-11 在一個for循環中,可以初始化多個變數嗎?如何實現?

解:
在for循環設置條件的第一個";"前,用,分隔不同的賦值表達式。
例如:
for (x = 0, y = 10; x < 100; x++, y++)

2-12 執行完下列語句後,n的值為多少?
int n;
for (n = 0; n < 100; n++)

③ 計算機二級c語言程序設計題編譯成功但和答案不一樣算對嗎

我用未來教育的模擬軟體試過,無論結果正不正確,除了最後一個編程題,其他只要和答案不同就錯誤,正式考試可能也會和模擬軟體一樣會算錯,客觀講這不夠人性化,很直得改進。不過還是祝你考試過關。

④ 求答案,c語言

C++和java都是後來出現的,都不是純OO,第一個純OO語言是1972年出現的Smalltalk。

諸如「對象」和「對象的屬性」這樣的概念,可以一直追溯到1950年代初。它們首先出現於關於人工智慧的早期著作中。然而,OO的實際發展卻是始於1966年 (當年文化大革命在中國爆發) 。 當時Kisten Nygaard和Ole-Johan Dahl開發了具有更高級抽象機制的Simula語言。Simula提供了比子程序更高一級的抽象和封裝;為模擬一個實際問題,引入了數據抽象和類的概念。 大約在同一時期,Alan Kay正在尤他大學的一台個人計算機上努力工作,他希望能在其上實現圖形化和模擬模擬。盡管由於軟硬體的限制,Kay的嘗試沒有成功,但他的這些想法並沒有丟失。70年代初期,他加入了Palo Alto研究中心(PARC),再次將這些想法付諸實施。

在PARC,他所在的研究小組堅信計算機技術是改善人與人、人與機器之間通訊渠道的關鍵。在這信念的支持下,並吸取了Simula的類的概念,他們開發出Smalltalk語言;1972年PARC發布了Smalltalk的第一個版本。大約在此時,「面向對象」這一術語正式確定。Smalltalk被認為是第一個真正面向對象的語言。 Smalltalk 的目標是為了使軟體設計能夠以盡可能自動化的單元來進行。在Smalltalk中一切都是對象-----即某個類的實例。最初的Smalltalk的世界中,對象與名詞緊緊相連。Smalltalk還支持一個高度互動式的開發環境和原型方法。這一原創性的工作開始並未發表,只是視為帶濃厚試驗性質的學術興趣而已。

Smalltalk-80是PARC的一系列Smalltalk版本的總結,發布於1981年。1981年8月的<<BYTE>>雜志公布了Smalltalk開發組的重要結果。在這期雜志的封面圖上,一個熱氣球正從一個孤島上冉冉升起來,標志著PARC的面向對象思想的啟航。該是向軟體開發界公開發表的時候了。起初,影響只是漸進式的,但很快就躍升到火爆的程度。熱氣球確實啟航了,而且影響深遠。早期Smalltalk關於開發環境的研究導致了後來的一系列進展:窗口(window),圖標(icon),滑鼠(mouse)和下拉式window環境。Smalltalk語言還影響了80年代早期和中期的面向對象的語言,如:Object-C(1986), C++(1986), Self(1987),Eiffl(1987),Flavors(1986). 面向對象的應用領域也被進一步拓寬。對象不再僅僅與名詞相聯系,還包括事件和過程。1980 Grady Booch首先提出面向對象設計(OOD)的概念。然後其他人緊隨其後,面向對象分析的技術開始公開發表。1985年,第一個商用面向對象資料庫問世。1990年代以來,面向對象的分析、測試、度量和管理等研究都得到長足發展。目前對象技術的前沿課題包括設計模式(design patterns)、分布式對象系統和基於網路的對象應用等。

⑤ 四川C語言二級考試真題含答案

四川省普通高等學校計算機應用知識和能力
第二十九次等級考試
二級(C與C++語言) 筆 試 試 卷
時間: 2008年10月 18 日
上午 9:00—11:00
第一部分
軟體技術基礎
(共15分)
一、是非判斷題(每小題1分,共10分)
( 判斷下列各題是否正確,如正確,在客觀答題紙上對應編號選A,否則選B )
1. 在設備管理中通道是處理輸入、輸出的軟體。 ( 1 )
2. 從邏輯上可以把數據結構分為線性結構和非線性結構。 ( 2 )
3. 若無進程處於運行狀態,則就緒隊列為空。 ( 3 )
4. 在單處理器系統中,程序的並發執行,實質上是程序的交替執行。 ( 4 )
5. 分頁存儲管理中,頁面不能映射到不連續的內存塊中。 ( 5 )
6. 瀑布模型的突出缺點是不適應用戶需求的變化。 ( 6 )
7. 棧和隊列的共同特點是允許在端點之外處插入和刪除元素。 ( 7 )
8. 為了便於對照檢查,測試用例應由輸入數據和預期的輸出結果兩部分組成。 ( 8 )
9. 在軟體生存期內,能確定軟體系統必須做什麼和必須具備的功能階段是編碼。 ( 9 )
10.在結構化分析中,用於描述加工邏輯的主要工具有三種,即:結構化語言、判定表、判定樹。 ( 10 )

二、選擇題(每小題1分,共5分)
1. 軟體開發中,模塊設計的原則是( 11 ) 。
11 (A) 低偶合、高內聚 (B) 高偶合、高內聚
(C) 高偶合、低內聚 (D) 低偶合、低內聚
2. 進程從運行狀態進入就緒狀態的原因可能是( 12 )。
12 (A) 時間片用完 (B) 等待某一事件
(C) 等待的事件已發生 (D) 被選中佔有處理機
3. 隊列的操作原則是( 13 )。
13 (A) 先進後出 (B) 先進先出
(C) 只進不出 (D) 只出不進
4. 以下( 14 )不是實時操作系統的特點。
14 (A) 高可靠性 (B) 及時響應
(C) 高效性 (D) 通用性
5. 程序流程圖是用於描述結構化方法中 ( 15 )工作階段的工具。
15 (A) 可行性分析 (B) 程序編碼
(C) 詳細設計 (D) 需求分析

第二部分
C與C++語言程序設計
(共85分)
一、單項選擇題 ( 每小題1分,共10分 )
1. 下列關於C++語言類的描述中錯誤的是( 16 ) 。
16 (A) 類用於描述事物的屬性和對事物的操作
(B) 類與類之間通過封裝而具有明確的獨立性
(C) 類與類之間必須是平等的關系,而不能組成層次結構
(D) 類與類之間可以通過一些方法進行通信和聯絡
2. C++中,已知有如下定義:
const int D=5;
int i=1;
long int f=0;
char c=15;
則下列選項錯誤的是( 17 )。
17 (A) ++i; (B) D--; (C) c++; (D) --f;
3. 下面關於類和對象的描述中,錯誤的是 ( 18 )。
18 (A) 類就是C語言中的結構體類型,對象就是C語言中的結構體變數
(B) 類和對象之間的關系是抽象和具體的關系
(C) 對象是類的實例,一個對象必須屬於一個已知的類
(D) 類是具有共同行為的若干對象的統一描述體
4. 設有定義:int n=0,*p=&n,**q=&p,則下列選項中正確的賦值語句是( 19 )。
19 (A) p=5; (B) *q=5; (C) q=p; (D) *p=5;
5. 設有定義:char s[20]= "ab\101\ncd"; 則sizeof(s)和strlen(s)的值為( 20 )。
20 (A) 6,6 (B) 20,6 (C) 20,7 (D) 20,10
6. 在C語言的函數中( 21 )。
21 (A) 必須有形參 (B) 形參必須是變數名
(C) 可以有也可以沒有形參 (D) 數組名不能作為形參
7. 下列程序輸出結果是( 22 )。
# include "stdio.h"
# define SQR(x) x*x
void main()
{ int a=10,k=2,m=1;
a/=SQR(k+m)/SQR(k+m);
printf("%d\n",a);
}
22 (A) 10 (B) 1 (C) 9 (D) 0
8. 已知學生記錄描述如下
struct student
{ int no;
char name[20];
char sex;
struct
{ int year;
int month;
int day;
}birth;
};
struct student s;
設變數s中「生日」是「1982年5月29日」,對「生日」的正確賦值方式是( 23 )。
23 (A) year=1982;month=5;day=29;
(B) birth.year=1982;birth.month=5;birth.day=29;
(C) s.year=1982;s.month=5;s.day=29;
(D) s.birth.year=1982;s.birth.month=5;s.birth.day=29;
9. 有下列程序輸出結果是 ( 24 )。
# include <stdio.h>
void dig(char *s)
{
char *p=s;
while(*s)
*s>='0' && *s<='9'?s++:(*p++=*s++);
*p='\0';
}
void main()
{
char *str="A1B2C3";
dig(str);
puts(str);
}
24 (A) ABC (B) A1B2C3 (C) A1B2C (D) ABC3
10. 在下面的選項中,賦值語句錯誤的是 ( 25 ) 。
25 (A) i++; (B) a=(b=(c=2,d=3));
(C) a=a<a; (D) a=a*b=2;

二、讀程序回答問題 ( 每個選擇3分,共45分 )
1. 讀下面程序並回答問題:
# include <stdio.h>
void fun1(int x,int y)
{
int t;
t=x; x=y; y=t;
}
void fun2(int x[])
{
int t;
t=x[0]; x[0]=x[1]; x[1]=t;
}
void main()
{
int a[2]={1,2},b[2]={1,2};
fun1(b[0],b[1]);fun2(a);
printf("%d,%d,%d,%d\n",a[0],a[1],b[0],b[1]);
}
(1) 下列說法錯誤的是( 26 )。
26 (A) 數組名作為函數參數進行傳遞,傳遞的是數組的首地址
(B) 數組名作為函數參數時,形參數組與實參數組共用內存空間
(C) 普通變數作為函數參數進行傳遞,實參與形參之間發生的是單向值傳遞
(D) 數組名作為函數參數時,傳遞的是數組元素的值
(2) 程序的運行結果是( 27 )。
27 (A)1,2,1,2 (B) 1,2,2,1 (C) 2,1,1,2 (D) 2,1,2,1
2. 讀程序並回答問題。
# include <stdio.h>
int fun()
{
static int c=0;
c++;
return c;
}
void main(int argc,char *argv[])
{
int x,i,j;
for(i=1;i<argc;i++)
for(j=0;argv[i][j]!='\0';j++)
x=fun();
printf("%d\n",x*argc);
}
(1)若程序經編譯連接後生成可執行文件2_3.exe,若鍵入以下命令行:
2_3 abcd 123
則程序的運行結果為( 28 )。
28 (A) 3 (B) 21 (C) 9 (D) 0
(2)若將函數fun中的static去掉,變為int c=0; 程序經編譯後連接生成可執行文件2_3.exe,若鍵入以下命令行:
2_3 abcd 123
則程序的運行結果為( 29 )。
29 (A) 3 (B) 30 (C) 22 (D) 10
3. 讀程序並回答問題
# include <stdio.h>
# include <string.h>
void fun(char *s,int p1,int p2)
{
char t;
while(p1<p2)
{
t=*(s+p1); *(s+p1)=*(s+p2); *(s+p2)=t;
p1++; p2--;
}
}
void main()
{
char str[10];
int i;
for(i=0;i<9;i++)
str[i]='A'+i;
str[i]='\0';
puts(str);
fun(str,0,strlen(str)-1);
puts(str);
}
(1)第一個puts(str)的輸出結果為( 30 )。
30 (A) AHCFEDGBI (B) IBGDEFCHA
(C) ABCDEFGHI (D) IHGFEDCBA
(2)第二個puts(str)的輸出結果為( 31 )。
31 (A) AHCFEDGBI (B) IBGDEFCHA
(C) ABCDEFGHI (D) IHGFEDCBA
4. 閱讀下面程序,回答問題。
void main()
{
int n,m,s=0,t=1;
scanf("%d",&m);
for(n=1;n<=m;n++)
{
t*=n;
s+=t;
}
printf("%d\n",s);
}
程序的功能是( 32 )
32 (A) 實現1的階乘至m的階乘的求和
(B) 求m的階乘
(C) 1到m的求和
(D) 實現1至m-1的階乘的求和
5. 讀程序,回答問題。
# include <stdio.h>
void main()
{
char s[80];
int i,j;
gets(s);
for(i=j=0;s[i]!='\0';i++)
if(s[i]!='c') s[j++]=s[i];
s[j]='\0';
puts(s);
}
程序運行時輸入cctv10,其輸出結果為( 33 )。
33 (A) cc (B) tv10 (C) ctv10 (D) tv10cc
6. 有下列程序:
# include <stdio.h>
char func(char *s)
{
char *p=s;
while(*p!='\0')
p++;
return p-s;
}
void main()
{
printf("\n%d\n",func("Hello!"));
getch();
}
(1)程序的運行結果是( 34 )。
34 (A) 3 (B) Hello!6 (C) 無輸出 (D) 6
(2)指針變數的運算不可以( 35 )。
35 (A) 指針變數加整形變數 (B) 指針變數減整形變數
(C) 指針變數加指針變數 (D) 指針變數減指針變數
7. 以下是一個C++程序,讀程序寫出程序運行結果。
# include <iostream.h>
void main()
{
int num=0,i=8;
do
{ i--;
num++;
}while(--i);
cout<<num<<endl;
}
程序的運行結果是( 36 )。
36 (A) 2 (B) 0 (C) 4 (D) 5
8. 有下列程序:
# include <stdio.h>
void main()
{ char c='A';
int k=0;
do
{ switch(c++)
{ case 'A': k++; break;
case 'B': k--;
case 'C': k+=2; break;
case 'D': k%=2; continue;
case 'E': k*=10;break;
default: k/=3;
}
k++;
}while(c<'G');
printf("k=%d\n",k);
getch();
}
(1)程序輸出結果是( 37 )。
37 (A) k=3 (B) k=4 (C) k=2 (D) k=0
(2)本程序中continue的作用( 38 )。
38 (A) 與break一樣 (B) 不起任何作用
(C) 開始下一次循環 (D) 出現語法錯誤
9. 有下列程序
int w=3;
int fun(int k)
{
if(k==0) return w;
return(fun(k-1)*k);
}
void main()
{
int w=10;
printf("%d\n",fun(5)*w);
}
輸出結果是( 39 )。
39 (A) 360 (B) 3600 (C) 1080 (D) 1200
10. 有下列程序
void main()
{
char ch[2][5]={"6934","8254"},*p[2];
int i,j,s=0;
for(i=0;i<2;i++)
p[i]=ch[i];
for(i=0;i<2;i++)
for(j=0;p[i][j]>'\0'&&p[i][j]<='9';j+=2)
s=10*s+p[i][j]-'0';
printf("%d\n",s);
}
輸出結果是( 40 )。
40 (A)6385 (B) 69825 (C) 63825 (D) 693825

注意:① 請把下面「程序填空」中各小題答案寫在主觀題答題紙上
② 每一個空只填一個語句或一個語句所缺的部分內容

三、程序填空 ( 每空2分,共30分 )
1. 函數fun的功能是:找出N行M列二維數組元素中的最大值,並作為函數值返回,最大值的行列下標通過形參指針帶回main函數中。請填空。
# include <stdio.h>
# define N 3
# define M 4
int fun(int a[N][M],int *row,int *col)
{
int i,j,r,c;
r=c=0;
for(i=0;i<N;i++)
for(j=0;j<M;j++)
if(a[i][j]>① ) { r=i; c=j; }
② ;
*col=c;
③ ;
}
void main()
{
int a[N][M]={1,2,3,4,5,6,7,8,9,10,11,12};
int row,col,max;
max=fun(a,&row,&col);
printf("max=%d,row=%d,col=%d\n",max,row,col);
}
2. 程序的功能是:求出分數序列2/1,3/2,5/3,8/5,13/8……前20項之和,請填空。
# include <stdio.h>
void main()
{ double x=2,y=1,t,s=0;
int i;
for(i=1;i<=20;i++)
{
s=① ;
t=② ;
x=③ ;
y=t;
}
printf("s=%f\n",s);
}
3. 有5個學生的成績需要保存在文件score.dat文件中,保存格式如下:
姓名,年齡,成績<CR> 請填空。
# include <stdio.h>
void main()
{ FILE *fp;
int i;
char name[80];
int age;
float score;
fp=fopen(① ,"w");
for(i=0;i<5;i++)
{ printf("請輸入第%d個學生的信息\n",i);
printf("姓名:");
scanf("%s",name);
printf("年齡:");
scanf("%d",&age);
printf("成績:");
② ;
fprintf(fp,"%s,%d,%f\n",name,age,score);
}
③ ;
}
4. 下列程序的功能是:從5個字元串中找出最長的那個字元串。請填空。
# include <stdio.h>
# include <string.h>
# define N 5
# define M 81
char *fun(char (*sq)[M])
{ int i;
① ;
sp=sq[0];
for(i=1;i<N;i++)
if(② ) sp=sq[i];
return sp;
}
void main()
{ char str[N][M],*longest;
int i;
printf("please enter 5 string:");
for(i=0;i<N;i++)
gets(str[i]);
for(i=0;i<N;i++)
puts(str[i]);
longest=③ ;
printf("\nThe longest string:");
puts(longest);
}
5. 下面程序的功能是:由25人坐成圓圈,先從任一人出發用1到25順時針依次編號,然後從1號開始順時針報數(1,2,3,4,…),數到5的倍數的出圈,剩下的繼續報數,求最後出圈的編號。
# include <stdio.h>
void main()
{
int a[26],j,n,count;
for(j=1;j<=25;j++) a[j]=j;
j=1;
count=0;
① ;
do
{ if(a[j]!=0)
{ n++;
if(n%5==0)
{ ② ;
if(count==24) printf("%d\n",j);
count++;
}
}
j++;
if(j>25) j=1;
}
while(③ );
}

⑥ 在不考慮編譯器優化等因素下,下面那個運算比較快

下面是在編譯器不優化的情況下的代碼反匯編後的結果
14: if (a > b)//我們看到,只有3條指令,
0040104D mov edx,dword ptr [ebp-4] //將a放入寄存器EDX
00401050 cmp edx,dword ptr [ebp-8] //比較EDX和b的大小
00401053 jle main+3Ch (0040105c) //如果a<b跳轉到0040105c
15: {
16: return 1;
00401055 mov eax,1
0040105A jmp main+4Fh (0040106f)
17: }
18: if (a - b > 0)//我們看到有4條指令
0040105C mov eax,dword ptr [ebp-4]//將a放入EAX
0040105F sub eax,dword ptr [ebp-8]//a-b的差放入EAX
00401062 test eax,eax//比較EAX是否為0
00401064 jle main+4Dh (0040106d)//條件跳轉
19: {
20: return 2;
00401066 mov eax,2
0040106B jmp main+4Fh (0040106f)
21: }
所以我認為if (a > b) {....}
效率更高

⑦ 如何更好的掌握編譯器的設計與實現

1. 閱讀相關書籍:編譯原理、編譯器設計、編譯器實現等;
2. 自學相關編程語言:C、C++、Java等;
3. 實踐:可以使用開源的編譯器框架,例如ANTLR,搭建自己的編譯器;
4. 了解編譯器的各個組成部分,並學習它們的工作原理;
5. 閱讀技術文章,了解編譯器的設計和實現的最新進展;
6. 加入開源項目,編寫和維護編譯器;
7. 在論壇上交流,和更多的編譯器開發者分享心得體會;
8. 參加學術會議,接觸到最新的研究成果;
9. 嘗試著自己設計一個編譯器,用實踐來加深理解。

⑧ 把編譯程序設計原理(第二版)高等教育出版社的課後答案給我發一份 可以嗎

目錄
第1章編譯器概述
1.1為什麼要學習編譯技術
1.2編譯器和解釋器
1.3編譯器的功能分解和組織結構
1.4編譯器的夥伴
1.5編譯器的復雜性
1.6編譯器的設計與實現
1.7編譯器的測試與維護
第2章一個微型編譯器
2.1基礎知識
2.2ToyL語言
2.3ToyL語言詞法分析器
2.4ToyL語言語法分析器
2.5ToyL語言解釋器
2.6ToyL語言編譯器
第3章有窮自動機與詞法分析
3.1詞法分析基礎
3.1.1詞法分析器的功能
3.1.2單詞識別
3.1.3詞法分析的復雜性
3.1.4字元串
3.1.5保留字處理
3.1.6空格符、回車符、換行符
3.1.7括弧類配對預檢
3.1.8詞法錯誤修正
3.1.9詞法分析獨立化的意義
3.2有窮自動機
3.2.1確定有窮自動機的定義
3.2.2確定有窮自動機的實現
3.2.3非確定有窮自動機
3.2.4NFA到DFA的轉換
3.2.5確定有窮自動機的極小化
3.2.6自動機狀態轉換表的實現
3.3正則表達式
3.3.1正則符號串集
3.3.2正則表達式的定義
3.3.3正則表達式的局限性
3.3.4正則定義
3.3.5正則表達式到有窮自動機的轉換
3.4詞法分析器的構造
3.4.1用DFA人工構造詞法分析器
3.4.2詞法分析器的生成器Lex
練習
第4章文法與語法分析
4.1語法分析
4.1.1語法分析器的輸入
4.1.2語法分析的任務
4.1.3語法分析方法分類
4.2文法和文法分析
4.2.1上下文無關文法和語言
4.2.2最左推導和最右推導
4.2.3語法分析樹與二義性
4.2.4文法分析演算法
4.2.5自頂向下方法概述
4.2.6自底向上方法概述
4.3遞歸下降法——自頂向下分析
4.3.1遞歸下降法原理
4.3.2消除公共前綴
4.3.3代入
4.3.4消除左遞歸
4.4LL分析方法——自頂向下分析
4.4.1LL(1)文法
4.4.2LL(1)分析表
4.4.3LL(1)分析的驅動器
4.4.4LL(1)中的If-Then-Else問題
4.4.5LL(1)分析器的自動生成器LLGen
4.4.6LL(1)分析法與遞歸下降法的比較
4.4.7正則文法
4.5LR方法——自底向上分析
4.5.1句柄
4.5.2活前綴
4.5.3歸約活前綴識別器——LR(0)自動機
4.5.4LR(0)文法及其分析演算法
4.5.5SLR(1)文法及其分析演算法
4.5.6LR(1)文法
4.5.7LALR(1)文法
4.5.8二義性文法的處理
4.5.9另一種Shift-Rece分析技術:簡單優先法
4.5.10LL(1)和LALR(1)方法比較
4.6LR分析器的生成器
4.6.1LALR分析器的生成器YACC
4.6.2LALR分析器的生成器LALRGen
4.7語法錯誤處理
4.7.1錯誤恢復和修復
4.7.2遞歸下降分析的錯誤恢復
4.7.3LL分析的錯誤恢復
4.7.4LR分析的錯誤恢復
練習
第5章語義分析
5.1語義分析基礎
5.1.1語義分析內容
5.1.2標識符信息的內部表示
5.1.3類型信息的內部表示
5.1.4運行時值的表示
5.2符號表
5.2.1符號表查找技術
5.2.2符號表的局部化
5.2.3二叉式局部符號表
5.2.4散列式全局符號表
5.2.5嵌套式全局符號表
5.2.6符號表界面函數
5.3類型分析
5.3.1類型的等價性和相容性
5.3.2類型分析的總控演算法
5.3.3類型名分析
5.3.4枚舉類型分析
5.3.5數組類型分析
5.3.6記錄類型分析
5.3.7聯合類型分析
5.3.8指針類型分析
5.3.9遞歸類型分析
5.4聲明的語義分析
5.4.1聲明的語法結構
5.4.2標號聲明部分的語義分析
5.4.3常量聲明部分的語義分析
5.4.4類型聲明部分的語義分析
5.4.5變數聲明部分的語義分析
5.4.6過程、函數聲明的語義分析
5.5執行體的語義分析
5.5.1執行體的語義分析
5.5.2帶標號語句和轉向語句的語義分析
5.5.3賦值語句的語義分析
5.5.4條件語句的語義分析
5.5.5while循環語句的語義分析
5.5.6for循環語句的語義分析
5.5.7過程調用語句的語義分析
5.5.8表達式的語義分析
5.5.9變數的語義分析
練習
第6章運行時的存儲環境
6.1運行時的存儲空間結構與分配
6.1.1運行時的存儲空間基本結構
6.1.2靜態區的存儲分配
6.1.3棧區的存儲分配
6.1.4堆區的存儲分配
6.1.5堆區空間管理
6.2過程活動記錄與棧區組織結構
6.2.1過程活動記錄
6.2.2活動記錄的填寫
6.2.3棧區組織結構——AR鏈
6.3運行時的變數訪問環境
6.3.1可訪問活動記錄
6.3.2局部Display表方法
6.3.3靜態鏈方法
6.3.4全局Display表方法和寄存器方法
6.3.5無嵌套時的AR及訪問環境
6.4分程序和動態數組空間
6.4.1無動態數組時的分程序空間
6.4.2動態數組空間
練習
第7章面向語法的語義描述
7.1動作文法
7.1.1動作文法定義
7.1.2動作文法的遞歸實現
7.1.3動作文法的LL實現
7.1.4動作文法的LR實現
7.2動作文法應用
7.2.1用動作文法描述表達式計算
7.2.2用動作文法描述表達式抽象樹的構造
7.2.3用動作文法描述語句抽象樹的構造
7.3抽象動作文法及其應用
7.3.1抽象變數
7.3.2抽象動作文法
7.3.3棧式LL動作文法驅動器
7.3.4抽象動作文法到棧式LL動作文法的轉換
7.3.5棧式LR動作文法驅動器
7.3.6抽象動作文法到棧式LR動作文法的轉換
7.4屬性文法
7.4.1屬性文法定義
7.4.2屬性語法樹和屬性依賴圖
7.4.3計算順序
7.4.4屬性值的計算方法
7.4.5拷貝型屬性文法
7.5屬性文法在編譯器設計中的應用
7.5.1類型樹的屬性文法描述
7.5.2表達式中間代碼的屬性文法描述
7.5.3變數中間代碼的屬性文法描述
7.5.4語句中間代碼的屬性文法描述
7.5.5正則表達式到自動機轉換的屬性文法描述
7.6S-屬性文法及其屬性計算
7.6.1S-屬性文法
7.6.2S-屬性文法的遞歸實現
7.6.3S-屬性文法的LR實現
7.7L-屬性文法及其屬性計算
7.7.1L-屬性文法
7.7.2L-屬性文法的遞歸實現
7.7.3L-屬性文法的LR(1)實現
7.8語義分析器的自動生成系統
7.8.1YACC
7.8.2LALRGen
7.8.3Accent系統
練習
第8章中間代碼生成
8.1中間代碼
8.1.1中間代碼的種類
8.1.2後綴式中間代碼
8.1.3三地址中間代碼
8.1.4抽象語法樹和無環有向圖
8.1.5多元式中間代碼
8.1.6中間代碼分量ARG結構
8.2表達式的中間代碼生成
8.2.1表達式的語義信息
8.2.2表達式的中間代碼
8.2.3變數的中間代碼
8.2.4表達式的中間代碼生成
8.2.5變數的中間代碼生成
8.2.6布爾表達式的短路中間代碼
8.3原子語句的中間代碼生成
8.3.1輸入/輸出語句的中間代碼生成
8.3.2goto語句和標號定位語句的中間代碼生成
8.3.3return語句的中間代碼生成
8.3.4賦值語句的中間代碼生成
8.3.5函數(過程)調用的中間代碼生成
8.4結構語句的中間代碼生成
8.4.1條件語句的中間代碼生成
8.4.2while語句的中間代碼生成
8.4.3repeat語句的中間代碼生成
8.4.4for語句的中間代碼生成
8.4.5case語句的中間代碼生成
8.4.6函數聲明的中間代碼生成
練習
第9章中間代碼優化
9.1引言
9.1.1優化的目標和要求
9.1.2優化的必要性
9.1.3優化的內容
9.1.4局部優化和全局優化
9.1.5基本塊和程序流圖
9.2常表達式優化
9.2.1常表達式的局部優化
9.2.2基於常量定值分析的常表達式全局優化
9.2.3常量定值分析
9.3公共表達式優化
9.3.1基於相似性的公共表達式局部優化
9.3.2基於值編碼的公共表達式局部優化
9.3.3基於活躍代碼分析的公共表達式全局優化
9.3.4活躍運算代碼分析
9.4程序流圖循環
9.4.1循環的基本概念
9.4.2支撐結點
9.4.3自然循環
9.4.4可歸約程序流圖
9.4.5基於文本的循環及其處理
9.5循環不變代碼外提
9.5.1代碼外提的基本概念
9.5.2循環不變代碼的判定
9.5.3循環不變代碼外提的條件
9.5.4基於文本循環和定值表的不變代碼外提
9.5.5一種簡單的外提優化方案
9.5.6別名分析
9.5.7過程與函數的副作用分析
9.6循環內歸納表達式的優化
9.6.1歸納變數
9.6.2歸納變數計算的優化演算法原理
練習
第10章目標代碼生成
10.1目標代碼
10.1.1虛擬機代碼
10.1.2目標機代碼
10.1.3窺孔優化
10.2臨時變數
10.2.1臨時變數的特點
10.2.2臨時變數的存儲空間
10.2.3臨時變數的存儲分配
10.2.4變數狀態描述
10.3寄存器
10.3.1寄存器分類及其使用准則
10.3.2寄存器分配單位
10.3.3寄存器狀態描述
10.3.4寄存器分配演算法
10.4基於三地址中間代碼的目標代碼生成
10.4.1目標地址生成
10.4.2間接目標地址的轉換
10.4.3表達式中間代碼的目標代碼生成
10.4.4賦值中間代碼的目標代碼生成
10.4.5其他寄存器分配法
10.4.6標號和goto語句中間代碼的目標代碼生成
10.4.7return中間代碼的目標代碼生成
10.4.8變數中間代碼的目標代碼生成
10.4.9函數調用中間代碼的目標代碼生成
10.5基於AST的代碼生成
10.5.1三地址中間代碼到AST的轉換
10.5.2標記需用寄存器個數
10.5.3從帶寄存器個數標記的AST生成代碼
10.6基於DAG的代碼生成
10.6.1從AST到DAG的轉換
10.6.2DAG排序和虛寄存器
10.6.3從帶序號和虛寄存器標記的DAG生成代碼
10.7代碼生成器的自動生成
10.7.1代碼生成器的自動化
10.7.2基於指令模板匹配的代碼生成技術
10.7.3基於語法分析的代碼生成技術
練習
第11章對象式語言的實現
11.1引言
11.2SOOL語法
11.2.1程序
11.2.2分程序
11.2.3類聲明
11.2.4類型
11.2.5變數聲明
11.2.6函數聲明和方法聲明
11.2.7語句
11.2.8變數
11.2.9表達式
11.2.10程序示例
11.3SOOL語義
11.3.1聲明的作用域
11.3.2Class聲明的語義
11.3.3語句的語義
11.4SOOL語義分析
11.4.1標識符的符號表項
11.4.2符號表結構
11.4.3符號表的局部化
11.5SOOL目標代碼
11.5.1對象空間
11.5.2當前對象——self
11.5.3活動記錄
11.5.4成員變數的目標地址
11.5.5表達式的目標代碼
11.5.6Offset原理
11.5.7類的多態性
11.5.8目標代碼區
11.5.9方法的動態綁定
11.5.10快速動態綁定目標代碼
主要參考文獻

⑨ c語言程序設計教程吳國棟版答案在哪裡找

c語言程序設計教程吳國棟版答案在書本後面的二維碼掃碼可以找到。C語言是一門面向過程、抽象化的通用程序設計語言,廣泛應用於底層開發。C語言能以簡易的方式編譯、處理低級存儲器。C語言是僅產生少量的機器語言以及不需要任何運行環境支持便能運行的高效率程序設計語言。盡管C語言提供了許多低級處理的功能,仍然保持著跨平台的特性,以一個標准規格寫出的C語言程序可在包括一些類似嵌入式處理器以及超級計算機等作業平台的許多計算機平台上進行編譯。

閱讀全文

與編譯設計與開發技術答案相關的資料

熱點內容
求圓的周長最快演算法 瀏覽:188
安卓熱點怎麼減少流量 瀏覽:270
北京代交社保用什麼app 瀏覽:855
第一眼解壓視頻 瀏覽:725
文件夾err是什麼 瀏覽:97
qt4編程pdf 瀏覽:572
區域網伺服器下如何連續看照片 瀏覽:254
經過加密的數字摘要 瀏覽:646
加密鎖9000變列印機 瀏覽:694
程序員的職業發展前途 瀏覽:639
安卓是世界上多少個程序員開發 瀏覽:45
解壓器官方免費 瀏覽:85
單片機p10開發 瀏覽:487
做什麼app賺錢 瀏覽:84
博途編譯失敗聯系客戶支持部門 瀏覽:928
金蝶旗艦版編譯 瀏覽:52
萬象伺服器斷電後啟動不了怎麼辦 瀏覽:358
我的世界蘋果版的2b2t伺服器地址咋查 瀏覽:97
xlsx轉換pdf 瀏覽:102
3dmax擠出命令英語 瀏覽:906