導航:首頁 > 數據分析 > 為什麼提到變數就要強調數據類型

為什麼提到變數就要強調數據類型

發布時間:2025-01-25 13:14:54

❶ 論文的概述一般包括哪些

論文的概述一般包括選題背景,現在的研究狀況,研究的前景之類,通俗的說就是說說為什麼選這個題目,注意,在寫概述時要客觀,不要說什麼研究興趣之類的。
包括「綜」與「述」兩個方面。所謂綜,即為綜合,就是指作者必須對現有的大量素材進行歸納整理、綜合分析,而使材料更加精煉、更加明確、更加層次分明、更有邏輯性。所謂述,即為評述,是對所寫專題的比較全面、深入、系統的論述。因而,綜述是對某一專題、某一領域的歷史背景、前人工作、爭論焦點、研究現狀與發展前景等方面,以作者自己的觀點寫成的嚴謹而系統的評論性、資料性科技論文。

綜述反映出某一專題、某一領域在一定時期內的研究工作進展情況。可以把該專題、該領域及其分支學科的最新進展、新發現、新趨勢、新水平、新原理和新技術比較全面地介紹給讀者,使讀者尤其從事該專題、該領域研究工作的讀者獲益匪淺。因此,綜述是教學、科研以及生產的重要參考資料。

❷ c語言入門教學

初學C語言程序設計的基本方法和技巧

C語言是一門應用最廣泛的基礎高級編程語言,有很多語言都是由它發展而來的,所以學習好C語言之後再學習任何一種編程語言都會輕松上手。

1 熟記基本知識點

學習C語言和學習任何一種語言的方法基本一樣。我們嬰兒期間咿呀學語時,從一個字開始學,然後兩個,接著更多,最後我們能成句,成段,到出口成章。學習C語言的時候也一樣,有些最基本的內容必須要記下來。
1.1 關鍵字
關鍵字是由C語言規定的具有特定意義的字元串。它們是寫C語言的基礎,如果關鍵字不記下來,那編程是寸步難行。
1.2 運算符
C語言中的運算符和表達式與我們數學上的運算符和表達式有相同的,也有不同的。我們在學習的時候就注意記住並弄清楚那些不同的地方。基本的語法表達式及執行過程。選擇結構中的if語句和switch語句。循環語句中的for語句、while語句和do-while語句。這部分就好比是你會了許多詞,然後得把這些片語成一些句子,語法的作用就是告訴你怎樣說好一句話,表達清楚的意思。
1.3 常用庫函數
在這里最重要有兩個函數:輸入函數scanf()和輸出函數printf()。一個程序如果沒有輸入,那無論運行多少次結果都一樣,那也就失去了寫程序的目的了。同樣一個程序如果沒有輸出,那運行程序有什麼意義呢?當然輸出的形式比較多。在初學C語言的時候主要是從屏幕上輸出結果。所以這兩個函數的使用方法也必須要掌握。這兩個函數已經定義在stdio.h這個頭文件中,不用我們自己寫,它們不是C語言中的語句,所以在使用這兩個函數時在源程序頂部一定要加上#include 。這是為了讓我們在執行程序的時候,讓計算機知道scanf()和printf()這兩個函數怎麼用。
掌握上面的必須要記下來的內容,相當於我們開始學說話時先聽別人說,我們自己跟著學一些最基本的日常語言。這時我們就可以從一些簡單的程序開始讀,能把每一個程序的運行結果能自己讀程序准確地執行出來,那樣我們就可以開始來編寫程序了。

2 掌握程序的基本結構

編寫程序一定要注意程序的結構性。學習寫程序,不能開始就寫代碼。許多人在動手寫程序的時候感到無從下筆。原因主要是:看到一個題目不知道如何去分析,它怎麼才能變成一個程序呢?這是初學者在編寫程序的主要問題。我在教學中採用了一種分步式的方法。
2.1 看到一個題目的時候先別想著編程序,用一個具體的實例想想不用程序你是如何解決這個問題的
例如輸入三個數,輸出最小值。我們用3,8,6三個數來考慮,我們一看就知道3是最小的。可是我們這一看中其實並不簡單,其中有判斷。我們先看第一個數3,然後已經記在我們頭腦中了,再看第二個數8,3比8小,那我們還是記住3,再比較第3個數6,最後確定3是最小的。我們現在就是要把我們頭腦中很快閃過的這些判斷過程想清楚。
2.2 我們要弄清楚一個程序由哪些部分組成
這就好比我們寫一篇文章也有一些結構。一個C程序也有其一般結構,我把它歸納成下面格式。
#include
main()
{
定義變數;int,float,char,double
輸入數據;鍵盤輸入scanf();
直接賦值;例如x=3;
處理數據;if-else;switch;for;while;do-while;
輸入數據;printf();
}
第一行代碼表示把標準的輸入輸出頭文件包含在這個程序中。第二行代碼是C程序的主函數,每個C程序中必須有且僅有一個main()函數。然後是函數的一對「{}」。
定義變數的意思好比買一塊地,有了這塊地就可以在上面蓋房、種莊稼之類的。但是為了便於統一管理,比如城市已經規劃好了,你在郊區買的地就只能種莊稼,在市中心買的,就只能蓋房,這就是變數類型的含義了。用上面求最小值的例子。我們在三個數中求最小值。這三個是什麼數,是整數還是小數?這就必須用變數類型來說明。對於上例應該定義三個整型變數用來存放三個整數,還要定義一個整型變數用來存放最小值。如:int a,b,c,min;這行代碼的作用其實是要了一塊內存,然後在這塊內存里存東西。因為我需要一個整數,所以就用int這個關鍵字來聲明(相當於用這塊地干什麼)。那麼變數a,b,c是什麼呢?你買了一塊地,總要知道這塊地在哪是吧?不然就白買了,變數就是這樣一個作用。我們需要把數據存在計算機中,什麼樣的數就定義什麼樣的類型,需要存幾個數就定義幾個變數。
輸入數據有兩種方法。第一種從鍵盤輸入,就需要用到scanf()這個函數;第二種是直接賦值。
處理數據是對於初學者來說最難的一部分,也就是把我們剛才分析過程轉換成語句。這需要學好C語言的三種程序結構。
(1)順序結構
順序結構的程序設計是最簡單的,只要按照解決問題的順序寫出相應的語句就行,它的執行順序是自上而下,依次執行。順序結構可以獨立使用構成一個簡單的完整程序,不過大多數情況下順序結構都是作為程序的一部分,與其它結構一起構成一個復雜的程序,例如分支結構中的復合語句、循環結構中的循環體等。
(2)選擇結構
對於要先做判斷再選擇的問題就要使用分支結構。選擇結構的執行是依據一定的條件選擇執行路徑,而不是嚴格按照語句出現的物理順序。選擇結構的程序設計方法的關鍵在於構造合適的分支條件和分析程序流程,根據條件的結果選擇對應的分支語句。選擇結構適合於帶有邏輯或關系比較等條件判斷的計算,設計這類程序時往往都要先繪制其程序流程圖,然後根據程序流程寫出源程序,這樣做把程序設計分析與語言分開,使得問題簡單化,易於理解。程序流程圖是根據解題分析所繪制的程序執行流程圖。
例如上例中,把我們頭腦中很快閃過的這些判斷過程畫成流程圖即圖1:

