QB基本輸入輸出敘述

基本輸入輸出敘述

  QBASIC的基本輸出只有一個PRINT敘述,“PRINT”輸出至螢幕,“LPRINT”輸出至列表機,“PRINT #”輸出至檔或其他設備。基本輸入有兩個,一個是“INPUT”,另一個是“READ”,“INPUT”由鍵盤輸入,“INPUT #”由檔或其他設備輸入,“READ”由記憶體輸入。這堨u介紹基本輸入“INPUT”,以及基本輸出敘述“PRINT”。
基本輸入敘述 INPUT

語法:
INPUT ["提示字串",] 變數
    INPUT敘述命令電腦由鍵盤輸入資料至變數。“提示字串”為選用之項目,您
也可以不選“提示字串”,但若選用“提示字串”則其後要跟著“,”逗號才
合乎語法。“變數”為變數名稱,若有許多變數,則變數名稱間以逗號隔開。

例如

  INPUT A                   [註]由鍵盤輸入單精數至單精數變數A    
                            [註]沒有選用提示字串                 
  INPUT "請輸入一整數:",B%  [註]由鍵盤輸入整數至整數變數B%       
                            [註]出現提示字串“請輸入一整數:”    
  INPUT "請輸入兩數:",C,D   [註]由鍵盤輸入兩單精數至變數C及D     
                            [註]出現提示字串“請輸入兩數:”      
  INPUT "輸入三數:",E,F,G   [註]輸入三單精數分別至變數E,F,G      
                            [註]出現提示字串“輸入三數:”        
  INPUT "請輸入一字串:",H$  [註]由鍵盤輸入一字串至字串變數H$     
                            [註]出現提示字串“請輸入一字串:”    

執行時 

  ?123.45←┘               [註]由鍵盤輸入123.45至單精數變數A      
                            [註]即 A=123.45                        
  請輸入一整數:678←┘      [註]由鍵盤輸入678至整數變數B%          
                            [註]即 B%=678                          
  請輸入兩數:90.12,34.56←┘[註]由鍵盤輸入90.12及34.56至變數C及D   
                            [註]即 C=90.12、D=34.56                
  輸入三數:78.9,1.2,3.4←┘ [註]輸入78.8、1.2、3.4至變數E,F,G      
                            [註]即 E=78.9、F=1.2、G=3.4            
  請輸入一字串:忠孝傳家←┘ [註]鍵盤輸入“忠孝傳家”至字串變數H$   
                            [註]即 H$="忠孝傳家"                   


基本輸出敘述 PRINT 

語法:

PRINT [運算式列]

 

  “運算式列”表示多個“運算式”以逗號“,”或分號“;”隔開。若不選用“運算式列”則在螢幕顯示一空白列。若選用“運算式列”(數值運算式或字串運算式)則該“運算式”之值在螢幕顯示出來,數字值後面永遠跟著一個空白,數字值前頭是符號,若為正數則顯示空白,若為負數則顯示負號“-”,單精數若有效數字在7位以內則以定點數表示,若超過7位則以浮點數表示。同樣的,倍精數在11位內則以定點數表示,否則以浮點數表示。例如:
    PRINT "         1         2"  [註]字串運算式
    PRINT "12345678901234567890"  [註]字串運算式
    PRINT 32; 64;-3.2; .32   [註]數值運算式列以分號隔開


在螢幕上顯示為

   
  1        2
    12345678901234567890
     32  64 -3.2  .32       [註]正數前空一格後空一格
      [註]負數前為負號後空一格

資料在螢幕上之位置以隔開符號,逗號“,”、或分號“;”來決定,若以逗號隔開,則下一個資料在下一個顯示區域(每一顯示區域佔14個位置)顯示出來。若以分號隔開,則下一個資料緊跟著上一個資料。例如下列第二個PRINT中資料12和“String=”之間以逗號隔開,表示“String=”要顯示在下一個顯示區。

    PRINT "         1         2   " [註]字串運算式
    PRINT "12345678901234567890123" [註]字串運算式
    PRINT "N="; 12, "String="; "OK" [註]字串、數值、字串、數值

在螢幕上顯示

    
1        2
    12345678901234567890123
    N= 12   String=OK     [註]正數前空一格後空一格
    [註]字串OK前不空,左邊對齊

若PRINT敘述最後跟著逗號、或分號,表示下一個PRINT敘述的資料要顯示在同一列上。若最後不跟著逗號、或分號,則表示下一個PRINT的資料要顯示在下一列。若資料比螢幕寬度寬則會自動折到下一列。下例顯示的結果與上例完全相同。

  PRINT "N="; 12,                [註]逗號表示下一個PRINT
  PRINT "String="; "OK"           [註]顯示在同一列

