當前位置:首頁 » 數據倉庫 » dbns提供哪種語言定義資料庫
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

dbns提供哪種語言定義資料庫

發布時間: 2023-05-15 10:45:40

『壹』 深度學習給生物學帶來了哪些改變

深度學習研究及其在生物醫葯領域的潛在應用
深度學習已經在各種生物學應用中取得成功。在本節中,我們回顧了在各個研究領域進行深度學習的挑戰和機會,並在可能的情況下回顧將深度學習應用於這些問題的研究(表1)。我們首先回顧了生物標志物開發的重要領域,包括基因組學,轉錄組學,蛋白質組學,結構生物學和化學。然後,我們回顧一下葯物發現和再利用的前景,包括使用多平台數據。
生物標志物。生物醫學的一個重要任務是將生物學數據轉化為反映表型和物理狀態(如疾病)的有效生物標志物。生物標志物對於評估臨床試驗結果[18]以及檢測和監測疾病,特別是像癌症這樣的異質性疾病,是至關重要的[19,20]。識別敏感特異性生物標志物對於現代轉化醫學來說是一個巨大的挑戰[21,22]。計算生物學是生物標志物發展。事實上,從基因組學到蛋白質組學都可以使用任何數據來源;這些在下一節中討論。
基因組學。新一代測序(NGS)技術已經允許生產大量的基因組數據。這些數據的大部分分析都可以用現代計算方法在計算機上進行。這包括基因組的結構注釋(包括非編碼調控序列,蛋白質結合位點預測和剪接位點)。
基因組學的一個重要分支是宏基因組學,也被稱為環境,生態基因組學或社區基因組學。NGS技術揭示了未經培育且以前沒有得到充分研究的微生物的自然多樣性。
宏基因組學中有幾個生物信息學挑戰。一個主要挑戰是序列數據的功能分析和物種多樣性的分析。深信念網路和經常性神經網路的使用已經允許通過表型分類宏基因組學pH數據和人類微生物組數據。 與基線方法相比,這些方法並沒有提高分類准確性作為強化學習,但確實提供了學習數據集的分層表示的能力.[23]但是,Ditzler等強調DNN可以改善現有的宏基因組學分類演算法,特別是在大數據集和適當選擇網路參數的情況下。
表1. 深度學習技術應用於不同類型生物醫學數據的總結

應用

數據源

研究目的

DL技術

准確率

利用深度學習增強癌症診斷和分類[28]

13種不同的癌症基因表達數據集(13 different gene expression data sets of cancers)

癌症檢測,癌症類型分類

稀疏和堆棧自動編碼器+ Softmax回歸

對於每個數據集的准確度都比基準更好

深度學習組織調節拼接代碼[32](Deep Learning of the Tissue-Regulated Splicing Code)

從RNA-Seq數據分析11 019個小鼠替代外顯子(11 019 mouse alternative exons profiled from RNA-Seq data)

拼接模式識別

自動編碼器+ DNN(3層)+薄荷(超參數選擇)

AUC優於基線准確度

深卷積神經網路注釋基因表達模式的小鼠腦[30]

由Allen Institute for Brain Science的小鼠腦的四個發育階段的ISH圖像

基因表達注釋

CNN(Overfeat)

AUC=0.894

多模式深度學習方法的多平台癌症數據的綜合數據分析[52]

卵巢癌和乳腺癌數據集(ovarian and breast cancer data sets)

聚集癌症患者

DBNs

lncRNA-MFDL:通過融合多個特徵和使用深度學習鑒定人類長的非編碼RNA[34]

Gencode和RefSeq的蛋白質編碼和非編碼序列(protein-coding and noncoding sequences from Gencode and RefSeq)

鑒定長的非編碼RNA

lncRNA-MFDL(深層堆疊網路,每個單元DNN)

ACC = 97.1%

用於宏基因組分類的多層和遞歸神經網路[23]

pH微生物組測序數據集和人微生物組測序數據集(pH microbiome sequencing data set and human microbiome sequencing data set)

宏基因組分類

MLP, DBN, RNN

comparison

Multi-Level Gene/MiRNA Feature Selection using Deep Belief Nets and Active Learning[27]

來自6種癌症的MiRNA表達數據(MiRNA expression data from 6 type of cancers)

Gene/MiRNA特徵選擇(基因表達)

MLFS(DBN +特徵選擇+無監督主動學習)(MLFS (DBN + feature selection + unsupervised active learning))

F1 = 84.7%

成對輸入神經網路用於目標配體相互作用預測[45]

sc-PDB資料庫(sc-pdb:用於鑒定蛋白質中「可葯用」結合位點的變化和多樣性的資料庫)

蛋白質 - 配體預測

PINN (SVD + Autoencoder/RBM)

AUC = 0.959

非編碼變數與深度學習序列模型的預測效應[49]

來自ENCODE和Roadmap Epigenomics項目的160種不同TF,125種DHS譜和104種組蛋白標記譜的690 TF結合譜

從序列中預測非編碼變異效應

DeepSEA (CNN)

AUC = 0.923 (histone)

通過深度學習預測DNA和RNA結合蛋白的序列特異性[48]

506 ChIP-seq實驗,DREAM5 TF-DNA基序識別挑戰

DNA和RNA結合蛋白的特異性分類

DeepBind(CNN)

train, AUC = 0.85; validation,
AUC > 0.7

具有雙模深信道網路的蜂窩信號系統的跨物種學習[36]

來自SBV IMPROVER挑戰的磷酸化蛋白質組學數據

跨物種學習(模擬細胞信號系統)

bDBN (bimodal DBN) and
sbDBN (semirestricted bimodal
DBN)

AUC = 0.93

表達數量性狀基因(eQTL)的鑒定與闡明及其調控機制的深入研究[35]

GEUVADIS(來自從參與1000基因組項目的個體中提取的337個淋巴母細胞系的選擇的RNA-Seq和全基因組范圍的SNP-陣列數據的組合)

確定eQTL

MASSQTL(DNN)

AUC = 0.85

建立RNA結合蛋白靶點結構特徵的深度學習框架[43]

源自doRiNA的24個數據集(轉錄後調節中的RNA相互作用資料庫)

預測RNA結合蛋白的結合位點(RBP靶標識別)

DBN(多模式DBN)

AUC = 0.983 on PTB HITS-CL

DeepCNF-D:通過加權深度卷積神經場預測蛋白質有序/無序區域[42]

來自CASP的CASP9, CASP10數據集(蛋白質結構預測的關鍵評估)

預測蛋白質有序/無序區域

DeepCNF (CRF + CNN)

AUC = 0.855 on CASP9
AUC = 0.898 on CASP10

用深度神經網路分割微陣列[29]

兩個數據集,來自2006年Lehmussola等人的微陣列圖像

微陣列分割

CNN

MAE = 0.25

深度學習葯物引起的肝損傷[46]

四個數據集,化合物,化學結構注釋DILI陽性或DILI陰性(four data sets, compounds, chemical structure annotated DILI-positive or DILI-negative properties)

葯物性肝損傷預測

RNN(遞歸神經網路)

AUC = 0.955

從頭算蛋白質二級結構預測的深度學習網路方法[38]

訓練,Protein Data Bank; 驗證,CASP9,CASP10(蛋白質結構預測的關鍵評估)

從頭算蛋白質二級結構預測

DNSS(多模RBM)

Q3 = 90.7%, Sov = 74.2%

蛋白質接觸圖預測的深層架構[39]

ASTRAL database

蛋白質接觸圖預測

RNN + DNN

ACC ∼ 30%

用深機器學習網路建模葯物樣分子的環氧化作用[47]

Accelrys代謝物資料庫(AMD):389個環氧化分子,811個非氧化分子(Accelrys Metabolite Database (AMD): 389 epoxidized molecules, 811 nonepoxidized molecules)

建模分子的環氧化性質

CNN

AUC better than baseline accuracy

DNdisorder:使用增強和深度網路預測蛋白質紊亂[41]

DISORDER723, CASP9, CASP10

預測蛋白質有序/無序區域

RBM

AUC better than baseline
accuracy

Basset:用深度卷積神經網路學習可訪問基因組的規則代碼[50]

來自ENCODE和Epigenomics Roadmap項目的164個細胞類型的DNasel-seq數據

學習DNA序列的功能活動

CNN

AUC = 0.892

a首字母縮寫詞:CNN=卷積神經網路,DNN=深度神經網路,RNN=遞歸神經網路,DBN=深信念網路,RBM=限制玻爾茲曼機器,MLP=多層感知器,MLFS=多級特徵選擇,PINN= 網路,CRF=條件隨機場。