由上面的流程圖再寫出對應的語句就比較容易了。如下所示:
min=a;
if(min>b) min=b;
if(min>c) min=c;
學習分支結構不要被分支嵌套所迷惑,只要正確繪制出流程圖,弄清各分支所要執行的部分,嵌套結構也就不難了。嵌套只不過是分支中又包括分支語句而已,不是新知識,只要對雙分支的理解清楚,分支嵌套是不難的。下面我介紹幾種基本的分支結構。
①if(條件)
{ 分支體
}
這種分支結構中的分支體可以是一條語句,此時「{ }」可以省略,也可以是多條語句即復合語句。它有兩條分支路徑可選,一是當條件為真,執行分支體,否則跳過分支體,這時分支體就不會執行。如:要計算x的絕對值,根據絕對值定義,我們知道,當x>=0時,其絕對值不變,而x<0時其絕對值是為x的反號,因此程序段為:if(x<0) x=-x;
②if(條件)
{分支1}
else
{分支2}
這是典型的分支結構,如果條件成立,執行分支1,否則執行分支2,分支1和分支2都可以是1條或若干條語句構成。如:求某年的年號是否是閏年。
分析:因為當某年號能被4整除但不能被4整除但不能被100整除,則這一年是閏年;或者這一年號能被400整除也是閏年。即year%4==0&&year%100!=0||year%400==0
其程序段如下:
if(year%4==0&&year%100!=0||year%400==0)
printf(「%d is leap year!」,year);
else
printf(「%d is not leap year!」,year);
}
③嵌套分支語句:其語句格式為:
if(條件1) {分支1};
else if(條件2) {分支2}
else if(條件3) {分支3}
……
else if(條件n) {分支n}
else {分支n+1}
嵌套分支語句雖可解決多個入口和出口的問題,但超過3重嵌套後,語句結構變得非常復雜,對於程序的閱讀和理解都極為不便,建議嵌套在3重以內,超過3重可以用switch語句。
④switch開關語句:該語句也是多分支選擇語句,到底執行哪一塊,取決於開關設置,也就是表達式的值與常量表達式相匹配的那一路,它不同if…else 語句,它的所有分支都是並列的,程序執行時,由第一分支開始查找,如果相匹配,執行其後的塊,接著執行第2分支,第3分支……的塊,直到遇到break語句;如果不匹配,查找下一個分支是否匹配。這個語句在應用時要特別注意開關條件的合理設置以及break語句的合理應用。
(3)循環結構
循環結構可以減少源程序重復書寫的工作量,用來描述重復執行某段演算法的問題,這是程序設計中最能發揮計算機特長的程序結構,C語言中提供三種循環,即while循環、do while循環和for循環。三種循環可以用來處理同一問題,一般情況下它們可以互相代替換,另外還有一種goto循環語句,因為強制改變程序的順序經常會給程序的運行帶來不可預料的錯誤,所以不提倡使用。
常用的三種循環結構學習的重點在於弄清它們相同與不同之處,以便在不同場合下使用,這就要清楚三種循環的格式和執行順序,將每種循環的流程圖理解透徹後就會明白如何替換使用,就能更好地理解它們的作用。在分析循環結構的語句時要開清楚,什麼時候開始循環(即循環的初始值);什麼時候結束循環(即循環的終止條件);循環的時候都做哪些操作(即循環體的執行部分);特別要注意在循環體內應包含趨於結束的語句(即循環變數值的改變),否則就可能成了一個死循環,這是初學者的一個常見錯誤。
在學完這三個循環後,應明確它們的異同點:用while和do…while循環時,循環變數的初始化的操作應在循環體之前,而for循環一般在語句1中進行的;while 循環和for循環都是先判斷表達式,後執行循環體,而do…while循環是先執行循環體後判斷表達式,也就是說do…while的循環體最少被執行一次,而while 循環和for就可能一次都不執行。
順序結構、分支結構和循環結構並不彼此孤立的,在循環中可以有分支、順序結構,分支中也可以有循環、順序結構,其實不管哪種結構,我們均可廣義的把它們看成一個語句。在實際編程過程中常將這三種結構相互結合以實現各種演算法,設計出相應程序,但是要編程的問題較大,編寫出的程序就往往很長、結構重復多,造成可讀性差,難以理解,解決這個問題的方法是將C程序設計成模塊化結構。輸出數據是每一個程序必須包含的部分。在C程序中的輸出通常是從顯示屏上輸出最後的結果,使用printf()這個函數。

3 掌握一些簡單常用的演算法

編程其實一大部分工作就是分析問題,找到解決問題的方法,再以相應的編程語言寫出代碼。這就好比我們學習寫作文段落的時候都有一些經典的好詞好句,可以使文章添彩。同樣程序雖然可以實現各種功能,但最基本的一些演算法並不是特別多,我們掌握一些簡單的演算法,在掌握這些基本演算法後,根據不同的問題,再靈活應用。如百錢買百雞的問題,就是用100元錢買100隻雞,公雞5元一隻,母雞3元一隻,小雞1元三隻。這種問題用數學方法可以列出方程:
x+y+z=100
5*x+3*y+z/3=100
按數學方法三個未知數兩個方程無解,實際上是可以解的,如果把公雞,母雞和小雞可能的只數全部代入到方程中檢驗就可以得到最後結果。這種方法叫窮舉法。如果我們用手算那可能要花上半天的功夫,但讓計算機來算就只需要1秒種。使用演算法後分析和處理問題都會簡單很多。當我們能熟練地掌握了簡單演算法後就能實現一些比較復雜的編程問題了。
任何程序只要有思維,有想法,那麼實現程序時就不會覺得無從下手。而要學習這種思維方法就是多做題,多讀程序,學習別人好的思維方法,多想想一個程序還可不可以有另外一種方法來實現它。這樣久而久之,自然會形成一種自己的思維方法。因此我認為不管學什麼語言都是這樣。

4 培養良好的編程習慣

培養良好的編程習慣要從第一行代碼開始,這也是學好C語言的重要因素。例如編寫程序時用縮進的方式、寫注釋、程序寫到一定的階段時要做一下測試等。這些工作可以幫我們在調試程序時有很大的幫助。程序代碼實現後,錯誤是難免的,所以也要鍛煉自己的調試查錯能力,而良好的編程習慣可以使我們在調試時減小工作量和提高調試效率,也有助於形成自己的編程風格。

C語言教學探討
注重編程細節,培養編程技巧
C語言的規則頗多,編寫C程序得嚴格按照其規則進行程序設計,對初學者而言,常常馬虎大意,所編寫的程序不能正常編譯和執行結果,從而打消學生的學習積極性。因此在教學初期,教師必須強調C的許多細節問題,讓學生的這種不良習慣扼殺於「萌芽」狀態。如學生常常在寫程序時出現以下問題:
3.1 字母大小寫問題
C語言程序嚴格區分字母的大、小寫,此規則一定給學生講清楚,讓其記住那些特例。如用科學計數法表示浮點數中的「E」,弄清該計數法的規則,其中的字母「E」可以不區分大、小寫;再如表示16進制數的符號「0x」,其中字母「x」也可不區分大、小寫等等,在教學過程中,對該類問題進行總結、歸納讓學生一次就掌握並記住。
3.2 標點符號問題
學生在錄入程序時,往往忽略標點符號。問題主要表現在:
(1)忘記錄入標點,C語言中,一條語句的結束需要用符號「;」與另一語句隔開,對初學的學生,他們通常會忽略掉這個細節問題,這需要教師在講授中明確地指出,讓學生弄清楚。另外,強調不同標點符號的作用和區別,如「;」和「,」等等。
(2)標點錄入錯誤,在錄入程序時,很多學生錄入的標點是不正確的。如分號「;」和「;」是有區別的,前者為中文下的標點符號,而後者才是程序中需要的。必須給學生強調程序中所需要的標點符號都應該是英文狀態下的。
3.3 容易混淆的符號
字母符號「o」,「O」與數字元號「0」;字母符號「l」與數字元號「1」;字母符號「z」與數字元號「2」的區別等等。
對於少數學生,教師雖然強調了很多的細節,但還是不能接受,這便通過程序的調試來讓他們明白問題的嚴重性,通過他們自己對程序的調試來糾正問題的所在,這需要教師耐心地為學生指導。如程序xx.c:
#include <stdio.h>
void main()
{
int a=10
printf("a=%d\n",a);
}
編譯時出現以下問題:xx.c(5) : error C2146: syntax error : missing ';' before identifier 'printf',給學生講解提示,讓學生通過提示明白問題所在,即該程序第5行的printf語句前缺少「;」,這是學生自己通過實踐證明了問題的所在,使之深受體會。通過程序調試的方法不僅可以為學生解決錯誤,同時也增強了學生調試程序的能力,從而提高編程的經驗和技巧。
4 明確教學目標,任務驅動學習
教師深入分析教學大綱, 在全面了解學生的數學基礎知識狀況的前提下, 根據大綱制定好教學計劃,做好每次教學任務計劃,明確教學目標,選擇適當的練習作業,督促學生不斷深入學習。
在制定計劃的過程中要針對學生的數學知識基礎, 將教材中涉及到的學生未掌握的數學知識類例題進行更換, 避免因數學的方面的問題形成教學障礙, 在課時允許的條件下也可在教學前為學生補充一定的數學方面相關知識。
設計「循環」語句教案時,可以先給學生講清楚學習循環語句的用處及優點,介紹學習重點、難點,要求掌握一些程序設計的演算法,讓他們明確該語句的重要性。如實現求等差數列s=1+2+3+…+n的和時,主要介紹使用循環語句求解,並要求學生掌握其求解方法,並按照此方法推廣,以掌握演算法思想,然後再通過作業的任務編寫壘加演算法的相關程序,如求s=1!+2!+3!+…+n!等,學生通過自己的練習不斷總結編寫循環程序的經驗,體會循環的思想,使得他們對循環語句有更深的理解和認識,從而達到較好的教學效果。
5 改進教學方法,實現教學相長
傳統教學模式的教學方式是:用大量的時間講定義、語法、概念、語句,對學生的要求是注重接受、理解、記憶,講課方式是老師講、學生聽。學生掌握的知識比較抽象、機械、靜止、片面和孤立,他們不知道如何靈活地綜合運用這些知識去解決實際問題。基礎知識固然重要,但利用基礎知識解決實際問題能力的培養是高等教育更為重要的目的。如何使當前的大學生具備扎實基礎知識的同時,又具備解決實際問題、批判性思維和創造性思維,發展合作能力與自主學習能力,是目前急待解決的問題,也是人們進行教學改革的思路。
注重問題求解方法,掌握演算法思想。如實現求等差數列s=1+2+3+…+n的和時,該數列的求解方法有多種。除了使用循環語句求解外,還可以通過公式s=(1+n)*n/2進行求,也可以使用函數的遞歸調用進行求解。通過多種方法的介紹,不僅可以鞏固學生的基礎知識,又能培養學生的創造性思維。
在教學中一定要做到培養學生學習興趣,讓學生體驗成功樂趣,改變學習方式,促進教學互動。
6 知識轉變能力培養,注重實踐課教學
計算機科學是一門經驗學科與理論學科相結合的課程,在學習時,不僅要掌握理論知識,而且實踐操作的經驗的積累也非常重要。C語言變成實踐經驗的積累是不斷從編寫程序、調試程序和運行程序結果的過程中總結得出,由此,教師在講授C語言課程時,不能忽視實踐課的教學,尤其是學生上機輔導課的教學。
往往,很多教師認為,上機輔導課就是讓學生自由練習,及時為有疑問的學生解決問題。實際上這種教學輔導方式是不合理的,應該在以下方面進行改進:
1)學生上機應有明確的練習目標,提高編程效率
在每學期的教學調查中,同學們總會提到這樣的問題:上機課不知道該干什麼;寫程序無從下手;編程很難等。這就要求我們教師在上機課程中要有目的有意識的給同學安排上機的任務。應該從以下幾點來進行上機課程:
(1)結合上課的理論知識,確定上機課要完成的目標。
(2)引入相關的程序實例,逐步分析解決該程序的思路和相關的程序代碼。讓學生了解如何下手去編寫程序。
(3)根據引入的程序實例再擴展開,讓同學們自己動手完成相關的程序代碼。
(4)評講相關的程序代碼,並引出新的程序,讓學生自己獨立的完成。
(5)課程隨時的課堂答疑。
2)激發學生的學習興趣
學生學習的最關鍵的因素是興趣,一定要注意提高學生學習的興趣,如何提高是一個很關鍵的問題。首先要充分的肯定學生,即便是一點點值得肯定的地方也要肯定。其次多評價學生做的作業,讓學生有一定的滿足感。最後多讓枯燥的程序與實際的生活聯系起來。這樣就可以大大的提高學生的學習興趣。
7 小結
以上就是在學習和教授過程中,對C語言程序設計教學課程的心得體會,希望對廣大的同仁能有一定的參考價值