又如

  A% = 123
  B! = 4567.8
  C$ = "C字串"
  PRINT "         1         2         3         4  "
  PRINT "123456789012345678901234567890123456789012"
  PRINT A%, B!, C$

執行結果

   1      2        3 4
  123456789012345678901234567890123456789012
   123 4567.8       C字串

若輸出的格式要依自己的意思印出,則最好使用“PRINT USING”敘述。其語法如下﹕

 

PRINT USING 格式字串 ; 運算式列 [, | ;]
“格式字串”包含一些要顯示的字元資料及特殊的格式字,這些格式字決
定“運算式列”資料顯示之格式,逗號“,”及分號“;”的意義與PRINT所述相同。
    “運算式列”若為字串,則可選用的格式字有三組,即!、\\、&。
    “運算式列”若為數字,可選用的格式字較多,有#、.、+、-、**、$$、
**$、,、^^^^、及_。共有十種。每一種格式字的用法說明如下表5.1:

  [格式字串之意義及用法表]
格式字串 意 義 及 用 法
! 只顯示字串資料第一個字元
\n空格 顯示字串資料從頭算起n+2個字元(左邊對齊)
& 表示變長字串資料,全部顯示
   
# 表示每一數字位,若數字資料較數字位少,則右邊對齊
. 小數點,可插入任意數字位,必要時四捨五入
+ 加號,出現在格式字串前則顯示在前,在後則顯示在後
- 負號,出現在格式字串前後,則對於負數資料會顯示負
  號於數字前後
** 數字資料之前導空白(leading space)填入星號(*),
  格式字串**本身佔2個位置
$$ 緊跟著數字資料的前端顯示錢幣號($),$$佔2位
**$ 結合格式字**及$$,前導空白填入星號(*),數字資料
  前緊跟著$,格式字**$佔3位,若數字資料為負數則在
  $號左端顯示負號-
, 逗號若出現在格式字小數點的左方,則往左顯示3位數
  字之後,插入一個逗號(,),若出現在右方,則依其出現
  之位置顯示,逗號格式字本身佔一位
^^^^或 指數格式字,使用^^^^以表示E+??,使用^^^^^
^^^^^ 以表示E+???,有效數字左邊對齊。
_ 底線格式字,表示緊跟的字元要顯示。
 