轉錄。轉錄組學分析利用各種類型轉錄物(信使RNA(mRNA),長非編碼RNA(lncRNA),微小RNA(miRNA)等)豐度的變化來收集各種功能信息,從剪接代碼到各種疾病的生物標志物。
轉錄組學數據通常從不同類型的平台(各種微陣列平台,測序平台)獲得,其不同之處在於測量的基因組和信號檢測方法。許多因素導致基因表達數據的變異性。因此,即使對於單個平台分析也需要標准化。 跨平台分析需要規范化技術,這可能是一個重大挑戰。由於DNN具有較高的泛化能力,因此特別適合於跨平台分析。他們也能很好地處理基因表達數據的其他一些主要問題,比如數據集的大小以及對降維和選擇性/不變性的需求,下面我們將回顧幾個已經使用的DNN 用不同類型的基因表達數據來獲得不同程度的成功。
表格數據應用程序。基因表達數據可以表示的一種方式是作為矩陣的表格形式,其包含關於轉錄物表達的定量信息。這些數據是高維度的,由於數據中的信噪比損失,使得統計分析成為問題。[25]
高維數據可以通過兩種方式處理:
I. 降維:
A.特徵提取,例如用SVM或隨機森林演算法;
B.特徵子集選擇;
C.途徑分析;
II. 使用對高維度較不敏感的方法,如隨機森林或深層信念網路。
諸如主成分分析(PCA),奇異值分解,獨立分量分析或非負矩陣分解等方法是常見的前沿方法。然而,上述方法將數據轉換成許多難以用生物學解釋的組件。此外,這種降維方法基於基因表達譜提取特徵而不管基因之間的相互作用。通路分析可以減少變數的數量,減少錯誤率並保留更多的生物相關信息。[25,26]
深度學習在處理高維基質轉錄組學數據方面也取得了一些成功。在另一種方法中,將基因表達的特徵與非編碼轉錄物如miRNA的區域一起提取; 這是通過使用深度信念網路和主動學習來實現的,其中使用了深度學習特徵提取器來減少六個癌症數據集的維度,並且勝過了基本特徵選擇方法[27]。主動學習與分類的應用提高了准確性,並且允許選擇與癌症相關的特徵(改進的癌症分類),而不僅僅基於基因表達譜。使用miRNA數據的特徵選擇是使用與先前選擇的特徵子集的目標基因的關系實施的。
在另一個深度學習應用中,Fakoor等人利用自編碼器網路進行推廣,並將其應用於使用從具有不同基因集合的不同類型的微陣列平台(Affimetrix家族)獲得的微陣列基因表達數據的癌症分類[28]。他們通過PCA和非監督非線性稀疏特徵學習(通過自動編碼器)結合使用降維來構建用於微陣列數據的一般分類的特徵。癌症和非癌細胞分類的結果顯示出了重要的改進,特別是使用監督微調,這使得特徵不那麼通用,但即使對於沒有跨平台標准化的數據也能獲得更高的分類准確性。自動編碼器的全球泛化能力有助於使用不同微陣列技術收集的數據,因此可能對來自公共領域的數據進行大規模綜合分析有前途。
圖像處理應用。基因表達也可以以可視形式存儲為圖像,例如來自微陣列的圖像熒光信號或RNA原位雜交熒光或放射性信號。 在一些應用中,以圖像處理性能優越著稱的CNN已經顯示出改善這些圖像分析的潛力。
在微陣列分析中,由於斑點大小,形狀,位置或信號強度的變化,檢測信號和識別熒光斑點可能是具有挑戰性的,並且熒光信號強度通常對應於基因或序列表達水平差。在對這個問題的深度學習技術的一個應用中,CNN被用於微陣列圖像分割,並且在准確性方面顯示出類似於基準方法的准確度的結果,但是訓練更簡單並且對計算源的要求更少。[29]
將CNN應用於基於圖像的基因表達數據的另一個機會是RNA原位雜交,這是一種繁瑣的技術,當允許這樣的操作時,能夠使基因表達在一組細胞,組織切片或整個生物體中定位和可視化。這種方法促進強大的縱向研究,說明發展過程中的表達模式的變化。它被用於構建詳細的Allen DevelopmentMouse Brain Atlas,其中包含超過2000個基因的表達圖譜,每個基因在多個腦部分中進行說明。過去,這些手動標注是耗時的,昂貴的,有時也是不準確的。然而,最近,Zeng等人使用深度預訓練CNN進行自動注釋[30]。要做到這一點,神經網路模型訓練原始自然原位雜交圖像的不同層次的發展中國家的大腦沒有關於坐標(空間信息)的確切信息;這種技術在四個發展階段的多個大腦水平上實現了卓越的准確性。
剪接。深度學習的另一個應用領域是剪接。剪接是在真核生物中提供蛋白質生物多樣性的主要因素之一;此外,最近的研究顯示「拼接代碼」與各種疾病之間的聯系[31]。然而,現代科學仍然不能全面地理解控制剪接調控的機制。剪接調節的現代概念包括轉錄水平,特定信號調節序列元件(剪接增強子或沉默子)的存在,剪接位點的結構和剪接因子的狀態(例如特定位點的磷酸化可能改變剪接因子活性)。所有這些因素使分析變得復雜,因為它們之間存在大量元素和復雜的非線性相互作用。現有的拼接預測軟體需要高通量測序數據作為輸入,並且面臨著原始讀取比常規基因短的問題,以及基因組中假性基因的高重復水平和存在。因此,拼接機制的分析演算法很慢,需要高度的組合計算來源,深度學習可能會在這方面提供改進。在使用五個組織特異性RNA-seq數據集的一個深度學習應用中,使用隱變數來開發DNN以用於基因組序列和組織類型中的特徵,並且被證明優於貝葉斯方法預測個體內和組織間的組織剪接外顯子拼接的轉錄本百分比的變化(拼接代碼度量)[32]。
非編碼RNA。非編碼RNA是生物學中的另一個問題,需要復雜的計算方法,如深度學習。非編碼RNAs非常重要,涉及轉錄,翻譯和表觀遺傳學的調控[33],但是它們仍然難以與編碼蛋白質的RNA區分開來。對於短的非編碼RNA,這個任務已經很好地解決了,但是對於lncRNA來說這是相當具有挑戰性的。lncRNAs組成異構類,可能含有推定的復制起點(ORF),短的蛋白質樣序列。開發了一種新的深層次的學習方法,稱為lncRNAMFDL,用於鑒定lnc-RNAs,使用ORF,k相鄰鹼基,二級結構和預測的編碼結構域序列等多種特徵的組合[34]。該方法使用從Gencode(lncRNA)和Refseq(蛋白質編碼mRNA數據)的序列數據中提取的五個單獨特徵,並且在人類數據集中導致97.1%的預測准確性。
表達量性狀基因座分析。最後,數量性狀基因座(QTL)分析有潛力進行深入的學習。 QTL分析鑒定含有多態性的遺傳基因座,所述多態性導致復雜的多基因性狀(例如,體重,葯物反應,免疫應答)的表型變異。顯示遺傳變異的一個這樣的「性狀」是給定組織和/或條件中任何給定基因的表達或轉錄本豐度。表達QTL(eQTL)是影響轉錄本豐度的遺傳變異的基因座。 eQTL分析已經導致了對人類基因表達調控的洞察力,但面臨著許多挑戰。在局部調節表達的eQTL(順式-eQTL)相對容易用有限數量的統計測試來鑒定,但是調節基因組中其它位置的基因表達的位點(trans-eQTL)更難以檢測到。最近,為了解決使用各種編碼的生物特徵(諸如物理蛋白質相互作用網路,基因注釋,進化保守,局部序列信息以及來自ENCODE項目的不同功能元件)的反式eQTL預測問題的深度學習方法MASSQTL[35]被提出。DNN利用來自其各自交叉驗證折疊的9個DNN模型,優於其他機器學習模型,並且提供了對基因表達的調控架構的基礎的新機制。深解碼系統也被用來對trans-eQTL特徵向量進行聚類,然後通過t-SNE降維技術進行可視化。
蛋白質組學。與轉錄組學相比,蛋白質組學是一個相當欠發達的研究領域,數據依然稀少,用於分析的計算方法較少。即使有相似的信號編碼和傳輸機制,人類蛋白質組學數據的缺乏以及將模型生物體結果轉化為人類的困難也使分析變得復雜。
深度學習可以以多種方式使蛋白質組學受益,因為一些方法不需要像其他機器學習演算法那樣的大量培訓案例。深度學習方法的其他優點是他們建立數據的分層表示,並從復雜的相互作用中學習一般特徵,從而有利於蛋白質的蛋白質組學和網路分析。例如,使用磷酸化數據,雙峰深信念網路已被用於預測大鼠細胞對相同刺激的刺激的細胞反應[36]。與傳統的管線相比,開發的演算法獲得了相當的准確性。
結構生物學和化學。結構生物學包括蛋白質折疊分析,蛋白質動力學,分子建模和葯物設計。二級和三級結構是蛋白質和RNA分子的重要特徵。對於蛋白質,適當的結構測定對於酶功能預測,催化中心和底物結合的形成,免疫功能(抗原結合),轉錄因子(DNA結合)和轉錄後修飾(RNA結合)是重要的。喪失適當的結構會導致功能喪失,並且在某些情況下會導致可能導致神經退行性疾病(如阿爾茨海默病或帕金森病)的異常蛋白質的聚集。[37]
基於復合同源性的比較建模是預測蛋白質二級結構的一種可能方式,但是受現有注釋良好的化合物的量限制。另一方面,機器學習從頭預測是基於公認的具有公知結構的化合物的模式,但是還不夠精確以至於不能實際使用。從頭開始使用深度學習方法通過使用蛋白質測序數據改進了結構預測[38]。同樣,深度學習已經被應用於使用ASTRAL資料庫數據和復雜的三階段方法來預測二級結構元素和氨基酸殘基之間的接觸和取向[39]。所使用的方法是分析偏倚和高度可變數據的有效工具。
三維結構的不變性在功能上也是重要的。然而,有幾種蛋白質沒有獨特的結構參與基本的生物過程,如細胞周期的控制,基因表達的調控,分子信號傳遞。此外,最近的研究顯示一些無序蛋白質的顯著性[37]; 許多癌基因蛋白具有非結構域,並且錯誤折疊蛋白的異常聚集導致疾病發展[40]。這種沒有固定三維結構的蛋白被稱為固有無序蛋白(IDP),而沒有恆定結構的結構域被稱為固有無序區(IDR)。
許多參數將IDP / IDR與結構化蛋白質區分開來,從而使預測過程具有挑戰性。這個問題可以使用深度學習演算法來解決,這些演算法能夠考慮各種各樣的特徵。2013年,Eickholt和Cheng發表了一個基於序列的深度學習預測指標DNdisorder,與先進的預測指標相比,改進了對無序蛋白質的預測[41]。後來在2015年,Wang等人提出了一種新的方法,DeepCNF,使用來自蛋白質結構預測的臨界評估(CASP9和CASP10)的實驗數據,能夠准確預測多個參數,如IDPs或具有IDR的蛋白質。DeepCNF演算法通過利用眾多特徵,比基線單從頭(從頭算)預測指標執行得更好[42]。
另一類重要的蛋白質是結合單鏈或雙鏈RNA的RNA結合蛋白。 這些蛋白質參與RNA的各種轉錄後修飾:剪接,編輯,翻譯調控(蛋白質合成)和聚腺苷酸化。RNA分子形成不同類型的臂和環,需要識別和形成RNA和蛋白質之間連接的二級和三級結構。RNA的二級和三級結構是可預測的,並且已經被用於建模結構偏好偏好和通過應用深度信念網路預測RBP的結合位點[43]。深度學習框架在真正的CLIP-seq(交聯免疫沉澱高通量測序)數據集上進行了驗證,以顯示從原始序列和結構分布中提取隱藏特徵的能力,並准確預測RBP的位點。
葯物發現和再利用。計算葯物生物學和生物化學廣泛應用於葯物發現,開發和再利用的幾乎每個階段。過去數十年來,不同的研究團體和公司在全球范圍內開發了大量用於計算機模擬葯物發現和目標延伸的計算方法,以減少時間和資源消耗。雖然存在許多方法[44],但是還沒有一個是最優的(例如,無法執行通量篩選或者通過蛋白質類別進行限制),現在一些研究表明深度學習是一個重要的考慮方法(表1)。
葯物發現的重要任務之一就是預測葯物靶點的相互作用。 靶標(蛋白質)通常具有一個或多個與底物或調節分子的結合位點; 這些可以用於建立預測模型。 然而,包括其他蛋白質的成分可能會給分析帶來偏見。成對輸入神經網路(PINN)接受具有從蛋白質序列和靶分布獲得的特徵的兩個載體的能力被Wang等人用來計算靶標-配體相互作用[45]。神經網路的這種優勢比其他代表性的靶標-配體相互作用預測方法有更好的准確性。
葯物發現和評估是昂貴,耗時且具有風險; 計算方法和各種預測演算法可以幫助降低風險並節省資源。一個潛在的風險是毒性; 例如,肝毒性(肝毒性)是從生產中去除葯物的常見原因。用計算方法預測肝毒性可能有助於避免可能的肝毒性葯物。使用深度學習,可以有效地確定原始化學結構的化合物毒性,而不需要復雜的編碼過程[46]。使用CNN也可以預測諸如環氧化的性質,這意味著高反應性和可能的毒性; 這是休斯等人首次實施的。通過使用環氧化分子和氫氧化物分子的簡化分子輸入線入口規格(SMILES)格式數據作為陰性對照[47]。
多平台數據(Multiomics)。使用多平台數據的能力是深度學習演算法的主要優勢。 由於生物系統復雜,具有多個相互關聯的元素,基因組學,表觀基因組學和轉錄組學數據的系統級整合是提取最有效且有生物學意義的結果的關鍵。整合過程在計算上不是微不足道的,但收益是生物標志物特異性和靈敏度比單一來源方法的增加。
計算生物學中需要分析組合數據的主要領域之一是計算表觀遺傳學。有聯合分析基因組,轉錄組,甲基化組特徵和組蛋白修飾提供了准確的表觀基因組預測。
一些研究人員已經開發出深度學習方法,可用於分析來自多個來源的數據(表1)。Alipanahi等人開發了基於深度學習的方法DeepBind(tools.genes.toronto.e/deepbind/),以在各種疾病中計算核苷酸序列結合轉錄因子和RNA結合蛋白的能力,並表徵單點突變對結合特性的影響。DeepBind軟體受CNN啟發,對技術不敏感; 相反,它與從微陣列到序列的定性不同形式的數據是相容的。CPU的實現也允許用戶並行化計算過程[48]。在另一個基於CNN的應用程序中,Zhou和Troyanskaya設計了DeepSEA框架來預測染色質特徵和疾病相關序列變異的評估。與其他計算方法不同,他們的演算法能夠捕獲每個結合位點的大規模上下文序列信息,用於注釋從頭序列變異體[49]。開發了類似的CNN管線,揭示了序列變異對染色質調控的影響,並對DNase-seq(DNase I測序)數據進行了培訓和測試[50]。一種名為Bassed的深度學習軟體優於基線方法,並且在所有數據集上達到平均AUC0.892。最後,隨著深層特徵選擇模型的發展,深度學習被用於識別主動增強器和促進器,該模型利用了DNN對復雜非線性相互作用進行建模的能力,並學習了高層次的廣義特徵[51]。模型從多平台數據中選擇特徵,並按照重要性進行排序。在這些應用中,深度學習方法是染色質性質的更敏感和更有力的預測因子,也是復雜生物標志物發展的關鍵。
癌症是一組異質性疾病的廣泛名稱,其中一些是由基因突變引起的,因此使用多平台數據的癌症分類可以揭示潛在的病理學。Liang等人開發了一個具有多平台數據的深層信念網路模型,用於癌症患者的聚類[52]。使用受限玻爾茲曼機對每種輸入模式定義的特徵進行編碼。這種方法的一個優點是深層信念網路不需要具有正態分布的數據,因為其他聚類演算法和遺傳(生物)數據不是正態分布的。
最後,從自然語言處理的角度來看,深度學習在通過巨大的非結構化(研究出版物和專利)和結構化數據(知識注釋圖,如基因本體論[53]或Chembl[54])瀏覽時,通過檢驗假設的合理性。這些資料庫一起形成了一個龐大的,多平台的數據集,如果結合起來,這些數據集將更加豐富和全面。
總之,現代生物數據的龐大規模,對於以人為本的分析來說太龐大而復雜。 機器學習,特別是深度學習與人類專業知識相結合,是將多個大型多平台資料庫完全集成的唯一途徑。 深度學習使人類能夠做到以前無法想像的事情:具有數百萬輸入的圖像識別,語音識別以及接近人類能力的語音自動化。 雖然深度學習和特別是無監督的深度學習仍處於起步階段,特別是在生物學應用方面,但最初的研究支持它作為一種有希望的方法,盡管在實施中不受限制和挑戰,但可以克服生物學數據的一些問題, 對數百萬間接和相互關聯的疾病機制和途徑的新見解。