C語言快速學習技巧(原創)默認分類 2010-03-14 12:09:53 閱讀46 評論0 字型大小:大中小
從最基本的流程學起,從最基本的語句學起。在學習的過程中,特別注意每個函數的作用,多想想這個函數能怎樣用,用在哪裡,能起到什麼另外的效果!要學會活用!程序,對數學,特別是邏輯的要求把比較高。寫好程序,首先對整個程序的流程有縝密的思考,要求周到,准確,先思考,不要急著寫程序!!這一點請注意!也就是說先演算法,先研究程序的結構,是用什麼來實現的,循環?分支?等等。然後再用語言來實現!語言只是編寫程序的工具。所以學語言,先學會程序化的思想。在將演算法翻譯成語言的時候,再結合實際情況,逐步求精,有目的的修改,達到最優化。我們學院的C語言,很有特色,英文版,考試也是。我想說的就是,外文版的這本書,它在引領一個不懂編程的人,逐步養成程序、流程、邏輯的思想,是非常優秀的一本書。如果能字字句句閱讀,將會很清楚領會到程序的思想。然而,書太厚,生詞太多,時間太短。我的建議是,看某一本中文版的書,一本不夠,看兩本。先盡快學會程序的思想,也就是用程序來想問題,這樣,就會編程了。然後,考試前幾周,背一背生詞、關鍵詞,就可以考試了。如果你堅持要讀外文版,可以,但要跳讀!然後,還要看你是想只是應付期末考試,還是想學好編程。應付期末考,需要注意書中的重點,也就是考點,這樣就夠了。比如說字元型變數加指針,這樣就夠了,不需要更高級的指針的知識。而你如果想真正學好程序(我不說C語言是因為我說過C語言只是編寫程序的工具之一),肯定是要打好基礎的!任何一個細節,都是不能放過的!而且,這樣的人往往會很郁悶~因為我們程序真正要求的,考試一般不會涉及到,因為比較難!(不會指針的人,永遠不要說他會C語言!)而考試的內容,恰恰是最無聊的東西,比如格式化輸出printf函數的第一個參數,太繁了,記都記不住。如果學的深的話,只需要知道有這么一個函數,有這么一個功能。而要用的時候,查書就行。可是對考試來說,顯然不行。所以要看看你是哪一種~掌握一些簡單的演算法 編程其實一大部分工作就是分析問題,找到解決問題的方法,再以相應的編程語言寫出代碼。這就要求掌握演算法,根據我們的《C程序設計》教學大綱中,只要求我們掌握一些簡單的演算法,在掌握這些基本演算法後,要完成對問題的分析就容易了。如兩個數的交換、三個數的比較、選擇法排序和冒泡法排序,這就要求我們要清楚這些演算法的內在含義,其中選擇法排序和冒泡法排序稍難,但只要明白排序的具體過程,對代碼的理解就不難了。如用選擇法對10個不同整數排序(從小到大),選擇法排序思路:設有10個元素a[1]~a[10],將a[1]與a[2]~a[10]比較,若a[1]比a[2]~a[10]都小,則不進行交換,即無任何操作;若a[2]~a[10] 中有一個比a[1]小,則將其中最大的一個(假設為a[i])與a[1]交換,此時a[1]中存放了10個中最小的數。第二輪將a[2]與a[3]~a[10]比較,將剩下9個數中的最小者a[i]與a[2]交換,此時a[2] 中存放的10個數中第2小的數;依此類推,共進行9輪比較,a[1]到a[10]就已按從小到大的順序存放。即每一輪都找出剩下數中的最小一個,代碼如下: for(i=1;i<=9;i++) for(j=i+1;j<=10;j++) if(a[i]>a[j] {temp=a[i]; a[i]=a[j]; a[j]=temp; } 結語:當我們把握好上述幾方面後,只要同學們能克服畏難、厭學、上課能專心聽講,做好練習與上機調試,其實C語言並不難學.

❸ 錄入好的調查問卷,該如何進行數據分析

SPSS分析調查問卷數據的方法

當我們的調查問卷在把調查數據拿回來後,我們該做的工作就是用相關的統計軟體進行處理,在此,我們以spss為處理軟體,來簡要說明一下問卷的處理過程,它的過程大致可分為四個過程:定義變數﹑數據錄入﹑統計分析和結果保存.下面將從這四個方面來對問卷的處理做詳細的介紹.
Spss處理:
第一步:定義變數
大多數情況下我們需要從頭定義變數,在打開SPSS後,我們可以看到和excel相似的界面,在界面的左下方可以看到Data View, Variable View兩個標簽,只需單擊左下方的Variable View標簽就可以切換到變數定義界面開始定義新變數。在表格上方可以看到一個變數要設置如下幾項:name(變數名)、type(變數類型)、width(變數值的寬度)、decimals(小數位) 、label(變數標簽) 、Values(定義具體變數值的標簽)、Missing(定義變數缺失值)、Colomns(定義顯示列寬)、Align(定義顯示對齊方式)、Measure(定義變數類型是連續、有序分類還是無序分類).
我們知道在spss中,我們可以把一份問卷上面的每一個問題設為一個變數,這樣一份問卷有多少個問題就要有多少個變數與之對應,每一個問題的答案即為變數的取值.現在我們以問卷第一個問題為例來說明變數的設置.為了便於說明,可假設此題為:
1.請問你的年齡屬於下面哪一個年齡段( )?
A:20—29 B:30—39 C:40—49 D:50--59
那麼我們的變數設置可如下: name即變數名為1,type即類型可根據答案的類型設置,答案我們可以用1、2、3、4來代替A、B、C、D,所以我們選擇數字型的,即選擇Numeric, width寬度為4,decimals即小數位數位為0(因為答案沒有小數點),label即變數標簽為「年齡段查詢」。Values用於定義具體變數值的標簽,單擊Value框右半部的省略號,會彈出變數值標簽對話框,在第一個文本框里輸入1,第二個輸入20—29,然後單擊添加即可.同樣道理我們可做如下設置,即1=20—29、2=30—39、3=40—49、4=50--59;Missing,用於定義變數缺失值, 單擊missing框右側的省略號,會彈出缺失值對話框, 界面上有一列三個單選鈕,默認值為最上方的「無缺失值」;第二項為「不連續缺失值」,最多可以定義3個值;最後一項為「缺失值范圍加可選的一個缺失值」,在此我們不設置預設值,所以選中第一項如圖;Colomns,定義顯示列寬,可自己根據實際情況設置;Align,定義顯示對齊方式,有居左、居右、居中三種方式;Measure,定義變數類型是連續、有序分類還是無序分類。
以上為問卷中常見的單項選擇題型的變數設置,下面將對一些特殊情況的變數設置也作一下說明.
1.開放式題型的設置:諸如你所在的省份是_____這樣的填空題即為開放題,設置這些變數的時候只需要將Value 、Missing兩項不設置即可.
2.多選題的變數設置:這類題型的設置有兩種方法即多重二分法和多重分類法,在這里我們只對多重二分法進行介紹.這種方法的基本思想是把該題每一個選項設置成一個變數,然後將每一個選項拆分為兩個選項項,即選中該項和不選中該項.現在舉例來說明在spss中的具體操作.比如如下一例:
請問您通常獲取新聞的方式有哪些( )
1 報紙 2 雜志 3 電視 4 收音機 5 網路
在spss中設置變數時可為此題設置五個變數,假如此題為問卷第三題,那麼變數名分別為3_1、3_2、3_3、3_4、3_5,然後每一個選項有兩個選項選中和不選中,只需在Value一項中為每一個變數設置成1=選中此項、0=不選中此項即可.
使用該窗口,我們可以把一個問卷中的所有問題作為變數在這個窗口中一次定義。
到此,我們的定義變數的工作就基本上可以結束了.下面我們要作就是數據的錄入了.首先,我們要回到數據錄入窗口,這很簡單,只要我們點擊軟體左下方的Data View標簽就可以了.
第二步:數據錄入
Spss數據錄入有很多方式,大致有一下幾種:
1.讀取SPSS格式的數據
2.讀取Excel等格式的數據
3.讀取文本數據(Fixed和Delimiter)
4.讀取資料庫格式數據(分如下兩步)
(1)配置ODBC (2)在SPSS中通過ODBC和資料庫進行
但是對於問卷的數據錄入其實很簡單,只要在spss的數據錄入窗口中直接輸入就可以了,只是在這里有幾點注意的事項需要說明一下.
1. 在數據錄入窗口,我們可以看到有一個表格,這個表格中的每一行代表一份問卷,我們也稱為一個個案.
2. 在數據錄入窗口中,我們可以看到表格上方出現了1、2、3、4、5…….的標簽名,這其實是我們在第一步定義變數中,我們為問卷的每一個問題取的變數名,即1代表第一題,2代表第二題.以次類推.我們只需要在變數名下面輸入對應問題的答案即可完成問卷的數據錄入.比如上述年齡段查詢的例題,如果問卷上勾選了A答案,我們在1下面輸入1就行了(不要忘記我們通常是用1、2、3、4來代替A、B、C、D的).
3.我們知道一行代表一份問卷,所以有幾分問卷,就要有幾行的數據.
在數據錄入完成後,我們要做的就是我們的關鍵部分,即問卷的統計分析了,因為這時我們已經把問卷中的數據錄入我們的軟體中了.
第三步:統計分析
有了數據,可以利用SPSS的各種分析方法進行分析,但選擇何種統計分析方法,即調用哪個統計分析過程,是得到正確分析結果的關鍵。這要根據我們的問卷調查的目的和我們想要什麼樣的結果來選擇.SPSS有數值分析和作圖分析兩類方法.
1.作圖分析:
在SPSS中,除了生存分析所用的生存曲線圖被整合到Analyze菜單中外,其他的統計繪圖功能均放置在graph菜單中。該菜單具體分為以下幾部分::
(1)Gallery:相當於一個自學向導,將統計繪圖功能做了簡單的介紹,初學者可以通過它對SPSS的繪圖能力有一個大致的了解。
(2)Interactive:互動式統計圖。
(3)Map:統計地圖。
(4)下方的其他菜單項是我們最為常用的普通統計圖,具體來說有:
條圖
散點圖
線圖
直方圖
餅圖
面積圖
箱式圖
正態Q-Q圖
正態P-P圖
質量控制圖
Pareto圖
自回歸曲線圖
高低圖
交互相關圖
序列圖
頻譜圖
誤差線圖
作圖分析簡單易懂,一目瞭然,我們可根據需要來選擇我們需要作的圖形,一般來講,我們較常用的有條圖,直方圖,正態圖,散點圖,餅圖等等,具體操作很簡單,大家可參閱相關書籍,作圖分析更多情況下是和數值分析相結合來對試卷進行分析的,這樣的效果更好.
2.數值分析:
SPSS 數值統計分析過程均在Analyze菜單中,包括:
(1)、Reports和Descriptive Statistics:又稱為基本統計分析.基本統計分析是進行其他更深入的統計分析的前提,通過基本統計分析,用戶可以對分析數據的總體特徵有比較准確的把握,從而選擇更為深入的分析方法對分析對象進行研究。Reports和Descriptive Statistics命令項中包括的功能是對單變數的描述統計分析。
Descriptive Statistics包括的統計功能有:
Frequencies(頻數分析):作用:了解變數的取值分布情況
Descriptives(描述統計量分析):功能:了解數據的基本統計特徵和對指定的變數值進行標准化處理
Explore(探索分析):功能:考察數據的奇異性和分布特徵
Crosstabs(交叉分析):功能:分析事物(變數)之間的相互影響和關系
Reports包括的統計功能有:
OLAP Cubes(OLAP報告摘要表):功能: 以分組變數為基礎,計算各組的總計、均值和其他統計量。而輸出的報告摘要則是指每個組中所包含的各種變數的統計信息。
Case Summaries(觀測量列表):察看或列印所需要的變數值
Report Summaries in Row:行形式輸出報告
Report Summaries in Columns:列形式輸出報告
(2)、Compare Means(均值比較與檢驗):能否用樣本均值估計總體均值?兩個變數均值接近的樣本是否來自均值相同的總體?換句話說,兩組樣本某變數均值不同,其差異是否具有統計意義?能否說明總體差異?這是各種研究工作中經常提出的問題。這就要進行均值比較。
以下是進行均值比較及檢驗的過程:
MEANS過程:不同水平下(不同組)的描述統計量,如男女的平均工資,各工種的平均工資。目的在於比較。術語:水平數(指分類變數的值數,如sex變數有2個值,稱為有兩個水平)、單元Cell(指因變數按分類變數值所分的組)、水平組合
T test 過程:對樣本進行T檢驗的過程
單一樣本的T檢驗:檢驗單個變數的均值是否與給定的常數之間存在差異。
獨立樣本的T檢驗:檢驗兩組不相關的樣本是否來自具有相同均值的總體(均值是否相同,如男女的平均收入是否相同,是否有顯著性差異)
配對T檢驗:檢驗兩組相關的樣本是否來自具有相同均值的總體(前後比較,如訓練效果,治療效果)
one-Way ANOVA:一元(單因素)方差分析,用於檢驗幾個(三個或三個以上)獨立的組,是否來自均值相同的總體。
(3)、ANOVA Models(方差分析):方差分析是檢驗多組樣本均值間的差異是否具有統計意義的一種方法。例如:醫學界研究幾種葯物對某種疾病的療效;農業研究土壤、肥料、日照時間等因素對某種農作物產量的影響;不同飼料對牲畜體重增長的效果等,都可以使用方差分析方法去解決
(4)、Correlate(相關分析):它是研究變數間密切程度的一種常用統計方法,常用的相關分析有以下幾種:
1、線性相關分析:研究兩個變數間線性關系的程度。用相關系數r來描述。
2、偏相關分析:它描述的是當控制了一個或幾個另外的變數的影響條件下兩個變數間的相關性,如控制年齡和工作經驗的影響,估計工資收入與受教育水平之間的相關關系
3、相似性測度:兩個或若干個變數、兩個或兩組觀測量之間的關系有時也可以用相似性或不相似性來描述。相似性測度用大值表示很相似,而不相似性用距離或不相似性來描述,大值表示相差甚遠
(5)、Regression(回歸分析):功能:尋求有關聯(相關)的變數之間的關系在回歸過程中包括:Liner:線性回歸;Curve Estimation:曲線估計;Binary Logistic:二分變數邏輯回歸;Multinomial Logistic:多分變數邏輯回歸;Ordinal 序回歸;Probit:概率單位回歸;Nonlinear:非線性回歸;Weight Estimation:加權估計;2-Stage Least squares:二段最小平方法;Optimal Scaling最優編碼回歸;其中最常用的為前面三個.
(6)、Nonparametric Tests(非參數檢驗):是指在總體不服從正態分布且分布情況不明時,用來檢驗數據資料是否來自同一個總體假設的一類檢驗方法。由於這些方法一般不涉及總體參數故得名。
非參數檢驗的過程有以下幾個:
1.Chi-Square test 卡方檢驗
2.Binomial test 二項分布檢驗
3.Runs test 遊程檢驗
4.1-Sample Kolmogorov-Smirnov test 一個樣本柯爾莫哥洛夫-斯米諾夫檢驗
5.2 independent Samples Test 兩個獨立樣本檢驗
6.K independent Samples Test K個獨立樣本檢驗
7.2 related Samples Test 兩個相關樣本檢驗
8.K related Samples Test 兩個相關樣本檢驗
(7)、Data Rection(因子分析)
(8)、Classify(聚類與判別)等等
以上就是數值統計分析Analyze菜單下幾項用於分析的數值統計分析方法的簡介,在我們的變數定義以及數據錄入完成後,我們就可以根據我們的需要在以上幾種分析方法中選擇若干種對我們的問卷數據進行統計分析,來得到我們想要的結果.
第四步:結果保存
我們的spss軟體會把我們統計分析的多有結果保存在一個窗口中即結果輸出窗口(output),由於spss軟體支持復制和粘貼功能,這樣我們就可以把我們想要的結果復制﹑粘貼到我們的報告中,當然我們也可以在菜單中執行file->save來保存我們的結果,一般情況下,我們建議保存我們的數據,結果可不保存.因為只要有了數據,如果我們想要結果的,我們可以隨時利用數據得到結果.
總結:
以上便是spss處理問卷的四個步驟,四個步驟結束後,我們需要spss軟體做的工作基本上也就結束了,接下來的任務就是寫我們的統計報告了.值得一提的是.spss是一款在社會統計學應用非常廣泛的統計類軟體,學好它將對我們以後的工作學習產生很大的意義和作用.
SPSS的問卷分析中一份問卷是一個案,首先要根據問卷問題的不同定義變數。定義變數值得注意的兩點:一區分變數的度量,Measure的值,其中Scale是定量、Ordinal是定序、Nominal是指定類;二 注意定義不同的數據類型Type
各色各樣的問卷題目的類型大致可以分為單選、多選、排序、開放題目四種類型,他們的變數的定義和處理的方法各有不同,我們詳細舉例介紹如下:
1 單選題:答案只能有一個選項
例一 當前貴組織機構是否設有面向組織的職業生涯規劃系統?
A有 B 正在開創 C沒有 D曾經有過但已中斷
編碼:只定義一個變數,Value值1、2、3、4分別代表A、B、C、D 四個選項。
錄入:錄入選項對應值,如選C則錄入3
2 多選題:答案可以有多個選項,其中又有項數不定多選和項數定多選。
(1)方法一(二分法):
例二 貴處的職業生涯規劃系統工作涵蓋哪些組群?畫鉤時請把所有提示
考慮在內。
A月薪員工 B日薪員工 C鍾點工
編碼:把每一個相應選項定義為一個變數,每一個變數Value值均如下定義:「0」 未選,「1」 選。
錄入:被調查者選了的選項錄入1、沒選錄入0,如選擇被調查者選AC,則三個變數分別錄入為1、0、1。
(2)方法二:
例三 你認為開展保持黨員先進性教育活動的最重要的目標是那三項:
1( ) 2 ( ) 3( )
A、提高黨員素質 B、加強基層組織 C、堅持發揚民主
D、激發創業熱情 E、服務人民群眾 F、促進各項工作
編碼:定義三個變數分別代表題目中的1、2、3三個括弧,三個變數Value值均同樣的以對應的選項定義,即:「1」 A,「2」B,「3」 C,「4」 D,「5」 E,「6」 F
錄入:錄入的數值1、2、3、4、5、6分別代表選項ABCDEF,相應錄入到每個括弧對應的變數下。如被調查者三個括弧分別選ACF,則在三個變數下分別錄入1、3、6。
註:能用方法二編碼的多選題也能用方法編碼,但是項數不定的多選只能用二分法,即方法一是多選題一般處理方法。
3 排序題: 對選項重要性進行排序
例四 您購買商品時在 ①品牌 ②流行 ③質量 ④實用 ⑤價格 中對它們的關注程度先後順序是(請填代號重新排列)
第一位 第二位 第三位 第四位 第五位
編碼:定義五個變數,分別可以代表第一位 第五位,每個變數的Value都做如下定義:「1」 品牌,「2」 流行,「3」 質量,「4」 實用,「5」 價格
錄入:錄入的數字1、2、3、4、5分別代表五個選項,如被調查者把質量排在第一位則在代表第一位的變數下輸入「3「。
4 選擇排序題:
例五 把例三中的問題改為「你認為開展保持黨員先進性教育活動的最重
的目標是那三項,並按重要性從高到低排序」,選項不變。
編碼:以ABCDEF6個選項分別對應定義6個變數,每個變數的Value都做同樣的如下定義:「1」 未選,「2」 排第一,「3」 排第二,「4」 排第三。
錄入:以變數的Value值錄入。比如三個括弧里分別選的是 ECF,則該題的6個變數的值應該分別錄入:1(代表A選項未選)、1、 3(代表C選項排在第二)、1、2、4。
註:該方法是對多選題和排序題的方法結合的一種方法,對一般排序題(例四)也同樣適用,只是兩者用的分析方法不同(例四用頻數分析、例五用描述分析),輸出結果從不同的側面反映問題的重要性(前一種方法從位次從變數的頻數看排序,後一種方法從變數出發看排序)。
5 開放性數值題和量表題:這類題目要求被調查者自己填入數值,或者打分
例六 你的年齡(實歲):______
編碼:一個變數,不定義Value值
錄入:即錄入被調查者實際填入的數值。
6開放性文字題:
如果可能的話可以按照含義相似的答案進行編碼,轉換成為封閉式選項進行分析。如果答案內容較為豐富、不容易歸類的,應對這類問題直接做定性分析。
三 問卷一般性分析
下面具體介紹SPSS中問卷的一般處理方法,操作以版本spss13.0為例,以下提到的菜單項均在Analyze主菜單下
1頻數分析:Frequencies過程可以做單變數的頻數分布表;顯示數據文件中由用戶指定的變數的特定值發生的頻數;獲得某些描述統計量和描述數值范圍的統計量。
適用范圍:單選題(例一),排序題(例四),多選題的方法二(例三)
頻數分析也是問卷分析中最常用的方法。
實現: Descriptive statistics……Frequencies
2 描述分析:Descriptives:過程可以計算單變數的描述統計量。這些述統計量有平均值、算術和、標准差,最大值、最小值、方差、范圍和平均數標准誤等。
適用范圍:選擇並排序題(例五)、開放性數值題(例六)。
實現: Descriptive statistics……Descriptives,需要的統計量點擊按鈕Statistics…中選擇
3 多重反應下的頻次分析:
適用范圍:多選題的二分法(例二)
實現:第一步在Multiple Response……Define Sets把一道多選問題中定義了的所有變數集合在一起,給新的集合變數取名,在Dichotomies Counted value中輸入1。第二步在Multiple Response……Frequencies中做頻數分析。
4 交叉頻數分析:解決對多變數的各水平組合的頻數分析的問題
適用范圍:,適用於由兩個或兩個以上變數進行交叉分類形成的列聯表,對變數之間的關聯性進行分析。比如要知道不同工作性質的人上班使用交通工具的情況,可以通過交叉分析得到一個二維頻數表則一目瞭然。
實現:第一步根據分析的目的來確定交叉分析的選項,確定控制變數和解釋變數(如上例中不同工作性質的人是控制變數,使用交通工具是解釋變數)。第二步選擇Descriptive statistics……Crosstabs

四 簡單圖形描述介紹
在做上述頻數分析、描述分析等分析時就可以直接做出圖形,簡單方便,同時也可以另外作圖。SPSS的作圖功能在菜單Graphs下,功能強大,圖形清晰優美。現在把常用圖簡單介紹如下
1餅圖:又稱圓圖,是以圓的面積代表被研究對象的總體,按各構成部分佔總體比重的大小把圓面積分割成若干扇形,用以表示現象的部分對總體的比例關系的統計圖。頻數分析的結果宜用餅圖表示。
2曲線圖:是用線段的升降來說明數據變動情況的一種統計圖。它主要表示現象在時間上的變化趨勢、現象的分配情況和2個現象的依存關系等。
3面積圖:用線段下的陰影面積來強調現象變化的統計圖。
4條形圖:利用相同寬度條形的長短或高低表現統計數據大小及變化的統計圖。

五 問卷深入分析
除了以上簡單的分析,spss強大的功能還可以對問卷進行深入分析,比如常用的有聚類分析、交叉分析、因子分析、均值比分析(參數檢驗)、相關分析、回歸分析等。因為涉及到很專業的統計知識,下面只將個人覺得比較有用的方法的適用范圍和分析目的簡單做介紹:
1聚類分析
樣本聚類,可以將被調查者分類,並按照這些屬性計算各類的比例,以便明確研究所關心的群體。比如按消費特徵對被調查者的進行聚類。
2 相關分析
相關分析是針對兩變數或者多變數之間是否存在相關關系的分析方法,要根據變數不同特徵選擇不同的相關性的度量方式。問卷分析中的多數用的變數都屬於分類變數,要採用斯皮爾曼相關系數。
其中可以用卡方檢驗,其是對兩變數之間是否具有顯著性影響的分析方法
3均值的比較與檢驗
(1)Means過程:對指定變數綜合描述分析,分組計算計算均值再比較。比如可以按性別變數分為男和女來研究二者收入是否存在差距。
(2)T 檢驗:
獨立樣本t檢驗用於不相關的樣本是否開來自具有相同均值的總體的檢驗。比如,研究購買該產品的顧客和不購買的顧客的收入是否有明顯差異。
如果樣本不獨立則要用配對t檢驗。比如研究參加職業培訓後 工作效率是否提高。
4 回歸分析
問卷分析中的回歸分析常採用的是用離散回歸模型,一般是邏輯斯蒂模型,解釋一個變數對另一變數的影響具體有多大。比如,研究對某商品的消費受收入的影響程度。

❹ 如何理解面向對象編程

[引] 1.基本概念:
1.1 類與對象的初探
要我說,無論是面向過程的語言也好,面向對象的語言也罷,我首先要給他講的都是類和對象!--------「這個世界是由什麼組成的?」這個問題如果 讓不同的人來回答會得到不同的答案。如果是一個化學家,他也許會告訴你「還用問嘛?這個世界是由分子、原子、離子等等的化學物質組成的」。如果是一個畫家 呢?他也許會告訴你,「這個世界是由不同的顏色所組成的」。……呵呵,眾說紛紜吧!但如果讓一個分類學家來考慮問題就有趣的多了,他會告訴你「這個世界是 由不同類型的物與事所構成的」好!作為面向對象的程序員來說,我們要站在分類學家的角度去考慮問題!是的,這個世界是由動物、植物等組成的。動物又分為單 細胞動物、多細胞動物、哺乳動物等等,哺乳動物又分為人、大象、老虎……就這樣的分下去了!
現在,站在抽象的角度,我們給「類」下個定義吧!我的意思是,站在抽象的角度,你回答我「什麼是人類?」首先讓我們來看看人類所具有的一些特徵,這個 特徵包括屬性(一些參數,數值)以及方法(一些行為,他能幹什麼!)。每個人都有身高、體重、年齡、血型等等一些屬性。人會勞動、人都會直立行走、人都會 用自己的頭腦去創造工具等等這些方法!人之所以能區別於其它類型的動物,是因為每個人都具有人這個群體的屬性與方法。「人類」只是一個抽象的概念,它僅僅 是一個概念,它是不存在的實體!但是所有具備「人類」這個群體的屬性與方法的對象都叫人!這個對象「人」是實際存在的實體!每個人都是人這個群體的一個對 象。老虎為什麼不是人?因為它不具備人這個群體的屬性與方法,老虎不會直立行走,不會使用工具等等!所以說老虎不是人!
由此可見-------類描述了一組有相同特性(屬性)和相同行為(方法)的對象。在程序中,類實際上就是數據類型!例如:整數,小數等等。整數也有 一組特性和行為。面向過程的語言與面相對象的語言的區別就在於,面向過程的語言不允許程序員自己定義數據類型,而只能使用程序中內置的數據類型!而為了模 擬真實世界,為了更好的解決問題,往往我們需要創建解決問題所必需的數據類型!面向對象編程為我們提供了解決方案。

1.2 內置數據類型與函數:
計算機程序在存儲數據時必須跟蹤3個基本屬性為:
1. 信息存儲在何處;
2. 存儲的值是多少;
3. 存儲的信息是什麼類型的;
讓我們來看看編程語言的內置數據類型都有哪些!(呵呵,這個不大好說,因為每門語言都有自己獨特的數據類型,但這畢竟是少數,比如在java中有 byte類型的數據,而在C++中就沒有,希望你能舉一反三!)比如整數」int 」,浮點類型的數據」float」!字元串」String」,以及數組還有結構體等等。然而在寫程序的時候,根據需要我們會創建一個類型的變數或常量,例 如:由於我們需要創建一個整形的變數i為5,我們就可以這樣做,int i = 5;而根據需要我很有可能改變i的值,也就是從新給它賦值,比如讓它等與6,就可以在所需的地方改成i = 6;由此我們知道,在「值」上可以發生變化的量就叫變數。不會發生變化的量就叫做常量了,在C++中用count關鍵字來聲明,而在JAVA中則使用 final關鍵字來聲明。由於不同語言的聲明格式不一樣,這里就不做一一介紹了,詳細的內容清查閱相關書籍!
在這里我們主要討論一下函數,我們可以把函數想像成一個「實現某種特定功能的黑匣子」-------這個功能是由你來設定的,舉個例子來說:現在我問 你「2+3等於多少」?我相信你能很快的回答我等於5。讓我們來分析分析這句話包含什麼信息!首先我要把你的大腦想像成是一個黑匣子,我並不知道也沒有必 要知道你的大腦是如何工作的(也就是怎麼運算的),我關心的只是我傳給你的是什麼信息?你對信息做了哪些處理? 以及你返回給我的是什麼信息?需要提醒你一下的是每個方法都會返回一個信息給調用者的,除了構造函數外(稍候我會作詳細的介紹)。我現在需要把自己當作是 一名程序員,而你呢?當然就是計算機了!計算即可沒有人那麼聰明,它只會按事先約好的特定的格式運行,我想讓它具有如上所述的功能,我就要先定義這個黑匣 子!首先我要告訴這個黑匣子會有兩個整數值給你(這就是所謂的參數,是程序員需要給黑匣子的信息),然後就要定義這個黑匣子內部實現這兩個整數相加的運算 (這就是黑匣子對數據所做的加工,根據需要,你可以做任何的加工。)。最後再標注它返回給我一個同樣是整型的數值(這是黑匣子返回給程序員的信息)。一個 函數就這樣定義完了,讓我們來看看書寫格式:

int addnum(int x,int y){
return x+y;
}

具體的含義是這樣的:

int /*返回值類型*/ addnum /*方法(黑匣子)名稱*/ (int x,int y/*傳入的參數*/){
return x+y; /*內部是想方法(實現相加運算,)並用return返回給調用者結果*/
}

首先請注意上明的「return」語句!return 關鍵字的含義是向調用者返回緊跟在它後面的信息!就像上面一樣,因為我問你,你才會回答我,如果我不問你,你就不用回答我的!在計算機中也一樣,定義好這 個函數在哪裡調用呢?我只能告訴你,哪裡需要就在哪裡調用!當然,你可以根據需要去更改參數、返回值以及內部實現,具體到如何定義如何調用你只好去參考相 關的資料了!在這里我只是給你一個思想!
有時你會遇到這樣的問題,我讓你記住,我的年齡是20歲!從字面上理解,你並沒有給我返回信息!然而事實上,你確實給我返回了信息,信息的內容是「無信息,也就是無返回值類型void」。具體的程序如下:

int myAge = 0;
int a=20;
void remAge(int a){
myAge=a;
}

具體的函數說明如下:

int myAge =0; //定義並初始化我的年齡為0;
int a=20; /*定義變數a等於20*/
void /*返回值類型為無返回值類型*/ remAge /*函數名稱*/(int a /*傳入的參數*/){
myAge=a; //內部實現方法,注意,沒有return返回!!!
}

關於函數的話題還有很多很多,這里就不一一介紹了,我的目的是讓你知道函數是怎麼一會事兒!為下面的討論作鋪墊!

1.3 指針以及引用:
指針及引用是在C++中有的,JAVA中沒有。JAVA中取消了對內存的操作,隨之而來的事也取消了操作符重載的操作。不過在稍候我還是會介紹一些操 作符重載的功能等。引用主要還是用在函數參數的傳遞上。所以我在這里就不做過多的介紹了。他們很實用,有興趣的同學可以參閱C++相關書籍。
1.4 運算符及控制語句:
還是自己看看相關書籍吧,這里就不再熬述了!

2.深入探討面向對象:
2.1「類型」的內部細節:
有了上面的知識,我們現在就可以深入的挖掘類的內部實現了。所有的知識點我都會圍繞著類與對象展開,在此之前,我希望你能夠確信對以上所介紹的基本內容已完全掌握了!
是的,面向對象的編程語言最大的特色就是可以編寫自己所需的數據類型,以更好的解決問題。我想我必須要幫你搞清楚「類,對象,屬性,方法它們之間的關 系」!就像我前面所說的,人這個「類」是什麼也做不了的,因為「人類」只是一個抽象的概念,它不是實實在在的「東西」,而這個「東西」就是所謂的對象。只 有人這個「對象」才能去工作。而類呢?類是對象的描述!對象從類中產生出來!此時,對象具有類所描述的所有的屬性以及方法。-------一定要理解這句 話!!!
也許你已經有些不知所措了,沒關系!好好的回味一下,我再舉個例子!例如電視機,電視機都有工作原理圖,那麼什麼叫電視機呢?只要它能夠實現工作原理圖的 所有功能的物體,我們都叫它電視機。你想想是不是這么一回事兒?可是,電視機原理圖是不能工作的,也就是這個原理圖不能收看節目,只有電視機這個「實體 ——即所謂的對象」才能收看節目,也就是說,從類生成出對象之後才算得上是真正的有意義!才能開始工作。此時,電視機擁有電視原理圖所描述的所有的屬性及 方法!明白了吧,呵呵!
我先前介紹過,類是屬性與方法的集合。而這些屬性與方法可以被聲明為私有的(private),公共的(public)或是受保護(protected)的,他們描述了對類成員的訪問控制。下面我分別做一下介紹:
1. 公共的(public):把變數聲明為公共類型的之後,那麼就可以通過對象來直接訪問,一切都是暴露無遺的!也就是說,你的信用卡密碼別人也能夠直接得到。
2. 私有的(private):如果把變數聲明為私有的情況就好多了,想要得到我的信用卡密碼,對象必須要調用專用的方法才能夠得到。
3. 受保護的(protected):介紹繼承時再討論。
4. 默認控制訪問符(friendly)://JAVA中有而C++中沒有。
為了實現數據的封裝,提高數據的安全性,我們一般會把類的屬性聲明為私有的,而把類的方法聲明為公共的。這樣,對象能夠直接調用類中定義的所有方法,當對 象想要修改或得到自己的屬性的時候就必須要調用以定義好的專用的方法才能夠實現。你想想,你會把你的信用卡密碼公布出來嘛?呵呵!所以,我們提倡的是: 「對象調方法,方法改屬性」;
2.2通過實例看內存分配:
說了這么多,讓我們來看一個實例吧!比如:現在我們要編寫某家公司員工管理系統,你認為最合適的數據類型是什麼?我認為是員工個人!但是在面向過程的 語言中,這樣做是不允許的,因為它只能使用語言中的內部數據類型!而員工不在這個內部數據類型之內!也許有人會說可以用C語言中的struct,好注意! 畢竟它是類的基礎!如果你以前是一名面C或B的程序員,請你忘掉這些,讓我們一起看看如何用類來實現這一切吧!
某家公司的員工是人類的一個特殊群體,它除了具備人類的所有特性與方法外,它還有額外的特性與方法,比如她有她的工資、信用卡密碼、作息時間等等,這 些特性以及工作內容,工作量等等這些方法。而在計算機中我們該如何定義這個類呢?下面我將寫出它的格式,讓你看看在計算機中它是張什麼樣子的!

/*在此我需要再次聲明的是,我用的是JAVA格式,在語法格式上它與C++大不相同!許多細節以及內部操作都有諸多區別,而在思想上確實大同小異的*/
//employee.java
public class employee{
private String name; //員工姓名
private int age; //員工年齡
private char sex; //員工性別
private float emolument; //員工薪水
private boolean lunch; //員工午餐
//……等等
public void heater(){ //這個方法是用來加工員工的午餐
lunch = true;
}
public void setName(String a){ //這個方法是修改員工的姓名
name= a;
}
public String getName(){ //這個方法是得到員工的姓名
return name;
}
//……等等
}

這樣我們就定義完了我們所需要的數據類型。現在,讓我們來看看它能夠干什麼以及怎麼工作!
我想要做的是,工作室里有一個光桿司令叫「jingwei」,我修改它的名字後對對它進行輸出,看看我是怎麼做的吧!
注意:請仔細觀察對象是如何調用方法的,它使用了「.」操作符!事實上是這樣的,對象調用公共的屬性或方法時就會使用「.」操作符。
然而在C++中,如果定義一個同類型的指針,該指針調用此對象的方法時,就會使用「->」操作符。更詳細的內容清參閱相關書籍了!

//workstation.java
import java.awt.Graphics;
import java.applet.Applet;
public class workstation extends Applet{
private employee jingwei ; //對象的聲明,此時並不分配內存!
public void init(){
jingwei = new employee(); /*此時創建對象會調用構造函數,稍候介紹*/
jingwei.setName(「jw」); //設置我的名字
}
public void paint(Graphics g){
g.drawString("my age is "+jingwei.getName(),10,10);//顯示我的年齡
}
}

輸出結果是:

my name is jw

這串字元串是在輸出窗口的x坐標軸為10 px , y坐標軸為10 px的位置。
我現在要做的是,把上面的程序做個大解剖,讓你能夠看清楚它到底是怎麼一回事兒!(我可不時帶你去看裡面的匯編,呵呵,那個我也不會:)

首先還是來看看我們自定義的數據類型employee,在應用的時候它和int類型的數據沒什麼兩樣,一樣的需要創建變數(對象),只不過前者是咱自 己定義的,而後這是它內置的。Employee這個類中有許多屬性,也有許多方法。而此時,我們不能直接用我們所創建出來的對象調用它的屬性進行修改。因 為它是private受保護類型的!我要想修改我的姓名我就要用對象調用setName()這個方法,而我想得到我的姓名就要調用getName()這個 方法。我們完全是按照航線來行走的,這個航線就是「對象調方法,方法改屬性」
好的,我真的相信你已經明白了這是怎麼一回事兒了!呵呵!仰起航帆,繼續前行!
現在讓我們一起來看看workstation這個類。這是個主類,和C++中的main()函數的味道差不多。其中,在JAVA中,一個文件只允許有而且必須有一個主類,這個主類用public來聲明!他就跟C++中必須要有一個main()函數是一樣的。
讓我們來看看這個類中的第一條語句!private employee jingwei ;這條語句的作用是聲明一個employee的對象jingwei(在C++中就不用聲明了)。我想要和你說的是「聲明」與「定義」之間的區別。聲明只是 告訴計算機將要有這樣的一個變數(對象),在內存中它並不為這個變數(對象)分配內存!而只有在定義的時候才會給這個變數(對象)分配內存。(需要說明一 下的是init()方法是完成初始化操作的,在此處定義對象,為對象分配內存。start()方法用來啟動瀏覽器的主線程,paint()方法來顯示 Apple的界面。這些是Applet程序所需的,至於Application程序就不需要了,當然了,C++中也不需要他們。關於他們的詳細內容清參閱 相關書籍)
緊接著就開始定一個對象了,對jingwei這個對象進行操作才會有實際的意義。千萬不要有這種想法:「試圖對類進行操作!」就像前面我說的,電視機 原理不能看電視一樣!這是毫無意義的!看這條語句jingwei = new employee();它的意思就是定義一個employee類型的對象jingwei。此時,我想告訴你的是:「jingwei這個對想擁有了些什 么」。它擁有了類所描述的所有的屬性及方法。下面我一一給你列出來:

/*所有的employee對象都擁有這些屬性。每創建一個對象就會從新分配一塊內存來存放相應對象的這些屬性。我的意思是每個對象都有自己「獨特」的一份*/
private String name; //員工姓名
private int age; //員工年齡
private char sex; //員工性別
private float emolument; //員工薪水
private boolean lunch; //員工午餐
/*所有的employee對象都擁有這些方法。但在內存中只有一份*/
public void heater(){ //這個方法是用來加工員工的午餐
lunch = true;
}
public void setName(String a){ //這個方法是修改員工的姓名
name= a;
}
public String getName(){ //這個方法是得到員工的姓名
return name;
}
/*但是,實際上在創建jingwei這個對象時計算機只給這個對象的所有的屬性分配了內存,而並沒有給方法分配內存。方法只有一個,是屬於所有的對象的,所以無論創建了多少個對象,計算機只會為一個方法分配一塊內存。*/
我想我還是舉個例子吧,不然你非暈倒不可。呵呵!
看我這條語句「private boolean lunch;」公司不管午餐,每個員工都需要帶飯。我們現在這樣想,公司的空間是所有的內存容量,你的辦公桌就是計算機中的內存中的一部分(每個員工都有 一份,是在創建對象時分配的)。你把午飯帶到了公司,放在了你的辦公桌上。「午飯」占據了你的辦公桌的一角(佔了你自己「對象」的一塊內存容量)。這份午 飯只屬於你自己,同樣別人的也只屬於她自己!所以每個員工(對象)都需要一快空間(內存)來存放自己的午餐(屬性)。在計算機中也是這樣的,每創建一個對 象,就會在內存中從新分配一塊內存來放「午餐——lunch」這個屬性(對象所擁有的所有的屬性)。
計算機只會為對象的屬性分配內存。因為每個對象的都不一樣!就像你往公司帶的午飯和我往公司帶的午飯不一樣是一個道理!但方法就不同了。早晨帶的飯中 午就涼了,你需要用微波爐來加熱。微波爐可不用你帶,公司就有(只佔公司的一塊空間),它放在了午餐桌上。你想想,微波爐屬於誰的?它屬於所有員工的!因 為每個員工都可以用它。而不必每個員工都帶一份。由此可見,每個員工(對象)都有一份午飯(屬性),但所有的員工(對象)只一個微波爐(方法)。所有的員 工(對象)都可以通過這個微波爐(方法)來改變自己午餐(屬性)的冷熱狀態。殊途同歸!在計算機中也就是這樣,方法只有一份,供所有的對象使用!而屬性是 每個對象一份,因為每個對象的都不一樣。別和我說你還不明白,不然我會撞牆的,呵呵:)

