第一篇:C 實例教學(xué)(基礎(chǔ)知識-03)
在本節(jié)以前給出的程序都是由一個函數(shù)組成的,實際上,一個真正的C++程序幾乎都包含若干個由用戶自定義的函數(shù)。
在下面的幾個程序?qū)嵗?,都調(diào)用了由用戶定義的函數(shù)。
4.1 三次方程求根
按照Cardan公式,計算三次方程x3+px+q=0的一個實根的公式為:
在計算實根xr的程序中,把計算一個浮點數(shù)的立方根的程序作為一個用戶定義的函數(shù),而在主程序中兩次調(diào)用這個函數(shù)。
程序代碼如下: // program 4_1 #include
----------------------
4.2 四元排序程序
對于任意的四個整數(shù),經(jīng)過處理,令其按從大到小的順序排序。// program 4_2.cpp #include Input 4 integers: 17 25 8 41 41 25 17 8 說明: 這是一個簡單的程序。函數(shù)swap()是void類型,這表明它沒有返回值,所有用戶定義函數(shù)都必須指明返回類型,無返回值的函數(shù)必須說明為void類型。 函數(shù)swpa()有兩個整型參數(shù),在參數(shù)表中的符號'&'表明參數(shù)x和y是“引用參數(shù)”。這與上節(jié)中的float x不同,后者稱為賦值參數(shù)。引用參數(shù)和賦值參數(shù)在使用中主要有下面幾點區(qū)別: 1)在形參表中增加符號'&' 2)在調(diào)用該函數(shù)時,引用參數(shù)對應(yīng)的實參必須是指定類型的變量。如調(diào)用swap(a,b)中的實參a,b都是整型變量。而在上節(jié)中的賦值參數(shù)卻是一個表達式,表達式的念是包含了常量、變量和一般的表達式。比如在本例中,寫成swap(a+b,a-c)或swap(41,a*a+d*d)等都是錯誤的。 引用參數(shù)和引用調(diào)用是C++語言的一種重要功能,如果swap()的兩個參數(shù)說明為賦值形參,會出現(xiàn)什么情況? 本例中的排序并不是一個好的方法,實際上,關(guān)于排序有很多好的算法可用。 注意:在編程中函數(shù)的作用是太重要了,不過,函數(shù)有利于編程、用利于程序結(jié)構(gòu),卻不能提高程序的效率。相反,在函數(shù)調(diào)用時由于要保留“現(xiàn)場”以備在函數(shù)計算完成返回時繼續(xù)運行原來的程序。因此,函數(shù)的每次調(diào)用,系統(tǒng)都要額外在時間和空間上付出一些代價。為了解決這個問題,C++語言設(shè)置了內(nèi)聯(lián)函數(shù)“inline“,其具體規(guī)定是: 1)在函數(shù)定義和說明之前增加關(guān)鍵字inline: inline void swap(int &x,int &y){......} 2)調(diào)用內(nèi)聯(lián)函數(shù)與調(diào)用非內(nèi)聯(lián)函數(shù)的調(diào)用效果完全相同,不同的是,在對源程序進行編譯時,對于非內(nèi)聯(lián)函數(shù),其程序代碼只有一份,在每個調(diào)用語句處,通過轉(zhuǎn)移控制語句來運行,然后返回。 對于內(nèi)聯(lián)函數(shù)處理則不同,它是把函數(shù)體的程序代碼放到每個調(diào)用該函數(shù)的語句處。例如可以把swap()函數(shù)說明為內(nèi)聯(lián)的: inline void swap(int &x,int &y){ int temp;temp=x;x=y;y=temp;} 經(jīng)過這一改動,主函數(shù)仍不變,通過編譯生成的目標程序?qū)⑹箂wap()的函數(shù)體程序代碼在其中出現(xiàn)6次。 由此,我們可以看出,采用內(nèi)聯(lián)函數(shù)一方面在源程序的編寫中仍可因使用函數(shù)而使程序簡短清晰,另一方面在執(zhí)行中又不必付出調(diào)用過程的時間和空間代價,唯一的代價是目標程序加長了。 一般說,調(diào)用次數(shù)不多的函數(shù)或函數(shù)體規(guī)模較大的函數(shù),其調(diào)用代價相對可以忽略,不宜采內(nèi)聯(lián)函數(shù)。而函數(shù)體積短小且又頻繁被調(diào)用的函數(shù)可以說明為內(nèi)聯(lián)函數(shù)。例如對于更多個整數(shù)的排序算法,如果需要調(diào)用swap()的話,那么swap()函數(shù)應(yīng)該說明為內(nèi)聯(lián)的。 --------------------------- 4.3 ”三色冰激淋“程序 這是一個由冰激淋商提出來的問題,有28種顏色的原料,可以組合成多少種三色冰激淋。一種答案是有 19656=28*27*26種,稱為(28,3)的排列數(shù)A 3 28,它是把同樣三種顏色的不同排列數(shù)也計算進來了,另一答案是3276=19656/3!種,稱為(28,4)的組合數(shù)。其中28為元素數(shù),3為選擇數(shù)。下面的程序?qū)斎氲脑財?shù)和選擇數(shù)計算相對應(yīng)的排列數(shù)和組合數(shù)。// program 4_3.cpp #include cout<<”C(“< 程序運行結(jié)果如下: 說明:這個程序中很多地方使用了復(fù)合運算符,如*=、--、++等,它們的使用有利于使程序簡短、書寫方便,不過應(yīng)準確掌握其應(yīng)用方法。 *=是賦值符與=與乘法運算符*復(fù)合而成,它是一種雙止運算符,a*=b等價于a=a*b,也可以把它看作為a=a*b的簡化寫法。 --和++稱為減量和增量運算符,屬于單目運算符。a--等價于a=a-1,--a也等價于a=a-1,a--與--a的區(qū)別只有當(dāng)與其它運算共同組成表達式時才能顯現(xiàn)出來。例如answer*=--elements是一個”運算“與”乘賦值“組合成的表達式,其運算順序是: 首先完成--elements,即elements=elements-1 然后完成answer*=elements,即answer=answer*elements 設(shè)執(zhí)行之前answer=20,elements=10,則執(zhí)行answer*=--elements之后,首先令elements=9,然后answer=20*9=180.再來看一下value*=number--,運算順序為: 首先完成 value*=number即value=value*number, 然后完成 number--.設(shè)執(zhí)行前value=20,number=10,則執(zhí)行value*=number--后,首先value=20*10=200,然后number=10-1=9.由此可以看出--a與a--;++a與a++之間的區(qū)別了。factorial()函數(shù)也可以采用遞歸函數(shù)的方式設(shè)計,即在函數(shù)體內(nèi)又(直接或間接地)調(diào)用該函數(shù)本身,函數(shù)定義如下: long factorial(int number){ if(number<=1)return 1;else return number*factorial(number-1);} 這個程序與n!的數(shù)學(xué)定義式 1 n<=1 n!= n+(n-1)!n>1 相吻合。 遞歸程序往往使程序思路清晰,易編易讀。 C語言基礎(chǔ)知識:實例講解 這篇文章旨在讓各位對 C 有個總體的認識,有看不懂的地方請不必太在意,只要記住就可以了,繼續(xù)往下學(xué)下去就會明白的。 首先請看下面這個簡單的 C 程序,猜猜它會做些什么。猜不出來也沒關(guān)系,后面會有詳細的解說。 #include int main(void) /* 一個簡單的程序 */ { intnum; /* 聲明一個名叫num的變量 */ num = 1; /* 將 1 賦值給num */ printf(“This is a simple C program.”);/* 調(diào)用printf函數(shù) */ printf(“My favorite number is %d because it is first.”, num); return 0; } 在對這個程序進行詳細說明之前,我想先請您用編譯器把它編譯成可執(zhí)行文件,并且運行,看看運行結(jié)果和您的猜想是否一致。如果不懂如何進行編譯,請參考以下文章: 下面,我將分兩步對這個程序進行詳細的講解。第一步是概要說明,也就是對程序中每一行代碼的含義作簡單講解,以幫助您對這個程序有一個大致的理解。第二步是詳細說明,也就是程序中的每一行代碼進行詳細的講解,以加深您的理解。 一、概要說明 #include 把另外一個文件包含進來 這行代碼命令編譯器把頭文件(.h 文件)stdio.h中的內(nèi)容包含到我們的 程序中。stdio.h是C語言的標準頭文件之一,提供對鍵盤輸入和顯示輸出等的 支持。要使用printf函數(shù),就應(yīng)該包含這個頭文件。順帶一提,stdio代表 standard input/output,也就是標準輸入輸出的意思。 int main(void) <- 函數(shù)頭 C 程序由一個或多個函數(shù)組成。我們的這個程序只有一個函數(shù):main 函數(shù)。圓括號()表明 main 是一個函數(shù);int表明 main 函數(shù)返回一個整數(shù);void 表明 main 函數(shù)不接受任何參數(shù)。在此,請您緊記,int main(void)是 ISO/ANSI C 標準中定義的 main 函數(shù)定義方法之一。 /* a simple program */ <- 注釋 /* 和 */ 用于對程序進行注釋說明,幫助讀者更快更好地理解程序。編譯器 會忽略 /* 和 */ 之間的內(nèi)容(包括 /* 和 */),不會對它們進行編譯。 { <- 函數(shù)體的開端 這個開大括弧 { 標志著函數(shù)體開始。函數(shù)體以閉大括弧 } 結(jié)束。在 { 和 } 之間的語句都屬于這個函數(shù)。 intnum; <- 聲明變量num 這個語句表明我們聲明了一個名叫num的變量。int表明這個變量為 整型變量。 num = 1; <- 賦值語句 這個語句將 1 賦值給變量num。執(zhí)行這個語句后,num的值等于 1。 printf(“This is a simple C program.”); <- 函數(shù)調(diào)用語句 printf函數(shù)是 C 語言標準函數(shù)庫里的函數(shù)。這個語句調(diào)用printf函數(shù)在 屏幕上顯示“This is a simple C program.”,并且換行。是換行符,它提示 printf開始新的一行,也就是將光標移動到下一行的開端。如果上面的語句中沒有,那就不會換行,而且光標會緊跟在“This is a simple program.”后面。 printf(“My favorite number is %d because it is first.”, num); %d 告訴printf用num的值替換掉 %d,并且以整數(shù)形式顯示num的值。因為num的值為 1,所以這個語句在屏幕上顯示“My favorite number is 1 because it is first.”,并且換行。 return 0; <- 返回語句 C 程序應(yīng)該返回一個數(shù)值給它的調(diào)用者。0 代表程序無誤退出;而其它數(shù)字的含義 則由系統(tǒng)決定。通常,非零(如-1)代表程序運行中遇到某種錯誤而退出。 } <- 函數(shù)體結(jié)束 函數(shù)體以閉大括弧 } 結(jié)束。 二、詳細說明 現(xiàn)在,讓我們進一步來了解每一行代碼的含義。下面的內(nèi)容很基礎(chǔ),也很重要,必須認真弄懂,牢牢掌握。 1.#include 預(yù)處理指令和頭文件 在編譯器對我們寫的源程序進行編譯之前,預(yù)處理器會對我們的寫的源代碼 進行必要的處理,稱為預(yù)處理。#include 就是一個預(yù)處理指令,它命令預(yù)處理器 進行的預(yù)處理是:把特定的頭文件包含到我們的源代碼里。 #include #include stdio.h是 C 語言標準中定義了的頭文件,它包含著輸入輸出函數(shù)的信息。 所有 C 編譯器都應(yīng)該有這個頭文件,這是 ANSI/ISO C 標準中規(guī)定的。當(dāng)然,ANSI/ISO C 規(guī)定的編譯器必須提供的頭文件可不止這么一個。標準還規(guī)定了許多 別的頭文件,那些我們會在以后慢慢學(xué)到。 有些程序需要包含stdio.h,而有些不需要。如果上面這個例子中沒有使用 printf函數(shù),那就不需要包含stdio.h。 頭文件中包含著編譯器進行編譯時所需的信息。頭文件中可能指明了函數(shù)名和 函數(shù)調(diào)用方法,但是這些函數(shù)的實現(xiàn)代碼并不在頭文件中,而是在預(yù)先編譯好了的 庫文件里。 鏈接器負責(zé)在庫文件中尋找我們的程序所需的代碼,并且把那些代碼和我們寫的 程序進行鏈接,從而將我的寫的程序鏈接成可執(zhí)行文件。一句話,頭文件用于指導(dǎo) 編譯器正確地將我們寫的源程序編譯成可執(zhí)行文件。 2.main 函數(shù) 在 C 語言中,main 函數(shù)是主函數(shù)。每個 C 程序都必須有且只能有一個 main 函數(shù)(主函數(shù))!C 程序從 main 函數(shù)開始執(zhí)行,并且在 main 函數(shù)中結(jié)束。int是 main 函數(shù)的返回值類型,它表明 main 函數(shù)應(yīng)該返回一個整數(shù)給程序的 調(diào)用者(如操作系統(tǒng))。 如果您想了解更多關(guān)于 main 函數(shù)的東西,請點擊下面的鏈接: C/C++ 誤區(qū)一:void main 3.注釋 /* a simple program */ /* */ 之間的內(nèi)容都是注釋。對程序進行適當(dāng)?shù)淖⑨尶梢詭椭x者(包括您自己) 更快更好地理解您寫的代碼。注釋可以在源程序中的任何地方書寫。/* 和 */ 之間的 任何內(nèi)容(包括 /* 和 */)都會被編譯器忽略掉。注意:/ 和 * 必須緊挨在一起,它們之間不能有空格。 /* 我是注釋 */ /*我是 跨行注釋*/ /* 我也是注釋 */ 以上的注釋都是合法的;但下面的注釋是非法的,因為沒寫注釋結(jié)束標記 */。 /* 非法,沒有注釋結(jié)束標記 下面這個注釋可能會出乎你的意料: /* 我是注釋開始標記 /* 哦哦,我不是注釋開始標記 我是注釋結(jié)束標記,我和第一個 /* 匹配,而不是和第二個 /* 匹配。*/ 上面這個注釋中,注釋結(jié)束標記 */ 和第一個 /* 匹配,它們之間的內(nèi)容 都被視為注釋。 C99 中增加了另外一種注釋方式,這種注釋方式使用 // 作為注釋符,和 // 處于同一行,并且在 // 右邊的內(nèi)容都被當(dāng)作注釋。/ 和 / 之間不能有空格。 // 我是注釋 intrigue; //注釋放在這里也是合法的 上面的注釋在 C99 中是合法的,但是在 C89 中是非法的。也就是說,老舊的 編譯器可能不支持 // 注釋符。VC6 支持 //,TC2 不支持。 4.大括號與函數(shù)體 C 語言中,所有函數(shù)都以大括?。▄ })作為界定符。函數(shù)體從開大括弧 { 開始,以閉大括弧 } 結(jié)束。在后續(xù)教程中,我會對函數(shù)進行更詳細的講解。 5.intnum; 這個語句聲明了變量num。這一行末尾的分號(;)表明這一行 是一個語句。;是語句的一部分,單獨一個;也是一個合法的 C 語句。 int是 C 語言中的一個關(guān)鍵字,它代表 C 語言里的一種基本數(shù)據(jù)類型:整型。 關(guān)鍵字是語言的保留字,不能用作其它用途。例如:我們不能關(guān)鍵字來做變量名或者 函數(shù)名。 標識符是指我們?yōu)樽兞炕蚝瘮?shù)等取的名字。在這個語句中,num就是標識符。 C 語言中,所有變量在使用前都必須聲明。C89 中,變量的聲明必須位于 函數(shù)體或者程序塊的開端。例如: int main(void)/* C89 */ { /* 函數(shù)體開始 */ int doors;int dogs;doors = 5;dogs = 3; { /* 程序塊開始 */ int dig;int dug;dig = 6;dug = 8; } /* 程序塊結(jié)束 */ return 0; } /* 函數(shù)體結(jié)束 */ 而在 C99 中,聲明可以位于函數(shù)體或者程序塊的任何地方。但是,變量仍然 需要在聲明之后才可使用。例如: int main(void)/* C99 */ { /* 函數(shù)體開始 */ int doors;doors = 5; { /* 程序塊開始 */ int dig;dig = 6;int dug;dug = 8; } /* 程序塊結(jié)束 */ int dogs;dogs = 3; return 0; } /* 函數(shù)體結(jié)束 */ 上面的程序在 C99 中是合法的,但是在 C89 中卻是非法的。當(dāng)前支持C99 的 編譯器不多,所以上面的代碼您的編譯器很有可能編譯不了。故而,為了使我們的 代碼具有良好的可移植性,我們應(yīng)該盡可能少用,甚至不用 C99 中的新特性。 6.賦值 num = 1;賦值是 C 語言中的一種基本操作。上面的語句是一個賦值語句,它的含義 是:將 1 賦值給變量num。賦值操作完成后,num的值等于 1。 7.printf函數(shù) printf(“This is a simple C program.”);printf(“My favorite number is %d because it is first.”, num); 這兩行代碼都調(diào)用了printf函數(shù)。printf是一個標準 C 函數(shù),也就是說,它是 C 語言標準函數(shù)庫里定義了的函數(shù)。圓括號()表明printf是一個函數(shù),圓括號里的內(nèi)容會被傳遞給printf函數(shù)。例如,上面第一行代碼把“This is a simple C program.”(不包括雙引號)傳遞給printf函數(shù),然后由printf 函數(shù)把這些信息顯示于顯示器。是換行符,它提示printf開始新的一行。正因為是換行符,所以不會顯示出來,而是進行了換行。如果上面的語句中 沒有,那就不會換行。 上面代碼第二行中的 %d 告訴printf用num的值替換掉 %d,并且以 整數(shù)形式顯示num的值。 %d 被稱為占位符,它告訴printf應(yīng)該在什么地方顯示num的值。% 用于 提醒printf在此處顯示一個變量的值(本例中是num的值);d 告訴printf以 十進制整數(shù)的形式顯示num的值。 8.return(返回)語句 return 0;這個 return 語句是我們程序中的最后一個語句。int main(void)中的int 表示 main 函數(shù)應(yīng)該返回一個整數(shù),所以我們要使用 return 語句來返回一個整數(shù)。如果您想了解更多關(guān)于返回值的東西,請點擊下面鏈接,查看文章的第四點。 C/C++ 誤區(qū)一:void main 上面所說的某些內(nèi)容您暫時可能還不太理解,但是不用害怕,牢牢地把它們記住,然后繼續(xù)往下學(xué)吧!隨著學(xué)習(xí)的深入,就會逐漸搞明白?,F(xiàn)階段只要有這個概念就足夠了。 C語言程序?qū)嵗v解(二)首先請看以下代碼,并且和我們的第一個 C 程序比較比較,看看這個程序新增了什么知識點。 /* meter2centimeters.c--以厘米為單位來表示兩米 */ #include int main(void){ int meters, centimeters;meters = 2; centimeters = 100 * meters;/* 100 乘以 meters */ printf(“%d-meter is equal to %d centimeters.”, meters, centimeters);printf(“Yes, I said %d centimeters!”, 100 * meters); return 0;} 下面我們來仔細分析這個小程序。 1.文檔 這段代碼頭部的注釋標明了文件名和程序的作用,我們把這些注釋稱為文檔。寫文檔是一個很好的習(xí)慣,可以幫助我們了解程序的作用。在由多個源文件組成的程序中,文檔顯得更為重要。由于我們目前為止所寫的都是很簡單的程序,您也許還不覺得寫文檔有多大的作用,甚至還覺得浪費時間。但是我們應(yīng)該養(yǎng)成寫文檔的習(xí)慣,這對我們以后寫復(fù)雜的程序很有幫助。對于復(fù)雜程序,我們應(yīng)該盡可能把文檔寫得更詳盡。可以參考以下格式: /*************************************************** * 文件名: meter2centimeters.c * 作者:Antigloss at http://stdcpp.cn * 編寫日期: 05-9-9 0:00 * 最后修改日期: 05-9-9 0:00 * 功能:以厘米為單位來表示兩米 * 算法: 1 米 = 100 厘米 **************************************************/ 2.多重聲明 int meters, centimeters;上面那句聲明語句聲明了兩個變量。我們可以在一句聲明語句中聲明任意數(shù)目的變量,只要變量名之間用逗號(,)隔開就可以了。例如下面這個語句聲明了 4 個變量。int a, b, c, d; 3.乘法運算 C 語言中,* 是乘法運算符,所以 centimeters = 100 * meters;的意思是:用 100 乘以變量 meters 的值(本例中為 2),然后把相乘的結(jié)果賦值給變量 centimeters。 4.printf函數(shù) printf(“%d-meter is equal to %d centimeters.”, meters, centimeters);上面這個語句中占位符 %d 出現(xiàn)了兩次。第一個 %d 由變量 meters 的值替換;而第二個 %d 則由 centimeters 的值替換。注意:每個變量由逗號(,)隔開;“%d-meter is equal to %d centimeters.” 中的雙引號是必須的,而且必須是英文的雙引號,不能是中文的雙引號。printf(“Yes, I said %d centimeters!”, 100 * meters);上面這個語句表明,用于替換占位符的不僅僅可以是變量,也可以是表達式(100 * meters 是一個乘法表達式)。 最終效果 原圖(圖片來自網(wǎng)絡(luò))Photoshop打造水靈靈的漂亮美眉教程: 1.Photoshop打開圖片復(fù)制一層 2.圖像-調(diào)整-匹配顏色(勾選中和.其它的不變) 圖1 匹配顏色后的效果: 圖2 3.圖像-應(yīng)用圖像(以前的都是勾選的綠通道或是其它通道.這次勾選RGB通道) 圖3 應(yīng)用圖像后的效果: 圖4 4.這時就將近水靈效果了.然后我們再運用濾鏡插件里的Neat Image來降低下噪點.怎么使用我就不多說了.如果沒有那個插件的話可以手動磨下皮也可以的.圖5 磨皮后的效果: 圖6 5.雖然這個磨皮方法很受大家青睞,但是它也有它的不足之外.然后我們再用模糊工具對不足之處再處理一下。 6.再復(fù)制一層.執(zhí)行圖像-調(diào)整-去色 圖7 7.圖像-調(diào)整-反相 圖8 8.將圖層的混合模式改為:顏色減淡 圖9 9.濾鏡-其它-最小值 圖10 10.下拉混合選項.按住ALT將那四個三角拉到最后 圖11 11.到此效果也就出來了 圖12 --本內(nèi)容摘自liupengty的個人博客 http://hi.baidu.com/liupengty1/ 向作者致謝! 最前面的話 在創(chuàng)作中思維 前言 今天,電腦已經(jīng)進入千家萬戶,許多父母本著“不讓我的孩子輸在起跑線上”的原則,對于輔導(dǎo)孩子學(xué)習(xí)電腦這件事,可說是相當(dāng)費心,那么到底兒童學(xué)習(xí)電腦該有些什么內(nèi)容呢?也成為家長們最為關(guān)心的話題。幫助少兒成為愿意使用、能夠使用以及正確使用電腦科技的新新人類成員,是少兒學(xué)習(xí)電腦的主要目標。 將來的孩子必然要把計算機當(dāng)做自己工作和接觸世界的一個重要工具,就如同我們當(dāng)年通過收音機,電視,圖書,雜志來接觸世界萬物一樣。做為家長來說,不應(yīng)該對計算機產(chǎn)生恐懼。近來,國家也倡導(dǎo)孩子們“綠色上網(wǎng)”,而在學(xué)校也開設(shè)了信息技術(shù)課。現(xiàn)在大多數(shù)家長既想讓孩子學(xué)習(xí)計算機,又不想讓孩子沉迷于游戲,或接受不良的互聯(lián)網(wǎng)文化。從某種程度上說,這是一個兩難的問題。最好的方法,就是正確的引導(dǎo)和介入。 從我個人的經(jīng)驗上看,讓孩子接觸PC上的游戲,可以娛樂身心,提高智力。人對自己熟悉的東西是有把握能力的。孩子早接觸游戲,就不容易上癮。小學(xué)、初中階段的孩子,還處在家長的教育有效期內(nèi),因此家長完全可以有效監(jiān)控和引導(dǎo)孩子正確的使用電腦。但很多情況下,家長并不知道該怎么辦,沒有辦法引導(dǎo)孩子,這本身是一個遺憾。更加不幸的是,現(xiàn)在有相當(dāng)多的孩子,在小學(xué)、中學(xué)期間被禁止玩電腦游戲,甚至禁止使用電腦,等他或她到了大學(xué),終于解放了,敞開來玩,這樣人就荒廢了。還有就是,家長首先不要游戲上癮,否則孩子在這方面出問題的可能性就大了。 當(dāng)然,讓孩子玩游戲不是目的,第二步,要想讓孩子不沉迷在游戲中,就要去引導(dǎo),從被動的玩,到主動的創(chuàng)造。因此,要進一步豐富孩子的計算機知識,讓他們自己動手去創(chuàng)作。我這里向各位家長推薦Scratch。網(wǎng)上有一段對Scratch的描述:剛下載了Scratch,安裝運行后的幾秒內(nèi),就眼前一亮,很有意思,軟件會在你啟動幾秒后,自動測試你的操作系統(tǒng)版本,變換為簡體中文的界面,在經(jīng)過一段時間的使用和教學(xué)后,作為一名計算機老師,更是感覺有向我們的孩子們推薦的必要。孩子們首先是感興趣,能很快上手,自己動手設(shè)計卡通作品。他們在創(chuàng)作過程中,學(xué)習(xí)積極性極大,想象力和創(chuàng)造力得到了極大的培養(yǎng)和鍛煉。他們還把自己的作品上傳到官方網(wǎng)站上去。他們試圖去設(shè)計一些體現(xiàn)自己思想的作品,邊做邊體會,這個完全模塊化的軟件所帶來的便捷,Scratch安裝目錄下帶有大量的素材,能極大的滿足孩子們的需求,他們有時還根據(jù)需要,自己制作素材!這個描述既貼切,又生動。 Scratch軟件的優(yōu)勢是給孩子們提供盡可能方便的工具,讓他們充分去發(fā)揮自己的想象力創(chuàng)作。使用scracth進行創(chuàng)作,孩子們不僅能學(xué)到計算機程序設(shè)計的基本方法、動畫制作的基礎(chǔ)知識,而且還能進一步深入體會我們的自然語言---漢語、英語,我們?nèi)祟惞餐恼Z言----數(shù)學(xué);Scratch創(chuàng)作中會用到一些數(shù)學(xué)知識,你可以只使用簡單的數(shù)學(xué),不過你的數(shù)學(xué)知識越豐富,你的創(chuàng)作能力越強。因此Scratch的學(xué)習(xí)能有效的提升孩子們對語、數(shù)、外的學(xué)習(xí)興趣。 本書開始部分介紹了電腦基本構(gòu)造、開關(guān)機、系統(tǒng)操作、常見工具軟件操作說明等內(nèi)容,為少兒自己動手創(chuàng)作動漫游戲做好準備。 本書一個突出的特點是簡明易懂,寫作采用了全新的圖解方式,對少兒及成人均適用,是家長引導(dǎo)少兒正確使用電腦的指南! 第一部分電腦入門 基本電腦常規(guī)操作,略過 練習(xí):打開Scratch自帶的Projects下的作品看看。、響應(yīng)鍵盤(1) 11、響應(yīng)鍵盤(2) 附: 將scratch的Sb文件,轉(zhuǎn)換成exe文件 最簡單的方法如下: 1、下載轉(zhuǎn)換程序請使用鏈接: http://chirp.scratchr.org/dl/ChirpCompiler-setup.exe 2、雙擊下載到的安裝程序ChirpCompiler-setup.exe,并按提示安裝ChirpCompiler。 3、安裝完成后,雙擊桌面上的ChirpCompiler快捷圖標 4、出現(xiàn)“Step1:Choose Scratch Project” 對話框, 選擇待轉(zhuǎn)的sb文件,并點擊右下角的【打開】按鈕 5、出現(xiàn)“Step2:(Optional):Chosse an Icon”對話框,點右下角的【取消】按鈕 6、等待轉(zhuǎn)換完成,進入【我的文檔】下的【Scratch2exe文件夾】(此文件夾通常是轉(zhuǎn)換完后自動打開的),雙擊生成的exe執(zhí)行即可。完畢。 第一課 編一個“心靈感應(yīng)”小游戲 我們的課程從這個小游戲開始吧。一些名詞在這里不做解釋,廣大網(wǎng)友漫漫理解,或者自己去查一些資料,下面我就來介紹如何用Visual Foxpro 6.0來編制這個游戲。 1、在硬盤上建一個文件夾,例如D:DEMO。 2、啟動Visual Foxpro 6.0,選擇:“文件”——“新建”,出現(xiàn)“新建對話框”(圖示1-1),文件類型選“項目”,按“新建文件”按鈕,選擇項目文件名“demo”(自己隨便起名),保存在D:DEMO下(圖示1-2),按“保存”按鈕后,出現(xiàn)項目管理器,這樣一個項目就建成了,項目名就是“demo”以后的一切操作都在這個項目內(nèi)。項目管理器由兩個文件組成,擴展名分別是“PJX”和“PJT”。(圖示1-3)在這個項目內(nèi)可以建立數(shù)據(jù)庫、表單、程序、菜單等。 3、選擇“文檔”——“表單”,按“新建”按鈕。出現(xiàn)(圖示1-4) 4、按“新建表單”按鈕,出現(xiàn)(圖示1-5)。表單就是將來運行后出現(xiàn)的窗口或?qū)υ捒颍蠄D就是一個表單。下面我們就在這個表單上創(chuàng)建心靈感應(yīng)游戲。 5、在Form1的屬性(表單的屬性一般在創(chuàng)建一個新表單后自動出現(xiàn),若沒有可右擊表單,選擇“屬性”即可)中選擇屬性Caption(標題)將默認值“Form1”改為“心靈感應(yīng)”(圖示1-6),表單的標題就改為“心靈感應(yīng)”。但表單的名字應(yīng)叫“Form1”,要想更改請改屬性——Name。 6、在d:demo下新建一文件夾pic,存入一些需要的圖標、圖片等,在Form1的屬性中選擇屬性Icon的值為d:demopicmsgbox02.ico(圖示1-7)。雙擊“Icon”或點擊夾,選擇msgbox02.ico圖標,按“確定”按鈕。 按鈕,打開d:demopic文件 7、關(guān)閉表單設(shè)計器,出現(xiàn)(圖示1-8),按“是”,出現(xiàn)(圖示1-9),取文件名為xlgy,建一文件夾d:demoform將文件xlgy.scx保存到該文件夾里。則在項目管理器的表單中出現(xiàn)一個xlgy表單(圖示1-10)。(你也可以全部編完再保存) 8、選中xlgy表單,按“修改”鍵,又返回表單編輯狀態(tài)。調(diào)整表單窗口大小(可用鼠標拖拉),在表單控件工具欄的“圖象”圖標上點擊一下,在表單上拖出一個長方形,即圖片顯示區(qū)域,其picture屬性為d:demopicpkbm1.jpg(圖示1-11); 在表單控件工具欄選“標簽”圖標,在表單上的圖象下面拖出一個長方形,其capion屬性為“本程序可以感應(yīng)你在想什么?!?,字體大小fontsize為“16”,你也可以設(shè)定其他屬性,如:字體(fontname)、字體顏色(fontcolor)等;再建兩個按鈕“command1和command2”,其屬性caption分別為“開始”、“退出”。(圖示1-12) 9、雙擊“退出按鈕”,在click過程中輸入thisform.release或release thisform,意思為:當(dāng)鼠標單擊“退出”按鈕時釋放表單。下面你可以按!圖標運行此表單,點擊“退出”按鈕,即可退出此表單。 10、下面我們要在“開始”按鈕的click過程中輸入一些命令,完成我們要做的工作。我們先做幾張圖片pk1.jpg(圖示1-13)、pk2.jpg(圖示14)、pkbm2.jpg(圖示15),在“開始”按鈕的click過程中輸入如下命令: ThisForm.image1.picture='picpk1.jpg' &&將圖片換成pk1.jpg this.caption='繼續(xù)' &&將“開始”按鈕名改為“繼續(xù)”,因為在command1.click內(nèi),所以可用this代替thisform.command1 thisform.command2.enabled=.f.&&將“退出”按鈕設(shè)為不可用 thisform.label1.caption='請在上面的撲克牌中選一張,記在心里。按繼續(xù)鍵。' &&改變label1的內(nèi)容 wait '' &&程序暫停,等你按任意鍵,“''”是兩個單引號,不能缺少.ThisForm.image1.picture='picpkbm1.jpg' thisform.label1.caption='請你默念三遍。按繼續(xù)鍵。' wait '' ThisForm.image1.picture='picpk2.jpg' thisform.label1.caption='我知道你記的是哪一張,我把它去掉了!' wait '' ThisForm.image1.picture='picpkbm2.jpg' thisform.label1.caption='' this.caption='再來一次' thisform.command2.enabled=.t.&&將“退出”按鈕設(shè)為可用 retu &&重新運行 注: &&...為程序注釋,它在程序運行時不執(zhí)行。 11、到此為止,“心靈感應(yīng)”就編完了,你可以運行此表單看看運行結(jié)果。 二:行程序或點擊菜單、按鈕等方法使它們運行。這一課,我將向大家介紹主菜單、快捷菜單和主程序。 一、主菜單的設(shè)計 1、在項目管理器中的“其它”中選中“菜單”,按“新建”按鈕,出現(xiàn)新建菜單選擇窗口(圖2-1); 按“菜單”按鈕,出現(xiàn)菜單編輯窗口,在“菜單名稱”中分別輸入“文件( 以上的六個菜單項中都有“<”,它的作用是建立一個熱鍵:Alt加“<”后面的第一個英文字母,在當(dāng)前窗口按“Alt+F”打開“文件”菜單,相當(dāng)于鼠標點擊。 2、點擊游戲菜單后的“創(chuàng)建”按鈕,編輯“游戲”的下一級菜單(圖2-3),在“心靈感應(yīng)”中選擇“命令”,在命令框中輸入“do form xlgy”,作用是打開xlgy表單。在其后面還有一個選項,點擊選項按鈕出現(xiàn)選項對話框,使“鍵標簽”的文本框獲得焦點,按Ctrl+G(圖2-4)建立一個快捷鍵??旖萱I與熱鍵不同,熱鍵只在當(dāng)前窗口起作用,快捷鍵無論當(dāng)前是什么窗口都起作用。例如:在主窗口中按 Ctrl+G,可以直接運行“心靈感應(yīng)”表單,相當(dāng)于用鼠標選擇菜單中的“游戲”,再選擇“心靈感應(yīng)”。 3、反回到“菜單欄”,在“退出”的命令框中輸入clear event命令。 4、按“預(yù)覽”按鈕,可以預(yù)覽一下設(shè)計的菜單。 5、選擇“菜單”中的“生成”,(圖2-41) 出現(xiàn)圖2-42,按“是”按鈕,出現(xiàn)圖2-43,菜單名為:main,保存在d:demo下,出現(xiàn)圖2-44 按“生成”按鈕。菜單建好了,可以關(guān)閉菜單設(shè)計器了。 二、快捷菜單的設(shè)計 1、在項目管理器中的“其它”中選中“菜單”,按“新建”按鈕,出現(xiàn)新建菜單選擇窗口,按“快捷菜單”按鈕,建立快捷菜單yji.mnx:(圖2-5) 2、保存菜單yji.mnx,生成菜單程序文件yji.mpr,在以后的庫房管理軟件中會用到。 三、主程序設(shè)計 1、選擇“代碼”——“程序”,按“新建”按鈕,輸入如下程序: CLEAR SET EXCL ON SET TALK OFF SET MESSAGE ON SET CENT ON RELEASE WINDOW 常用 &&關(guān)閉常用窗口 PUBLIC MYPATH &&定義全局變量MYPATH MYPATH=LEFT(SYS(16),RAT(“",SYS(16)))&&提取當(dāng)前路徑 SET DEFA TO(MYPATH)SET PATH TO data;form;pic &&指明路徑 _SCREEN.backcolor=iif(mod(day(date()),2)=0,rgb(80,230,210),rgb(70,140,180))&&設(shè)置屏幕背景顏色,單、雙號背景顏色不同 MODIFY WINDOW SCREEN TITLE ” xxx軟件 Ver x.x 作者:王永成 “+;” 今天是:“+dtoc(date())+” “+cdow(date())&&設(shè)置主窗口標題 _SCREEN.ICON=”..picmsgbox02.ico“ &&設(shè)置主窗口圖標 ZOOM WINDOW SCREEN MAX &&主窗口最大化 deactivate window ”項目管理器“ &&關(guān)閉項目管理器 do main.mpr &&運行主菜單程序 read event 2、保存主程序main.prg 3、右擊主程序,選擇“設(shè)置主文件”。 4、運行主程序看一看結(jié)果。 三:“猜數(shù)游戲”。 1、新建一表單csyx(圖3-1),表單的caption屬性為“猜數(shù)游戲”,背景顏色(BackColor)及各表單控件的字體顏色等,各位朋友可按個人的愛好選擇。 2、命令按鈕command1~command13的caption屬性分別為:“確定”,“退格”,“新一局”,“0”...“9”。 3、文本框Text1的FontSize為26;FontColor為250,250,0;BackColor為0,128,128;ContorlSource為ctet1(變量ctet1的值與text1的值相關(guān)聯(lián))。 4、文本框Text2的FontColor為250,250,0;ContorlSource為jlun;BackStyle為“0-透明”;BorderStyle為“0-無”。 5、文本框t1~t10,zq1~zq10,cw1~cw10(name=t1...,zq1...,cw1...cw10),(controlsource=t1...),F(xiàn)ontColor為250,250,0;BackStyle為“0-透明”;BorderStyle為“0-無”。 6、標簽Label1~Label3的caption屬性分別為:“選擇的數(shù)”,“位置正確”,“位置錯誤”。 7、標簽Label4的caption屬性為:=”說明:選擇4個數(shù)按確定鍵,在右側(cè)顯示這4位數(shù)有幾位數(shù)與你要猜的數(shù)位置相同,“+chr(13)+” 有幾位數(shù)包含在要猜的數(shù)中,但位置不同。根據(jù)以上提示猜出是哪4位數(shù)?!?,其中chr(13)是一個回車換行命令,“=”和英文引號(單、雙都行)不能少;BackStyle為“0-透明”。 8、標簽L1~L10的caption屬性分別為:“第一次”...“第十次”;BackStyle為“0-透明”。 9、表面工作做完了,下面我們來輸入一些命令(程序),雙擊表單出現(xiàn)表單過程編輯框,在Init過程中輸入如下命令: public ctx1,ctx2,ctx3,ctx4,ctet1,ctet2,n,zq,cw,p &&設(shè)置全局變量 zq=0 &&設(shè)置初始值 cw=0 ctet1='' ctet2='' n=0 thisform.command3.click()&&執(zhí)行命令按鈕(command3)的click過程,相當(dāng)于點擊”新一局“按鈕。 10、雙擊按鈕“0”(command4),在其click過程中輸入如下命令: ctet2='0' do panduan &&執(zhí)行panduan.prg程序 thisform.refresh 11、按鈕“1”~“9”的click過程中的命令與按鈕“0”的click過程中的命令的不同之處就是ctet2的值,即ctet2='1'...ctet2='9'。 12、因為在按鈕“0”~“9”的click過程中都執(zhí)行一些相同的命令,所以我們把這些命令提出來,作為一個程序來調(diào)用(也可以在表單中創(chuàng)建一個方法程序,請參見第九課),可以簡化程序的設(shè)計。選擇“代碼”——“程序”按“新建”按鈕,新建程序panduan.prg: if len(allt(ctet1))<>4 &&判斷text1的值的長度,如果不是4位,執(zhí)行下面的命令.if!ctet2$ctet1 &&判斷按下的按鈕的數(shù)值是否已被選過,若所選的數(shù)不包涵在已選的數(shù)值內(nèi).ctet1=ctet1+ctet2 &&把選定的數(shù)加在后面.endif endif 13、雙擊按鈕“確定”(command1),在其click過程中輸入如下命令: zq=0 &&正確值zq=0 cw=0 &&錯誤值cw=0 if len(allt(ctet1))<>4 &&如果text1的值不是4 位 wait window at 16,25 ”數(shù)據(jù)不夠4 位“ &&提示 return &&返回 endif p=p+1 if ctx1$ctet1 &&判斷cte1值是否在所選定的4位數(shù)中.(ctet1及ctet2、ctet3、ctet4的值是在表單運行時或點擊了“新一局”按鈕時機器隨機產(chǎn)生的4位數(shù)值。) if ctx1=substr(ctet1,1,1)zq=zq+1 else cw=cw+1 endif endif if ctx2$ctet1 if ctx2=substr(ctet1,2,1)zq=zq+1 else cw=cw+1 endif endif if ctx3$ctet1 if ctx3=substr(ctet1,3,1)zq=zq+1 else cw=cw+1 endif endif if ctx4$ctet1 if ctx4=substr(ctet1,4,1)zq=zq+1 else cw=cw+1 endif endif do case case p=1 thisform.l1.visible=.t.thisform.t1.visible=.t.thisform.zq1.visible=.t.thisform.cw1.visible=.t.t1=ctet1 zq1=zq cw1=cw if zq=4 jlun=”你真能蒙!“ endif case p=2 thisform.l2.visible=.t.thisform.t2.visible=.t.thisform.zq2.visible=.t.thisform.cw2.visible=.t.t2=ctet1 zq2=zq cw2=cw if zq=4 jlun=”太棒了,你真能蒙!“ endif case p=3 thisform.l3.visible=.t.thisform.t3.visible=.t.thisform.zq3.visible=.t.thisform.cw3.visible=.t.t3=ctet1 zq3=zq cw3=cw if zq=4 jlun=”太棒了,蒙的吧?!“ endif case p=4 thisform.l4.visible=.t.thisform.t4.visible=.t.thisform.zq4.visible=.t.thisform.cw4.visible=.t.t4=ctet1 zq4=zq cw4=cw if zq=4 jlun=”太棒了,您是教授嗎?“ endif case p=5 thisform.l5.visible=.t.thisform.t5.visible=.t.thisform.zq5.visible=.t.thisform.cw5.visible=.t.t5=ctet1 zq5=zq cw5=cw if zq=4 jlun=”大學(xué)生水平,很可以!“ endif case p=6 thisform.l6.visible=.t.thisform.t6.visible=.t.thisform.zq6.visible=.t.thisform.cw6.visible=.t.t6=ctet1 zq6=zq cw6=cw if zq=4 jlun=”智商不低嗎!“ endif case p=7 thisform.l7.visible=.t.thisform.t7.visible=.t.thisform.zq7.visible=.t.thisform.cw7.visible=.t.t7=ctet1 zq7=zq cw7=cw if zq=4 jlun=”還算可以,要努力呀!“ endif case p=8 thisform.l8.visible=.t.thisform.t8.visible=.t.thisform.zq8.visible=.t.thisform.cw8.visible=.t.t8=ctet1 zq8=zq cw8=cw if zq=4 jlun=”一般人到這兒都能找到!“ endif case p=9 thisform.l9.visible=.t.thisform.t9.visible=.t.thisform.zq9.visible=.t.thisform.cw9.visible=.t.t9=ctet1 zq9=zq cw9=cw if zq=4 jlun=”太一般了!“ endif case p=10 thisform.l10.visible=.t.thisform.t10.visible=.t.thisform.zq10.visible=.t.thisform.cw10.visible=.t.t10=ctet1 zq10=zq cw10=cw if zq=4 jlun=”到現(xiàn)在才早找出來?!智商有問題!“ else jlun=”智商太低了,再來一次?“ endif endcase ctet1=”“ thisform.refresh 14、雙擊按鈕“新一局”(command3),在其click過程中輸入如下命令: jlun=”“ thisform.l1.visible=.f.thisform.t1.visible=.f.thisform.zq1.visible=.f.thisform.cw1.visible=.f.thisform.l10.visible=.f.thisform.t10.visible=.f.thisform.zq10.visible=.f.thisform.cw10.visible=.f.thisform.l2.visible=.f.thisform.t2.visible=.f.thisform.zq2.visible=.f.thisform.cw2.visible=.f.thisform.l3.visible=.f.thisform.t3.visible=.f.thisform.zq3.visible=.f.thisform.cw3.visible=.f.thisform.l4.visible=.f.thisform.t4.visible=.f.thisform.zq4.visible=.f.thisform.cw4.visible=.f.thisform.l5.visible=.f.thisform.t5.visible=.f.thisform.zq5.visible=.f.thisform.cw5.visible=.f.thisform.l6.visible=.f.thisform.t6.visible=.f.thisform.zq6.visible=.f.thisform.cw6.visible=.f.thisform.l7.visible=.f.thisform.t7.visible=.f.thisform.zq7.visible=.f.thisform.cw7.visible=.f.thisform.l8.visible=.f.thisform.t8.visible=.f.thisform.zq8.visible=.f.thisform.cw8.visible=.f.thisform.l9.visible=.f.thisform.t9.visible=.f.thisform.zq9.visible=.f.thisform.cw9.visible=.f.p=0 ctext='1234567890' for i=1 to 4 n=11-i cn1=rand()cn=int(cn1*n)+1 if cn=0 cn=1 endif txx='ctx'+allt(str(i))&txx=substr(ctext,cn,1)if cn=1 ctext1=right(ctext,(10-i))else if cn=11-i ctext1=left(ctext,(10-i))else ctext1=left(ctext,cn-1)+right(ctext,(11-i-cn))endif endif ctext=ctext1 endfor thisform.text1.value=”" thisform.refresh 15、雙擊按鈕“退格”(command2),在其click過程中輸入如下命令: if len(allt(ctet1))<>0 &&長度不為0 ctet1=left(ctet1,len(allt(ctet1))-1)&&刪除后面的一為數(shù) endif thisform.refresh 16、修改主菜單,在“游戲”的猜數(shù)游戲后填加命令:do form csyx,別忘了生成程序文件。 17、因為表單和程序不在同一目錄下,所以單獨運行表單會出現(xiàn)找不到某程序的錯誤,我們需要運行主程序main.prg,來看看運行結(jié)果。第二篇:C語言基礎(chǔ)知識實例講解
第三篇:Photoshop實例教學(xué)
第四篇:Scratch實例教學(xué)
第五篇:vfp教學(xué)實例