高分求free pascal的教程 free pascal 教程
第一章 開始編寫pascal語言程序
1.下載Turbo Pascal6.0
(1)下載turbo pascal
(2)屬性設(shè)置
2.Turbo Pascal 6.0環(huán)境介紹
(1)進(jìn)入與退出(注意:退出時必須使用文件菜單中的退出命令或Alt+X)
(2)編輯程序
光標(biāo)移動鍵的使用
Backspace鍵:刪除光標(biāo)前一個字符
Ctrl+N:在光標(biāo)前插入一行
Ctrl+Y:刪除光標(biāo)所在行
Home:光標(biāo)移到行首
End:光標(biāo)移到行尾
PageUp/PageDown:上下翻頁
Insert:插入與改寫狀態(tài)切換
(3)編譯程序(Compile):Alt+F9
(4)運行程序(Run):Ctrl+F9
(5)保存程序(Save):F2
(6)打開原有的程序:F3
(7)查看程序運行結(jié)果:Alt+F5
(8)調(diào)試時增加觀察項:Ctrl+F7
1.2 簡單Pascal程序的結(jié)構(gòu)
例1下列是一Pascal源程序:
program lt1;{程序首部}
var {說明部分}
a,b:integer;
sum:integer;
begin {執(zhí)行部分}
a:=3355;
b:=789;
sum:=a+b;
writeln('sum=',sum);
end.
1.3 完整的Pascal程序結(jié)構(gòu)
一個完全的Pascal程序結(jié)構(gòu)
program 程序名;
uses 已知單元說明;
label 標(biāo)號說明;
const 常量說明;
type 類型說明;
var 變量說明;
function 函數(shù)說明;
procedure 過程說明;
begin
語句;
語句;
……
語句;
end.
作業(yè):
1.熟悉Pascal編輯環(huán)境.
2.記住快捷鍵的使用.
3.編寫78*67的值的Pascal程序并運行.
第二章Pascal語言基礎(chǔ)知識
2.1 Pascal的字符與符號
2.2 Pascal數(shù)據(jù)類型
2.3 常量與變量
2.4 標(biāo)準(zhǔn)函數(shù)
2.5 運算符和表達(dá)式
練習(xí)與作業(yè)
2.1 Pascal字符與符號
1.標(biāo)識符
(1) 標(biāo)識符的定義:標(biāo)識符就是以字母開頭的字母數(shù)字序列,有效長度為63個字符,并且大小寫等效。可以用來標(biāo)示常量、變量、程序、函數(shù)等。例如例1.1中的Area(程序名),pi(符號常量),s、r(變量名)都是標(biāo)識符。
(2) 標(biāo)識符的分類:
a.保留字(關(guān)鍵字)
所謂保留字是指在Pascal語言中具有特定的含義,你必須了解它的含義,以便于正確的使用,否則會造成錯誤。標(biāo)準(zhǔn)Pascal語言中的保留字一共有35個,Turbo Pascal語言一共有51個。下面是Pascal語言的保留字:
AND,ARRAY,BEGIN,CASE,CONST,DIV,DO,DOWNTO,ELSE,END,F(xiàn)ILE,F(xiàn)OR,F(xiàn)UNTION,GOTO,IF,IN,LABEL,MOD,NIL,NOT,OF,OR,PACKED,PROCEDURE,PROGRAM,RECORD,REPEAT,SET,THEN,TO,TYPE,UNTIL,VAR,WHILE,WITH等
b.標(biāo)準(zhǔn)標(biāo)識符:指Pascal語言預(yù)先定義的標(biāo)識符,具有特殊含義。
以下列舉了Turbo Pascal語言部分常用的標(biāo)準(zhǔn)表識符:
標(biāo)準(zhǔn)常量 False Maxint True
標(biāo)準(zhǔn)類型 Boolean Char Real Integer
標(biāo)準(zhǔn)函數(shù) Abs Arctan Chr Cos Eof Eoln Exp
Ln Odd Ord Pred Round Sin Sqr
Sqrt Succ Trunc
標(biāo)準(zhǔn)過程 Dispose Get New Pack Page Put Read
Readln Reset Rewrite Unpack Write Writeln
標(biāo)準(zhǔn)文件 Input Output
c.用戶自定義標(biāo)識符:由你自己根據(jù)需要來定義。
(1)選用的標(biāo)識符不能和保留字相同。
(2)語法上允許預(yù)定義的標(biāo)準(zhǔn)標(biāo)識符作為你自己定義的標(biāo)識符使用,但最好還是不要用。
以下列舉了你自己在定義標(biāo)識符時可以用的字符:
A——Z;a——z;0——9;+,-,*,/,=,<>,<=,>=,<,>,(,),[,],{,},:=,,,;,.,:,..,',^
2.2 Pascal數(shù)據(jù)類型
數(shù)據(jù)是程序設(shè)計的一個重要內(nèi)容,其重要特征----數(shù)據(jù)類型,確定了該數(shù)據(jù)的形、取值范圍以及所能參與的運算。
Turbo Pascal 提供了豐富的數(shù)據(jù)類型,這些數(shù)據(jù)類型可以分為三大類:簡單類型、構(gòu)造類型和指針類型,其中簡單類型可以分為標(biāo)準(zhǔn)類型(整型、實型、字符型和布爾型)和自定義類型(枚舉型和子界型),構(gòu)造類型可以分為數(shù)組類型、集合類型、記錄類型和文件類型。這些數(shù)據(jù)類型中除了指針類型是動態(tài)數(shù)據(jù)類型外,其他的都是靜態(tài)數(shù)據(jù)類型。在這些數(shù)據(jù)類型中的簡單類型都是有序類型,除了實型以外的簡單類型都是順序類型,所謂順序類型就是他們的值不僅是有序的而且是有順序號。
在這里主要介紹整型、實型、字符型和布爾型四種常用的數(shù)據(jù)類型。
1.整型
一個整型數(shù)據(jù)用來存放整數(shù)。Turbo Pascal支持五種預(yù)定義整型,它們是shortint(短整型)、 integer(整型)、 longint(長整型)、 byte(字節(jié)型)和 word(字類型),Turbo Pascal分別用相同的名字作為他們的標(biāo)識符。每一種類型規(guī)定了相應(yīng)的整數(shù)取值范圍以及所占用的內(nèi)存字節(jié)數(shù)。
類型 數(shù)值范圍 占字節(jié)數(shù) 格式
shortint -128..128 1 帶符號8位
inteter -32768..32767 2 帶符號16位
longint -2147483648..2147483647 4 帶符號32位
byte 0..255 1 帶符號8位
word 0..65535 2 帶符號16位
Turbo Pascal規(guī)定了兩個預(yù)定義整型常量標(biāo)識符maxint和maxlonint,他們各表示確定的常數(shù)值,maxint為32767, longint為2147483647,他們的類型分別是integer 和longint
2.實型
一個實型數(shù)據(jù)用來存放實數(shù)。Turbo Pascal支持五種預(yù)定義實型,它們是real(基本實型)、 single(但精度實型)、double(雙精度實型)、extended(擴(kuò)展實型)、comp(裝配實型),Turbo Pascal分別用相同的名字作為他們的標(biāo)識符。每一種類型規(guī)定了相應(yīng)的實數(shù)取值范圍、所占用的內(nèi)存字節(jié)數(shù)以及它們所能達(dá)到的精度
類型 數(shù)值范圍 占字節(jié)數(shù) 有效位數(shù)
real 2.9e-39..1.7e38 6 11..12
single 1.5e-45..3.4e38 4 7..8
double 5.0e-324..1.7e308 8 15..16
Turbo Pascal支持兩種用于執(zhí)行實型運算的代碼生成模式:軟件仿真模式和80x87浮點模式。除了real可以在軟件仿真模式下直接運行以外,其他類型必須在80x87浮點模式下運行。
3.布爾型
一個布爾型數(shù)據(jù)用來存放邏輯值(布爾值)。布爾型的值只有兩個:false和true,并且false的序號是0,true的序號是1。false 和true都是預(yù)定義常數(shù)標(biāo)識符,分別表示邏輯假和邏輯真。并且true<false。boolean是布爾型的標(biāo)識符。
4.字符型
字符型用char作為標(biāo)識符。字符型必須用單引號括起來,字母作為字符型時,大小寫是不等價的,并且字符型只允許單引號中有一個字符,否則就是字符串。
2.3 常量與變量
1.常量
(1)常量:在某個程序的整個過程中其值不變的量。
(2)常量定義:常量定義出現(xiàn)在說明部分。它的語法格式是:
const
<常量標(biāo)識符>=<常量>;
...
<常量標(biāo)識符>=<常量>;
常量標(biāo)識符的類型由定義它的常量的類型決定。例如:const a=12 隱含說明a是整型;const r=3.21 隱含說明r是實型......
(3)常量定義部分必須以保留字const開頭,可以包含一個或幾個常量定義,而且每個常量均以分號結(jié)束。
(4)Turbo Pascal類型常量
類型常量,又稱變量常數(shù),它是Turbo Pascal的一個擴(kuò)充特性。類型常量的定義與標(biāo)準(zhǔn)Pascal規(guī)定的常數(shù)定義和變量說明有所區(qū)別。類型常量定義的語法格式:
const
<簡單類型常量標(biāo)識符>:簡單類型=常數(shù);
例如:
const
counter:integer=0;
flag:boolean=true;
index:0..100=0;
2.變量
(1)變量:在某個程序中的運行過程中其值可以發(fā)生改變的量
(2)變量說明:變量說明出現(xiàn)在說明部分。它的語法格式是:
var
<變量標(biāo)識符列表>:<類型>;
...
<變量標(biāo)識符列表>:<類型>;
其中,保留字var表示開始一個變量說明部分。變量標(biāo)識符列表是一個用逗號隔開的標(biāo)識符序列,冒號后面的類型是類型標(biāo)識符。每個變量說明均以分號結(jié)束。
例如:
var
a,b,c:integer;
m,n:real;
2.4 標(biāo)準(zhǔn)函數(shù)
1.算術(shù)函數(shù)
函數(shù)標(biāo)識符 自變量類型 意義 結(jié)果類型
abs 整型、實型 絕對值 同自變量
arctan 整型、實型 反正切 實型
cos 整型、實型 余弦 實型
exp 整型、實型 指數(shù) 實型
frac 整型、實型 小數(shù)部分 實型
int 整型、實型 整數(shù)部分 實型
ln 整型、實型 自然對數(shù) 實型
pi 無自變量 圓周率 實型
sin 整型、實型 正弦 實型
sqr 整型、實型 平方 同自變量
sqrt 整型、實型 平方根 實型
例:abs(-4)=4 abs(-7.49)=7.49 arctan(0)=0.0
sin(pi)=0.0 cos(pi)=-1.0 frac(-3.71)=-0.71
int(-3.71)=-3.0 sqr(4)=16 sqrt(4)=2
2.標(biāo)準(zhǔn)函數(shù)
函數(shù)標(biāo)識符 自變量類型 意義 結(jié)果類型
odd 整型 判斷奇數(shù) 布爾型
pred 離散類型 求前趨 同自變量
succ 離散類型 求后繼 同自變量
例:odd(1000)=false pred(2000)=1999 succ(2000)=2001
odd(3)=true pred('x')='w succ('x')='y'
3.轉(zhuǎn)換函數(shù)
函數(shù)標(biāo)識符 自變量類型 意義 結(jié)果類型
chr byte 自變量對應(yīng)的字符 字符型
ord 離散類型 自變量對應(yīng)的序號 longint
round 實型 四舍五入 longint
trunc 實型 截斷取整 longint
例:chr(66)='B' ord('A')=65 round(-4.3)=-5 trunc(2.88)=2
4.雜類函數(shù)
函數(shù)標(biāo)識符 自變量類型 意義 結(jié)果類型
random 無自變量 [0,1間的隨機(jī)實數(shù) real
random word [0,自變量間的隨機(jī)整數(shù)) word
randomize 無自變量 初始化內(nèi)部隨機(jī)數(shù)產(chǎn)生器 longint
upcase 字符型 使小寫英文字母變?yōu)榇髮?字符型
downcase 字符型 使小寫英文字母變?yōu)榇髮?字符型
2.5 運算符和表達(dá)式
1.運算符和優(yōu)先級
(1)運算符
是實型,如果全部的運算對象都是整型并且運算不是除法,則結(jié)果為整型,若運算是除法,則結(jié)果是實型 a.算術(shù)運算符
運算符 運算 運算對象 結(jié)果類型
+ 加 整型、實型 只要有一個運算對象是實型,結(jié)果就
- 減 整型、實型 是實型,如果全部的運算對象都是整
* 乘 整型、實型 型并且運算不是除法,則結(jié)果為整型,
/ 除 整型、實型 若運算是除法,則結(jié)果是實型。
div 整除 整型 整型
mod 取余 整型 整型
b.邏輯運算符
運算符 運算 運算對象 結(jié)果類型
not 邏輯非 布爾型 布爾型
and 邏輯與 布爾型 布爾型
or 邏輯或 布爾型 布爾型
xor 邏輯異或 布爾型 布爾型
c.關(guān)系運算符
運算符 運算 運算對象 結(jié)果類型
= 等于 簡單類型 布爾型
<> 不等于 簡單類型 布爾型
< 小于 簡單類型 布爾型
> 大于 簡單類型 布爾型
<= 小于等于 簡單類型 布爾型
>= 大于等于 簡單類型 布爾型
(2)優(yōu)先級
運算符 優(yōu)先級
not 1(高)
*,/,div,mod,and 2
xor,+,-,or 3
in,=,<>,>=,<=,<> 4(低)
2.表達(dá)式
(1)算術(shù)表達(dá)式:算術(shù)表達(dá)式是由算術(shù)運算符連接常量、變量、函數(shù)的式子。算術(shù)表達(dá)式中各個運算符的次序為: ( )-->函數(shù)-->*,/,div,mod-->+,1
(2)布爾表達(dá)式:Turbo Pascal提供給布爾表達(dá)式以下基本操作:邏輯運算和關(guān)系運算。
(3)數(shù)學(xué)上的表達(dá)式與pascal語言表達(dá)式的區(qū)別
數(shù)學(xué)表達(dá)式 PASCAL表達(dá)式 注意
2a 2*a *號不能省略
a÷b a/b 除號的寫法
a≠b a<>b 不等號的寫法
a≤b a<=b 小于等于號的寫法
思考與練習(xí):
1、熟記Pascal的保留字和標(biāo)準(zhǔn)標(biāo)識符,明確自定義標(biāo)識符的定義要點。
2、取整函數(shù)int與截斷取整函數(shù)trunc有什么區(qū)別?舉例說明。
3、判斷以下標(biāo)識符的合法性:
a3 3a a17 abcd ex9.5 α β λ
5、將下列的數(shù)學(xué)表達(dá)式改寫成PASCAL表達(dá)式:
b^2-4ac
6、求下列表達(dá)式的值:
20 mod 19 15 mod 9 7 div 8 19 div 3
(4>5) and (7<8)
(8>9) or ( 9<10)
2 and ((3=3) or (3<7))
第三章 順序結(jié)構(gòu)程序設(shè)計
練習(xí)與作業(yè)
3.1 賦值語句
PASCAL有兩個語句可以改變變量的值。賦值語句是其中之一(另一個是讀語句)。賦值,顧名思義,就是把一個值賦予某個量。可以這理解:變量相當(dāng)于裝東西的容器,賦值的過程就是把東西放進(jìn)容器的過程。賦值語句格式如下:
變量:=表達(dá)式;
寫賦值語句有以下幾點要注意:
1、賦值號“:=”
賦值號由兩個字符構(gòu)成,是一個運算符。如果把這兩個字符拆開,那么這兩個字符就是別的意思了:“:”是分隔符而“=”是關(guān)系運算符,判定兩個對象是否相等。剛剛寫程序的同學(xué)要特別注意這一點。
例:a,b:integer;——是一個說明語句。“:”是變量表和變量類型的分隔符
a=b——是一個表達(dá)式。它的值是一個布爾類型的量:TRUE或FALSE
a:=3;——是一個語句。把整型常量值3賦給整型變量a
2、變量要先說明
在賦值號左邊出現(xiàn)的變量,要在程序頭的說明部先加以說明,否則編譯時出錯。
3、表達(dá)式必須要有確定的值
賦值號右邊出現(xiàn)的表達(dá)式,必須是可以求值的。也就是說,經(jīng)過運算之后,能得出一個具體的、確定的值出來。大家想一想,如果連表達(dá)式自己都不知道自己的值是多少,怎么還能把值“賦予”別人呢?
4、賦值號兩邊的數(shù)據(jù)類型必須相同或相容
我們知道,PASCAL中的量不管是變量還是常量都有一個屬性稱為“數(shù)據(jù)類型”。數(shù)據(jù)類型相同的或相容的才可以相互賦值。
怎么來理解這句話呢?打個比方,我們沏功夫茶用的是小茶杯,裝飯時用飯碗。如果用飯碗來泡功夫茶,用小茶杯來裝飯,那情形一定很滑稽而且是不可行的。回到PASCAL中來,賦值號左邊變量如果是整型,右邊表達(dá)式的值的類型也要是整型;賦值號左邊變量如果是字符型,右邊表達(dá)式的值的類型也要是字符型……否則的話,也要出錯了。這是數(shù)據(jù)類型相同的情況。
對于數(shù)據(jù)類型相容的,我們也可以用一個例子來幫助理解。我們都喝過功夫茶,也喝過大杯茶。把功夫茶倒在大茶杯里,一般不會出什么問題;但如果把大杯里的茶倒在功夫茶杯里呢?可能小茶杯裝不下大茶杯里的茶,茶“溢出”了。在PASCAL中也會出現(xiàn)這種情況。當(dāng)一種數(shù)據(jù)類型的取值范圍包含著另一種數(shù)據(jù)類型的取值范圍時,就可能出現(xiàn)類型相容的情況。如實型與整型,整型、字符型與它們各自的子界類型……如果把整型值賦給實型變量,把整型子界值賦給整型變量,不會出錯;但如果反過來,就會出現(xiàn)“溢出”,出錯了。
因些,我們在寫賦值語句時,要注意兩邊的類型是否匹配。
例:有程序如下:
var a,b:integer;c:real;d:0..100;
begin
a:=100;
b:=a;
{-------------以上是相同數(shù)據(jù)類型進(jìn)行賦值}
d:=100;
b:=d;
c:=b;
{-------------以上是相容數(shù)據(jù)類型進(jìn)行賦值}
d:=b;
a:=c;
{-------------以上兩個賦值語句都出現(xiàn)溢出,編譯時出錯}
end.
3.2 讀語句
讀語句(read語句)和賦值語句一樣,能夠改變變量的值。與賦值語句不同,讀語句從鍵盤或文件接收值賦予變量,而賦值語句則直接由程序語句獲得。讀語句格式如下:
read(變量名表);
readln(變量名表);
readln;
讀語句是編程中用得最多的語句之一。在使用時有幾點要注意:
1、變量名表。寫在括號中的變量,都要在變量說明中先預(yù)以說明;變量與變量之間,以“,”分隔;
例:
var a,b:integer;
read(a,b);
2、從鍵盤接收數(shù)據(jù)時,要注意各種不同數(shù)據(jù)類型數(shù)據(jù)的分隔符不同。所謂分隔符就是兩個完整的數(shù)值之間的標(biāo)記,也可以這樣理解,當(dāng)計算機(jī)從鍵盤讀入數(shù)據(jù)時,一旦碰到分隔符,就認(rèn)為當(dāng)前的數(shù)據(jù)讀入已完成,可以把它賦給相應(yīng)的變量了。各種數(shù)據(jù)類型的分隔符如下:
數(shù)值型(包括整型、實型以及它們的子界類型)以空格或回車符作為分隔符;
字符型不需分隔符(因為字符型數(shù)據(jù)的長度固定,只有一個);
字符串以回車符作為分隔符。
3、注意read與readln的區(qū)別
例:有兩段程序有相同的變量說明如下,不同的讀語句,我們可以通過比較它們執(zhí)行結(jié)果的異同來理解read與readln的區(qū)別。
變量說明 var a,b,c,d:integer; 執(zhí)行結(jié)果
a b c d
程序段一 read(a);
readln(b,c);
read(d);
1 2 3 6
程序段二 readln(a);
read(b,c);
read(d) 1 6 7 8
輸入數(shù)據(jù) 1 2 3 4 5
6 7 8
在程序段一執(zhí)行時,“read(a);”語句接收了第一個數(shù)據(jù)1并將它賦給變量a;接著執(zhí)行第二個語句“readln(b,c);”,接收了第一行數(shù)據(jù)中的2、3并把它們分別賦給變量b,c,同時,把本行其它數(shù)據(jù)全部屏蔽掉,也就是宣布它們?nèi)孔鲝U。程序段二的執(zhí)行情況也是如此。
因此,我們可以得出結(jié)論:語句read只管接收數(shù)據(jù),語句readln接收完數(shù)據(jù)后,還把同行的其它數(shù)據(jù)全部宣布作廢。
4、“readln;”語句從鍵盤接收一個回車符。這個語句通常用在需要暫停的地方。如輸出時用來等待程序員看清結(jié)果。
3.3 寫語句
寫(write)語句是Pascal中唯一能將運算結(jié)果送出顯示在顯示器屏幕的語句。格式如下:
write(輸出量表);{輸出后不換行}
writeln(輸出量表);{輸出后換行}
writeln;{輸出一個回車符}
使用寫語句時也有一些小問題需要注意。
1、輸出量可以是:
變量。輸出變量的值。輸出多個變量時,變量間用“,”分隔。
表達(dá)式。輸出的是表達(dá)式的值。
常量。直接輸出常量值。
2、場寬的限制在輸出不同格式的數(shù)值時的作用:
例1:輸出多個空格。
write('':n);句子的意思是以n個字符寬度輸出冒號前數(shù)據(jù)項,如果數(shù)據(jù)項長度不足n,則前面以空格補(bǔ)齊;如果數(shù)據(jù)項長度大于n,則以實際長度輸出。如上語句句輸出n個空格。
例2:數(shù)據(jù)項間隔。
如輸出最多四位的數(shù)據(jù):write(x:5)。則數(shù)據(jù)間至少分隔一個空格。
例3:實型數(shù)據(jù)小數(shù)位數(shù)的確定。
實型數(shù)據(jù)不帶格式限制時,以科學(xué)計數(shù)法的形式輸出,和我們的一般書寫習(xí)慣不同。如果加上場寬的限制,則可以有不同的效果:
var a:real;
begin
a:=15/8;
writeln(a);{輸出 1.8750000000E+00}
wiiteln(a:0:2);{輸出 1.88 整數(shù)部分按實際位數(shù)輸出,小數(shù)部分保留兩位小數(shù),末位四舍五入.}
writeln(a:0:0):{輸出 2 只輸出整數(shù)部分,小數(shù)部分四舍五入}
end.
3、“writeln;”語句通常用于輸出多組數(shù)據(jù)時在屏幕上輸出空行來分隔數(shù)據(jù)組。
思考與練習(xí):
1、 用字符輸出一個豬錦佳的頭像。
2、 a,b,c分別等于1、12、123,把它們按向左對齊、向右對齊的方式打印出來。
3、 輸入一個四位整數(shù),把它的各位數(shù)字倒序輸出。(提示:用MOD和DIV運算完成)
4、 從鍵盤上讀入小寫的"pascal",利用CHR()和ORD()函數(shù),輸出大寫的"PASCAL"。
5、 從鍵盤上讀入一個實數(shù),利用ROUND()和TRUNC()函數(shù),輸出該實數(shù)本身、整數(shù)部分、小數(shù)部分、四舍五入后的值。
要求:分三行輸出 ;輸出實數(shù)本身時,格式與讀入時相同;整數(shù)部分、小數(shù)部分在同一行輸出;其它各占一行。
6、 從鍵盤上讀入長方形的邊長a,b,計算它的面積和周長,輸出。
7、 輸入一個時、分、秒,把它轉(zhuǎn)換為一個秒數(shù)。
12.1 單步執(zhí)行
任何一個天才都不敢說,他編的程序是100%正確的。幾乎每一個稍微復(fù)雜一點的程序都必須經(jīng)過反復(fù)的調(diào)試,修改,最終才完成。所以說,程序的調(diào)試是編程中的一項重要技術(shù)。我們現(xiàn)在就來掌握一下基本的程序調(diào)試。 我們以下的示范,是以時下比較流行的Borland Pascal 7.0為例子,其他的編程環(huán)境可能略有不同,但大致上是一致的。
我們先編一個比較簡單的程序,看看程序是如何調(diào)試的。
program tiaoshi;
var i:integer;
begin
for i:=1 to 300 do
begin
if i mod 2 = 0 then
if i mod 3 = 0 then
if i mod 5 = 0 then
writeln(i);
end;
end.
該程序是輸出300以內(nèi)同時能被2,3,5整除的整數(shù)。 現(xiàn)在我們開始調(diào)試。 調(diào)試有多種方法,先介紹一種,權(quán)且叫步驟法,步驟法就是模擬計算機(jī)的運算,把程序每一步執(zhí)行的情況都反映出來。通常,我們有F8即STEP這個功能來實現(xiàn),如圖: 不斷地按F8,計算機(jī)就會一步步地執(zhí)行程序,直到執(zhí)行到最后的“end.”為止。
可能你還沒有發(fā)現(xiàn)F8的威力,我們不妨把上面的程序略微修改一下,再配合另外的一種調(diào)試的利器watch,你就會發(fā)現(xiàn)步驟法的用處。
program tiaoshi;
var i:integer;
a,b,c:boolean;
begin
for i:=1 to 300 do
begin
a:=false;
b:=false;
c:=false;
if i mod 2 = 0 then a:=true;
if i mod 3 = 0 then b:=true;
if i mod 5 = 0 then c:=true;
if a and b and c then writeln(i);
end;
end.
如圖,我們單擊菜單欄中debug選項,里面有一項叫watch的選項,我們單擊它。
就會出現(xiàn)一個watch窗口:
watch窗口可以讓我們觀察變量的變化情況,具體操作是在watches窗口內(nèi)按Insert鍵:
這時,屏幕上彈出一個菜單,我們輸入所需要觀察的變量名,我們分別輸入i,a,b,c這4個變量名,于是watches窗口內(nèi)就有如下的4個變量的狀態(tài):
這時,我們再次使用步驟法,我們會發(fā)現(xiàn),這4個變量的狀態(tài)隨著程序的執(zhí)行而不斷變化,比如:
這樣我們就可以方便地知道執(zhí)行每一步之后,程序的各個變量的變化情況,從中我們可以知道我們的程序是否出錯,在哪里出錯,方便我們及時地修改。 下一次,我們介紹另外的一種方法,斷點法。
12.2 斷點發(fā)
在前面我們已經(jīng)學(xué)習(xí)了基本的程序調(diào)試方法——步驟法。步驟法有一個缺點,就是在遇到循環(huán)次數(shù)比較多或者語句比較多的時候,用起來比較費時,今天我們來學(xué)習(xí)一種新的也是常用的調(diào)試方法——斷點法。
所謂斷點法,就是在程序執(zhí)行到某一行的時候,計算機(jī)自動停止運行,并保留這時各變量的狀態(tài),方便我們檢查,校對。我們還是以前面求同時能被2,3,5整除的3000以內(nèi)的自然數(shù)為例,具體操作如下:
我們把光標(biāo)移動到程序的第14行,按下ctrl+F8,這時我們會發(fā)現(xiàn),該行變成紅色,這表明該行已經(jīng)被設(shè)置成斷點行,當(dāng)我們每次運行到第14行的時候,計算機(jī)都會自動停下來供我們調(diào)試。
我們必須學(xué)以致用,趕快運用剛學(xué)的watch方法,看看這家伙到底有多厲害。
請記住,計算機(jī)是執(zhí)行到斷點行之前的一行,斷點行并沒有執(zhí)行,所以這時b:=true這一句并沒有執(zhí)行。
斷點行除了有以上用處之外,還有另外一個重要用處。它方便我們判斷某個語句有沒有執(zhí)行或者是不是在正確的時刻執(zhí)行,因為有時程序由于人為的疏忽,可能在循環(huán)或者遞歸時出現(xiàn)我們無法預(yù)料的混亂,這時候通過斷點法,我們就能夠判斷程序是不是依照我們預(yù)期的順序執(zhí)行。
告訴我你的郵箱,或者你發(fā)郵件過來,我的郵箱是acqc1@163.com,我們用的一個教程,十分詳細(xì),本人韶關(guān)市一中電腦培訓(xùn)班的。
http://58.61.34.206/down?cid=40168D62DB367215969232759B7E525239EAA785&t=3&fmt=-
這里有
我有,是一個文件來的。
QQ:464828678
你的郵箱,我的郵箱是zfz1995@126.com,可能不好用,或者找QQ:381972794,這里有解答,ppt版
蠻蝦18888032189: 求用 free pascal 編一程序、 -
墨脫縣工程: ______ var a,b,c:longint; p,s:double;begin readln(a,b,c); if (a+b<=c)or(b+c<=a)or(c+a<=b) then writeln('no answer')else begin p:=(a+b+c)/2; s:=sqrt(p*(p-...
蠻蝦18888032189: 求一道free pascal題目的源代碼 -
墨脫縣工程: ______ DP program phx;var i,j,temp,n,m,max1:longint;data,f:array [1..100,1..100] of longint;function max(a,b:longint):longint;beginif a>b then exit(a)else exit(b);end;function dp(i,j:longint):longint;var l1,l2,l3,l4:longint;beginif f[i,j]<>maxlongintthen exit(f[i,j]);l1:=...
蠻蝦18888032189: free pascal問題 -
墨脫縣工程: ______ type arr=array[1..10000]of longint;var s1,s2:ansistring; ch:char;function dy(a,b:ansistring):boolean;begin if length(a)>length(b) then exit(true); if length(b)>length(a) then e...
蠻蝦18888032189: Free Pascal沒有錯誤提示,怎么辦? -
墨脫縣工程: ______ 編譯錯誤有提示 運行錯誤也有提示 沒提示說明你對了 代碼看不懂,看下面錯誤代碼及錯誤信息 錯誤釋義 error 1: Out of memory 內(nèi)存溢出 error 2: Identifier expected 缺標(biāo)識符 erro...
蠻蝦18888032189: 求高手幫忙檢查一下Free Pascal的代碼(主要是一維數(shù)組) -
墨脫縣工程: ______ 呵呵,這是PASCAL的一個特點,必須在最前面進(jìn)行定義,由于你的“N”是一個變量,系統(tǒng)不知道要給多少的空間,所以當(dāng)然就編譯不了,你可以直接用定值(在“var...
蠻蝦18888032189: turbo pascal7.0使用方法 -
墨脫縣工程: ______ 3月16日14:56 一、FP與TP的本質(zhì)區(qū)別雖然Free Pascal盡量設(shè)計得和Turbo Pascal接近,但是由于以下的兩個原因,兩者之間還是有一些區(qū)別的:1.Free Pascal是一個32位的編譯器,而Turbo Pascal...
蠻蝦18888032189: 求助,free pascal 的一個小問題 -
墨脫縣工程: ______ 四種辦法:1、先窗口化message可能會在窗口最下面.2、菜單的Tools里也有message3、按F11試試4、真不行就重裝FP了...
蠻蝦18888032189: Free Pascal,求編程好手來!幫我看看哪里出錯了,輸入10,應(yīng)該輸出2,但我的程序輸出3. -
墨脫縣工程: ______ function check(n:longint):boolean;var i:longint;begin check:=true; for i:=2 to trunc(sqrt(n)) do if n mod i=0...
蠻蝦18888032189: Free Pascal語言.求10個數(shù)的最大值和最小值,我們循環(huán)語句的作業(yè),幫看下,我不會 -
墨脫縣工程: ______ 只要從一開始比較,小的就賦給min,大的就賦給maxprogram ex1; var max,min,i,n:longint; begin max:=-maxlongint; min...
蠻蝦18888032189: free pascal中windows庫有什么用? -
墨脫縣工程: ______ free pascal只是一個編譯器,沒有windows庫的話,只能編譯控制臺(字符界面,說成DOS界面也不能算大錯)的程序,有庫比如gdi32等,就可以有窗體和一些作圖函數(shù)了.
1.下載Turbo Pascal6.0
(1)下載turbo pascal
(2)屬性設(shè)置
2.Turbo Pascal 6.0環(huán)境介紹
(1)進(jìn)入與退出(注意:退出時必須使用文件菜單中的退出命令或Alt+X)
(2)編輯程序
光標(biāo)移動鍵的使用
Backspace鍵:刪除光標(biāo)前一個字符
Ctrl+N:在光標(biāo)前插入一行
Ctrl+Y:刪除光標(biāo)所在行
Home:光標(biāo)移到行首
End:光標(biāo)移到行尾
PageUp/PageDown:上下翻頁
Insert:插入與改寫狀態(tài)切換
(3)編譯程序(Compile):Alt+F9
(4)運行程序(Run):Ctrl+F9
(5)保存程序(Save):F2
(6)打開原有的程序:F3
(7)查看程序運行結(jié)果:Alt+F5
(8)調(diào)試時增加觀察項:Ctrl+F7
1.2 簡單Pascal程序的結(jié)構(gòu)
例1下列是一Pascal源程序:
program lt1;{程序首部}
var {說明部分}
a,b:integer;
sum:integer;
begin {執(zhí)行部分}
a:=3355;
b:=789;
sum:=a+b;
writeln('sum=',sum);
end.
1.3 完整的Pascal程序結(jié)構(gòu)
一個完全的Pascal程序結(jié)構(gòu)
program 程序名;
uses 已知單元說明;
label 標(biāo)號說明;
const 常量說明;
type 類型說明;
var 變量說明;
function 函數(shù)說明;
procedure 過程說明;
begin
語句;
語句;
……
語句;
end.
作業(yè):
1.熟悉Pascal編輯環(huán)境.
2.記住快捷鍵的使用.
3.編寫78*67的值的Pascal程序并運行.
第二章Pascal語言基礎(chǔ)知識
2.1 Pascal的字符與符號
2.2 Pascal數(shù)據(jù)類型
2.3 常量與變量
2.4 標(biāo)準(zhǔn)函數(shù)
2.5 運算符和表達(dá)式
練習(xí)與作業(yè)
2.1 Pascal字符與符號
1.標(biāo)識符
(1) 標(biāo)識符的定義:標(biāo)識符就是以字母開頭的字母數(shù)字序列,有效長度為63個字符,并且大小寫等效。可以用來標(biāo)示常量、變量、程序、函數(shù)等。例如例1.1中的Area(程序名),pi(符號常量),s、r(變量名)都是標(biāo)識符。
(2) 標(biāo)識符的分類:
a.保留字(關(guān)鍵字)
所謂保留字是指在Pascal語言中具有特定的含義,你必須了解它的含義,以便于正確的使用,否則會造成錯誤。標(biāo)準(zhǔn)Pascal語言中的保留字一共有35個,Turbo Pascal語言一共有51個。下面是Pascal語言的保留字:
AND,ARRAY,BEGIN,CASE,CONST,DIV,DO,DOWNTO,ELSE,END,F(xiàn)ILE,F(xiàn)OR,F(xiàn)UNTION,GOTO,IF,IN,LABEL,MOD,NIL,NOT,OF,OR,PACKED,PROCEDURE,PROGRAM,RECORD,REPEAT,SET,THEN,TO,TYPE,UNTIL,VAR,WHILE,WITH等
b.標(biāo)準(zhǔn)標(biāo)識符:指Pascal語言預(yù)先定義的標(biāo)識符,具有特殊含義。
以下列舉了Turbo Pascal語言部分常用的標(biāo)準(zhǔn)表識符:
標(biāo)準(zhǔn)常量 False Maxint True
標(biāo)準(zhǔn)類型 Boolean Char Real Integer
標(biāo)準(zhǔn)函數(shù) Abs Arctan Chr Cos Eof Eoln Exp
Ln Odd Ord Pred Round Sin Sqr
Sqrt Succ Trunc
標(biāo)準(zhǔn)過程 Dispose Get New Pack Page Put Read
Readln Reset Rewrite Unpack Write Writeln
標(biāo)準(zhǔn)文件 Input Output
c.用戶自定義標(biāo)識符:由你自己根據(jù)需要來定義。
(1)選用的標(biāo)識符不能和保留字相同。
(2)語法上允許預(yù)定義的標(biāo)準(zhǔn)標(biāo)識符作為你自己定義的標(biāo)識符使用,但最好還是不要用。
以下列舉了你自己在定義標(biāo)識符時可以用的字符:
A——Z;a——z;0——9;+,-,*,/,=,<>,<=,>=,<,>,(,),[,],{,},:=,,,;,.,:,..,',^
2.2 Pascal數(shù)據(jù)類型
數(shù)據(jù)是程序設(shè)計的一個重要內(nèi)容,其重要特征----數(shù)據(jù)類型,確定了該數(shù)據(jù)的形、取值范圍以及所能參與的運算。
Turbo Pascal 提供了豐富的數(shù)據(jù)類型,這些數(shù)據(jù)類型可以分為三大類:簡單類型、構(gòu)造類型和指針類型,其中簡單類型可以分為標(biāo)準(zhǔn)類型(整型、實型、字符型和布爾型)和自定義類型(枚舉型和子界型),構(gòu)造類型可以分為數(shù)組類型、集合類型、記錄類型和文件類型。這些數(shù)據(jù)類型中除了指針類型是動態(tài)數(shù)據(jù)類型外,其他的都是靜態(tài)數(shù)據(jù)類型。在這些數(shù)據(jù)類型中的簡單類型都是有序類型,除了實型以外的簡單類型都是順序類型,所謂順序類型就是他們的值不僅是有序的而且是有順序號。
在這里主要介紹整型、實型、字符型和布爾型四種常用的數(shù)據(jù)類型。
1.整型
一個整型數(shù)據(jù)用來存放整數(shù)。Turbo Pascal支持五種預(yù)定義整型,它們是shortint(短整型)、 integer(整型)、 longint(長整型)、 byte(字節(jié)型)和 word(字類型),Turbo Pascal分別用相同的名字作為他們的標(biāo)識符。每一種類型規(guī)定了相應(yīng)的整數(shù)取值范圍以及所占用的內(nèi)存字節(jié)數(shù)。
類型 數(shù)值范圍 占字節(jié)數(shù) 格式
shortint -128..128 1 帶符號8位
inteter -32768..32767 2 帶符號16位
longint -2147483648..2147483647 4 帶符號32位
byte 0..255 1 帶符號8位
word 0..65535 2 帶符號16位
Turbo Pascal規(guī)定了兩個預(yù)定義整型常量標(biāo)識符maxint和maxlonint,他們各表示確定的常數(shù)值,maxint為32767, longint為2147483647,他們的類型分別是integer 和longint
2.實型
一個實型數(shù)據(jù)用來存放實數(shù)。Turbo Pascal支持五種預(yù)定義實型,它們是real(基本實型)、 single(但精度實型)、double(雙精度實型)、extended(擴(kuò)展實型)、comp(裝配實型),Turbo Pascal分別用相同的名字作為他們的標(biāo)識符。每一種類型規(guī)定了相應(yīng)的實數(shù)取值范圍、所占用的內(nèi)存字節(jié)數(shù)以及它們所能達(dá)到的精度
類型 數(shù)值范圍 占字節(jié)數(shù) 有效位數(shù)
real 2.9e-39..1.7e38 6 11..12
single 1.5e-45..3.4e38 4 7..8
double 5.0e-324..1.7e308 8 15..16
Turbo Pascal支持兩種用于執(zhí)行實型運算的代碼生成模式:軟件仿真模式和80x87浮點模式。除了real可以在軟件仿真模式下直接運行以外,其他類型必須在80x87浮點模式下運行。
3.布爾型
一個布爾型數(shù)據(jù)用來存放邏輯值(布爾值)。布爾型的值只有兩個:false和true,并且false的序號是0,true的序號是1。false 和true都是預(yù)定義常數(shù)標(biāo)識符,分別表示邏輯假和邏輯真。并且true<false。boolean是布爾型的標(biāo)識符。
4.字符型
字符型用char作為標(biāo)識符。字符型必須用單引號括起來,字母作為字符型時,大小寫是不等價的,并且字符型只允許單引號中有一個字符,否則就是字符串。
2.3 常量與變量
1.常量
(1)常量:在某個程序的整個過程中其值不變的量。
(2)常量定義:常量定義出現(xiàn)在說明部分。它的語法格式是:
const
<常量標(biāo)識符>=<常量>;
...
<常量標(biāo)識符>=<常量>;
常量標(biāo)識符的類型由定義它的常量的類型決定。例如:const a=12 隱含說明a是整型;const r=3.21 隱含說明r是實型......
(3)常量定義部分必須以保留字const開頭,可以包含一個或幾個常量定義,而且每個常量均以分號結(jié)束。
(4)Turbo Pascal類型常量
類型常量,又稱變量常數(shù),它是Turbo Pascal的一個擴(kuò)充特性。類型常量的定義與標(biāo)準(zhǔn)Pascal規(guī)定的常數(shù)定義和變量說明有所區(qū)別。類型常量定義的語法格式:
const
<簡單類型常量標(biāo)識符>:簡單類型=常數(shù);
例如:
const
counter:integer=0;
flag:boolean=true;
index:0..100=0;
2.變量
(1)變量:在某個程序中的運行過程中其值可以發(fā)生改變的量
(2)變量說明:變量說明出現(xiàn)在說明部分。它的語法格式是:
var
<變量標(biāo)識符列表>:<類型>;
...
<變量標(biāo)識符列表>:<類型>;
其中,保留字var表示開始一個變量說明部分。變量標(biāo)識符列表是一個用逗號隔開的標(biāo)識符序列,冒號后面的類型是類型標(biāo)識符。每個變量說明均以分號結(jié)束。
例如:
var
a,b,c:integer;
m,n:real;
2.4 標(biāo)準(zhǔn)函數(shù)
1.算術(shù)函數(shù)
函數(shù)標(biāo)識符 自變量類型 意義 結(jié)果類型
abs 整型、實型 絕對值 同自變量
arctan 整型、實型 反正切 實型
cos 整型、實型 余弦 實型
exp 整型、實型 指數(shù) 實型
frac 整型、實型 小數(shù)部分 實型
int 整型、實型 整數(shù)部分 實型
ln 整型、實型 自然對數(shù) 實型
pi 無自變量 圓周率 實型
sin 整型、實型 正弦 實型
sqr 整型、實型 平方 同自變量
sqrt 整型、實型 平方根 實型
例:abs(-4)=4 abs(-7.49)=7.49 arctan(0)=0.0
sin(pi)=0.0 cos(pi)=-1.0 frac(-3.71)=-0.71
int(-3.71)=-3.0 sqr(4)=16 sqrt(4)=2
2.標(biāo)準(zhǔn)函數(shù)
函數(shù)標(biāo)識符 自變量類型 意義 結(jié)果類型
odd 整型 判斷奇數(shù) 布爾型
pred 離散類型 求前趨 同自變量
succ 離散類型 求后繼 同自變量
例:odd(1000)=false pred(2000)=1999 succ(2000)=2001
odd(3)=true pred('x')='w succ('x')='y'
3.轉(zhuǎn)換函數(shù)
函數(shù)標(biāo)識符 自變量類型 意義 結(jié)果類型
chr byte 自變量對應(yīng)的字符 字符型
ord 離散類型 自變量對應(yīng)的序號 longint
round 實型 四舍五入 longint
trunc 實型 截斷取整 longint
例:chr(66)='B' ord('A')=65 round(-4.3)=-5 trunc(2.88)=2
4.雜類函數(shù)
函數(shù)標(biāo)識符 自變量類型 意義 結(jié)果類型
random 無自變量 [0,1間的隨機(jī)實數(shù) real
random word [0,自變量間的隨機(jī)整數(shù)) word
randomize 無自變量 初始化內(nèi)部隨機(jī)數(shù)產(chǎn)生器 longint
upcase 字符型 使小寫英文字母變?yōu)榇髮?字符型
downcase 字符型 使小寫英文字母變?yōu)榇髮?字符型
2.5 運算符和表達(dá)式
1.運算符和優(yōu)先級
(1)運算符
是實型,如果全部的運算對象都是整型并且運算不是除法,則結(jié)果為整型,若運算是除法,則結(jié)果是實型 a.算術(shù)運算符
運算符 運算 運算對象 結(jié)果類型
+ 加 整型、實型 只要有一個運算對象是實型,結(jié)果就
- 減 整型、實型 是實型,如果全部的運算對象都是整
* 乘 整型、實型 型并且運算不是除法,則結(jié)果為整型,
/ 除 整型、實型 若運算是除法,則結(jié)果是實型。
div 整除 整型 整型
mod 取余 整型 整型
b.邏輯運算符
運算符 運算 運算對象 結(jié)果類型
not 邏輯非 布爾型 布爾型
and 邏輯與 布爾型 布爾型
or 邏輯或 布爾型 布爾型
xor 邏輯異或 布爾型 布爾型
c.關(guān)系運算符
運算符 運算 運算對象 結(jié)果類型
= 等于 簡單類型 布爾型
<> 不等于 簡單類型 布爾型
< 小于 簡單類型 布爾型
> 大于 簡單類型 布爾型
<= 小于等于 簡單類型 布爾型
>= 大于等于 簡單類型 布爾型
(2)優(yōu)先級
運算符 優(yōu)先級
not 1(高)
*,/,div,mod,and 2
xor,+,-,or 3
in,=,<>,>=,<=,<> 4(低)
2.表達(dá)式
(1)算術(shù)表達(dá)式:算術(shù)表達(dá)式是由算術(shù)運算符連接常量、變量、函數(shù)的式子。算術(shù)表達(dá)式中各個運算符的次序為: ( )-->函數(shù)-->*,/,div,mod-->+,1
(2)布爾表達(dá)式:Turbo Pascal提供給布爾表達(dá)式以下基本操作:邏輯運算和關(guān)系運算。
(3)數(shù)學(xué)上的表達(dá)式與pascal語言表達(dá)式的區(qū)別
數(shù)學(xué)表達(dá)式 PASCAL表達(dá)式 注意
2a 2*a *號不能省略
a÷b a/b 除號的寫法
a≠b a<>b 不等號的寫法
a≤b a<=b 小于等于號的寫法
思考與練習(xí):
1、熟記Pascal的保留字和標(biāo)準(zhǔn)標(biāo)識符,明確自定義標(biāo)識符的定義要點。
2、取整函數(shù)int與截斷取整函數(shù)trunc有什么區(qū)別?舉例說明。
3、判斷以下標(biāo)識符的合法性:
a3 3a a17 abcd ex9.5 α β λ
5、將下列的數(shù)學(xué)表達(dá)式改寫成PASCAL表達(dá)式:
b^2-4ac
6、求下列表達(dá)式的值:
20 mod 19 15 mod 9 7 div 8 19 div 3
(4>5) and (7<8)
(8>9) or ( 9<10)
2 and ((3=3) or (3<7))
第三章 順序結(jié)構(gòu)程序設(shè)計
練習(xí)與作業(yè)
3.1 賦值語句
PASCAL有兩個語句可以改變變量的值。賦值語句是其中之一(另一個是讀語句)。賦值,顧名思義,就是把一個值賦予某個量。可以這理解:變量相當(dāng)于裝東西的容器,賦值的過程就是把東西放進(jìn)容器的過程。賦值語句格式如下:
變量:=表達(dá)式;
寫賦值語句有以下幾點要注意:
1、賦值號“:=”
賦值號由兩個字符構(gòu)成,是一個運算符。如果把這兩個字符拆開,那么這兩個字符就是別的意思了:“:”是分隔符而“=”是關(guān)系運算符,判定兩個對象是否相等。剛剛寫程序的同學(xué)要特別注意這一點。
例:a,b:integer;——是一個說明語句。“:”是變量表和變量類型的分隔符
a=b——是一個表達(dá)式。它的值是一個布爾類型的量:TRUE或FALSE
a:=3;——是一個語句。把整型常量值3賦給整型變量a
2、變量要先說明
在賦值號左邊出現(xiàn)的變量,要在程序頭的說明部先加以說明,否則編譯時出錯。
3、表達(dá)式必須要有確定的值
賦值號右邊出現(xiàn)的表達(dá)式,必須是可以求值的。也就是說,經(jīng)過運算之后,能得出一個具體的、確定的值出來。大家想一想,如果連表達(dá)式自己都不知道自己的值是多少,怎么還能把值“賦予”別人呢?
4、賦值號兩邊的數(shù)據(jù)類型必須相同或相容
我們知道,PASCAL中的量不管是變量還是常量都有一個屬性稱為“數(shù)據(jù)類型”。數(shù)據(jù)類型相同的或相容的才可以相互賦值。
怎么來理解這句話呢?打個比方,我們沏功夫茶用的是小茶杯,裝飯時用飯碗。如果用飯碗來泡功夫茶,用小茶杯來裝飯,那情形一定很滑稽而且是不可行的。回到PASCAL中來,賦值號左邊變量如果是整型,右邊表達(dá)式的值的類型也要是整型;賦值號左邊變量如果是字符型,右邊表達(dá)式的值的類型也要是字符型……否則的話,也要出錯了。這是數(shù)據(jù)類型相同的情況。
對于數(shù)據(jù)類型相容的,我們也可以用一個例子來幫助理解。我們都喝過功夫茶,也喝過大杯茶。把功夫茶倒在大茶杯里,一般不會出什么問題;但如果把大杯里的茶倒在功夫茶杯里呢?可能小茶杯裝不下大茶杯里的茶,茶“溢出”了。在PASCAL中也會出現(xiàn)這種情況。當(dāng)一種數(shù)據(jù)類型的取值范圍包含著另一種數(shù)據(jù)類型的取值范圍時,就可能出現(xiàn)類型相容的情況。如實型與整型,整型、字符型與它們各自的子界類型……如果把整型值賦給實型變量,把整型子界值賦給整型變量,不會出錯;但如果反過來,就會出現(xiàn)“溢出”,出錯了。
因些,我們在寫賦值語句時,要注意兩邊的類型是否匹配。
例:有程序如下:
var a,b:integer;c:real;d:0..100;
begin
a:=100;
b:=a;
{-------------以上是相同數(shù)據(jù)類型進(jìn)行賦值}
d:=100;
b:=d;
c:=b;
{-------------以上是相容數(shù)據(jù)類型進(jìn)行賦值}
d:=b;
a:=c;
{-------------以上兩個賦值語句都出現(xiàn)溢出,編譯時出錯}
end.
3.2 讀語句
讀語句(read語句)和賦值語句一樣,能夠改變變量的值。與賦值語句不同,讀語句從鍵盤或文件接收值賦予變量,而賦值語句則直接由程序語句獲得。讀語句格式如下:
read(變量名表);
readln(變量名表);
readln;
讀語句是編程中用得最多的語句之一。在使用時有幾點要注意:
1、變量名表。寫在括號中的變量,都要在變量說明中先預(yù)以說明;變量與變量之間,以“,”分隔;
例:
var a,b:integer;
read(a,b);
2、從鍵盤接收數(shù)據(jù)時,要注意各種不同數(shù)據(jù)類型數(shù)據(jù)的分隔符不同。所謂分隔符就是兩個完整的數(shù)值之間的標(biāo)記,也可以這樣理解,當(dāng)計算機(jī)從鍵盤讀入數(shù)據(jù)時,一旦碰到分隔符,就認(rèn)為當(dāng)前的數(shù)據(jù)讀入已完成,可以把它賦給相應(yīng)的變量了。各種數(shù)據(jù)類型的分隔符如下:
數(shù)值型(包括整型、實型以及它們的子界類型)以空格或回車符作為分隔符;
字符型不需分隔符(因為字符型數(shù)據(jù)的長度固定,只有一個);
字符串以回車符作為分隔符。
3、注意read與readln的區(qū)別
例:有兩段程序有相同的變量說明如下,不同的讀語句,我們可以通過比較它們執(zhí)行結(jié)果的異同來理解read與readln的區(qū)別。
變量說明 var a,b,c,d:integer; 執(zhí)行結(jié)果
a b c d
程序段一 read(a);
readln(b,c);
read(d);
1 2 3 6
程序段二 readln(a);
read(b,c);
read(d) 1 6 7 8
輸入數(shù)據(jù) 1 2 3 4 5
6 7 8
在程序段一執(zhí)行時,“read(a);”語句接收了第一個數(shù)據(jù)1并將它賦給變量a;接著執(zhí)行第二個語句“readln(b,c);”,接收了第一行數(shù)據(jù)中的2、3并把它們分別賦給變量b,c,同時,把本行其它數(shù)據(jù)全部屏蔽掉,也就是宣布它們?nèi)孔鲝U。程序段二的執(zhí)行情況也是如此。
因此,我們可以得出結(jié)論:語句read只管接收數(shù)據(jù),語句readln接收完數(shù)據(jù)后,還把同行的其它數(shù)據(jù)全部宣布作廢。
4、“readln;”語句從鍵盤接收一個回車符。這個語句通常用在需要暫停的地方。如輸出時用來等待程序員看清結(jié)果。
3.3 寫語句
寫(write)語句是Pascal中唯一能將運算結(jié)果送出顯示在顯示器屏幕的語句。格式如下:
write(輸出量表);{輸出后不換行}
writeln(輸出量表);{輸出后換行}
writeln;{輸出一個回車符}
使用寫語句時也有一些小問題需要注意。
1、輸出量可以是:
變量。輸出變量的值。輸出多個變量時,變量間用“,”分隔。
表達(dá)式。輸出的是表達(dá)式的值。
常量。直接輸出常量值。
2、場寬的限制在輸出不同格式的數(shù)值時的作用:
例1:輸出多個空格。
write('':n);句子的意思是以n個字符寬度輸出冒號前數(shù)據(jù)項,如果數(shù)據(jù)項長度不足n,則前面以空格補(bǔ)齊;如果數(shù)據(jù)項長度大于n,則以實際長度輸出。如上語句句輸出n個空格。
例2:數(shù)據(jù)項間隔。
如輸出最多四位的數(shù)據(jù):write(x:5)。則數(shù)據(jù)間至少分隔一個空格。
例3:實型數(shù)據(jù)小數(shù)位數(shù)的確定。
實型數(shù)據(jù)不帶格式限制時,以科學(xué)計數(shù)法的形式輸出,和我們的一般書寫習(xí)慣不同。如果加上場寬的限制,則可以有不同的效果:
var a:real;
begin
a:=15/8;
writeln(a);{輸出 1.8750000000E+00}
wiiteln(a:0:2);{輸出 1.88 整數(shù)部分按實際位數(shù)輸出,小數(shù)部分保留兩位小數(shù),末位四舍五入.}
writeln(a:0:0):{輸出 2 只輸出整數(shù)部分,小數(shù)部分四舍五入}
end.
3、“writeln;”語句通常用于輸出多組數(shù)據(jù)時在屏幕上輸出空行來分隔數(shù)據(jù)組。
思考與練習(xí):
1、 用字符輸出一個豬錦佳的頭像。
2、 a,b,c分別等于1、12、123,把它們按向左對齊、向右對齊的方式打印出來。
3、 輸入一個四位整數(shù),把它的各位數(shù)字倒序輸出。(提示:用MOD和DIV運算完成)
4、 從鍵盤上讀入小寫的"pascal",利用CHR()和ORD()函數(shù),輸出大寫的"PASCAL"。
5、 從鍵盤上讀入一個實數(shù),利用ROUND()和TRUNC()函數(shù),輸出該實數(shù)本身、整數(shù)部分、小數(shù)部分、四舍五入后的值。
要求:分三行輸出 ;輸出實數(shù)本身時,格式與讀入時相同;整數(shù)部分、小數(shù)部分在同一行輸出;其它各占一行。
6、 從鍵盤上讀入長方形的邊長a,b,計算它的面積和周長,輸出。
7、 輸入一個時、分、秒,把它轉(zhuǎn)換為一個秒數(shù)。
12.1 單步執(zhí)行
任何一個天才都不敢說,他編的程序是100%正確的。幾乎每一個稍微復(fù)雜一點的程序都必須經(jīng)過反復(fù)的調(diào)試,修改,最終才完成。所以說,程序的調(diào)試是編程中的一項重要技術(shù)。我們現(xiàn)在就來掌握一下基本的程序調(diào)試。 我們以下的示范,是以時下比較流行的Borland Pascal 7.0為例子,其他的編程環(huán)境可能略有不同,但大致上是一致的。
我們先編一個比較簡單的程序,看看程序是如何調(diào)試的。
program tiaoshi;
var i:integer;
begin
for i:=1 to 300 do
begin
if i mod 2 = 0 then
if i mod 3 = 0 then
if i mod 5 = 0 then
writeln(i);
end;
end.
該程序是輸出300以內(nèi)同時能被2,3,5整除的整數(shù)。 現(xiàn)在我們開始調(diào)試。 調(diào)試有多種方法,先介紹一種,權(quán)且叫步驟法,步驟法就是模擬計算機(jī)的運算,把程序每一步執(zhí)行的情況都反映出來。通常,我們有F8即STEP這個功能來實現(xiàn),如圖: 不斷地按F8,計算機(jī)就會一步步地執(zhí)行程序,直到執(zhí)行到最后的“end.”為止。
可能你還沒有發(fā)現(xiàn)F8的威力,我們不妨把上面的程序略微修改一下,再配合另外的一種調(diào)試的利器watch,你就會發(fā)現(xiàn)步驟法的用處。
program tiaoshi;
var i:integer;
a,b,c:boolean;
begin
for i:=1 to 300 do
begin
a:=false;
b:=false;
c:=false;
if i mod 2 = 0 then a:=true;
if i mod 3 = 0 then b:=true;
if i mod 5 = 0 then c:=true;
if a and b and c then writeln(i);
end;
end.
如圖,我們單擊菜單欄中debug選項,里面有一項叫watch的選項,我們單擊它。
就會出現(xiàn)一個watch窗口:
watch窗口可以讓我們觀察變量的變化情況,具體操作是在watches窗口內(nèi)按Insert鍵:
這時,屏幕上彈出一個菜單,我們輸入所需要觀察的變量名,我們分別輸入i,a,b,c這4個變量名,于是watches窗口內(nèi)就有如下的4個變量的狀態(tài):
這時,我們再次使用步驟法,我們會發(fā)現(xiàn),這4個變量的狀態(tài)隨著程序的執(zhí)行而不斷變化,比如:
這樣我們就可以方便地知道執(zhí)行每一步之后,程序的各個變量的變化情況,從中我們可以知道我們的程序是否出錯,在哪里出錯,方便我們及時地修改。 下一次,我們介紹另外的一種方法,斷點法。
12.2 斷點發(fā)
在前面我們已經(jīng)學(xué)習(xí)了基本的程序調(diào)試方法——步驟法。步驟法有一個缺點,就是在遇到循環(huán)次數(shù)比較多或者語句比較多的時候,用起來比較費時,今天我們來學(xué)習(xí)一種新的也是常用的調(diào)試方法——斷點法。
所謂斷點法,就是在程序執(zhí)行到某一行的時候,計算機(jī)自動停止運行,并保留這時各變量的狀態(tài),方便我們檢查,校對。我們還是以前面求同時能被2,3,5整除的3000以內(nèi)的自然數(shù)為例,具體操作如下:
我們把光標(biāo)移動到程序的第14行,按下ctrl+F8,這時我們會發(fā)現(xiàn),該行變成紅色,這表明該行已經(jīng)被設(shè)置成斷點行,當(dāng)我們每次運行到第14行的時候,計算機(jī)都會自動停下來供我們調(diào)試。
我們必須學(xué)以致用,趕快運用剛學(xué)的watch方法,看看這家伙到底有多厲害。
請記住,計算機(jī)是執(zhí)行到斷點行之前的一行,斷點行并沒有執(zhí)行,所以這時b:=true這一句并沒有執(zhí)行。
斷點行除了有以上用處之外,還有另外一個重要用處。它方便我們判斷某個語句有沒有執(zhí)行或者是不是在正確的時刻執(zhí)行,因為有時程序由于人為的疏忽,可能在循環(huán)或者遞歸時出現(xiàn)我們無法預(yù)料的混亂,這時候通過斷點法,我們就能夠判斷程序是不是依照我們預(yù)期的順序執(zhí)行。
告訴我你的郵箱,或者你發(fā)郵件過來,我的郵箱是acqc1@163.com,我們用的一個教程,十分詳細(xì),本人韶關(guān)市一中電腦培訓(xùn)班的。
http://58.61.34.206/down?cid=40168D62DB367215969232759B7E525239EAA785&t=3&fmt=-
這里有
我有,是一個文件來的。
QQ:464828678
你的郵箱,我的郵箱是zfz1995@126.com,可能不好用,或者找QQ:381972794,這里有解答,ppt版
相關(guān)評說:
墨脫縣工程: ______ var a,b,c:longint; p,s:double;begin readln(a,b,c); if (a+b<=c)or(b+c<=a)or(c+a<=b) then writeln('no answer')else begin p:=(a+b+c)/2; s:=sqrt(p*(p-...
墨脫縣工程: ______ DP program phx;var i,j,temp,n,m,max1:longint;data,f:array [1..100,1..100] of longint;function max(a,b:longint):longint;beginif a>b then exit(a)else exit(b);end;function dp(i,j:longint):longint;var l1,l2,l3,l4:longint;beginif f[i,j]<>maxlongintthen exit(f[i,j]);l1:=...
墨脫縣工程: ______ type arr=array[1..10000]of longint;var s1,s2:ansistring; ch:char;function dy(a,b:ansistring):boolean;begin if length(a)>length(b) then exit(true); if length(b)>length(a) then e...
墨脫縣工程: ______ 編譯錯誤有提示 運行錯誤也有提示 沒提示說明你對了 代碼看不懂,看下面錯誤代碼及錯誤信息 錯誤釋義 error 1: Out of memory 內(nèi)存溢出 error 2: Identifier expected 缺標(biāo)識符 erro...
墨脫縣工程: ______ 呵呵,這是PASCAL的一個特點,必須在最前面進(jìn)行定義,由于你的“N”是一個變量,系統(tǒng)不知道要給多少的空間,所以當(dāng)然就編譯不了,你可以直接用定值(在“var...
墨脫縣工程: ______ 3月16日14:56 一、FP與TP的本質(zhì)區(qū)別雖然Free Pascal盡量設(shè)計得和Turbo Pascal接近,但是由于以下的兩個原因,兩者之間還是有一些區(qū)別的:1.Free Pascal是一個32位的編譯器,而Turbo Pascal...
墨脫縣工程: ______ 四種辦法:1、先窗口化message可能會在窗口最下面.2、菜單的Tools里也有message3、按F11試試4、真不行就重裝FP了...
墨脫縣工程: ______ function check(n:longint):boolean;var i:longint;begin check:=true; for i:=2 to trunc(sqrt(n)) do if n mod i=0...
墨脫縣工程: ______ 只要從一開始比較,小的就賦給min,大的就賦給maxprogram ex1; var max,min,i,n:longint; begin max:=-maxlongint; min...
墨脫縣工程: ______ free pascal只是一個編譯器,沒有windows庫的話,只能編譯控制臺(字符界面,說成DOS界面也不能算大錯)的程序,有庫比如gdi32等,就可以有窗體和一些作圖函數(shù)了.