2.3深入探討函數:

2.3.1構造函數、默認構造函數、 預設構造函數

對於上面的實例,它已經能完成絕大部分工作了,但它還是不完善的,還有許許多多的細節等到我們去完善!也許有的同學已經注意到了,當我創建完 「jingwei」這個對象時,這個對象的所有的屬性都是空的,也就是說:這個對象的姓名是未定的、年齡是未定的、性別是未定的、薪水是未定的、午餐也是 未定的。而我們想把這些屬性都添加上去,就還要用對象調用相應的方法,去一個個修改!天啊,這簡直是太麻煩了!有沒有什麼好方法能夠在我們創建對象的同時 就完成了對屬性賦值的操作呢?哦不,應該說是對屬性的初始化呢?當然沒問題了,這就需要所謂的構造函數!
構造函數是類中最特殊的函數,它與析構函數的功能正好相反!
從特徵上來說:1.它是編程語言中唯一沒有返回值類型的函數。
2.它的名稱與類的名稱必須要完全相同。
3.它必須被聲明為公共(public)的類型
4,可以對構造函數進行重載。
5.它在創建對象是自動被調用。
從功能上來說:1.它是對類中的屬性進行初始化。
其實,對於上面的程序來說我們沒有自己定義構造函數。但是,在這種情況下,系統會自動為我們定義一個「默認構造函數」。他會把數值變數自動賦值為0, 把布爾行變數賦值為false等等(但在C++中,默認構造函數不初始化其成員)。如果程序員定義了構造函數,那麼系統就不會再為你的程序添加一個缺默認 造函數了。(在這里,我們提倡的是自己定義構造函數,而不是用系統的默認構造函數)
還是看個實例吧!這樣比較清楚一些!