『貳』 13個最常用的Python深度學習庫介紹

13個最常用的Python深度學習庫介紹
如果你對深度學習和卷積神經網路感興趣,但是並不知道從哪裡開始,也不知道使用哪種庫,那麼這里就為你提供了許多幫助。
在這篇文章里,我詳細解讀了9個我最喜歡的Python深度學習庫。
這個名單並不詳盡,它只是我在計算機視覺的職業生涯中使用並在某個時間段發現特別有用的一個庫的列表。
這其中的一些庫我比別人用的多很多,尤其是Keras、mxnet和sklearn-theano。
其他的一些我是間接的使用,比如Theano和TensorFlow(庫包括Keras、deepy和Blocks等)。
另外的我只是在一些特別的任務中用過(比如nolearn和他們的Deep Belief Network implementation)。
這篇文章的目的是向你介紹這些庫。我建議你認真了解這里的每一個庫,然後在某個具體工作情境中你就可以確定一個最適用的庫。
我想再次重申,這份名單並不詳盡。此外,由於我是計算機視覺研究人員並長期活躍在這個領域,對卷積神經網路(細胞神經網路)方面的庫會關注更多。
我把這個深度學習庫的列表分為三個部分。
第一部分是比較流行的庫,你可能已經很熟悉了。對於這些庫,我提供了一個通俗的、高層次的概述。然後,針對每個庫我詳細解說了我的喜歡之處和不喜歡之處,並列舉了一些適當的應用案例。
第二部分進入到我個人最喜歡的深度學嫌弊習庫,也是我日常工作中使局螞用最多的,包括:Keras、mxnet和sklearn-theano等。
最後,我對第一部分中不經常使用的庫做了一個「福利」板塊,你或許還會從中發現有用的或者是在第二板塊中我還沒有嘗試過但看起來很有趣的庫。
接下來就讓我們繼續探索。
針對初學者:
Caffe
提到「深度學習庫」就不可能不說到Caffe。事實上,自從你打開這個頁面學習深度學習庫,我就敢打保票你肯定聽說Caffe。
那麼,究竟Caffe是什麼呢?
Caffe是由Berkeley Vision and Learning Center(BVLC)建立的深度學習框架。它是模塊化的,速度極快。而且被應用於學術界和產業界的start-of-the-art應用程序中。
事實上,如果你去翻閱最新的深度學習出版物(也提供源代碼),你就很可能會在它們相關的GitHub庫中找到Caffe模型。
雖然Caffe本身並不是一個Python庫,但它提供綁定到Python上的編程語言。我們通常在新領域開拓網路的時候使用這些綁定。
我把Caffe放在這個列表的原因是它幾乎被應用在各個方面。你可以在一個空白文檔里定義你的模型架構和解決方案,建立一個JSON文件類型的.prototxt配置文件。Caffe二進制文件提取這些.prototxt文件並培訓你的網路。Caffe完成培訓之後,你可以把你的網路和經過分類的新圖像通過Caffe二進制文件,更好的就直接通過Python或MATLAB的API。
雖然我很喜歡Caffe的性能(它每天可以在K40 GPU上處理60萬張圖片),但相比之下我更喜歡Keras和mxnet。
主要的原因是,在.prototxt文件內部構建架構可能會變得相當乏味和無聊。更重要的是, Caffe不能用編程方式調整超參數!由於這兩個原因,在基於Python的API中我傾向於對允許我實現終端到終端聯桐者埋播網的庫傾斜(包括交叉驗證和調整超參數)。
Theano
在最開始我想說Theano是美麗的。如果沒有Theano,我們根本不會達到現有的深度學習庫的數量(特別是在Python)。同樣的,如果沒有numpy,我們就不會有SciPy、scikit-learn和 scikit-image,,同樣可以說是關於Theano和深度學習更高級別的抽象。
非常核心的是,Theano是一個Python庫,用來定義、優化和評估涉及多維數組的數學表達式。 Theano通過與numpy的緊密集成,透明地使用GPU來完成這些工作。
雖然可以利用Theano建立深度學習網路,但我傾向於認為Theano是神經網路的基石,同樣的numpy是作為科學計算的基石。事實上,大多數我在文章中提到的庫都是圍繞著Theano,使自己變得更加便利。
不要誤會我的意思,我愛Theano,我只是不喜歡用Theano編寫代碼。
在Theano建設卷積神經網路就像只用本機Python中的numpy寫一個定製的支持向量機(SVM),當然這個對比並不是很完美。
你可以做到嗎?
當然可以。
它值得花費您的時間和精力嗎?
嗯,也許吧。這取決於你是否想擺脫低級別或你的應用是否需要。
就個人而言,我寧願使用像Keras這樣的庫,它把Theano包裝成更有人性化的API,同樣的方式,scikit-learn使機器學習演算法工作變得更加容易。
TensorFlow
與Theano類似,TensorFlow是使用數據流圖進行數值計算的開源庫(這是所有神經網路固有的特徵)。最初由谷歌的機器智能研究機構內的Google Brain Team研究人員開發,此後庫一直開源,並提供給公眾。
相比於Theano ,TensorFlow的主要優點是分布式計算,特別是在多GPU的環境中(雖然這是Theano正在攻克的項目)。
除了用TensorFlow而不是Theano替換Keras後端,對於TensorFlow庫我並沒有太多的經驗。然而在接下來的幾個月里,我希望這有所改變。
Lasagne
Lasagne是Theano中用於構建和訓練網路的輕量級庫。這里的關鍵詞是輕量級的,也就意味著它不是一個像Keras一樣圍繞著Theano的重包裝的庫。雖然這會導致你的代碼更加繁瑣,但它會把你從各種限制中解脫出來,同時還可以讓您根據Theano進行模塊化的構建。
簡而言之:Lasagne的功能是Theano的低級編程和Keras的高級抽象之間的一個折中。
我最喜歡的:
Keras
如果我必須選出一個最喜歡的深度學習Python庫,我將很難在Keras和mxnet中做出抉擇——但最後,我想我會選Keras。
說真的,Keras的好處我說都說不完。
Keras是一個最低限度的、模塊化的神經網路庫,可以使用Theano或TensorFlow作為後端。Keras最主要的用戶體驗是,從構思到產生結果將會是一個非常迅速的過程。
在Keras中架構網路設計是十分輕松自然的。它包括一些state-of-the-art中針對優化(Adam,RMSProp)、標准化(BatchNorm)和激活層(PReLU,ELU,LeakyReLU)最新的演算法。
Keras也非常注重卷積神經網路,這也是我十分需要的。無論它是有意還是無意的,我覺得從計算機視覺的角度來看這是非常有價值的。
更重要的是,你既可以輕松地構建基於序列的網路(其中輸入線性流經網路)又可以創建基於圖形的網路(輸入可以「跳過」某些層直接和後面對接)。這使得創建像GoogLeNet和SqueezeNet這樣復雜的網路結構變得容易得多。
我認為Keras唯一的問題是它不支持多GPU環境中並行地訓練網路。這可能會也可能不會成為你的大忌。
如果我想盡快地訓練網路,那麼我可能會使用mxnet。但是如果我需要調整超參數,我就會用Keras設置四個獨立的實驗(分別在我的Titan X GPUs上運行)並評估結果。
mxnet
我第二喜歡的深度學習Python庫無疑就是mxnet(重點也是訓練圖像分類網路)。雖然在mxnet中站立一個網路可能需要較多的代碼,但它會提供給你驚人數量的語言綁定(C ++、Python、R、JavaScript等)。
Mxnet庫真正出色的是分布式計算,它支持在多個CPU / GPU機訓練你的網路,甚至可以在AWS、Azure以及YARN集群。
它確實需要更多的代碼來設立一個實驗並在mxnet上運行(與Keras相比),但如果你需要跨多個GPU或系統分配訓練,我推薦mxnet。
sklearn-theano
有時候你並不需要終端到終端的培養一個卷積神經網路。相反,你需要把CNN看作一個特徵提取器。當你沒有足夠的數據來從頭培養一個完整的CNN時它就會變得特別有用。僅僅需要把你的輸入圖像放入流行的預先訓練架構,如OverFeat、AlexNet、VGGNet或GoogLeNet,然後從FC層提取特徵(或任何您要使用的層)。
總之,這就是sklearn-theano的功能所在。你不能用它從頭到尾的訓練一個模型,但它的神奇之處就是可以把網路作為特徵提取器。當需要評估一個特定的問題是否適合使用深度學習來解決時,我傾向於使用這個庫作為我的第一手判斷。
nolearn
我在PyImageSearch博客上用過幾次nolearn,主要是在我的MacBook Pro上進行一些初步的GPU實驗和在Amazon EC2 GPU實例中進行深度學習。
Keras把 Theano和TensorFlow包裝成了更具人性化的API,而nolearn也為Lasagne做了相同的事。此外,nolearn中所有的代碼都是與scikit-learn兼容的,這對我來說絕對是個超級的福利。
我個人不使用nolearn做卷積神經網路(CNNs),但你當然也可以用(我更喜歡用Keras和mxnet來做CNNs)。我主要用nolearn來製作Deep Belief Networks (DBNs)。
DIGITS
DIGITS並不是一個真正的深度學習庫(雖然它是用Python寫的)。DIGITS(深度學習GPU培訓系統)實際上是用於培訓Caffe深度學習模式的web應用程序(雖然我認為你可以破解源代碼然後使用Caffe以外其他的後端進行工作,但這聽起來就像一場噩夢)。
如果你曾經用過Caffe,那麼你就會知道通過它的終端來定義.prototxt文件、生成圖像數據、運行網路並監管你的網路訓練是相當繁瑣的。 DIGITS旨在通過讓你在瀏覽器中執行這些任務來解決這個問題。
此外,DIGITS的用戶界面非常出色,它可以為你提供有價值的統計數據和圖表作為你的模型訓練。另外,你可以通過各種輸入輕松地可視化網路中的激活層。最後,如果您想測試一個特定的圖像,您可以把圖片上傳到你的DIGITS伺服器或進入圖片的URL,然後你的Caffe模型將會自動分類圖像並把結果顯示在瀏覽器中。干凈利落!
Blocks
說實話,雖然我一直想嘗試,但截至目前我的確從來沒用過Blocks(這也是我把它包括在這個列表裡的原因)。就像許多個在這個列表中的其他庫一樣,Blocks建立在Theano之上,呈現出一個用戶友好型的API。
deepy
如果讓你猜deepy是圍繞哪個庫建立的,你會猜什麼?
沒錯,就是Theano。
我記得在前一段時間用過deepy(做了初始提交),但在接下里的大概6-8個月我都沒有碰它了。我打算在接下來的博客文章里再嘗試一下。
pylearn2
雖然我從沒有主動地使用pylearn2,但由於歷史原因,我覺得很有必要把它包括在這個列表裡。 Pylearn2不僅僅是一般的機器學習庫(地位類似於scikit-learn),也包含了深度學習演算法的實現。
對於pylearn2我最大的擔憂就是(在撰寫本文時),它沒有一個活躍的開發者。正因為如此,相比於像Keras和mxnet這樣的有積極維護的庫,推薦pylearn2我還有些猶豫。
Deeplearning4j
這本應是一個基於Python的列表,但我想我會把Deeplearning4j包括在這里,主要是出於對他們所做事跡的無比崇敬——Deeplearning4j為JVM建立了一個開源的、分布式的深度學習庫。
如果您在企業工作,你可能會有一個塞滿了用過的Hadoop和MapRece伺服器的儲存器。也許這些你還在用,也許早就不用了。
你怎樣才能把這些相同的伺服器應用到深度學習里?
事實證明是可以的——你只需要Deeplearning4j。
總計
以上就是本文關於13個最常用的Python深度學習庫介紹的全部內容

