計算所編譯組
❶ 中國科學院計算技術研究所怎麼樣
很牛逼。
中國科學院計算技術研究所(Institute of Computing Technology, Chinese Academy of Science,簡稱ICT)創建於1956年,總部坐落於北京海淀區,中關村科學院南路六號。是中國第一個專門從事計算機科學技術綜合性研究的學術機構。計算所研製成功了中國第一台通用數字電子計算機,並形成了中國高性能計算機的研發基地,中國首枚通用CPU晶元也誕生在這里。
計算所是中國計算機事業的搖籃。隨著學科與技術發展,從計算所陸續分離出中科院微電子研究所、計算中心、軟體研究所和計算機網路信息中心等多個研究機構,及聯想、曙光等高技術企業。計算所是中國科學院「知識創新工程」首批試點單位。
計算所擁有計算機體系結構國家重點實驗室、中國科學院智能信息處理重點實驗室、中國科學院網路數據科學與技術重點實驗室、移動計算與新型終端北京市重點實驗室、國家並行計算機工程技術研究中心、國家高性能計算機工程技術研究中心。[1] 依託科研基地,計算所加強了原始創新研究、重大關鍵技術研究和產業化共性技術研究,以解決計算機學科中的重大科學和技術問題,為計算所的長遠發展提供長期的、戰略性的技術儲備和基礎,並培養一批高水平、高素質的學科帶頭人與學術團隊。計算所正在發展成為由本部核心所和建在上海、洛陽、蘇州、寧波、東莞等地的若干個分部組成的網路型研究所。
中國科學院計算技術研究所
計算技術研究所是中國第一個專門從事計算機科學技術綜合性研究的學術機構,致力於計算機科學技術領域的科學發現和技術創新,為中國經濟建設、國家安全和社會可持續發展不斷做出基礎性、戰略性、前瞻性的重大創新貢獻,努力成為社會公認的引領我國信息產業和信息化的計算技術主要源頭。目前設立了計算機系統研究部、網路研究部、智能信息處理研究部,三個研究部下設十三個研究中心或實驗室。[2]
計算機系統研究部研究方向包括:高端計算體系結構、微體系結構、編譯和編程、VLSI與容錯計算、非傳統體系結構、高性能計算機系統、高性能計算機系統應用環境、高性能計算應用、高性能處理器體系結構、IP及系統晶元(SoC)設計技術、低功耗處理器設計技術、處理器驗證與測試技術、納米級集成電路設計技術、高速信號傳輸技術、存儲技術、計算機應用技術;網路研究部研究方向包括:雲計算系統與基礎設施、網路搜索與挖掘、輿情計算與內容安全服務、網路模擬與安全應用、網路科學與社會計算基礎理論、移動互聯網、可信互聯網、感測器網路、低耗能無線通信基帶晶元、協同無線通信與軟體無線電技術、高速寬頻移動通信技術、復雜異構移動通信網路控制、無線資源管理技術和新一代低功耗無線網路系統架構等;智能信息處理研究部研究方向包括:知識網格、智能科學、大規模知識處理、自然語言理解和翻譯、基於圖像的人機交互、多媒體信息的編碼與理解、大規模高維數據可視化、智能感知與交互技術、情境計算、嵌入式與先進終端技術、高速數字信號處理技術、無線傳輸技術、數字內容處理技術、基於「龍芯」的低成本信息化應用集成技術、生物信息處理、跨媒體計算、虛擬現實、網格操作系統等。[1]
截至2013年底,計算所獲得國家、院、市、部級科技獎勵206項,其中,國家級科技獎勵43項(含非第一完成單位7項),院、部級科技獎勵163項(含非第一完成單位7項)。[1]
現任領導編輯
孫凝暉
男,博士,研究員。1968年3月出生,籍貫安徽壽縣,1989年畢業於北京大學計算機系,隨後進入中科院計算所攻讀碩士學位,1992年碩士畢業後留所工作,1995年攻讀在職博士,1999年獲工學博士學位。1997年至2000年先後擔任計算所智能中心研發部副主任、主任,2000年至2005年任國家智能計算機研究開發中心主任, 2005年至2009年先後擔任計算所系統結構研究部主任、計算機系統結構重點實驗室主任,計算所副總工程師(兼),所長助理(兼)等職務,2009年7月起任中科院計算所常務副所長,2011年7月起任中科院計算所所長。
孫凝暉研究員先後參加並領導了曙光一號並行計算機,曙光1000大規模並行機、曙光2000-I、曙光2000-II超級伺服器、曙光3000超級伺服器、曙光4000超級伺服器、曙光5000A高效能計算機、曙光6000高性能計算機的研製,其中提出了一系列高性能計算機體系結構和系統設計方法,並行演算法和應用的優化方法,多次獲得國家和科學院科技進步獎,1999年獲中國科學院青年科學家獎一等獎,2001、2003、2006年三次榮獲國家科技進步二等獎,2005年獲中國科學院傑出科技成就獎,2006年獲得「中國青年科技獎」和「中國十大傑出青年」榮譽稱號。
孫凝暉研究員主要從事計算機體系結構方面研究,發表論文100多篇,現擔任中國計算機學會理事、高性能計算機專委會副主任,中國科學技術大學客座教授,計算機學報主編,Journal of Computer Science and Technology領域編委,計算機研究與發展編委。
李錦濤
男,博士,研究員,
李錦濤
1962年出生,現任中國科學院計算技術研究所黨委書記、副所長(兼)、前瞻研究實驗室主任(兼),計算所職代會和工會主席。李錦濤研究員於1986年考入計算技術研究所攻讀博士學位,於1989年獲得計算機應用專業博士學位後留所工作,並於1989-1990年在捷克斯洛伐克科學院做訪問學者。李錦濤研究員在工作期間,先後被聘為研究員、博士生導師,北京市自然科學基金委員會副會長等。李錦濤研究員主要從事數字媒體處理技術、虛擬現實技術和普適計算技術領域的研究,先後承擔了國家863計劃、科技部國際科技合作、國家自然科學基金、北京市科技計劃等項目,已申請40餘項專利,出版著作2部,發表學術論文80餘篇。他主持的智能化網路訪問終端系統研究取得了重大突破,並在全國10多個行業取得了良好的應用,獲得了北京市科學技術一等獎,是國務院政府特殊津貼專家。
隋雪青
男,研究員級高工,1964年出生,
隋雪青
現任中國科學院計算技術研究所副所長。1990年在國家智能計算機研究開發中心工作,參加曙光1號的應用開發,1995年進入曙光信息產業有限公司,從事國產曙光伺服器的產業化推廣工作。2001年調回計算所工作,歷任技術發展處處長、所長助理,主要從事技術轉移工作。先後以成立合資企業、建立孵化器進行技術入資,以成立計算所分部進行技術輻射,以技術拆分專利許可進行技術轉讓等多種方式進行技術轉移與輻射。
陳熙霖
男,博士、研究員、博士生導師。1965年出生,現任中國科學院計算技術研究所副所長。1988年、91年和94年分別於哈爾濱工業大學計算機系獲得學士、碩士和博士學位。畢業後留校任教,先後任講師(1994)、副教授(1996)、教授(1999)。2001年5月至2004年5月在美國卡內基梅隆大學計算機學院訪問。回國後入選中國科學院百人計劃,先後任中科院計算所研究員、中科院智能信息處理重點實驗室主任、副總工兼智能信息處理研究部主任、所長助理職務。主要研究領域為計算機視覺、模式識別、多媒體技術以及多模式人機介面。先後主持過自然科學基金重點項目、863計劃等項目的研究工作。先後獲得國家科技進步二等獎三項,省部級科技進步獎7項,獲得國家發明專利四項,合作出版專著1本,在包括IEEE Transactions在內的國內外刊物和會議上發表論文100多篇。擔任過十多個國際學術會議的程序委員會委員。
張光輝
男,博士,高級工程師。1964年出生,現任中國科學院計算技術研究所紀委書記兼黨委副書記。1985年8月至2007年12月,在總參某部從事通信系統的國防科研與管理工作。多次參與國家和軍隊大型通信系統科研項目,涉及數字信號處理系統的DSP軟硬體實現、通信裝備的嵌入式系統設計、信源的編解碼演算法、信道糾錯的軟硬體實現、各類多址信號的調制與解調、寬頻模擬信號與高數據率數字信號的實時採集與存貯、電子設備在線測試診斷技術等。作為主要貢獻者,取得軍隊科技進步一等獎1項;以第一完成人的身份,取得軍隊科技進步二等獎3項。
學術委員會編輯
學術委員會是計算所的最高學術管理組織。[3]
名譽主任:夏培肅汪成為
主任委員:徐志偉
副主任委員:孫凝暉
委 員: (按姓氏音序排序)
陳熙霖 程學旗 方濱興 高慶獅 胡偉武 李德毅 李國傑
李錦濤 李凱 李曉明 李忠誠 陸汝鈐 孟丹 倪光南
倪明選 孫凝暉 王兆其 徐志偉 許魯 趙偉 諸葛海
秘 書
研究實體編輯
計算機系統研究部
中國科學院計算技術研究所
計算機系統研究部成立於2005年11月,主要從事計算機系統相關領域的研究。
計算機系統研究部下設:
計算機體系結構國家重點實驗室
微處理器研究中心
高性能計算機研究中心(國家智能計算機研究開發中心)
先進計算機系統研究中心(中科院計算所-華為聯合實驗室)
數據存儲技術研究中心
計算機應用研究中心[4]
研究方向:
●計算機體系結構
●計算機系統
●高性能計算機
●伺服器技術
●處理器技術
●編譯技術
●並行演算法和應用
●存儲技術
●
中國科學院計算技術研究所
操作系統
●高性能嵌入式計算機系統
●地理信息系統與空間信息服務支撐技術
網路科學與技術研究部
網路科學與技術研究部下設:
網路數據科學與技術重點實驗室
網路技術研究中心
無線通信技術研究中心(移動計算與新型終端北京市重點實驗室)
專項技術研究中心[2]
信息科學技術正面臨著系統化、跨越式發展新的臨界點。網路科學所關注基本問題正是信息技術發展的趨勢之一。網路科學與技術研究部針對新型網路基礎設施平台、網路服務和網路信息安全保障等多層次實際需求,研究網路科學的基礎理論體系、新一代網路通信互連標准與關鍵技術、網路體系結構與系統軟體平台、惠及大眾的低成本網路服務軟體以及網路與信息安全關鍵技術與系統。 研究部下設科研實體包括:下一代互聯網研究中心、信息智能與信息安全研究中心、網格與服務計算研究中心、感測器網路實驗室與網路管理技術課題組。
研究部的主要研究方向包括:1、面向下一代網路通信、接入、互聯研究。包括核心關鍵技術與標準的研究以及相應的實驗網建設;2、面向服務和計算共享的新型網路體系結構研究。包括網路環境下的協作共享基礎理論、系統軟體平台與行業應用軟體;3、新型網路環境下的網路與信息安全研究。包括網路信息內容安全、網路安全管理、可控可管的新型網路體系結構與信息安全保障體系的研究;4、網路科學基礎理論及新一代網路服務基礎理論與系統研究。
中國科學院計算技術研究所
研究部的主要目標包括:1、面向科學問題,形成網路科學與技術研究領域國際著名團隊,在網路科學的基礎理論、網路系統的專利標准等方面有一定的國際話語權;2、面向國家需求,承擔國家網路信息安全保障、新一代網路基礎設施平台以及國家級網格平台等方面的重要任務,建設完成一系列重大系統;3、面向廣大的社會信息網路終端用戶需求,研製惠及億萬網路群體的網路服務軟體,提供低成本、社會化、智能化的網路信息服務。
智能信息處理研究部
智能信息處理研究部下設:
智能信息處理重點實驗室
普適計算研究中心
前瞻研究實驗室[2]
為我國信息技術的長期發展積累知識、創新技術和培養人才。智能信息處理研究部的主要研究方向包括:知識網格,涉及Internet上實現分布知識的共享、集成、運用和知識管理的模型、理論、方法體系以及平台和機制;海量知識庫,涉及大規模知識獲取與組織、基於知識的計算機藝術和自然語言處理、並行地理圖象知識處理系統、NKI支撐下的應用研究;圖像理解與識別,涉及人臉識別等生物特徵識別技術以及人體行為分析技術;可視化與復雜數據展示,涉及大規模虛擬人與環境的建模與合成技術;多媒體分析與處理,涉及音視頻數據的編碼、分析理論與應用;多語言與多模態人機交互,涉及自然語言處理、評測與交互技術以及手語識別與合成等技術。
前瞻研究實驗室創立於2005年11月,其目標聚焦在基礎性、前瞻性和交叉學科研究,與國內外研究團隊的合作研究,推動計算所在信息技術領域和交叉學科研究的持續發展;為計算所的長遠發展奠定人才基礎。 前瞻研究中心實行「機構開放、人員流動、公平競爭、擇優支持、鼓勵創新」的運行機制,旨在營造一個「創新、求實、高效、和諧」的研究氛圍,倡導敢為天下先、勇於開拓、容忍失敗的創新理念,努力把中心建成知識創新骨幹人才的培養基地和基礎性、前瞻性計算技術研究的樂園。
中國科學院計算技術研究所
首批進入前瞻研究實驗室的研究實體包括信息檢索課題組和影視動漫關鍵技術課題組等。
普適計算研究中心創立於2007年3月,其目標聚焦在面向低成本信息化重大需求的相關先進技術研發上。
普適計算研究中心為所直屬研究中心,由普適研究中心所級領導小組具體指導中心的工作。中心堅持「團結進取、務實創新」的原則,協調並集中網路終端方面的資源和力量,緊密結合應用需求,努力承擔國家重大專項,爭取成為國家級先進普適終端方向的工程技術中心。
首批進入普適計算研究中心的科研實體包括媒體計算課題組、網路終端課題組以及實時信號處理課題組。
管理部門編輯
綜合處
綜合處是計算所的中心樞紐,它對外代表計算所的形象,對內是聯系工作的窗口,肩負著綜合、協調、管理、服務等多方面的職能。
行政工作:主要負責代表法人單位的印章管理、公文管理、辦公用房的管理、職工宿舍的管理、房產管理、住房補貼的發放、職工體檢安全保衛、科研環後勤境的支撐保障等工作。
黨務工作:主要負責黨務、紀檢監察、統戰和群眾等工作。
基建園區建設:主要負責計算所新園區的建設。
宣傳工作:主要負責代表法人單位的政務信息、宣傳、科普、網站等工作,同時承擔所刊《創新·求實》編制、所中文網站的內容建設和系統管理等工作。
所務工作:所務會、所長辦公會相關工作;所內外重要聯絡工作。[5]
人力資源處
本著「用好現有人才,穩定關鍵人才,引進急需人才,培養未來人才」的原則,為計算所發展戰略目標的實施及加強科技創新隊伍建設,提供有力的人才和組織保證。主要工作有:人員的招聘與配置工作;崗位聘任、專業技術職務評聘工作;員工培訓和繼續教育工作;薪酬管理;員工福利和社會保險的管理;員工的績效考核的管理;人力資源信息系統的管理;人事檔案的管理;各類專業人才培養計劃(「百星計劃」、「定向培養制度」「人力資源基金」、「出國留學基金」等);「百人計劃」的招聘工作;科技副職的選派和管理;「西部之光」人才項目的引進與管理;外國專家的引進工作;王寬誠項目的申請與管理;各類公派留學的申請與管理;人事印章管理等。[6]
科研處
科研處是所務會領導下的一個執行機構,是所務會有關科研工作決議的執行者和推動者,代表所務會對計算所與科研相關的重大活動進行必要的策劃、組織、協調和管理,為科研人員工作的開展提供所需的服務和支撐,規范計算所的科研工作。
科研處下設機構包括:學術規劃辦公室、科研項目(軍工)辦公室、科研管理辦公室(含保密辦公室、綜合檔案室、質量管理辦公室)
學術規劃辦公室職責:負責全所科研與學術戰略與規劃的研究、制定與調整,組織全所春秋兩季戰略規劃會的舉辦;承擔所學術委員會日常工作事務,負責全所所級學術報告的發布、組織與管理;承擔全所科技論文和專著的統計、優秀學術論文的評選;負責國際合作和外事管理,包括辦理因公出國的手續、國際會議的舉辦以及其他與國際合作有關的事宜;與科研管理辦共同負責每年科學院組織的研究所評估工作等。
科研項目(軍工)辦公室職責: 圍繞計算所的科學發展戰略及科研規劃,負責全所科研項目(含軍工)的策劃、爭取以及軍工產品生產的組織管理、產品交付及交付後的跟蹤等;負責裝備承製單位資格、武器裝備科研生產許可證的申請、自查、整改等。
科研管理辦公室職責:負責科研項目立項到結題的全過程管理;負責全所縱向課題(國家基金委、科技部(含863計劃、973計劃、科技支撐計劃)、科學院、國家其它部委、地方政府等)的申報組織工作;負責課題的合同評審工作;負責除知識產權外的科技成果的管理(包括成果的驗收、鑒定、登記、獎勵申報等);負責重點實驗室、國家工程實驗室與國家工程中心的管理;與學術規劃辦共同負責研究所評估;負責科技部和科學院的綜合統計等。
保密辦公室職責:負責組織宣傳貫徹上級有關保密工作的方針、政策和法律法規;制定和組織落實保密委員會工作計劃;開展全所保密日常管理;監督、指導和檢查各單位(部門)保密管理工作情況;提出年度保密培訓計劃和協同人力資源處開展保密教育;監督全所實施各項保密審查審批;完成全所保密檔案。
綜合檔案室職責:負責全所綜合檔案管理,監督、指導實體(部門)各類檔案預立卷工作,督促全所各類檔案材料歸檔,完成全所各類檔案分類、整理、裝訂、立卷和數據錄入、編目、上架等工作,實現對全所各類檔案的規范管理,為全所各項工作提供檔案查詢、利用服務。
質量管理辦公室職責:歸口管理計算所質量和標准化相關工作。組織質量管理體系的建立、運行和持續改進,組織質量管理相關文件的制定與修改,組織質量管理體系的內外部審核,監督質量管理體系的運行狀況;負責重點項目的質量監控與跟蹤,組織質量問題的歸零處理;負責出所檢驗、合格證簽發及質量證明文件提供;負責重點項目的標准化審查、組織企業標准制定及國家、行業標準的推廣應用工作;負責全所質量相關工作的宣傳與培訓;計算所質量相關工作的外部聯絡。[7]
技術發展處
技術發展處是計算所為實現技術轉移和孵化所設立的專門機構,是技術轉移工作的規劃者、監督者、協調者和服務者。技術發展處下設知識產權辦、技術轉移辦,分別擔負計算所技術轉移工作中涉及到的不同職責。
技術發展處通過產業關鍵技術、技術入股、專利許可、技術孵化和院地合作等不同方式與社會各界進行了泛合作。在技術發展處的推動下,計算所在科研成果孵化方面取得了較大成績,例如:通過大力開展院地合作,從2002年開始,先後與地方政府合作成立了蘇州分部、上海分部、肇慶分部、寧波分部、台州分部和東莞等分部,共計吸引當地政府與企業資金2.2億元,這些分部不僅推動了計算所的成果輻射面,也成為當地科技建設的中堅力量;通過科研成果轉化參股創立北京神州龍芯集成電路設計有限公司、北京神州天脈網路計算機有限公司等多家高科技公司,為科研成果的產業化貢獻力量;同時,在對外合作中還承擔了Intel、Nokia、聯想等知名企業委託的許多高科技研究開發課題。
技術發展處各辦公室主要職能設置介紹如下:
技術轉移辦:技術轉移辦主要負責計算所在技術轉移過程中執行層面的工作,兼有管理和拓展業務兩方面的職能,負責包括融資與企業孵化、技術許可與轉讓、分部管理、參股公司管理和企業聯合實驗室管理、企業合作的橫向實驗室管理等科研成果產業化的各項工作。計算所分部的管理和計算所科研成果在分部所在區域的成果輻射與轉化。
知識產權辦:主要負責工作包括專利分析與專利策略、知識產權管理、專利技術許可政策、標准策略與推進及與知識產權密切相關的合同審查和法律事務等工作,其職能貫穿科研選題立項-研發中期-形成科研成果-技術轉移全過程。[8]
研究生部
研究生部是所務會和所黨委領導下的、執行所學位評定委員會和教育工作指導小組有關研究生教育工作決議的教育管理職能部門。本部門的主要職責是:
1.貫徹落實中科院研究生院關於研究生教育與培養的方針、政策;
2.緊密配合本所發展戰略,堅持「以人為本」,德、智、體、美全面發展的原則,以培養具有「科研為國分憂,創新與民造福」精神的IT領域領軍型人才和創業者為特色,開展計算所教育品牌建設;
3.規范教育管理工作,內容包括:制定教育發展規劃、招生工作、研究生思想政治工作、學生住宿、學籍及檔案管理、課程建設、助學金/獎學金、論文答辯、導師遴選與培訓上崗、學生社團、就業指導、博士後進出站、受理同等學力人員申請學位、客座學生、同學會、教育基金會管理等;
4.開展對研究生教育工作的研究。[9]
財務資產處
財務資產處是按照國家財經政策,負責做好全所經濟事項的會計核算、執行財務、資產管理制度,提高財務管理水平,合理用好用活各項資金、實現資產保值、增值的職能部門。
其工作職責為: [10] (1)根據計算所戰略發展規劃制定財務工作規劃,根據研究所年度計劃,在所長授權范圍內,匯總並調整各部門預算,編制年、季度財務預、決算並監督執行;
(2)合理配置財務機構和人員,確保高效率的管理和服務;
(3)根據國家法律法規,制定並完善全處的管理制度和工作程序並監督執行;
(4)負責研究所資金的運籌、調配、核算等工作;
(5)定期進行研究所財務狀況分析,及時、准確地報告重大財務風險並提出解決方案;
(6)負責研究所各類項目的預算評估、成本核算和控制,並且對項目的財務風險實施監控;
(7)建立規范的核算體系,及時、准確、完整地提供財務、資產信息;
(8)負責國有資產年報、年檢、產權變動登記;
(9)負責對分部和下屬企業以及基建項目有關財務的監督管理。
(10)負責全所屬固定資產(儀器、設備、傢具)的管理。
(11)組織和配合科研項目等各類審計工作;
支撐部門編輯
科研支撐中心
科研支撐中心是在所務會領導下的執行機構,於2009年11月成立,是進一步加強我所科技創新基礎平台建設的一個重大改革舉措,負責全所科研支撐體系的建設。
科研支撐中心的主要職責包括:全所公共科研支撐平台建設、運維服務和管理工作;全所網路環境建設規劃、實施與日常維護、技術支持;全所信息化工作規劃與實施推進管理(包括網路信息安全日常管理與定期檢查);圖書期刊的購入管理與借閱服務;圖書、資料數字資源建設與管理維護;文獻檢索與全文傳遞服務;公共EDA設計平台建設與運行管理;集成電路相關公共資源庫的建立、使用服務與管理;EDA 相關渠道管理;集成電路設計服務等;負責《計算機研究與發展》、《計算機學報》、《Journal of Computer Science and Technology》、《計算機輔助設計與圖形學學報》四個學術期刊的出版工作等。
中心擁有一套13萬億次計算能力、270TB共享存儲空間的共享計算平台和20多台高速信號傳輸、集成電路驗證加速、硬體調試測試實驗室設備和防靜電實驗環境,提供基於虛擬化和雲技術的統一IT支撐服務、同構千核實驗環境和全流程EDA設計技術服務。圖書情報方面能夠提供多元化的圖書情報服務,包括圖書資料查閱、項目查新、影響力分析等知識化服務,定期出版的《信息技術快報》為計算機界同行及企業和政府的決策者了解計算所科研工作的窗口。四個學術刊物多年來一直排名國內計算機專業前列,多次獲得國家科技期刊獎項和基金資助。
成果介紹編輯
到2006年底,全所共取得科技成果593項,共獲國家、院、市、部級科技獎勵:203項,其中:國家級科技獎勵33項,院、部級科技獎勵145項。
農村科技遠程教育和信息主動推送的集成系統
基於龍芯CPU的大規模並行計算機系統的關鍵技術研究
基於龍芯的SMP晶元組及其相關系統的研究
中國科學院計算技術研究所
虛擬計算環境的關鍵技術研究
動態容災模型及其關鍵技術研究
語義與知識網格的理論及應用研究
蛋白質質譜鑒定中的優化問題
支持移動、漫遊的多媒體會晤業務系統
基於三維人體運動模擬與視頻分析的計算機輔助運動系統及示範應用
基於IPv6移動話音業務關鍵技術試驗
新一代機群關鍵技術研究
中科SoC晶元系列化關鍵技術研究
可互操作空間數據引擎的高速通道研究
能力伺服器——低成本信息化技術
網路化內存關鍵技術及原型系統研究
無線感測器網路系統級關鍵技術研究及兩個典型示範應用
新型結構龍芯CPU研究
藍鯨網路存儲技術成果轉化
生物運行機制的形式化描述探索
車載綜合信息處理與紅外安全系統的研製和智能交通信息交互的研究
❷ 編譯器是什麼
簡單講,編譯器就是將「一種語言(通常為高級語言)」翻譯為「另一種語言(通常為低級語言)」的程序。一個現代編譯器的主要工作流程:源代碼 (source code) → 預處理器 (preprocessor) → 編譯器 (compiler) → 目標代碼 (object code) → 鏈接器 (Linker) → 可執行程序 (executables)
高級計算機語言便於人編寫,閱讀交流,維護。機器語言是計算機能直接解讀、運行的。編譯器將匯編或高級計算機語言源程序(Source program)作為輸入,翻譯成目標語言(Target language)機器代碼的等價程序。源代碼一般為高級語言 (High-level language), 如Pascal、C、C++、Java、漢語編程等或匯編語言,而目標則是機器語言的目標代碼(Object code),有時也稱作機器代碼(Machine code)。
對於C#、VB等高級語言而言,此時編譯器完成的功能是把源碼(SourceCode)編譯成通用中間語言(MSIL/CIL)的位元組碼(ByteCode)。最後運行的時候通過通用語言運行庫的轉換,編程最終可以被CPU直接計算的機器碼(NativeCode)。
編譯是從源代碼(通常為高級語言)到能直接被計算機或虛擬機執行的目標代碼(通常為低級語言或機器語言)的翻譯過程。然而,也存在從低級語言到高級語言的編譯器,這類編譯器中用來從由高級語言生成的低級語言代碼重新生成高級語言代碼的又被叫做反編譯器。也有從一種高級語言生成另一種高級語言的編譯器,或者生成一種需要進一步處理的的中間代碼的編譯器(又叫級聯)。
典型的編譯器輸出是由包含入口點的名字和地址, 以及外部調用(到不在這個目標文件中的函數調用)的機器代碼所組成的目標文件。一組目標文件,不必是同一編譯器產生,但使用的編譯器必需採用同樣的輸出格式,可以鏈接在一起並生成可以由用戶直接執行的EXE,
所以我們電腦上的文件都是經過編譯後的文件。
❸ 用C語言編譯數學運算
這個是我的實驗報告,跟你的這個一樣的。如果只要代碼的話就看最後面的。我感覺應該算比較全面的。你看看,有什麼具體要求可以提出來。
一、需求分析
1、 功能:疏如一行表達式,若表達式有誤,則輸出「表達式有錯」 ,否則計算出表達式的值並輸出。 運算符包括加、減、乘、除、乘方、一目減。 括弧均為小括弧,但可以層層嵌套。操作數可以是浮點數,也包括有多個字母組成的變數。
2、 輸入的形式為表達式,按回車結束。輸入值的范圍不超過浮點數的范圍。含有變數,變數名由字母組成,大小寫不限。
3、 若計算結果為整數,則輸出整數,若含有小數,則輸出浮點數。
二、概要設計
1、 總體思路,先讀入一行表達式,用一個字元數組存儲。然後依次讀每個字元,進行判斷。邊讀入邊進行計算。程序中用到了兩個棧,一個字元棧以及一個數字棧,分別用來存儲運算符和數字,根據運算符的優先順序進行計算。最後輸出結果。
2、程序包括幾個模塊,主函數和幾個基本函數。
說明幾個函數:
bool stackempty(save1 s)用來判斷操作數棧s是否為空。
void push(save1 &s,char e)若棧滿則輸出「棧已滿」,否則將元素e入棧
void pop(save1 &s, char &e)若棧為空則輸出「棧為空」,否則將棧頂元素賦給e
bool stackempty2(save2 s)用來判斷運算符棧s是否為空。
void push2(save2 &s, char e)若運算符棧滿則輸出「棧已滿」,否則將元素e入棧
void pop2(save2 &s, char &e)若棧為空則輸出「棧為空」,否則將棧頂元素賦給e
int in(char e)返回運算符e在棧內的優先順序別
int out(char e) 返回運算符e在棧外的優先順序別
void count(char a,char ope, char b)將a、b進行相應的運算,並將運算結果入棧
3、具體操作步驟:
1、先讀入一行表達式,用一個字元數組line[]存儲
2、依次讀入每個字元並進行處理同是進行表達式判錯:
1. 遇數字,則繼續判斷下一個字元,直到下一個字元不是數字且不是小數點,若該數含有兩個小以上數點,則表示輸入錯誤。否則即可保證該操作數是完整的浮點數,然後將該數入操作數棧。
若數字不是表達式的最後一位,且數字後面跟的不是「+、-、*、/、^、)」,則為表達式錯誤
2. 遇運算符,則分兩種情況:
1、若運算符為負號(該運算符為符號的情況有兩種:一為負號在最開頭,一為符號前面是「(」 ),則先將0入操作數棧,然後再將負號入運算符棧。
2、該運算符不是負號則與運算符棧的棧頂元素比:
(1) 若棧頂元素優先順序低, 新輸入的運算符入棧。
(2) 若棧頂元素優先順序高,
1) 從符號棧彈出一個運算符,
2) 從對象棧彈出一個/兩個操作數,
3) 運算結果壓入對象棧。
(3) 優先順序相等,則棧頂元素出棧,與輸入元素對消。
若「(、+、-、*、/、^」放在表達式最後面,則表達式錯誤
若「+、-、*、/、^」後面跟的不是數字或者變數,表達式錯誤
3、遇字母變數,則繼續判斷下一個字元,直到下一個字元不是字母變數,即可保證該變數是完整的,然後輸出「請輸入變數的值」,再將輸入的變數值入操作數棧。
若變數後面跟的不是「+、-、*、/、^、)」,則表達式錯誤
4、若所讀的該字元不是上述情況中的一種,則表達式錯誤
3、當將所有的字元都讀一遍之後,若表達式正確的話,則必然不含有「(」或者「)」。即若運算符棧中含有「(」或者「)」,則表達式必錯誤。 再考慮表達式正確的情況:運算符棧可能為空,則操作符棧中必剩下一個操作數,即最後的結果。若不為空,則留在運算符棧中的運算符的優先順序別從棧頂至棧底依次遞減。故可從運算符棧頂開始彈出一個運算符,從操作數棧中彈出兩個操作數進行運算,再將運算結果入操作數棧,一直循環至運算符棧為空。此時操作數棧剩下的唯一一個操作數就是運算結果。
三、結論及體會
1、實驗結論
a)、實驗完成了題目的要求,自己添加了對浮點數的操作,並進行判錯。
b)、編寫代碼基本上能夠滿足編程規范的要求,代碼的變數命名,以及注釋的書寫,基本能按照要求進行。
b)、將數據結構中的隊列和堆棧的知識復習到,並且學會創新,在代碼的編寫中,學習了編程規范,學習了結構化編程。
2、實驗體會
a)、通過本設計實驗將數據結構中的堆棧和隊列的知識復習到,並且能夠自己設計一些東西,學會了在設計實驗過程時的基本步驟。基本上能夠有條理的解決這些問題。
b)、在試驗中遇到了很多的問題,都是以前沒有發現的,這些問題設計的方面很多,有以前的C++基礎的,也有最近學習的數據結構的知識。通過實驗的設計,讓我發現了自己的不足。自己在學習知識上面的漏洞。自己在細節方面的考慮還不夠全面,很多細節都是通過調試才發現的。比如剛開始時忘了考慮變數之前有負號的情況以及將整個式子讀一遍之後,棧中的操作數可能還有剩,還得繼續進行計算等。希望通過彌補這些發現的漏洞,提高自己的專業知識水平。
c)、設計過程中的解決問題的方法,讓我明白了如何學習會更有效。如何學習才不會耽誤太多的時間。也學會了解決問題的一般方法:向老師、同學請教,藉助網路等等。
d)、實驗過程中也走了很多的彎路,由於在開始設計的時候思路不時很清晰,對於一些問題不能很好的提出解決問題的方法,在設計過程中,代碼總是重復的修改,在很多問題上,代碼並不時最優的。相信在以後的學習中,隨著知識的增多,問題會逐漸得到解決。
四、程序源代碼
#include<iostream>
#include<cmath>
#include<cstdlib>
using namespace std;
#define MAX 1000
struct save1
{
float n[MAX];
int top;
}stack1;
struct save2
{
char n[MAX];
int top;
}stack2;
//stack1存儲數字,stack2存儲運算符號.
bool stackempty(save1 s)//判斷是否為空
{
if (s.top== -1)
return 1;
else
return 0;
}
bool stackempty2(save2 s)//判斷是否為空
{
if (s.top== -1)
return 1;
else
return 0;
}
void push(save1 &s,float e)//將e入棧
{
if(s.top==MAX-1)
{
cout<<"棧已滿"<<endl;
return ;
}
s.top++;
s.n[s.top]=e;
}
void push2(save2 &s,char e)//將e入棧
{
if(s.top==MAX-1)
{
cout<<"棧已滿"<<endl;
return ;
}
s.top++;
s.n[s.top]=e;
}
void pop(save1 &s,float &e)//將棧頂元素出棧,存到e中
{
if(s.top==-1)
{ cout<<"棧為空"<<endl; }
else
{e=s.n[s.top]; s.top--; }
}
void pop2(save2 &s,char &e)//將棧頂元素出棧,存到e中
{
if(s.top==-1)
{ cout<<"棧為空"<<endl; }
else
{e=s.n[s.top]; s.top--; }
}
int in(char e)//e在棧內的優先順序別
{
if(e=='-' || e=='+') return 2;
if(e=='*' || e=='/') return 4;
if(e=='^') return 5;
if(e=='(') return 0;
if(e==')') return 7;
return -1;
}
int out(char e)//e在棧外的優先順序別
{
if(e=='-' || e=='+') return 1;
if(e=='*' || e=='/') return 3;
if(e=='^') return 6;
if(e=='(') return 7;
if(e==')') return 0;
return -1;
}
void count(float a,char ope,float b)//進行計算並將計算結果入棧
{
float sum;
if(ope=='+') sum=a+b;
if(ope=='-') sum=a-b;
if(ope=='*') sum=a*b;
if(ope=='/') sum=a/b;
if(ope=='^') sum=pow(a,b);
push(stack1,sum);
}
int main()
{
int i=0,len,j,nofpoint,g=0;//len表示輸入式子的長度。 g表示讀入的字元是否是字母變數、數字以及運算符。
float a,b;//a、b用來存儲操作數棧中彈出的操作數,便於代入函數中進行計算。
char line[MAX],operate,temp[20];
cout<<"請輸入表達式"<<endl;
cin>>line;
len=strlen(line);
stack1.top=-1;//將棧置為空
stack2.top=-1;//將棧置為空
while(1)
{
g=0;
if(isdigit(line[i]))//若讀入的字元為數字,則繼續判斷下一個字元,直到下一個字元不是數字或者不是小數點,即可保證該操作數是完整的小數,然後將該數入操作數棧。
{
j=0; g=1;
nofpoint=0;//記錄所存的數中小數點的個數
while(isdigit(line[i]) || line[i]=='.')
{
if(line[i]=='.') nofpoint++;
temp[j++]=line[i];
i++;
if(i>=len) break;
}
if( nofpoint>1 || (i<len&&(line[i]!='-' && line[i]!='+' && line[i]!='*' && line[i]!='/' && line[i]!='^' && line[i]!=')')) )
{ cout<<"表達式有錯"<<endl; return 0; }//所存數中含有不止一個小數點,或者數字後面跟的不是「+、-、*、/、^、)」,則為錯誤
temp[j]='\0';
b=atof(temp);
push(stack1,b);
if(i>=len) break;
}
else
{
if(line[i]=='-' || line[i]=='+' || line[i]=='*' || line[i]=='/' ||
line[i]=='^' || line[i]=='(' || line[i]==')' ) //若讀入的字元為運算符的情況
{
g=1;
if(line[i]=='(' && i==len) { cout<<"表達式有錯"<<endl; return 0; }// 「(」放表達式最後面,錯誤
if(line[i]=='-' || line[i]=='+' || line[i]=='*' || line[i]=='/' || line[i]=='^')
{
if(i==len) { cout<<"表達式有錯"<<endl; return 0; }//「+、-、*、/、^」放在表達式最後面,錯誤
if( (!isdigit(line[i+1])) && (!isalpha(line[i+1])) && line[i+1]!='(')//「+、-、*、/、^」後面跟的不是數字或者變數,錯誤
{ cout<<"表達式有錯"<<endl; return 0; }
}
if(line[i]=='-' && (i==0 || line[i-1]=='(' ))//運算符是負號
{
push(stack1,0);
push2(stack2,line[i]);
i++;
}
else
{ //讀入的運算符與運算符棧的棧頂元素相比,並進行相應的操作
if(in(stack2.n[stack2.top])<out(line[i])||stackempty2(stack2)) { push2(stack2,line[i]);i++;}
else
if(in(stack2.n[stack2.top])==out(line[i])) {i++; stack2.top--;}
else
if(in(stack2.n[stack2.top])>out(line[i]))
{
pop(stack1,a);
pop(stack1,b);
pop2(stack2,operate);
count(b,operate,a);
}
if(i>=len) break;
}
}
else
{
if(isalpha(line[i]))//讀入的字元是字母變數的情況
{
g=1;
cout<<"請輸入變數";
while( isalpha(line[i])) { cout<<line[i]; i++; }
cout<<"的值"<<endl;
cin>>b;
push(stack1,b);
if(i>=len) break;
if(line[i]!='-' && line[i]!='+' && line[i]!='*' && line[i]!='/' && line[i]!='^' && line[i]!=')')//變數後面跟的不是「+、-、*、/、^、)」,則為錯誤
{ cout<<"表達式有錯"<<endl; return 0; }
}
}
}
if(g==0) { cout<<"表達式有錯"<<endl; return 0; }//g=0表示該字元是不符合要求的字元
}
while(stack2.top!=-1)//讀入結束後,繼續進行操作,直到運算符棧為空
{
pop(stack1,a);
pop(stack1,b);
pop2(stack2,operate);
if(operate=='(' || operate==')') //括弧多餘的情況
{ cout<<"表達式有錯"<<endl; return 0; }
count(b,operate,a);
}
cout<<stack1.n[stack1.top]<<endl;
return 0;
}