//employee.java

public class employee{

private String name; //員工姓名

private int age; //員工年齡

private char sex; //員工性別

private float emolument; //員工薪水

private boolean lunch; //員工午餐

//……等等

public employee(){ //這個就是「默認」構造函數

name = 「jw」; //設置員工姓名

age = 20; //設置員工年齡

sex = 「M」; //設置員工性別

emolument = 100; //設置員工薪水

lunch = false; //設置員工午餐

}

public void heater(){ //這個方法是用來加工員工的午餐

lunch = true;

}

//……等等

};

這樣,在我們創建「jingwei」這個對象的同時,它的所有的屬性也被初始化了!顯然,這大大的提高了工作效率,但是,它還是不符合要求。想想看, 如果我們現在創建這個類型的第二個對象的時候會發生什麼事情?告訴你,除了對象的「名」(這個名稱不在是對象屬性中的名稱,而是對象本身的名稱)不一樣 外,其所有的「屬性值」都一樣!比如:現在我們創建第二個對象flashmagic,然而我會發現這個對象的所有的屬性和jingwei這個對象的所有的 屬性完全相同。而我們只能在用對象的方法去改變著寫屬性了!很顯然,這種方法不大好!我們需要一種方法在創建對象的時候為對象的屬性賦予「我們想要的 值」。
相信你也看到了,默認構造函數就顯得無能為力了。我們需要的是帶參數的構造函數,在創建對象時,我們把參數傳給構造函數,這樣就能完成了上述的功能!口說無憑,還是來看個實例吧:

//employee.java

public class employee{

private String name; //員工姓名

private int age; //員工年齡

private char sex; //員工性別

private float emolument; //員工薪水

private boolean lunch; //員工午餐

//……等等

public employee(String n,int a,char s,float e,boolean l){ //看這個構造函數

name = n; //設置員工姓名

age = a; //設置員工年齡

sex = s; //設置員工性別

emolument = e; //設置員工薪水

lunch =l; //設置員工午餐

}

public void heater(){ //這個方法是用來加工員工的午餐

lunch = true;

}

//……等等

};

這樣一來,在創建對象的同時我們就可以給他賦予我們想要的值,很顯然,這可就方便多了。哦,對了!還沒有告訴你怎麼創建呢!哈哈,往前翻幾頁你會看到這句話:
jingwei = new employee();這是創建一個對象,而我們把它改成
jingwei = new employee("jingwei",20,'M',100,false);這樣一來,所有的工作都完成了,呵呵!(在創建對象的同時賦予了我們想要的「初值」)

2.3.2重載構造函數:
我還是先把概念給你吧,讓你有個認識,隨後我們在進行論述。
在JAVA中:
1. 函數重載是一個類中聲明了多個同名的方法,但有不同的參數個數和參數類型。
2. 函數重構是指在子類中聲明與父類同名的方法,從而覆蓋了父類的方法。重構解決了子類與父類的差異問題。(在討論到繼承時我會詳細說明)
在C++中:
1. 數重載的概念一樣。
2. 重構的概念可就不一樣了,C++中功能更為龐大的虛函數。更詳細內容這里就不錯過多介紹了!
其實關於重載的概念你並不陌生,在編程中相信你也接觸過。呵呵!讓我們來舉個操作符重載的例子你就會明白了,(JAVA中不支持這個功能)我們定義三個整數變數:

int i1=2, i2=3,i3=0;
i3 = i1 + i2;

此時i3=5;加號實現了兩個數相加的運算功能。然而我們現在要定義三個字元串變數:

String str1=」jing」, str2=」wei」,str3=」」;
str3 = str1 + str2;

此時str3 = 「jingwei」;加號實現了兩個字元串相加的運算功能。同樣是加號,既可以把兩個整型的變數加在一起,也可以把兩個字元串類型的變數加在一起。同一個 操作符實現了不同的功能------這就是所謂的操作符重載(嘿嘿,我說你一定見過吧:)!不就好像是漢語中的一詞多意一樣!我需要說明一下的是,C++ 中的操作符重載可沒有這么簡單。比如,我們可以對兩個自定義類型的對象進行相加的運算,進行賦值的運算。這樣書寫簡潔明了,而且非常實用。當然,關於操作 符重載的話題太多了,有興趣再看看書吧!
我們把操作符的話題在轉到函數上來,我們一直強調的是「對象調方法」------對象其實調的是方法的「名稱」。而我們現在要對方法進想重載,也就是 定義多個相同名稱的函數,這樣計算機在調用的時候不會混淆嘛?我想應該不會的,呵呵,因為僅僅是函數名稱相同,而我們在調用函數時會把參數傳遞給他的。既 是沒有參數也是一種參數傳遞參數的信息(信息為無參數)!然而由於參數類型、參數數量、返回值類型不同我們就可以對相同名稱的函數進行區分�

閱讀全文

與為什麼提到變數就要強調數據類型相關的資料

熱點內容
命令符查詢文件夾 瀏覽:460
hacknet如何改文件名 瀏覽:947
讀取含空格文件資料庫 瀏覽:484
三列數據如何復制 瀏覽:376
台式電腦無線網卡破解無線密碼 瀏覽:700
es文件夾備份到外置u盤 瀏覽:128
linuxmessages詳解 瀏覽:282
隱藏文件里的視頻刪除了怎麼辦 瀏覽:428
電子糖果網站是多少 瀏覽:677
finder查找工具視圖 瀏覽:177
如何用美圖秀秀把一個圖片編程 瀏覽:321
同學學編程怎麼樣 瀏覽:565
wps最多導入多少文件 瀏覽:148
騰訊x5webapp 瀏覽:113
javascript函數參數數組 瀏覽:626
c怎樣將文件內容輸入數組 瀏覽:201
選股看哪些重要數據 瀏覽:371
k12轉型編程課怎麼樣 瀏覽:954
編程學的如何能找工作 瀏覽:733
91助手蘋果4刷機教程 瀏覽:734

友情鏈接