『叄』 DB、DBS、DBMS之間有什麼關系

DB、DBS、DBMS三者的關系是DBS(資料庫系統)包括DB(資料庫)和DBMS(資料庫管理系統)。資料庫系統是一個通稱,包括資料庫、資料庫管理系統、資料庫管理人員等的統稱,是最大的范疇。

1、DBMS和DB的關系:DBMS資料庫管理系統(databasemanagementsystem)是一種操縱和管理資料庫的大型軟體,是用於建立、使用和維護資料庫(DB)。它對資料庫進行統一的管理和控制,以保證資料庫的安全性和完整性。用戶通過DBMS訪問資料庫(DB)中的數據。

2、DBS和DB的關系:資料庫系統DBS(Data Base System,簡稱DBS)是一個實際可運行的存儲、維護和應用系統提供數據的軟體系統,是存儲介質、處理對象和管理系統的集合體。它通常由軟體、資料庫(DB)和數據管理員組成。

(3)dbns提供哪種語言定義資料庫擴展閱讀

資料庫及資料庫系統組成成分:

1、資料庫,即存儲在磁帶、磁碟、光碟或其他外存介質上、按一定結構組織在一起的相關數據的集合。

2、資料庫管理系統(DBMS)。它是一組能完成描述、管理、維護資料庫的程序系統。它按照一種公用的和可控制的方法完成插入新數據、修改和檢索原有數據的操作。

3、資料庫管理員(DBA),有重新組織數據的能力,能改變數據的存儲結構或數據存儲位置。

4、用戶和應用程序,具有可修改性和可擴充性。

『肆』 2009年4月19日四川計算機2級C語言機試題目或者答案

2007年4月全國計算機等級考試二級筆試試卷
C語言程序設計
(考試時間120分鍾,滿分100分)

一、選擇題((1)—(10)每小題2分,(11)—(50)每題1分,共60分)下列各題A)、B)、C)、D)四個選項中,只有一個選項是正確的,請將正確選項塗寫在答題卡相應位置上,答在試卷上不得分。

(1)下列敘述中正確的是(B)
A)演算法的效率只與問題的規模有關,而與數據的存儲結構無關
B)演算法的時間復雜度是指執行演算法所需要的計算工作量
C)數據的邏輯結構與存儲結構是一一對應的
D)演算法的時間復雜度與空間復雜度一定相關

(2)在結構化程序設計中,模塊劃分的原則是(D)
A)各模塊應包括盡量多的功能
B)各模塊的規模應盡量大
C)各模塊之間的聯系應盡量緊密
D)模塊內具有高內聚度、模塊間具有低耦合度

(3)下列敘述中正確的是(A)
A)軟體測試的主要目的是發現程序中的錯誤
B)軟體測試的主要目的是確定程序中錯誤的位置
C)為了提高軟體測試的效率,最好由程序編制者自己來完成軟體測試的工作
D)軟體測試是證明軟體沒有錯誤

(4)下面選項中不屬於面向對象程序設計特徵的是(C)
A)繼承性
B)多態性
C)類比性
D)封裝性

(5)下列對隊列的敘述正確的是(D)
A)隊列屬於非線性表
B)隊列按「先進後出」原則組織數據
C)隊列在隊尾刪除數據
D)隊列按「先進先出」原則組織數據

(6)對下列二叉樹
A

B C

D E F X

Y Z

進行前序遍歷的結果為(C)

A) DYBEAFCZX

B) YDEBFZXCA

C) ABDYECFXZ

D) ABCDEFXYZ

(7) 某二叉樹中有n個度為2的結點,則該二叉樹中的葉子結點數為(A)

A) n+1
B) n-1
C) 2n
D) n/2

(8) 在下列關系運算中,不改變關系表中的屬性個數但能減少元組個數的是(B)

A) 並
B)交
C)投影
D)笛卡兒乘積

(9)在E-R圖中,用來表示實體之間聯系的圖形是(C)

A) 矩形
B)橢圓形
C)菱形
D)平行四邊形

(10)下列敘述中錯誤的是(A)

A) 在資料庫系統中,數據的物理結構必須與邏輯結構一致

B) 資料庫技術的根本目標是要解決數據的共享問題

C) 資料庫設計是指在已有資料庫管理系統的基礎上建立資料庫

D)資料庫系統需要操作系統的支持

(11)演算法中,對需要執行的每一步操作,必須給出清楚、嚴格的規定,這屬於演算法的(C)

A)正當性
B)可行性
C)確定性
D)有窮性

(12)下列敘述中錯誤的是(D)

A)計算機不能直接執行用C語言編寫的源程序

B)C程序經C編譯程序編譯後,生成後綴為.obj的文件是一個二進制文件

C)後綴為.obj的文件,經連接程序生成後綴為.exe的文件是一個二進制文件

D)後綴為.obj和.exe的二進制文件都可以直接運行

(13)按照C語言規定的用戶標識符命名規則,不能出現在標識符中的是(B)

A)大寫字母
B)連接符
C)數字字元
D)下劃線

(14)以下敘述中錯誤的是(C)

A)C語言是一種結構化程序設計語言

B)結構化程序有順序、分支、循環三種基本結構組成