注意:若“運算式列”值太大(超出格式字串範圍)則在前端顯示“%”,若數字位
      (#)超過24位,則會顯示錯誤訊息。

例如

    A% = 1234
    B  = 456.78
    C$ = "Computer"
    PRINT "         1         2         3"               '顯示位置
    PRINT "123456789012345678901234567890"               '顯示位置
    PRINT USING "\        \"; C$ + " ?"            '顯示字串運算式
    PRINT USING "######"; A% + 22                  '顯示整數運算式
    PRINT USING "######.####"; B - 1.25          '顯示單精數運算式
    PRINT USING "C$=\        \ A%=####"; C$, A%      '使用運算式列

執行結果

	     1	       2	 3	   4
    1234567890123456789012345678901234567890
    Computer ?
      1256
       455.5300
    C$=Computer   A%=1234
指定敘述

    指定敘述將等號右邊運算式之值指給左邊之變數,其語法為:
變數 = 運算式
  其中等號“=”為指定運算子,它的作用是將右邊運算式運算的結果存入變數在主記憶體位
址內。“變數”指所有型態的變數,包括字串變數($)、整數變數(%)、長整數變數(&)、單精數
變數(!)、及倍精數變數(#)。

  “運算式”指有意義之運算元、運算子、及括號所組成之式子。依運算子 之不同可分為算術運算式、關係運算式、布林運算式、字串運算式等四種。分 別說明如下。 ●“算術運算式”由常數、變數、函數、括號、運算子(^,-,*,/,\,MOD,+,-) 所組成。下列均為合法之算術運算式﹕

-5 [註]常數5
A [註]變數A
ABS(A) [註]函數ABS(A)
-A + B [註]-變數+變數
A + B * C [註]變數+變數*變數
A - 5 * B / C [註]變數-變數*變數/變數
SIN(A) + 3 * SQR(B) [註]函數+常數*函數
(A + B) * 2 - 3 [註](變數+變數)*常數-常數
(A - B) MOD 2 ^ 4 [註](變數-變數)MOD常數-變數
●“關係運算式”為兩個算術運算式間之比較,其語法為
算術運算式 {= | <> | <|> | <= |>=} 算術運算式
比較結果若真,其值為“-1”,若為假其值為“0”。下列均為合法之關係運算式,設A=5,B=3,C=-2。
關係運算式 結果
A + C = B -1 (真)
B * B > A * A 0 (假)
A ^ 2 <(b ^ 2 + C ^ 2) 0 (假)
●“布林運算式”為算術運算式或關係運算式或二者以NOT、AND、OR、XOR等布林運算子運作者。
  其語法如下﹕
布林運算式 ::= 布林運算元 [{AND | OR | XOR} 布林運算元]...
布林運算元 ::= [NOT] {算術運算式 | 關係運算式}
下列均為合法之布林運算式。設A=5,B=3,C=-2。其結果若為非零值(不等於0)即為真,否則為假(0)。
布林運算式 結果 布林運算元及布林運算子
A + C
A
A > B AND B > C 關 AND 關
(A + C) OR B 算 OR 算
A AND B OR C 算 AND 算 OR 算
NOT A OR B AND (A > C) NOT 算 OR 算 AND 關
[註]: “布林運算元及布林運算子”欄中,“算”表算術運算元,“關”表關係運算元。

●“字串運算式”之語法如下﹕
字串運算式 ::= 字串 [ + 字串 ] ...
說明“字串運算式”定義為“字串”之後可重複跟著“字串運算子”(+)
    及“字串”。設A$="AAA-",B$="BB-",C$="C-"。下列各式均為合法之“字串運算式”。
字串運算式
A$ AAA-
A$ + B$ AAA-BB-
A$ + "OK" AAA-OK
A$ + "OK" + B$ AAA-OKBB-
●型態轉換

  若“運算式”值之型態與“變數”型態不同,則依下列原則轉換:

  (1). 數值常數指定予數值“變數”,以數值“變數”型態為準,如:

	  I% = 123.4	    [註]單精數轉換為整數
	  L& = 1234567.89   [註]單精數轉換為長整數
	  D# = 1234567&     [註]長整數轉換為倍精數

  (2). 字串常數或變數指定予數值變數,或數值變數指定予字串變數則產生
       錯誤 "Type Mismatch"(型態錯誤),如:

	  I% = "OK"         [註]產生錯誤 "Type Mismatch"
	  I% = S$	    [註]產生錯誤 "Type Mismatch"
	  S$ = 123.45	    [註]產生錯誤 "Type Mismatch"
	  S$ = I%	    [註]產生錯誤 "Type Mismatch"

  (3). 運算式求值過程中,運算元之算術或比較運算均轉換成與最高精確度
       運算元相同之精確度(degree of precision),如

	  M& = 6	   [註]整數轉換為長整數
	  C! = M& / N%	   [註]N%轉換為長整數後,除M&,結果為單精數
	  K% = M& 
  (4). 邏輯運算子將它的運算元轉換為整數,並傳回整數結果,如﹕

	  A = 6 	   [註]單精數變數A,為BASIC預設資料型態
	  B = 7 	   [註]單精數變數B
	  C% = A AND B	   [註]單精數變數A和B轉換整數後,作AND運算
	  PRINT A; B; C%   [註]印出 6  7  6

  (5). 當浮點數值轉換為整數時,小數部份四捨五入為整數,如﹕

	  N% = 5.678E+01   [註]浮點數值5.678E+01四捨五入為整數
	  PRINT N%	   [註]印出57

控制敘述 

    控制敘述使用一些控制程式流程的敘述,GOTO、GOSUB、IF、FOR、WHILE
。沒有控制敘述的程式,其執行順序由上而下,由左而右,一個敘述一個敘述
的執行,控制敘述改變程式執行的順序。

●GOTO 敘述語法:
GOTO 標記
“標記”為一識別字或一數字其後跟著冒號“:”者。GOTO為無條件跳至
標記。若標記列為不可執行之敘述如“REM”或“'”則執行下一個可執行之敘
述。結構化程式設計最好少用GOTO敘述。下列均為合法之GOTO敘述﹕

	    GOTO 230       [註]230為數字標記 
	       GOTO Compute   [註]Compute為識別字標記
	       GOTO P66       [註]P66為識別字標記 

●GOSUB敘述語法:
GOSUB 標記
...
RETURN [標記]
GOSUB跳至“標記”,執行該區段敘述,至RETURN敘述時,若不選用標記
,則返回GOSUB之下一個敘述並執行該敘述,RETURN敘述若選用“標記”則跳
至“標記”之敘述並執行。下列均為合法之GOSUB敘述﹕

	       GOSUB 230       [註]230為數字標記   
	       GOSUB Compute   [註]Compute為識別字標記
	       GOSUB P66       [註]P66為識別字標記  

●IF敘述語法一 :
IF 布林運算式 THEN 真部份敘述 [ELSE 假部份敘述]
IF是有條件的跳躍,“布林運算式”值若為真(true)則執行真部份之敘述
,若為假(false)而選用“[ELSE 假部份敘述]”則執行假部份之敘述,若“布
林運算式”值為假又沒選用“[ELSE 假部份敘述]”則執行IF之下一個可執行
之敘述。“布林運算式”值若為0則為假,非0為真。

    語法二:區段IF敘述之語法如下: 
IF 布林運算式1 THEN
  [敘述區段1]
[ELSEIF 布林運算式2 THEN
  [敘述區段2]]
  ...
[ELSEIF 布林運算式n THEN
  [敘述區段n]]
[ELSE
  [敘述區段e] ]
END IF
    若“布林運算式x”值為真(不為0),則執行THEN後之“敘述區段x”,若為
假(其值為0),則執行ELSEIF之敘述或ELSE後之“敘述區段x”。x為1、2、
...、n或e。“敘述區段”由一個至多個敘述組成。下列均為合法之IF敘述﹕
IF A&ltB THEN PRINT A [註]單選
IF A&ltB THEN PRINT A ELSE PRINT B [註]複選
IF B*B<4*a*c THEN PRINT "沒有實根" : END [註]單選
IF B*B<4*a*c THEN [註]區段IF敘述
 &nbspPRINT "沒有實根" [註]敘述區段1
END [註]敘述區段1
ELSEIF B*B=4*A*C THEN
 &nbspPRINT "有兩個等根" [註]敘述區段2
 &nbspPRINT (-B+SQR(B*B-$*A*C))/(2*A) [註]敘述區段2
ELSE
 &nbspPRINT "有兩個實根" [註]敘述區段e
 &nbspPRINT (-B+SQR(B*B-$*A*C))/(2*A) [註]敘述區段e
 &nbspPRINT (-B-SQR(B*B-$*A*C))/(2*A) [註]敘述區段e
END IF
FOR敘述語法:
FOR 數值變數 = 初值 TO 終值 [STEP 增值]
  [敘述區段]
NEXT [數值變數]
FOR敘述執行FOR至NEXT間之敘述區段數次。“數值變數”可為整數、長整
數、單精數、倍精數。若不選用“[STEP 增值]”則增值預設為1。“初值”,
“終值”,“增值”均為數值運算式。下列均為合法之FOR敘述﹕
(1). FOR I% = 1 TO 5 STEP 2 [註]數值變數I% 初值1 終值5 增值2
     &nbspPRINT I% [註]敘述區段,分別印出1 3 5
    &nbspNEXT I% [註]NEXT 數值變數I%
(2). FOR J% = 5 TO 1 STEP -1 [註]數值變數J% 初值5 終值1 增值-1
     &nbspPRINT J% [註]敘述區段,分別印出5 4 3 2 1
    &nbspNEXT J% [註]NEXT 數值變數J%
(3). S=0.0
    &nbspFOR A = 0 TO 2 STEP 0.5 [註]數值變數A 初值0 終值2 增值0.5
     &nbspS=S+A [註]敘述區段,分別累積A值至S
     &nbspPRINT A,S [註]A 0 0.5 1.0 1.5 2.0
[註]S 0 0.5 1.5 3.0 5.0
    &nbspNEXT A [註]NEXT 數值變數A
WHILE敘述語法:
WHILE 條件
  [敘述區段]
WEND
當“條件”之值為真(true)時,重覆執行WHILE至WEND間之“敘述區段”
,直到“條件”之值為假(false)時才停止。注意,“敘述區段”必須有能力
改變“條件”之值為假,否則重覆不停。下列均為合法之WHILE敘述﹕
(1). INPUT N [註]輸入一單精數N
    &nbspWHILE N >= 0 [註]WHILE敘述之條件為 N>=0
      &nbspPRINT N [註] 敘述區段,印出N
      &nbspINPUT N [註] 敘述區段,輸入一單精數N
    &nbspWEND [註]WEND為WHILE敘述之結束,要N<0才會結束
(2). INPUT A% , B% [註]輸入兩整數 A% , B%
    &nbspWHILE B% > 0 [註]WHILE敘述之條件為 B% > 0
      &nbspR% = A% MOD B% [註] 敘述區段
      &nbspA% = B% [註] 敘述區段
      &nbspB% = R% [註] 敘述區段
    &nbspWEND [註]要 B% <=0 才會結束
    &nbspPRINT "最大公因數 "; A% [註]WHILE結束時所要執行之敘述
5.4.5 其他敘述   

    QBASIC除了輸入輸出敘述(INPUT、PRINT)、指定敘述(變數=運算式)
、控制敘述(GOTO、GOSUB、IF、FOR、WHILE)以外還有很多其他敘述,這裡
只介紹幾個常用的敘述。其他請查閱有關QBASIC之專書。

●註解敘述'或REM 

    跟隨在REM或單引號(')之後的字串為註解(comment)。如

	REM 這是QBASIC之註解敘述
	'   這也是QBASIC之註解敘述

●程式結束敘述END  

    END令電腦停止程式之執行。

●宣告陣列之DIM敘述 

    陣列是一群相同資料型態的資料使用相同的變數名稱。個別的資料稱為陣
列元素,它也是變數,以陣列名稱加上註標來稱呼它,使用它之前必須以DIM
敘述宣告,例如

	   DIM A(4)	 '宣告A為5個元素之單精數陣列  
	   A(2) = 3.15	 '陣列元素A(2)是一個變數,值3.15

宣告一個單精數之陣列變數A,有5個陣列元素,各自為A(0),A(1),A(2),
A(3),A(4)。括號內之整數稱為註標。每個元素均為單精數變數,其中第2個
元素(從0算起)之內含為3.15,其餘為0。
註標 0 1 2 3 4
陣列A 0.0 0.0 3.15 0.0 0.0
圖 5.3 陣列變數A之初值及指定值


陣列宣告時其初值,若為數值則為0,若為字串則為空字串(""),宣告陣列
其元素註標(subscript)從0算起,也可以聲明從某指定數目開始。例如

DIM  Y%(1990 TO 1994)
Y%(1991) = 365   

整數陣列Y%,共有5個元素,其註標由1990至1994,只有陣列元素Y%(1991)之
內含設定為365,其餘為0,如下圖5.4所示
圖 5.4  陣列變數Y%之初值及指定值	 


一個陣列必須在使用前以DIM敘述加以宣告,若不宣告而直接使用,則預設其
註標由0至10,即11個元素,雖然如此,不宣告容易出錯,出錯不容易查出,
使用陣列還是以宣告為佳。陣列可以宣告成一維或多維,最多宣告成60維,每
一維之最大元素為32767個。例如

		   DIM	A$(3),B%(2,3),C(2,3,4)

宣告一維字串陣列A$,4個元素。宣告二維整數陣列B%,共3列(0,1,2),4行(0
,1,2,3),一共12個元素。宣告三維單精數陣列C,共3層(0,1,2),4列(0,1,2,
3),5行(0,1,2,3,4)共60個元素。


●DATA敘述語法:
DATA 常數 [, 常數] ...
DATA是一個不可執行的敘述,提供READ敘述讀取數值及字串常數,若字串
常數包含逗號“,”、分號“;”、或前導空白,或尾部空白,這時字串常數必
須寫在雙引號內,常數若省略(但逗號不省略)稱為空項,空項若由數值變數
讀取,其值為0,若由字串變數讀取,其值為空字串。DATA敘述只宜在主程式
使用,其順序依照撰寫的順序,所有DATA可看成單一連續的DATA使用。如

	  DATA 123, 4.5,  , OK, "A,B,C"

表示數值常數123,4.5,空項,字串常數OK,字串常數 "A,B,C"。

●READ敘述

語法:
READ 變數列
從DATA敘述讀入常數至相對應之變數,“變數列”由一個或多個變數所組
成,變數與變數間以逗號“,”隔開,變數可為數值變數或字串變數。DATA常
數的型態必須與相對應之變數一致,否則會有錯誤。DATA常數若為字串而變數
為數值型態,產生語法錯誤。DATA常數若為數值而變數為字串,不會產生錯誤
,但把數值常數看成字串。
    一個READ敘述可以使用一個或多個DATA敘述,或多個READ敘述可用同一個
DATA敘述,總之,常數與變數要互相對應。若常數太少而變數太多,就會產生
“Out of DATA”之錯誤。常數太多而變數太少,剩餘的常數不用而已。如
DATA 123, 4.5, , KK, "A,B,C" [註]五個資料
READ A, B, C [註]A=123 B=4.5 C=0
READ D$, E$ [註]D$="KK" E$="A,B,C"
READ F [註]產生“Out of DATA”錯誤

[下一節][回頁首]