第一篇:R語言學(xué)習(xí)總結(jié)
R語言學(xué)習(xí)總結(jié)經(jīng)過接近一個(gè)學(xué)期的學(xué)習(xí),從對R語言的完全陌生,到現(xiàn)在對其有了一些粗淺的認(rèn)識(shí),其中經(jīng)歷了遇到困難苦思冥想的艱辛,也有解決問題以后豁然開朗的暢快。在學(xué)習(xí)的過程中,以前掌握的數(shù)理基礎(chǔ)給我?guī)砹瞬簧俦憷?,而認(rèn)真地態(tài)度和踏實(shí)的性格也使我獲益匪淺。
在這個(gè)學(xué)期中,我學(xué)會(huì)了R語言的基本操作和語法,以及針對具體的統(tǒng)計(jì)學(xué)問題相應(yīng)的解決方法。并按時(shí)完成老師布置的課后作業(yè),以達(dá)到學(xué)以致用的目的,也加強(qiáng)了對R語言操作的熟練度。
一、初識(shí)R軟件
R軟件是一套完整的數(shù)據(jù)處理、計(jì)算和制圖軟件系統(tǒng)。其功能包括:據(jù)存儲(chǔ)和處理,數(shù)組運(yùn)算,完整連貫的統(tǒng)計(jì)分析工具,優(yōu)秀的統(tǒng)計(jì)制圖功能已及簡便而強(qiáng)大編程語言。
接觸R語言以后,我的第一感覺就是方便和強(qiáng)大。R語言中有非常多的函數(shù)和包,我們幾乎不用自己去編一些復(fù)雜的算法,而往往只需要短短幾行代碼就能解決很復(fù)雜的問題,這給我們的使用帶來了極大地方便;于此同時(shí),它又可操縱數(shù)據(jù)的輸入輸出,實(shí)習(xí)分支、循環(huán),使用者可以自定義功能,這就意味著當(dāng)找不到合適的函數(shù)或包來解決所遇的問題時(shí),我們又可以自己編程去實(shí)現(xiàn)各種具體功能,這也正是R語言的強(qiáng)大之處。
二、學(xué)習(xí)心得
在學(xué)習(xí)該書的過程中,我不僅加深了對統(tǒng)計(jì)學(xué)方法的理解,同時(shí)也掌握了R軟件的編程方法和基本技巧,了解了各種函數(shù)的意義和用法,并能把兩者結(jié)合起來,解決實(shí)際中的統(tǒng)計(jì)問題。
1、R語言的基本語法及技巧
R語言不僅可以進(jìn)行基礎(chǔ)的數(shù)字、字符以及向量的運(yùn)算,內(nèi)置了許多與向量
運(yùn)算有關(guān)的函數(shù)。而且還提供了十分靈活的訪問向量元素和子集的功能。R語言中經(jīng)常出現(xiàn)數(shù)組,它可以看作是定義了維數(shù)(dim屬性)的向量。因此數(shù)組同樣可以進(jìn)行各種運(yùn)算,以及訪問數(shù)組元素和子集。二維數(shù)組(矩陣)是比較重要和特殊的一類數(shù)組,R可以對矩陣進(jìn)行內(nèi)積、外積、乘法、求解、奇異值分解及最小二乘擬合等運(yùn)算,以及進(jìn)行矩陣的合并、拉直等。apply()函數(shù)可以在對矩陣的一維或若干維進(jìn)行某種計(jì)算,例如apply(A,1,mean)表示對A按行求和。R語言允許將不同類型的元素放在一個(gè)集合中,這個(gè)集合叫做一個(gè)列表,列表元素總可以用“列表名[[下標(biāo)]]”的格式引用。而“列表名[下標(biāo)]”表示的是一個(gè)子列表,這是一個(gè)很容易混淆的地方。R語言中非常重要的一種數(shù)據(jù)結(jié)構(gòu)是data.frame(數(shù)據(jù)框),它通常是矩陣形式的數(shù)據(jù),但每列可以是不同類型,數(shù)據(jù)框每列是一個(gè)變量,每行是一個(gè)觀測,要注意的是每一列必須有相同的長度。數(shù)據(jù)框元素可以使用下標(biāo)或者下標(biāo)向量引用。
用一個(gè)非常簡單的例子來說明向量、矩陣和數(shù)據(jù)框的簡單運(yùn)用。輸入:
A<-matrix(c(1:12),2,6,byrow=T)#A為一個(gè)2行6列,按行排列的矩陣 X<-as.data.frame(A)#把A轉(zhuǎn)化成數(shù)據(jù)框形式的X X[1:2,seq(1,5,2)] #輸出X的第1、2行和1、3、5列 結(jié)果為: V1 V3 V5 1 1 3 5 2 7 9 11 輸入:
attach(X);R<-V1/V5;R #調(diào)用數(shù)據(jù)框X,計(jì)算并輸出V1和V5的比值 結(jié)果為: [1] 0.2000000 0.6363636 與此同時(shí)R語言中也提供了其它高級程序語言共有的分支、循環(huán)等程序控制結(jié)構(gòu)。比如if/else語句,for循環(huán)等。因此R語言也可以很容易的根據(jù)情況編寫自己所需要的函數(shù)。
以習(xí)題2.7為例:編寫一個(gè)R程序,輸入一個(gè)整數(shù)n,如果n小于等于0,中止運(yùn)算,并輸出:“要求輸入一個(gè)正整數(shù)”;否則,如果n是偶數(shù),則將n除2賦值給n;否則將3n+1賦給n。不斷循環(huán),直到n=1停止,并輸出:“運(yùn)算成功”
解:新建一個(gè)程序腳本,名為chapter2.R”,寫入代碼: f<-function(n){ if(n<=0)list(“要求輸入一個(gè)正整數(shù)”)else{repeat{ if(n==1)break #n=1時(shí)終止 else if(n/2==as.integer(n/2))n<-n/2 #n為偶數(shù)時(shí)除2 else n<-3*n+1 } list(“運(yùn)算成功”)} } 在R窗口中輸入:
Source(“chapter2.R”);f(32)輸出: [1] “運(yùn)算成功” 輸入: f(-5)輸出:
[1] “要求輸入一個(gè)正整數(shù)”
2、R在統(tǒng)計(jì)描述中的應(yīng)用
使用R軟件可以方便直觀的對數(shù)據(jù)進(jìn)行描述性分析。如使用均值、中位數(shù)、順序統(tǒng)計(jì)量等度量位置;用方差、標(biāo)準(zhǔn)差、變異系數(shù)等度量分散程度;以及用峰度系數(shù)、偏度系數(shù)度量分布形狀。例如在窗口中輸入:
x<-seq(1,589,3)length(x);mean(x);var(x);sd(x);median(x);100*sd(x)/mean(x)[1] 197 #長度 [1] 295 #均值 [1] 29254.5 #方差 [1] 171.0395 #標(biāo)準(zhǔn)差 [1] 295 #中位數(shù) [1] 57.97948 #樣本標(biāo)準(zhǔn)差
n<-length(x);m<-mean(x);s<-sd(x)n/((n-1)*(n-2))*sum((x-m)^3)/s^3;((n*(n+1))/((n-1)*(n-2)*(n-3))*sum((x-m)^4)/s^4-(3*(n-1)^2)/((n-2)*(n-3)))[1] 0 #偏度系數(shù) [1]-1.2 #峰度系數(shù)
R軟件可以檢驗(yàn)樣本是不是來自某種分布總體,以正態(tài)分布為例,我們可以通過shapiro.test()函數(shù)提供W統(tǒng)計(jì)量和相應(yīng)的p值,并通過p值的大小判斷樣本是否來自正態(tài)分布的總體。經(jīng)驗(yàn)分布的K-S檢驗(yàn)方法的應(yīng)用范圍則更加廣泛,不僅可以判斷樣本是否來自正態(tài)總體,也能判斷是否來自其它類型的分布總體。
以習(xí)題3.3為例:分別用W檢驗(yàn)方法和Kolmogorov-Smirnov檢驗(yàn)方法檢驗(yàn)習(xí)題3.1的數(shù)據(jù)是否服從正態(tài)分布;
首先將一百個(gè)數(shù)據(jù)存入”data.txt”中(此文件要放在工作空間目錄中)x<-read.table(“data.txt”);shaoiro.test(x)Shapiro-Wilk normality test data: x W = 0.9901, p-value = 0.6708 可見該樣本來自正態(tài)總體 ks.test(x,pnorm,mean(x),sd(x))One-sample Kolmogorov-Smirnov test data: x D = 0.073, p-value = 0.6611 alternative hypothesis: two-sided 結(jié)果與W檢驗(yàn)相同
除此之外,R語言還有強(qiáng)大的畫圖功能,例如我們可以通過作直方圖、莖葉圖和總體分析來描述數(shù)據(jù)的分布。R中的高水平作圖函數(shù)有:plot()、pairs()、coplot()、qqnorm()、hist()等等。當(dāng)高水平作圖函數(shù)并不能完全達(dá)到作圖的指標(biāo)時(shí),需要低水平的作圖函數(shù)予以補(bǔ)充。低水平作圖函數(shù)有:points()、lines()、text()、polygon()、legend()、title()和axis()等。需要注意的是低水平作圖函數(shù)必須是在高水平作圖函數(shù)所繪圖形的基礎(chǔ)之上增加新的圖形。
hist()函數(shù)可以做出已知數(shù)據(jù)的直方圖,stem()函數(shù)可以作莖葉圖,boxplot()函數(shù)可用作箱線圖,qqline()和qqmorm()可以做出正態(tài)QQ圖和相應(yīng)的直線。R語言同時(shí)還能對兩組數(shù)據(jù)進(jìn)行相關(guān)性檢驗(yàn),cor.test()函數(shù)提供了Pearson相關(guān)性
檢驗(yàn),Spearman秩檢驗(yàn)和Kendall秩檢驗(yàn)。其原假設(shè)為兩組數(shù)據(jù)不相關(guān),通過p值的大小來判斷是否拒絕原假設(shè)。我們還能用stars()函數(shù)作出星圖,來表示多元數(shù)據(jù),以上用法都非常簡單易用,這里就不再贅述。
3、R語言在統(tǒng)計(jì)推斷中的應(yīng)用 首先,R語言可以用來進(jìn)行參數(shù)估計(jì);
統(tǒng)計(jì)學(xué)中我們應(yīng)用矩估計(jì)和極大似然估計(jì)來進(jìn)行點(diǎn)估計(jì),矩估計(jì)是通過解正規(guī)方程組得到參數(shù)估計(jì)的值;極大似然估計(jì)通過解極大似然函數(shù)的極值點(diǎn)得到參數(shù)估計(jì)的值。在R中我們可以使用Newton迭代法求解正規(guī)方程組,獲得矩估計(jì);用optimize()函數(shù)求解極大似然函數(shù),獲得最大似然估計(jì);由此可見,R語言能夠很方便的解決參數(shù)點(diǎn)估計(jì)問題。
點(diǎn)估計(jì)給出未知參數(shù)的近似值以后,并不能知道這種估計(jì)的精確性如何,可信程度如何,為了解決這些問題,就需要用到區(qū)間估計(jì),在學(xué)習(xí)用R語言解決區(qū)間估計(jì)問題的過程中,我最大的體會(huì)就是R軟件中內(nèi)置的一些函數(shù)極大地方便了我們處理具體問題。比如t.test()函數(shù)。對單個(gè)正態(tài)總體,向量x包含了來自該總體的一個(gè)樣本,我們可以直接用t.test(x)指令得到均值u的點(diǎn)估計(jì)和區(qū)間估計(jì);對于兩個(gè)正態(tài)總體,向量y包含了來自第二個(gè)總體的一個(gè)樣本,我們可以用t.test(x,y)來得到均值差u1-u2的點(diǎn)估計(jì)和區(qū)間估計(jì),其中當(dāng)兩個(gè)總體方差相同時(shí),只需要加上var.equal=T(缺省值為F,即默認(rèn)兩個(gè)總體的方差是不同的);同時(shí)t.test()函數(shù)不僅可以進(jìn)行雙側(cè)置信區(qū)間估計(jì),也能進(jìn)行單側(cè)置信區(qū)間估計(jì),只需要在括號(hào)內(nèi)加上al=”l”或者al=”g”。當(dāng)數(shù)據(jù)不服從正態(tài)分布是,可以利用中心極限定理,取較大的樣本量,構(gòu)造近似服從正態(tài)分布的統(tǒng)計(jì)量進(jìn)行估計(jì)。
其次,R語言可以用來進(jìn)行假設(shè)檢驗(yàn)。
假設(shè)檢驗(yàn)也是統(tǒng)計(jì)推斷中的一個(gè)重要的內(nèi)容,在統(tǒng)計(jì)學(xué)中,我們用搜索到的數(shù)據(jù)對某個(gè)事先作出的統(tǒng)計(jì)假設(shè)按照某種設(shè)計(jì)好的方法進(jìn)行檢驗(yàn),來判斷此假設(shè)是否正確。也就是說為了檢驗(yàn)一個(gè)假設(shè)是否成立,先假定它是成立的,看看由此會(huì)導(dǎo)致什么結(jié)果。如果導(dǎo)致一個(gè)不合理的現(xiàn)象出現(xiàn),就認(rèn)為原假設(shè)不正確,如果沒有導(dǎo)出不合理的現(xiàn)象,則不能拒絕原假設(shè)。
R軟件給出了參數(shù)假設(shè)檢驗(yàn)的方法。以正態(tài)總體為例,t.test()函數(shù)也可以用來進(jìn)行單個(gè)或者兩個(gè)正態(tài)總體的均值的假設(shè)檢驗(yàn)。進(jìn)行單邊檢驗(yàn)時(shí)可以加入指令alternative(備擇假設(shè)),缺省時(shí)表示雙邊檢驗(yàn),less表示備擇假設(shè)為u X<-c(78.1,72.4,76.2,74.3,77.4,78.4,76.0,75.5,76.7,77.3)Y<-c(79.1,81.0,77.3,79.1,80.0,79.1,79.1,77.3,80.2,82.1)t.test(X,Y,var.equal=T,al=”l”)輸出:Two Sample t-test data: X and Y t =-4.2957, df = 18, p-value = 0.0002176 alternative hypothesis: true difference in means is less than 0 95 percent confidence interval:-Inf-1.908255 sample estimates: mean of x mean of y 76.23 79.43 結(jié)果中我們不僅能得到X和Y的均值的點(diǎn)估計(jì)76.23和79.43、左側(cè)區(qū)間估計(jì)、同時(shí)也能通過p值的大小判斷是否接受原假設(shè),該例中p<0.05,認(rèn)為拒絕原假設(shè),即認(rèn)為兩總體方差不同。與均值假設(shè)檢驗(yàn)相類似。 R語言中還可以用var.test()函數(shù)進(jìn)行正態(tài)總體的方差假設(shè)檢驗(yàn)。而且R語言不僅能就正態(tài)總體進(jìn)行均值和方差檢驗(yàn),也能對其他總體分布進(jìn)行檢驗(yàn)。例如用binom.test()進(jìn)行二項(xiàng)分布的檢驗(yàn)和估計(jì)。習(xí)題5.3中檢驗(yàn)鐵劑和飲食兩種方法治療后患者病情表現(xiàn)有無差異: x<-c(113,120,138,120,100,118,138,123)y<-c(138,116,125,136,110,132,130,110)binom.test(sum(x 參數(shù)假設(shè)檢驗(yàn)假定了總體分布的具體形式,但實(shí)際問題中我們往往不知道總體的分布,很難對總體的分布做出假定,所有要盡量從樣本本身獲得所需要的信息,即非參數(shù)檢驗(yàn)方法。 R語言中有很多種非參數(shù)的檢驗(yàn)方法,這里僅介紹幾個(gè)較為重要的方法。Pearson擬合優(yōu)度的卡方檢驗(yàn):首先假設(shè)隨機(jī)變量有某種分布,將數(shù)軸分成m個(gè)區(qū)間,然后用樣本落在每個(gè)區(qū)間內(nèi)的個(gè)數(shù)和其期望構(gòu)造K統(tǒng)計(jì)量,當(dāng)n很大是,K依分布收斂于自由度為m-1的卡方分布。然后進(jìn)行參數(shù)假設(shè)檢驗(yàn)。在R語言中可以用chisq.test()函數(shù)來實(shí)現(xiàn)。符號(hào)檢驗(yàn)可以用來檢驗(yàn)一個(gè)樣本是否來自某個(gè)總體,或者檢驗(yàn)兩個(gè)總體是否有顯著區(qū)別。對于前者,如果樣本中位數(shù)等于假設(shè)的總體的中位數(shù),我們就認(rèn)為樣本來自該假設(shè),此時(shí)每個(gè)樣本中位數(shù)和總體中位數(shù)的差額應(yīng)該正負(fù)各一半,所以可以用p=0.5的二項(xiàng)分布來檢驗(yàn)。對于后者,如果認(rèn)為兩個(gè)總體無顯著差異,則對應(yīng)的兩個(gè)樣本觀測值正負(fù)差額的個(gè)數(shù)應(yīng)該大體相當(dāng),即正負(fù)各占一半,像單個(gè)樣本一樣,檢驗(yàn)其是否來自p=0.5的二項(xiàng)分布。這在R語言中只需要用binom.test()函數(shù)就能實(shí)現(xiàn)。秩統(tǒng)計(jì)量檢驗(yàn)是一種經(jīng)常被用來檢驗(yàn)分布無關(guān)性的非參數(shù)檢驗(yàn),R語言提供了Spearman、Kendall和Wilcoxon三種秩檢驗(yàn)方法,前兩種可以用cor.test()函數(shù)實(shí)現(xiàn),最后一種可以用wilcox.test()函數(shù)實(shí)現(xiàn)。 最后,R語言還可以用來處理回歸分析問題 對于普通的多元線性回歸模型,已知被解釋變量y和i個(gè)解釋變量的樣本數(shù)據(jù),利用R語言中的lm()函數(shù)可以非常方便的求出各解釋變量的回歸參數(shù),并做相應(yīng)的檢驗(yàn)。以 y=β0+β1x+β2z+ε 為例,將數(shù)據(jù)賦給各個(gè)變量后,只需要輸入lm<-lm(y~1+x+z);summary(lm)就能得到參數(shù)估計(jì)值、每個(gè)參數(shù)估計(jì)值的標(biāo)準(zhǔn)差、參數(shù)顯著性的t檢驗(yàn)和總體顯著性的F檢驗(yàn),以及模型的擬合優(yōu)度等信息。然后我們可以用predict()函數(shù)非常方便的求出預(yù)測值和預(yù)測區(qū)間,同樣我們還能用前面介紹過的plot()和abline()等函數(shù)做出各種圖形來進(jìn)行回歸分析。 當(dāng)然之前講的都是比較理想的情況,而現(xiàn)實(shí)中往往影響被解釋變量y的因素很多,我們希望找出若干個(gè)比較關(guān)鍵的變量建立回歸方程,這便涉及變量選擇的問題。選擇“最優(yōu)”變量的方法有很多,比較常用的一種是逐步回歸法。它以 我是一個(gè)做事非常認(rèn)真地人,這個(gè)學(xué)期除了上課時(shí)間,我還會(huì)利用課余時(shí)間練習(xí)R語言的操作,俗話說的好,動(dòng)眼部動(dòng)手,什么都學(xué)不走。很多時(shí)候看書上的內(nèi)容覺得非常簡單,實(shí)際操作中卻會(huì)遇到很多小問題,往往也正是這些小問題導(dǎo)致我們的程序無法運(yùn)行或者無法得出想要的結(jié)果。期間我就遇到過一些這樣的問題,例如沒有把數(shù)據(jù)文件放在工作空間目錄里,導(dǎo)致“read.table”指令讀不出數(shù)據(jù),或者是一些符號(hào)輸錯(cuò)導(dǎo)致錯(cuò)誤。正是我認(rèn)真細(xì)致的將每個(gè)用法都嘗試一遍,才掌握了很多不起眼的小細(xì)節(jié),也正是因?yàn)檫@一點(diǎn),當(dāng)其他兩名同學(xué)遇到問題問我的時(shí)候我才能迅速地找出問題所在。 總的來說,R語言歸根到底只是我們解決問題的工具,而我們對問題的分析首先是要根據(jù)理論進(jìn)行的,例如參數(shù)估計(jì)、假設(shè)檢驗(yàn)以及線性回歸、時(shí)間序列方面的知識(shí),我們只有深刻理解這些理論背后的意義,才能用對R語言中的各個(gè)方法,就好比戰(zhàn)場上如果R是利刃,理論知識(shí)就是我們的身體和戰(zhàn)術(shù)素養(yǎng),只有我們學(xué)好了理論知識(shí),才能面對一個(gè)個(gè)問題迎刃而解。 這個(gè)學(xué)期獲得的收獲則更多,不僅加深了對統(tǒng)計(jì)和計(jì)量方面知識(shí)的進(jìn)一步理解,更對R軟件有了初步的了解和認(rèn)識(shí)。而其實(shí)最重要的,是這種全力以赴做一件事情的狀態(tài)和收獲的喜悅。我相信這種經(jīng)歷會(huì)讓我在以后的學(xué)習(xí)和工作中獲益匪淺。 這個(gè)學(xué)期的學(xué)習(xí)讓我對R語言產(chǎn)生了濃厚的興趣,而我現(xiàn)在對R語言也僅僅是學(xué)到了些皮毛,我一定要再努力學(xué)習(xí),希望能夠在今后的實(shí)習(xí)中學(xué)到更多的東西,為自己大四時(shí)期找工作打下基礎(chǔ)。 c語言學(xué)習(xí)總結(jié) c語言學(xué)習(xí)總結(jié)篇一: 怎么才能學(xué)好c語言呢? 1,要學(xué)習(xí)c語言的基本語言及程序結(jié)構(gòu),這時(shí)譚浩強(qiáng)的那本書就比較經(jīng)典了。c語言學(xué)習(xí)心得。當(dāng)然你不能只看書,要?jiǎng)邮謩?dòng)寫代碼,去上機(jī)測試。因?yàn)楹芏鄷r(shí)候?qū)懗绦蚓褪且粋€(gè)測試,你就是再牛的程序員也不能可寫出沒有bug的程序,所以學(xué)會(huì)找出程序中的錯(cuò)誤很重要。這也是你以后分析他人的程序的先決條件,不可偷懶只看書,這樣你是不可能學(xué)好一門計(jì)算機(jī)語言的。 2,分析他人寫的程序,網(wǎng)上有很多實(shí)例代碼,下載下來自己先看一下他們的實(shí)例是解決什么問題的,有時(shí)候很多經(jīng)典的模塊可以為已所用的。不過,網(wǎng)上下的代碼中會(huì)存在很多問題,環(huán)境問題啊,編程習(xí)慣問題了,不過也好,在解決問題的過程中你會(huì)學(xué)到很多東西的,像我在分析網(wǎng)上下的代碼時(shí)就遇到了我平時(shí)沒有遇到的dos函數(shù),masm與c語言的接合等方面的問題,學(xué)到了不少東西呢。 3,要是你再想學(xué)的深一點(diǎn)兒,那還得學(xué)習(xí),及,再深就要去分析linux內(nèi)核或是驅(qū)動(dòng)程序了,這因人而異。但不管怎么學(xué),一定要有個(gè)方向,有計(jì)劃,這樣才會(huì)事半功倍。c語言學(xué)習(xí)心得。如果你能找到你想學(xué)習(xí)方面的高手指導(dǎo),或是幾個(gè)人一起學(xué)的話那就更好了。 4,分析c語言函數(shù)的實(shí)現(xiàn)方法。這對你很好地使用函數(shù)會(huì)很有幫助的,再者很多大公司的筆試題就是讓你實(shí)現(xiàn)c語言的數(shù),比如:中興的strcpy,阿里巴巴的strcmp,上海貝爾公司宣講會(huì)上一個(gè)技術(shù)總監(jiān)說,要是誰能說出printf的實(shí)現(xiàn)方法及返回值,當(dāng)場錄用。再者,c語言經(jīng)過這么多年的考驗(yàn),仍然很熱門,可見其開發(fā)是多么經(jīng)典啊,學(xué)習(xí)一下c函數(shù)實(shí)現(xiàn),比學(xué)習(xí)任何書都要好。要是再有興趣的話就分析一下c的頭文件,這也是個(gè)不錯(cuò)的學(xué)習(xí)方面。c語言學(xué)習(xí)總結(jié)篇二: 學(xué)習(xí)c程序設(shè)計(jì)語言除了課堂講授以外,必須保證有不少于課堂講授學(xué)時(shí)的上機(jī)時(shí)間。因?yàn)閷W(xué)時(shí)所限,課程不能安排過多的統(tǒng)一上機(jī)實(shí)驗(yàn),所以希望學(xué)生有效地利用課程上機(jī)實(shí)驗(yàn)的機(jī)會(huì),盡快掌握用c語言開發(fā)程序的能力,為今后的繼續(xù)學(xué)習(xí)打下一個(gè)良好的基礎(chǔ)。為此,我們結(jié)合課堂講授的內(nèi)容和進(jìn)度,安排了12次上機(jī)實(shí)驗(yàn)。課程上機(jī)實(shí)驗(yàn)的目的,不僅僅是驗(yàn)證教材和講課的內(nèi)容、檢查自己所編的程序是否正確,課程安排的上機(jī)實(shí)驗(yàn)的目的可以概括為如下幾個(gè)方面: 1。加深對課堂講授內(nèi)容的理解 課堂上要講授許多關(guān)于c語言的語法規(guī)則,聽起來十分枯燥無味,也不容易記住,死記硬背是不可取的。然而要使用c語言這個(gè)工具解決實(shí)際問題,又必須掌握它。通過多次上機(jī)練習(xí),對于語法知識(shí)有了感性的認(rèn)識(shí),加深對它的理解,在理解的基礎(chǔ)上就會(huì)自然而然地掌握c語言的語法規(guī)定。對于一些內(nèi)容自己認(rèn)為在課堂上聽懂了,但上機(jī)實(shí)踐中會(huì)發(fā)現(xiàn) 原來理解的偏差,這是由于大部分學(xué)生是初次接觸程序設(shè)計(jì),缺乏程序設(shè)計(jì)的實(shí)踐所致。 學(xué)習(xí)c語言不能停留在學(xué)習(xí)它的語法規(guī)則,而是利用學(xué)到的知識(shí)編寫c語言程序,解決實(shí)際問題。即把c語言作為工具,描述解決實(shí)際問題的步驟,由計(jì)算機(jī)幫助我們解題。只有通過上機(jī)才能檢驗(yàn)自己是否掌握c語言、自己編寫的程序是否能夠正確地解題。 通過上機(jī)實(shí)驗(yàn)來驗(yàn)證自己編制的程序是否正確,恐怕是大多數(shù)同學(xué)在完成老師作業(yè)時(shí)的心態(tài)。但是在程序設(shè)計(jì)領(lǐng)域里這是一定要克服的傳統(tǒng)的、錯(cuò)誤的想法。因?yàn)樵谶@種思想支配下,可能你會(huì)想辦法去“掩蓋”程序中的錯(cuò)誤,而不是盡可能多地發(fā)現(xiàn)程序中存在的問題。自己編好程序上機(jī)調(diào)試運(yùn)行時(shí),可能有很多你想不到的情況發(fā)生,通過解決這些問題,可以逐步提高自己對c語言的理解和程序開發(fā)能力。 2。熟悉程序開發(fā)環(huán)境、學(xué)習(xí)計(jì)算機(jī)系統(tǒng)的操作方法 一個(gè)c語言程序從編輯、編譯、連接到運(yùn)行,都要在一定的外部操作環(huán)境下才能進(jìn)行。所謂“環(huán)境”就是所用的計(jì)算機(jī)系統(tǒng)硬件、軟件條件,只有學(xué)會(huì)使用這些環(huán)境,才能進(jìn)行程序開發(fā)工作。通過上機(jī)實(shí)驗(yàn),熟練地掌握c語言開發(fā)環(huán)境,為以后真正編寫計(jì)算機(jī)程序解決實(shí)際問題打下基礎(chǔ)。同時(shí),在今后遇到其它開發(fā)環(huán)境時(shí)就會(huì)觸類旁通,很快掌握新系統(tǒng)的使用。 3。學(xué)習(xí)上機(jī)調(diào)試程序 完成程序的編寫,決不意味著萬事大吉。你認(rèn)為萬無一失的程序,實(shí)際上機(jī)運(yùn)行時(shí)可能不斷出現(xiàn)麻煩。如編譯程序檢測出一大堆錯(cuò)誤。有時(shí)程序本身不存在語法錯(cuò)誤,也能夠順利運(yùn)行,但是運(yùn)行結(jié)果顯然是錯(cuò)誤的。開發(fā)環(huán)境所提供的編譯系統(tǒng)無法發(fā)現(xiàn)這種程序邏輯錯(cuò)誤,只能靠自己的上機(jī)經(jīng)驗(yàn)分析判斷錯(cuò)誤所在。程序的調(diào)試是一個(gè)技巧性很強(qiáng)的工作,對于初學(xué)者來說,盡快掌握程序調(diào)試方法是非常重要的。有時(shí)候一個(gè)消耗你幾個(gè)小時(shí)時(shí)間的小小錯(cuò)誤,調(diào)試高手一眼就看出錯(cuò)誤所在。 通過這次為數(shù)不多的幾天計(jì)算機(jī)實(shí)踐學(xué)習(xí),我們了解了一些關(guān)于c語言的知識(shí),理解鞏固了我們c語言的理論知識(shí),著對我們將來到社會(huì)工作將會(huì)有莫大的幫助。同時(shí)它讓我知道,只要你努力,任何東西都不會(huì)太難。 (1)兩個(gè)if并列的時(shí)候,if函數(shù)是有先后順序的。 如 iMax = a; if(b > iMax) { iMax = b; } if(c > iMax) { iMax = c; } printf(“三個(gè)數(shù)的最大值是:%dn”,iMax); (2) printf(“請輸入機(jī)票價(jià)格:”); scanf(“%f”,&fTicketPrice); (3)%5.2f的意思是以長度為5,小數(shù)點(diǎn)后面2位的形式輸出。 (4)閏年判斷((iYear % 400 == 0)||(iYear % 4 == 0 && iYear % 100!= 0)) C語言學(xué)習(xí)總結(jié) 第一章入門 1、UNIX操作系統(tǒng),C編譯器和幾乎所有的UNIX應(yīng)用程序都使用C 語言編寫的。 2、在C語言中,所有變量都必須先聲明后使用。聲明通常放在函數(shù)起始處,在任何可執(zhí)行語句之前。聲明用于說明變量的屬性,它有一 個(gè)類型名和一個(gè)變量表組成。 3、printf函數(shù)并不是C語言本身的一部分,僅僅是標(biāo)準(zhǔn)庫函數(shù)中的一個(gè)函數(shù)。 4、EOF定義在頭文件 都不同。 5、函數(shù)最好按照ANSI C中定義的方式聲明。 6、在C語言中,所有的函數(shù)參數(shù)都是“通過值”傳遞的。被調(diào)用函數(shù)不能直接修改主調(diào)函數(shù)中變量的值,而只能修改其私有的臨時(shí)副本的值。 7、要想讓函數(shù)能夠修改主調(diào)函數(shù)中的變量,需要用指針或者數(shù)組作 為參數(shù)。 8、函數(shù)中的每個(gè)局部變量只在函數(shù)被調(diào)用時(shí)存在,在函數(shù)執(zhí)行完畢 退出時(shí)消失。 9、外部變量必須定義在所有函數(shù)之外,且只能定義一次,定義后編 譯程序?qū)樗峙浯鎯?chǔ)單元。 10、外部變量在數(shù)據(jù)段分配。重復(fù)定義其實(shí)是重復(fù)分配,所以會(huì)出現(xiàn) 錯(cuò)誤。 11、所有在目標(biāo)代碼中的地址都是相對地址,直到鏈接時(shí)重定位。 12、“定義”表示創(chuàng)建變量或分配存儲(chǔ)單元,而“聲明”指的是說明變量的性質(zhì),但并不分配存儲(chǔ)單元。 13、外部變量的使用會(huì)降低程序的通用性,應(yīng)盡量減少使用。 14、變量名(標(biāo)識(shí)符)都是給人看的,最后都變成內(nèi)存地址。 15、變量名,變量類型都是編譯時(shí)的概念,而不是運(yùn)行時(shí)的概念。 第二章 類型、運(yùn)算符與表達(dá)式 1、關(guān)于變量名:局部變量一般使用較短的變量名,外部變量使用較 長的名字來表達(dá)用途。 2、short int一般寫為short,通常為16位,long int一般寫為long,通常為32位。int可以是16位或32位。 3、char可以有signed和unsigned加以限定,不加限定的char符號(hào)取決于具體機(jī)器,但是可打印字符總是正值。 4、無符號(hào)常量以字母u或U結(jié)尾。后綴ul或UL表明是unsigned long 類型。 5、帶前綴O的整型常量表示它為八進(jìn)制形式;前綴為0x或0X,則 表示它是十六進(jìn)制形式。 6、常量表達(dá)式在編譯時(shí)求值。 7、某些字符可以用轉(zhuǎn)義字符序列表示。例如,'ooo'和'xhh'。 8、字符串常量也叫做字符串字面值,是由雙引號(hào)括起來的0個(gè)或多 個(gè)字符組成的字符序列。 9、(類型名)表達(dá)式這種方法經(jīng)常用來轉(zhuǎn)換指針。 10、自增和自減運(yùn)算只能作用于變量。 11、賦值運(yùn)算符有很多優(yōu)點(diǎn):簡潔、高效,與人們的思維習(xí)慣接近。 12、三元運(yùn)算符條件表達(dá)式可以寫出很簡潔的代碼。 13、運(yùn)算符的優(yōu)先級:多用括號(hào)。 14、按位與運(yùn)算符&經(jīng)常用于屏蔽某些二進(jìn)制位;按位或運(yùn)算符|常 用于將某些二進(jìn)制位置為1。 第三章控制流 1、if語句要注意配對。 2、switch語句的最后一個(gè)分支(即default分支)的后面也應(yīng)該加上 一個(gè)break語句。 3、for語句的各組成部分可以是任何表達(dá)式,所以for語句并不限于 通過算術(shù)級數(shù)進(jìn)行循環(huán)控制。 4、do while語句至少執(zhí)行一次。 5、應(yīng)盡量少用或不用goto語句。 第四章函數(shù)與程序結(jié)構(gòu) 1、C語言程序一般有許多小的函數(shù)組成,而不是由少量較大的函數(shù) 組成。 2、最簡單的函數(shù)可以是dummy(){},它可以在程序開發(fā)期間用于保留 位置。 3、如果兩個(gè)函數(shù)必須共享某些數(shù)據(jù),而這兩個(gè)函數(shù)互不調(diào)用對方,則用外部變量。 4、函數(shù)的參數(shù)實(shí)際是局部變量。 5、外部變量的初始化只能出現(xiàn)在其定義中。 6、名字的作用域指的是程序中可以使用該名字的部分。 7、對于在函數(shù)開頭聲明的自動(dòng)變量來說,其作用域是聲明該變量名的函數(shù)。 8、不同函數(shù)中聲明的具有相同名字的各個(gè)局部變量之間沒有任何關(guān) 系。 9、如果要在外部變量的定義之前使用該變量,或者外部變量的定義與變量的使用不在同一個(gè)源文件中,則必須在相應(yīng)的變量聲明中強(qiáng)制 性地使用關(guān)鍵字extern。 10、外部變量的初始化只能出現(xiàn)在其定義中。 11、對于某些中等規(guī)模的程序,最好只用一個(gè)頭文件存放程序中各部分共享的對象。較大的程序需要更多的頭文件,我們需要精心地組織 它們。 12、關(guān)于static(1)static既可用于聲明外部變量,也可用于聲明內(nèi)部變量。 (2)static既可用于聲明變量,也可用于聲明函數(shù)。 (3)通常情況下,函數(shù)名字是全局可訪問的,對整個(gè)程序的各個(gè)部分而言都可見。但是,如果把函數(shù)聲明為static類型,則該函數(shù)除了對該函數(shù)聲明所在的文件之外,其他文件都無法訪問。 (4)用static也可以限定外部變量的作用域?yàn)槠渌诘脑次募_@與限定函數(shù)其實(shí)是一樣的。因?yàn)楹瘮?shù)可以看作是外部變量。(5)static類型的內(nèi)部變量同自動(dòng)變量一樣,是某個(gè)特定函數(shù)的局部變量,只能在該函數(shù)中使用,但它一直占用存儲(chǔ)空間,而且在編 譯時(shí)分配內(nèi)存。 13、在一個(gè)好的程序設(shè)計(jì)風(fēng)格中,應(yīng)該盡量避免出現(xiàn)變量名隱藏外部 作用域中相同名字的情況。 14、在不進(jìn)行顯示初始化的情況下,外部變量和靜態(tài)變量都將被初始化為0,而自動(dòng)變量和寄存器變量的初值則沒有定義。 15、對于外部變量和靜態(tài)變量來說,初始化表達(dá)式必須是常量表達(dá)式,且只初始化一次(程序開始執(zhí)行前進(jìn)行初始化)。 16、對于自動(dòng)變量和寄存器變量,則在每次進(jìn)入函數(shù)或程序塊時(shí)都將 被初始化。 17、數(shù)組的初始化可以在聲明的后面緊跟一個(gè)初始化表達(dá)式列表。當(dāng)省略數(shù)組的長度時(shí),初始化表達(dá)式的個(gè)數(shù)就被當(dāng)作是數(shù)組的長度。 18、如果數(shù)組的初始化表達(dá)式的個(gè)數(shù)比數(shù)組的元素?cái)?shù)少,則對外部變量、靜態(tài)變量和自動(dòng)變量來說,沒有初始化表達(dá)式的元素將被初始化 為0。 19、續(xù)行可以在待續(xù)行的末尾處加上一個(gè)反斜杠符。 20、宏替換中,參數(shù)名以#作為前綴則結(jié)果將被擴(kuò)展為由實(shí)際參數(shù)替 換該參數(shù)的帶引號(hào)的字符串。 21、預(yù)處理器運(yùn)算符##為宏擴(kuò)展提供了一種連接實(shí)際參數(shù)的手段。如果替換文本中的參數(shù)與##相鄰,則該參數(shù)將被實(shí)際參數(shù)替換,##與前后的空白符將被刪除,并對替換后的結(jié)果重新掃描。 第五章指針與數(shù)組 1、ANSI C使用類型void *代替char *作為通用指針的類型。 2、指針只與字長有關(guān)。 3、每個(gè)指針都必須指向某種特定的數(shù)據(jù)類型。 4、void類型的指針可以存放指向任何類型的指針,但是它不能間接 引用其自身。 5、指針pa+1就意味著pa所指向的對象的下一個(gè)對象。相應(yīng)地,pa+i指向pa所指向的對象之后的第i個(gè)對象。 6、數(shù)組名不是變量,指針則是變量。因此指針可以作自增和賦值運(yùn) 算,但是數(shù)組名不可以。 7、類似于p[-1]、p[-2]這樣的表達(dá)式在語法上都是合法的,它們分別 引用位于p[0]之前的兩個(gè)元素。 8、一般情況下,同其他類型的變量一樣,指針也可以被初始化。通常,對指針有意義的初始化值只能是0或者是表示地址的表達(dá)式,對后者來說,表達(dá)式所代表的地址必須是在此前已定義的具有適當(dāng)類型的數(shù)據(jù)的地址。 9、C語言保證0永遠(yuǎn)不是有效的數(shù)據(jù)地址。 10、指針沒有合理合法的初值,通常出現(xiàn)斷錯(cuò)誤。 11、字符串長度、拷貝和比較的函數(shù): int strlen(char *s) { char *p = s; while(*p!= '
第二篇:c語言學(xué)習(xí)總結(jié)
第三篇:c語言學(xué)習(xí)總結(jié)
第四篇:C語言學(xué)習(xí)總結(jié)(模版)