C)使用三種基本結構構成的程序只能解決簡單問題

D)結構化程序設計提倡模塊化的設計方法

(15)對於一個正常運行的C程序,以下敘述中正確的是(A)

A)程序的執行總是從main函數開始,在main函數結束

B)程序的執行總是從程序的第一個函數開始,在main函數結束

C)程序的執行總是從main函數開始,在程序的最後一個函數中結束

D)程序的執行總是從程序的第一個函數開始,在程序的最後一個函數中結束

(16)設變數均已正確定義,若要通過scanf(「%d%c%d%c」,&a1,&c1,&a2,&c2);語句為變數a1和a2賦數值10和20,為變數c1和c2賦字元X和Y。以下所示的輸入形式中正確的是(註:□代表空格字元)(D)
A)10□X□20□Y〈回車〉
B)10□X20□Y〈回車〉
C)10□X〈回車〉
D)10X〈回車〉

20□Y〈回車〉 20Y〈回車〉

(17)若有代數式(其中e僅代表自然對數的底數,不是變數),則以下能夠正確表示該代數式的C語言表達式是(C)
A)sqrt(abs(n^x+e^x))
B) sqrt(fabs(pow(n,x)+pow(x,e)))
C)sqrt(fabs(pow(n,x)+exp(x)))
D) sqrt(fabs(pow(x,n)+exp(x)))

(18)設有定義:int k=0;,以下選項的四個表達式中與其他三個表達式的值不相同的是(A)
A)k++
B)k+=1
C)++k
D)k+1

(19)有以下程序,其中%u表示按無符號整數輸出(B)

main()

{unsigned int x=0xFFFF; /* x的初值為十六進制數 */

printf(「%u\n」,x);

}
程序運行後的輸出結果是
A)-1
B)65535
C)32767
D)0xFFFF

(20)設變數x和y均已正確定義並賦值,以下if語句中,在編譯時將產生錯誤信息的是(C)

A)if(x++);
B)if(x>y&&y!=0);

C)if(x>y) x- -
D)if(y<0) {;}

else y++; else x++;

(21)以下選項中,當x為大於1的奇數時,值為0的表達式(D)

A)x%2==1
B)x/2
C)x%2!=0
D)x%2==0

(22)以下敘述中正確的是(C)

A)break語句只能用於switch語句體中

B)continue語句的作用是:使程序的執行流程跳出包含它的所有循環

C)break 語句只能用在循環體內和switch語句體內

D)在循環體內使用break語句和continue語句的作用相同

(23)有以下程序(A)

main()

{int k=5,n=0;

do

{switch(k)

{case1: case3:n+=1; break;

default;n=0;k--;

case2: case4:n+=2;k--;break;

}

printf(「%d」,n);

}while(k>0&&n<5);

}

程序運行後的輸出結果是
A)235
B)0235
C)02356
D)2356

(24)有以下程序

mian()

{int i,j;

for(i=1;i<4;i++)

{for(j=i;j<4;j++) printf(「%d*%d=%d 「,i,j,i*j);

printf(「\n」);

}

}

程序運行後的輸出結果是(B)
A) 1*1=1 1*2=2 1*3=3 B) 1*1=1 1*2=2 1*3=3

2*1=2 2*2=4 2*2=4 2*3=6

3*1=3 3*3=9

C) 1*1=1 D) 1*1=1

1*2=2 2*2=4 2*1=2 2*2=4

1*3=3 2*3=6 3*3=9 3*1=3 3*2=6 3*3=9

(25)以下合法的字元型常量是(A)

A)」\x13」
B)」\018」
C)」65」
D)」\n」

(26)在C語言中,函數返回值的類型最終取決於(A)

A)函數定義時在函數首部所說明的函數類型

B)return語句中表達式值的類型

C)調用函數時主函數所傳遞的實參類型

D)函數定義時形參的類型

(27)已知大寫字母A的ASCII碼是65,小寫字母aASCII碼是97,以下不能將變數c中大寫字母轉換為對應小寫字母的語句是(D)

A)c=(c-A)&+』a』
B)c=c+32

C)c=c-『A』+』a』
D)c=(『A』+c)&-『a』

(28)有以下函數

int fun(char *s)

{char *t=s;

while(*t++);

return(t-s);

}

該函數的功能是(B)

A)比較兩個字元的大小
B)計算s所指字元串佔用內存位元組的個數

C)計算s所指字元串的長度
D)將s所指字元串復制到字元串t中

(29)設已有定義:float x;則以下對指針變數p進行定義且賦初值的語句中正確的是(D)
A)float *p=1024;
B)int *p=(float x);

C)float p=&x;
D)float *P=&x;

(30)有以下程序

#include

main()

{int n,*p=NULL;

*p=&n;

printf(「Input n:」); scanf(「%d」,&p); printf(「output n:」); printf(「%d\n」,p);

}

該程序試圖通過指針p為變數n讀入數據並輸出,但程序有多處錯誤,以下語句正確的是(A)

A)int n,*p=NULL;
B)*p=&n;
C)scanf(「%d」,&p)
D)printf(「%d\n」,p);

(31)以下程序中函數f的功能是:當flag為1時,進行有由小到大排序;當flag為0時,進行由大到小排序。

void f(int b[],int n,int flag)

{int i,j,t;

for(i=0;i

for (j=i+1;j

if(flag?b[i]>b[j]:b[i]

}

main()

{int a[10]={5,4,3,2,1,6,7,8,9,10},i;

f(&a[2],5,0); f(a,5,1);

for(i=0;i<10;i++) printf(「%d,」a[i]);

}

程序運行後的輸出結果是(B)

A)1,2,3,4,5,6,7,8,9,10,
B)3,4,5,6,7,2,1,8,9,10,

C)5,4,3,2,1,6,7,8,9,10,
D)10,9,8,7,6,5,4,3,2,1,

(32)有以下程序

void f(int b[])

{int i;

for(i=2;i<6;i++) b[i]*=2;

}

main()

{int a[10]={1,2,3,4,5,6,7,8,9,10},i;

f(a);

for(i=0;i<10;i++) printf(「%d,」,a[i]);

}

程序運行後的輸出結果是(B)

A)1,2,3,4,5,6,7,8,9,10,
B)1,2,6,8,10,12,7,8,9,10

C)1,2,3,4,10,12,14,16,9,10,

D)1,2,6,8,10,12,14,16,9,10,

(33)有以下程序

typedef struct{int b,p;}A;

void f(A c) /*注意:c是結構變數名 */

{int j;

c.b+=1; c.p+=2;

}

main()

{int i;

A a={1,2};

f(a);

printf(「%d,%d\n」,a.b,a.p);

}

程序運行後的輸出結果是(D)

A)2,3
B)2,4
C)1,4
D)1,2

(34)有以下程序

main()

{int a[4][4]={{1,4,3,2,},{8,6,5,7,},{3,7,2,5,},{4,8,6,1,}},i,j,k,t;

for(i=0;i<4;i++)

for(j=0;j<3;j++)

for(k=j+1;k<4;k++)

if(a[j][i]>a[k][i]){t=a[j][i];a[j][i]=a[k][i];a[k][i]=t;}/*按列排序*/

for(i=0;i<4;i++)printf(「%d,」,a[i][j]);

}

程序運行後的輸出結果是(A)

A)1,6,5,7,
B)8,7,3,1,
C)4,7,5,2,
D)1,6,2,1,

(35) 有以下程序

main()

{int a[4][4]={{1,4,3,2,},{8,6,5,7,},{3,7,2,5,},{4,8,6,1,}},i,k,t;

for(i=0;i<3;i++)

for(k=i+i;k<4;k++) if(a[i][i]

for(i=0;i<4;i++)printf(「%d,」,a[0][i]);

}

程序運行後的輸出結果是(B)
A)6,2,1,1,
B)6,4,3,2,
C)1,1,2,6,
D)2,3,4,6,

(36) 有以下程序

void f(int *q)

{int i=0;

for( ; i<5;i++)(*q)++;

}

main()

{int a[5]={1,2,3,4,5},i;

f(a);

for(i=0;i<5;i++)printf(「%d,」,a[i]);

}

程序運行後的輸出結果是(B)

A)2,2,3,4,5,
B)6,2,3,4,5,
C)1,2,3,4,5,
D) 2,3,4,5,6,

(37) 有以下程序

#include

main()

{char p[20]={『a』,』b』,』c』,』d』},q[]=」abc」, r[]=」abcde」;

strcpy(p+strlen(q),r); strcat(p,q);

printf(「%d%d\n」,sizeof(p),strlen(p));

}

程序運行後的輸出結果是(C)

A)20 9
B)9 9
C)20 11
D)11 11

(38) 有以下程序

#include

main()

{char p[20]={『a』,』b』,』c』,』d』},q[]=」abc」, r[]=」abcde」

strcat(p,r); Strcpy(p+strlen(q),q);

Printf(「%d \n」,sizeof(p));

}

程序運行後的輸出結果是(B)

A)9
B)6
C)11
D)7

(39) 有以下程序

#include

main()

void f(char p[][10], int n ) /* 字元串從小到大排序 */

{ char t[10]; int i,j;

for(i=0;i

for(j=i+1;j

if(strcmp(p[i],p[j])>0) {strcpy(t,p[i]); strcpy(p[i],p[j]); strcpy(p[i],t); }

}

main()

{char p[5][10]={「abc」,」aabdfg」,」abbd」,」dcdbe」,」cd」};

f(p,5);

printf(「%d\n」,strlen(p[0]));

}

程序運行後的輸出結果是(C)

A) 2
B) 4
C) 6
D) 3

(40) 有以下程序

void f(int n, int *r)

{int r1=0;

if(n%3==0) r1=n/3;

else if(n%5==0) r1=n/5;

else f(--n,&r1);

*r=r1;

}

main()

{int m=7,r;

f(m,&r); printf(「%d\n,r」);

}

程序運行後的輸出結果是(A)

A) 2
B) 1
C)3
D) 0

(41)有以下程序

main(int argc,char *argv[])

{int n=0,i;

for(i=1;i n=n*10+*argv[i]-『0』;

printf(「%d\n」,n);

}

編譯連接後生成可執行文件tt.exe,若運行時輸入以下命令行

tt 12 345 678

程序運行後的輸出結果是(D)

A) 12
B) 12345
C)12345678
D) 136

(42) 有以下程序

int a=4;

int f(int n)

{int t=0; static int a=5;

if(n%2) {int a=6; t+=a++;}

else {int a=7 ;t+=a++;}

return t+a++;

}

main()

{int s=a,i=0;

for(;i〈2;i++) s+=f(i);

printf (「%d\n」,s);

}

程序運行後的輸出結果是(B)

A)24
B)28
C)32
D)36

(43) 有一個名為init.txt的文件,內容如下:

#define HDY(A,B) A/B

# define PRINT(Y) Printf(「y=%d\n.,Y)

有以下程序

#include 「init.txt」

main()

{int a=1,b=2,c=3,d=4,k;

K=HDY(a+c,b+d);

PRINT(K);

}

下面針對該程序的敘述正確的是(D)

A)編譯有錯
B)運行出錯

C)運行結果為 y=0
D) 運行結果為 y=6

(44) 有以下程序

main()

{char ch[]=「uvwxyz」,*pc;

Pc=ch; printf(「%c\n」,*(pc+5));

}

程序運行後的輸出結果是(A)

A)z
B)0
C)元素ch[5]的地址
D)字元y的地址

(45) 有以下程序

struct S {int n; int a[20];};

void f(struct S *P)

{int i,j,t;

for(i=0;in-1;i++)

for(j=i+1;jn;j++)

if(p->a[i]>p->a[j]) { t=p->a[i]; p->a[i]=p->a[j]; p->a[j]=t; }

}

main()

{int i; struct S s={10,{2,3,1,6,8,7,5,4,10,9}};

f(&s);

for(i=0;i printf(「%d」,s.a[i]);

}

程序運行後的輸出結果是(A)

A)1,2,3,4,5,6,7,8,9,10,
B)10,9,8,7,6,5,4,3,2,1,

C)2,3,1,6,8,7,5,4,10,9,
D)10,9,8,7,6,1,2,3,4,5,

(46) 有以下程序

struct S{ int n; int a[20]; };

void f(int *a,int n)

{int i;

for(i=0;i a[i]+=i;

}

main()

{int i; struct S s={10,{2,3,1,6,8,7,5,4,10,9}};

f(s.a, s.n);

for(i=0;i printf(「%d」,s.a[i]);

}

程序運行後的輸出結果是(A)

A)2,4,3,9,12,12,11,11,18,9,
B)3,4,2,7,9,8,6,5,11,10,

C)2,3,1,6,8,7,5,4,10,9,
D)1,2,3,6,8,7,5,4,10,9,

(47) 有以下程序段

typedef struct node { int data; struct node *next; } *NODE;

NODE p;

以下敘述正確的是(C)

A)p是指向struct node結構變數的指針的指針

B)NODE p;語句出錯

C)p是指向struct node結構變數的指針

D)p是struct node結構變數

(48)有以下程序

main()

{unsigned char a=2,b=4,c=5,d;

d=a|b; d&=c; printf(「%d\n」,d); }

程序運行後的輸出結果是(B)

A)3
B)4
C)5
D)6

(49)有以下程序

#include

main()

{FILE *fp; int k,n,a[6]={1,2,3,4,5,6};

fp=fopen(「d2.dat」,」w」);

fprintf(fp,」%d%d\n」,a[0],a[1],a[2]); fprintf(fp, 「%d%d%d \n」,a[3],a[4],a[5]);

fclose(fp);

fp=fopen(「d2.dat」,」r」);

fscanf(fp, 「%d%d」,&k,&n); printf(「%d%d\n」,k,n);

fclose(fp);

}

程序運行後的輸出結果是(D)

A)1 2
B)1 4
C)123 4
D) 123 456

(50)有以下程序

#include

main ()

{FILE *fp; int i,a[6]={1,2,3,4,5,6k};

fp=fopen(「d3.dat」,」w+b」);

fwrite(a,sizeof(int),6,fp);

fseek(fp,sizeof(int)*3,SEEK_SET);/*該語句使讀文件的位置指針從文件頭向後移動3個int型數據*/

fread(a,sizeof(int),3,fp); fclose(fp);

for(i=0;i<6;i++) printf(「%d,」,a[i]);

}

程序運行後的輸出結果是(A)

A)4,5,6,4,5,6,
B)1,2,3,4,5,6,
C)4,5,6,1,2,3,
D)6,5,4,3,2,1,

二.填空題(每空2分,共40分)請將每一個空的正確答案寫在答題卡[1]至[20]序號的橫線上,答在試卷上不得分。注意:以命令關鍵字填空的必須寫完整.

(1) 在深度為7的滿二叉樹中,度為2的結點個數為___63____。

(2) 軟體測試分為白箱(盒)測試和黑箱(盒)測試,等價類劃分法屬於__黑箱(或黑盒) 測試。

(3) 在資料庫系統中,實現各種數據管理功能的核心軟體稱為 __資料庫管理系統__。

(4) 軟體生命周期可分為多個階段,一般分為定義階段、開發階段和維護階段。編碼和測試屬於 開發_____階段。

(5)在結構化分析使用的數據流圖(DFD)中,利用數據字典 對其中的圖形元素進行確切解釋。

(6)執行以下程序後的輸出結果是 a=14 。

main()

{int a=10;

a=(3*5,a+4); printf(「a=%d\n」,a);

}

(7) 當執行以下程序時,輸入1234567890<回車>,則其中while循環體將執行 0 次。

#include

main()

{char ch;

While((ch=getchar())==』0』) printf(「#」);

}

(8) (8)以下程序的運行結果是 m=4 k=4 i=5 k=5 。

int k=0;

void fun(int m)

{ m+=k; k+=m; printf(「m=%d\n k=%d 」,m,k++);}

main()

{ int i=4;

fun(i++); printf(「i=%d k=%d\n」,i,k);

}

(9) (9)以下程序的運行結果是 #& 。

main()

{int a=2,b=7,c=5;

switch(a>0)

{case 1:switch(b<0)

{case 1:switch(「@」); break;

Case 2: printf(「!」); break;

}

case 0: switch(c==5)

{ case 0: printf(「*」); break;

case 1: printf(「#」); break;

case 2: printf(「$」); break;

}

default : printf(「&」);

}

printf(「\n」);

}

(10)以下程序的輸出結果是 9

# include

main()

{ printf(「%d\n」,strlen(「IBM\n012\1\\」));

}

(11)已定義char ch=」$」;int i=1,j;執行j=!ch&&i++以後,i的值為1

(12)以下程序的輸出結果是 5 4

# include

main()

{ char a[]={『\1』,』\2』,』\3』,』\4』,』\0』};

printf(「%d %d\n」,sizeof(a),srelen(a));

}

(13)設有定義語句:int a[][3]={{0},{1},{2}};,則數組元素a[1][2]的值為 0

(14)以下程序的功能是:求出數組x中各相鄰兩個元素的和依次存放到a數組中,然後輸出。請填空。

main()

{int x[10],a[9],I;

for (i=0;i<10;i++)

scanf(「%d」,&x[i]);

for( i=1 ;i<10;i++)

a[i-1]=x[i]+ x[i-1] ;

for(i=0;i<9;i++)

printf(「%d」,a[i]);

printf(「\n」);

(15) 以下程序的功能是:利用指針指向三個整型變數,並通過指針運算找出三個數中的最大值,輸出到屏幕上,請填空:

main()

{int x,y,z,max,*px,*py,*pz,*pmax;

scanf(「%d%d%d」,&x,&y,&z);

px=&x;

py=&y;

pz=&z;

pmax=&max;

*pmax=*px(或*pmax=x) ;

if(*pmax<*py)*pmax=*py;

if(*pmax<*pz)*pmax=*pz;

printf(「max=%d\n」,max);

}

(16)以下程序的輸出結果是 10

int fun(int*x,int n)

{if(n==0)

return x[0];

else return x[0]+fun(x+1,n-1);

}

main()

{int a[]={1,2,3,4,5,6,7};

printf(「%d\n」,fun(a,3));

}

(17)以下程序的輸出結果是 35

# include

main()

{char *s1,*s2,m;

s1=s2=(char*)malloc(sizeof(char));

*s1=15;

*s2=20;

m=*s1+*s2;

printf(「%d\n」,m);

}

(18)設有說明

struct DATE{int year;int month; int day;};

請寫出一條定義語句,該語句定義d為上述結構體變數,並同時為其成員year、month、day 依次賦初值2006、10、1: struct DATA d={2006,10,1};

(19) 設有定義:FILE *fw;,請將以下打開文件的語句補充完整,以便可以向文本文件readme.txt的最後續寫內容。

fw=fopen(「readme.txt」, "a" )

2007年4月全國計算機等級考試二級C語言筆試試題答案

一、選擇題:
1-5 24134

6-10 31321

11-15 34231

16-20 43113

21-25 43421

26-30 14241

31-35 22412

36-40 23232

41-45 42411

46-50 13241

二、填空題:

1. 63

2,墨盒
3.DBNS
4,開發
5,數據 字典
6,a-14
7,0
8,無答案
9,# 與號
10,9
11,1
12,5_4
13,13 0
14,i=1
15,X[i-1]
16,無答案
17,10
18,40
19,無答案
20,"20a"
參考資料:http://www.examda.com/ncre2/C/zhenti/20070902/160001753.html

『伍』 誰有四川省計算機C語言二級考試的真題或者模擬題多給我幾套最好了,要有答案的。要多少分您說,只要我有

2007年4月全國計算機等級考試二級筆試試卷
C語言程序設計
(考試時間120分鍾,滿分100分)

一、選擇題((1)—(10)每小題2分,(11)—(50)每題1分,共60分)下列各題A)、B)、C)、D)四個選項中,只有一個選項是正確的,請將正確選項塗寫在答題卡相應位置上,答在試卷上不得分。

(1)下列敘述中正確的是(B)
A)演算法的效率只與問題的規模有關,而與數據的存儲結構無關
B)演算法的時間復雜度是指執行演算法所需要的計算工作量
C)數據的邏輯結構與存儲結構是一一對應的
D)演算法的時間復雜度與空間復雜度一定相關

(2)在結構化程序設計中,模塊劃分的原則是(D)
A)各模塊應包括盡量多的功能
B)各模塊的規模應盡量大
C)各模塊之間的聯系應盡量緊密
D)模塊內具有高內聚度、模塊間具有低耦合度

(3)下列敘述中正確的是(A)
A)軟體測試的主要目的是發現程序中的錯誤
B)軟體測試的主要目的是確定程序中錯誤的位置
C)為了提高軟體測試的效率,最好由程序編制者自己來完成軟體測試的工作
D)軟體測試是證明軟體沒有錯誤

(4)下面選項中不屬於面向對象程序設計特徵的是(C)
A)繼承性
B)多態性
C)類比性
D)封裝性

(5)下列對隊列的敘述正確的是(D)
A)隊列屬於非線性表
B)隊列按「先進後出」原則組織數據
C)隊列在隊尾刪除數據
D)隊列按「先進先出」原則組織數據

(6)對下列二叉樹
A

B C

D E F X

Y Z

進行前序遍歷的結果為(C)

A) DYBEAFCZX

B) YDEBFZXCA

C) ABDYECFXZ

D) ABCDEFXYZ

(7) 某二叉樹中有n個度為2的結點,則該二叉樹中的葉子結點數為(A)

A) n+1
B) n-1
C) 2n
D) n/2

(8) 在下列關系運算中,不改變關系表中的屬性個數但能減少元組個數的是(B)

A) 並
B)交
C)投影
D)笛卡兒乘積

(9)在E-R圖中,用來表示實體之間聯系的圖形是(C)

A) 矩形
B)橢圓形
C)菱形
D)平行四邊形

(10)下列敘述中錯誤的是(A)

A) 在資料庫系統中,數據的物理結構必須與邏輯結構一致

B) 資料庫技術的根本目標是要解決數據的共享問題

C) 資料庫設計是指在已有資料庫管理系統的基礎上建立資料庫

D)資料庫系統需要操作系統的支持

(11)演算法中,對需要執行的每一步操作,必須給出清楚、嚴格的規定,這屬於演算法的(C)

A)正當性
B)可行性
C)確定性
D)有窮性

(12)下列敘述中錯誤的是(D)

A)計算機不能直接執行用C語言編寫的源程序

B)C程序經C編譯程序編譯後,生成後綴為.obj的文件是一個二進制文件

C)後綴為.obj的文件,經連接程序生成後綴為.exe的文件是一個二進制文件

D)後綴為.obj和.exe的二進制文件都可以直接運行

(13)按照C語言規定的用戶標識符命名規則,不能出現在標識符中的是(B)

A)大寫字母
B)連接符
C)數字字元
D)下劃線

(14)以下敘述中錯誤的是(C)

A)C語言是一種結構化程序設計語言

B)結構化程序有順序、分支、循環三種基本結構組成

C)使用三種基本結構構成的程序只能解決簡單問題

D)結構化程序設計提倡模塊化的設計方法

(15)對於一個正常運行的C程序,以下敘述中正確的是(A)

A)程序的執行總是從main函數開始,在main函數結束

B)程序的執行總是從程序的第一個函數開始,在main函數結束

C)程序的執行總是從main函數開始,在程序的最後一個函數中結束

D)程序的執行總是從程序的第一個函數開始,在程序的最後一個函數中結束

(16)設變數均已正確定義,若要通過scanf(「%d%c%d%c」,&a1,&c1,&a2,&c2);語句為變數a1和a2賦數值10和20,為變數c1和c2賦字元X和Y。以下所示的輸入形式中正確的是(註:□代表空格字元)(D)
A)10□X□20□Y〈回車〉
B)10□X20□Y〈回車〉
C)10□X〈回車〉
D)10X〈回車〉

20□Y〈回車〉 20Y〈回車〉

(17)若有代數式(其中e僅代表自然對數的底數,不是變數),則以下能夠正確表示該代數式的C語言表達式是(C)
A)sqrt(abs(n^x+e^x))
B) sqrt(fabs(pow(n,x)+pow(x,e)))
C)sqrt(fabs(pow(n,x)+exp(x)))
D) sqrt(fabs(pow(x,n)+exp(x)))

(18)設有定義:int k=0;,以下選項的四個表達式中與其他三個表達式的值不相同的是(A)
A)k++
B)k+=1
C)++k
D)k+1

(19)有以下程序,其中%u表示按無符號整數輸出(B)

main()

{unsigned int x=0xFFFF; /* x的初值為十六進制數 */

printf(「%u\n」,x);

}
程序運行後的輸出結果是
A)-1
B)65535
C)32767
D)0xFFFF

(20)設變數x和y均已正確定義並賦值,以下if語句中,在編譯時將產生錯誤信息的是(C)

A)if(x++);
B)if(x>y&&y!=0);

C)if(x>y) x- -
D)if(y<0) {;}

else y++; else x++;

(21)以下選項中,當x為大於1的奇數時,值為0的表達式(D)

A)x%2==1
B)x/2
C)x%2!=0
D)x%2==0

(22)以下敘述中正確的是(C)

A)break語句只能用於switch語句體中

B)continue語句的作用是:使程序的執行流程跳出包含它的所有循環

C)break 語句只能用在循環體內和switch語句體內

D)在循環體內使用break語句和continue語句的作用相同

(23)有以下程序(A)

main()

{int k=5,n=0;

do

{switch(k)

{case1: case3:n+=1; break;

default;n=0;k--;

case2: case4:n+=2;k--;break;

}

printf(「%d」,n);

}while(k>0&&n<5);

}

程序運行後的輸出結果是
A)235
B)0235
C)02356
D)2356

(24)有以下程序

mian()

{int i,j;

for(i=1;i<4;i++)

{for(j=i;j<4;j++) printf(「%d*%d=%d 「,i,j,i*j);

printf(「\n」);

}

}

程序運行後的輸出結果是(B)
A) 1*1=1 1*2=2 1*3=3 B) 1*1=1 1*2=2 1*3=3

2*1=2 2*2=4 2*2=4 2*3=6

3*1=3 3*3=9

C) 1*1=1 D) 1*1=1

1*2=2 2*2=4 2*1=2 2*2=4

1*3=3 2*3=6 3*3=9 3*1=3 3*2=6 3*3=9

(25)以下合法的字元型常量是(A)

A)」\x13」
B)」\018」
C)」65」
D)」\n」

(26)在C語言中,函數返回值的類型最終取決於(A)

A)函數定義時在函數首部所說明的函數類型

B)return語句中表達式值的類型

C)調用函數時主函數所傳遞的實參類型

D)函數定義時形參的類型

(27)已知大寫字母A的ASCII碼是65,小寫字母aASCII碼是97,以下不能將變數c中大寫字母轉換為對應小寫字母的語句是(D)

A)c=(c-A)&+』a』
B)c=c+32

C)c=c-『A』+』a』
D)c=(『A』+c)&-『a』

(28)有以下函數

int fun(char *s)

{char *t=s;

while(*t++);

return(t-s);

}

該函數的功能是(B)

A)比較兩個字元的大小
B)計算s所指字元串佔用內存位元組的個數

C)計算s所指字元串的長度
D)將s所指字元串復制到字元串t中

(29)設已有定義:float x;則以下對指針變數p進行定義且賦初值的語句中正確的是(D)
A)float *p=1024;
B)int *p=(float x);

C)float p=&x;
D)float *P=&x;

(30)有以下程序

#include

main()

{int n,*p=NULL;

*p=&n;

printf(「Input n:」); scanf(「%d」,&p); printf(「output n:」); printf(「%d\n」,p);

}

該程序試圖通過指針p為變數n讀入數據並輸出,但程序有多處錯誤,以下語句正確的是(A)

A)int n,*p=NULL;
B)*p=&n;
C)scanf(「%d」,&p)
D)printf(「%d\n」,p);

(31)以下程序中函數f的功能是:當flag為1時,進行有由小到大排序;當flag為0時,進行由大到小排序。

void f(int b[],int n,int flag)

{int i,j,t;

for(i=0;i

for (j=i+1;j

if(flag?b[i]>b[j]:b[i]

}

main()

{int a[10]={5,4,3,2,1,6,7,8,9,10},i;

f(&a[2],5,0); f(a,5,1);

for(i=0;i<10;i++) printf(「%d,」a[i]);

}

程序運行後的輸出結果是(B)

A)1,2,3,4,5,6,7,8,9,10,
B)3,4,5,6,7,2,1,8,9,10,

C)5,4,3,2,1,6,7,8,9,10,
D)10,9,8,7,6,5,4,3,2,1,

(32)有以下程序

void f(int b[])

{int i;

for(i=2;i<6;i++) b[i]*=2;

}

main()

{int a[10]={1,2,3,4,5,6,7,8,9,10},i;

f(a);

for(i=0;i<10;i++) printf(「%d,」,a[i]);

}

程序運行後的輸出結果是(B)

A)1,2,3,4,5,6,7,8,9,10,
B)1,2,6,8,10,12,7,8,9,10

C)1,2,3,4,10,12,14,16,9,10,

D)1,2,6,8,10,12,14,16,9,10,

(33)有以下程序

typedef struct{int b,p;}A;

void f(A c) /*注意:c是結構變數名 */

{int j;

c.b+=1; c.p+=2;

}

main()

{int i;

A a={1,2};

f(a);

printf(「%d,%d\n」,a.b,a.p);

}

程序運行後的輸出結果是(D)

A)2,3
B)2,4
C)1,4
D)1,2

(34)有以下程序

main()

{int a[4][4]={{1,4,3,2,},{8,6,5,7,},{3,7,2,5,},{4,8,6,1,}},i,j,k,t;

for(i=0;i<4;i++)

for(j=0;j<3;j++)

for(k=j+1;k<4;k++)

if(a[j][i]>a[k][i]){t=a[j][i];a[j][i]=a[k][i];a[k][i]=t;}/*按列排序*/

for(i=0;i<4;i++)printf(「%d,」,a[i][j]);

}

程序運行後的輸出結果是(A)

A)1,6,5,7,
B)8,7,3,1,
C)4,7,5,2,
D)1,6,2,1,

(35) 有以下程序

main()

{int a[4][4]={{1,4,3,2,},{8,6,5,7,},{3,7,2,5,},{4,8,6,1,}},i,k,t;

for(i=0;i<3;i++)

for(k=i+i;k<4;k++) if(a[i][i]

for(i=0;i<4;i++)printf(「%d,」,a[0][i]);

}

程序運行後的輸出結果是(B)
A)6,2,1,1,
B)6,4,3,2,
C)1,1,2,6,
D)2,3,4,6,

(36) 有以下程序

void f(int *q)

{int i=0;

for( ; i<5;i++)(*q)++;

}

main()

{int a[5]={1,2,3,4,5},i;

f(a);

for(i=0;i<5;i++)printf(「%d,」,a[i]);

}

程序運行後的輸出結果是(B)

A)2,2,3,4,5,
B)6,2,3,4,5,
C)1,2,3,4,5,
D) 2,3,4,5,6,

(37) 有以下程序

#include

main()

{char p[20]={『a』,』b』,』c』,』d』},q[]=」abc」, r[]=」abcde」;

strcpy(p+strlen(q),r); strcat(p,q);

printf(「%d%d\n」,sizeof(p),strlen(p));

}

程序運行後的輸出結果是(C)

A)20 9
B)9 9
C)20 11
D)11 11

(38) 有以下程序

#include

main()

{char p[20]={『a』,』b』,』c』,』d』},q[]=」abc」, r[]=」abcde」

strcat(p,r); Strcpy(p+strlen(q),q);

Printf(「%d \n」,sizeof(p));

}

程序運行後的輸出結果是(B)

A)9
B)6
C)11
D)7

(39) 有以下程序

#include

main()

void f(char p[][10], int n ) /* 字元串從小到大排序 */

{ char t[10]; int i,j;

for(i=0;i

for(j=i+1;j

if(strcmp(p[i],p[j])>0) {strcpy(t,p[i]); strcpy(p[i],p[j]); strcpy(p[i],t); }

}

main()

{char p[5][10]={「abc」,」aabdfg」,」abbd」,」dcdbe」,」cd」};

f(p,5);

printf(「%d\n」,strlen(p[0]));

}

程序運行後的輸出結果是(C)

A) 2
B) 4
C) 6
D) 3

(40) 有以下程序

void f(int n, int *r)

{int r1=0;

if(n%3==0) r1=n/3;

else if(n%5==0) r1=n/5;

else f(--n,&r1);

*r=r1;

}

main()

{int m=7,r;

f(m,&r); printf(「%d\n,r」);

}

程序運行後的輸出結果是(A)

A) 2
B) 1
C)3
D) 0

(41)有以下程序

main(int argc,char *argv[])

{int n=0,i;

for(i=1;i n=n*10+*argv[i]-『0』;

printf(「%d\n」,n);

}

編譯連接後生成可執行文件tt.exe,若運行時輸入以下命令行

tt 12 345 678

程序運行後的輸出結果是(D)

A) 12
B) 12345
C)12345678
D) 136

(42) 有以下程序

int a=4;

int f(int n)

{int t=0; static int a=5;

if(n%2) {int a=6; t+=a++;}

else {int a=7 ;t+=a++;}

return t+a++;

}

main()

{int s=a,i=0;

for(;i〈2;i++) s+=f(i);

printf (「%d\n」,s);

}

程序運行後的輸出結果是(B)

A)24
B)28
C)32
D)36

(43) 有一個名為init.txt的文件,內容如下:

#define HDY(A,B) A/B

# define PRINT(Y) Printf(「y=%d\n.,Y)

有以下程序

#include 「init.txt」

main()

{int a=1,b=2,c=3,d=4,k;

K=HDY(a+c,b+d);

PRINT(K);

}

下面針對該程序的敘述正確的是(D)

A)編譯有錯
B)運行出錯

C)運行結果為 y=0
D) 運行結果為 y=6

(44) 有以下程序

main()

{char ch[]=「uvwxyz」,*pc;

Pc=ch; printf(「%c\n」,*(pc+5));

}

程序運行後的輸出結果是(A)

A)z
B)0
C)元素ch[5]的地址
D)字元y的地址

(45) 有以下程序

struct S {int n; int a[20];};

void f(struct S *P)

{int i,j,t;

for(i=0;in-1;i++)

for(j=i+1;jn;j++)

if(p->a[i]>p->a[j]) { t=p->a[i]; p->a[i]=p->a[j]; p->a[j]=t; }

}

main()

{int i; struct S s={10,{2,3,1,6,8,7,5,4,10,9}};

f(&s);

for(i=0;i printf(「%d」,s.a[i]);

}

程序運行後的輸出結果是(A)

A)1,2,3,4,5,6,7,8,9,10,
B)10,9,8,7,6,5,4,3,2,1,

C)2,3,1,6,8,7,5,4,10,9,
D)10,9,8,7,6,1,2,3,4,5,

(46) 有以下程序

struct S{ int n; int a[20]; };

void f(int *a,int n)

{int i;

for(i=0;i a[i]+=i;

}

main()

{int i; struct S s={10,{2,3,1,6,8,7,5,4,10,9}};

f(s.a, s.n);

for(i=0;i printf(「%d」,s.a[i]);

}

程序運行後的輸出結果是(A)

A)2,4,3,9,12,12,11,11,18,9,
B)3,4,2,7,9,8,6,5,11,10,

C)2,3,1,6,8,7,5,4,10,9,
D)1,2,3,6,8,7,5,4,10,9,

(47) 有以下程序段

typedef struct node { int data; struct node *next; } *NODE;

NODE p;

以下敘述正確的是(C)

A)p是指向struct node結構變數的指針的指針

B)NODE p;語句出錯

C)p是指向struct node結構變數的指針

D)p是struct node結構變數

(48)有以下程序

main()

{unsigned char a=2,b=4,c=5,d;

d=a|b; d&=c; printf(「%d\n」,d); }

程序運行後的輸出結果是(B)

A)3
B)4
C)5
D)6

(49)有以下程序

#include

main()

{FILE *fp; int k,n,a[6]={1,2,3,4,5,6};

fp=fopen(「d2.dat」,」w」);

fprintf(fp,」%d%d\n」,a[0],a[1],a[2]); fprintf(fp, 「%d%d%d \n」,a[3],a[4],a[5]);

fclose(fp);

fp=fopen(「d2.dat」,」r」);

fscanf(fp, 「%d%d」,&k,&n); printf(「%d%d\n」,k,n);

fclose(fp);

}

程序運行後的輸出結果是(D)

A)1 2
B)1 4
C)123 4
D) 123 456

(50)有以下程序

#include

main ()

{FILE *fp; int i,a[6]={1,2,3,4,5,6k};

fp=fopen(「d3.dat」,」w+b」);

fwrite(a,sizeof(int),6,fp);

fseek(fp,sizeof(int)*3,SEEK_SET);/*該語句使讀文件的位置指針從文件頭向後移動3個int型數據*/

fread(a,sizeof(int),3,fp); fclose(fp);

for(i=0;i<6;i++) printf(「%d,」,a[i]);

}

程序運行後的輸出結果是(A)

A)4,5,6,4,5,6,
B)1,2,3,4,5,6,
C)4,5,6,1,2,3,
D)6,5,4,3,2,1,

二.填空題(每空2分,共40分)請將每一個空的正確答案寫在答題卡[1]至[20]序號的橫線上,答在試卷上不得分。注意:以命令關鍵字填空的必須寫完整.

(1) 在深度為7的滿二叉樹中,度為2的結點個數為___63____。

(2) 軟體測試分為白箱(盒)測試和黑箱(盒)測試,等價類劃分法屬於__黑箱(或黑盒) 測試。

(3) 在資料庫系統中,實現各種數據管理功能的核心軟體稱為 __資料庫管理系統__。

(4) 軟體生命周期可分為多個階段,一般分為定義階段、開發階段和維護階段。編碼和測試屬於 開發_____階段。

(5)在結構化分析使用的數據流圖(DFD)中,利用數據字典 對其中的圖形元素進行確切解釋。

(6)執行以下程序後的輸出結果是 a=14 。

main()

{int a=10;

a=(3*5,a+4); printf(「a=%d\n」,a);

}

(7) 當執行以下程序時,輸入1234567890<回車>,則其中while循環體將執行 0 次。

#include

main()

{char ch;

While((ch=getchar())==』0』) printf(「#」);

}

(8) (8)以下程序的運行結果是 m=4 k=4 i=5 k=5 。

int k=0;

void fun(int m)

{ m+=k; k+=m; printf(「m=%d\n k=%d 」,m,k++);}

main()

{ int i=4;

fun(i++); printf(「i=%d k=%d\n」,i,k);

}

(9) (9)以下程序的運行結果是 #& 。

main()

{int a=2,b=7,c=5;

switch(a>0)

{case 1:switch(b<0)

{case 1:switch(「@」); break;

Case 2: printf(「!」); break;

}

case 0: switch(c==5)

{ case 0: printf(「*」); break;

case 1: printf(「#」); break;

case 2: printf(「$」); break;

}

default : printf(「&」);

}

printf(「\n」);

}

(10)以下程序的輸出結果是 9

# include

main()

{ printf(「%d\n」,strlen(「IBM\n012\1\\」));

}

(11)已定義char ch=」$」;int i=1,j;執行j=!ch&&i++以後,i的值為1

(12)以下程序的輸出結果是 5 4

# include

main()

{ char a[]={『\1』,』\2』,』\3』,』\4』,』\0』};

printf(「%d %d\n」,sizeof(a),srelen(a));

}

(13)設有定義語句:int a[][3]={{0},{1},{2}};,則數組元素a[1][2]的值為 0

(14)以下程序的功能是:求出數組x中各相鄰兩個元素的和依次存放到a數組中,然後輸出。請填空。

main()

{int x[10],a[9],I;

for (i=0;i<10;i++)

scanf(「%d」,&x[i]);

for( i=1 ;i<10;i++)

a[i-1]=x[i]+ x[i-1] ;

for(i=0;i<9;i++)

printf(「%d」,a[i]);

printf(「\n」);

(15) 以下程序的功能是:利用指針指向三個整型變數,並通過指針運算找出三個數中的最大值,輸出到屏幕上,請填空:

main()

{int x,y,z,max,*px,*py,*pz,*pmax;

scanf(「%d%d%d」,&x,&y,&z);

px=&x;

py=&y;

pz=&z;

pmax=&max;

*pmax=*px(或*pmax=x) ;

if(*pmax<*py)*pmax=*py;

if(*pmax<*pz)*pmax=*pz;

printf(「max=%d\n」,max);

}

(16)以下程序的輸出結果是 10

int fun(int*x,int n)

{if(n==0)

return x[0];

else return x[0]+fun(x+1,n-1);

}

main()

{int a[]={1,2,3,4,5,6,7};

printf(「%d\n」,fun(a,3));

}

(17)以下程序的輸出結果是 35

# include

main()

{char *s1,*s2,m;

s1=s2=(char*)malloc(sizeof(char));

*s1=15;

*s2=20;

m=*s1+*s2;

printf(「%d\n」,m);

}

(18)設有說明

struct DATE{int year;int month; int day;};

請寫出一條定義語句,該語句定義d為上述結構體變數,並同時為其成員year、month、day 依次賦初值2006、10、1: struct DATA d={2006,10,1};

(19) 設有定義:FILE *fw;,請將以下打開文件的語句補充完整,以便可以向文本文件readme.txt的最後續寫內容。

fw=fopen(「readme.txt」, "a" )

2007年4月全國計算機等級考試二級C語言筆試試題答案

一、選擇題:
1-5 24134

6-10 31321

11-15 34231

16-20 43113

21-25 43421

26-30 14241

31-35 22412

36-40 23232

41-45 42411

46-50 13241

二、填空題:

1. 63

2,墨盒
3.DBNS
4,開發
5,數據 字典
6,a-14
7,0
8,無答案
9,# 與號
10,9
11,1
12,5_4
13,13 0
14,i=1
15,X[i-1]
16,無答案
17,10
18,40
19,無答案
20,"20a"