跳轉到內容

Octave 程式設計教程/文字和檔案輸出

來自華夏公益教科書,開放書籍,開放世界

disp 函式

[編輯 | 編輯原始碼]

disp 函式以與簡單地輸入變數名稱相同的方式顯示變數的值(標量、向量、矩陣、字串等)。例如,

octave:1> x = [1, 2, 3]
x =

  1  2  3

octave:2> disp(x)
  1  2  3

然而,變數名不會顯示。您還可以顯示計算結果,而不會顯示通常在其之前的ans =

octave:3> log(10)
ans = 2.3026
octave:4> disp(log(10))
2.3026

disp 的輸出取決於format 命令。

octave:5> format long
octave:6> disp(log(10))
2.30258509299405

可以使用fdisp 將顯示的值列印到螢幕、儲存到字串或儲存到檔案。

octave:7> s = disp(log(10))
s = 2.30258509299405

請注意,s 是一個包含上面顯示字元的字串

檔案輸出

[編輯 | 編輯原始碼]

fdisp 函式可用於將值儲存到檔案。在執行此操作之前,我們必須開啟一個檔案。這可以透過使用fopen 命令來完成。

  • fopen(filename, mode) 開啟一個檔案並返回其識別符號。filename 引數是一個字串,可以是當前目錄中任何新檔案或現有檔案的名稱。mode 引數是一個字串,指定檔案是開啟用於
  • 讀取 (r)、
  • 寫入 (w),還是
  • 追加 (a)。

當檔案以寫入方式開啟時,其內容將被擦除並替換為新資料。要保留檔案中現有的資料並追加到其末尾,請使用追加模式。

octave:10> file_id = fopen('mydata.txt', 'w');

這裡,file_id 只是一個變數名,我們使用它來告訴 Octave 要寫入哪個檔案。

  • fdisp(file_id, value)value 寫入由file_id 標識的檔案。

寫入檔案的輸出將與disp 命令的輸出完全相同。

在將所有資料寫入檔案後,關閉檔案非常重要。 關閉檔案告訴 Octave 完成任何可能仍在等待的輸出,並釋放檔案,以便其他使用者或程式可以開啟它。

  • fclose(file_id) 關閉由file_id 標識的檔案。

printf 函式

[編輯 | 編輯原始碼]

printf 函式比disp 強大得多,因此使用起來也更復雜一些。使用printf,您可以精確定義值的輸出應是什麼樣子。這包括指定

  • 要顯示的有效位數;
  • 數字的格式(整數、實數、科學記數法等);
  • 在值之前或之後顯示的其他輸出。

由於使用printf 格式化輸出有許多不同的方法,因此我們在這裡只使用示例討論基礎知識。有關更完整的資訊,請鍵入

doc printf

在 Octave 中,並使用空格鍵翻閱幫助。

輸出到螢幕、字串或檔案

[編輯 | 編輯原始碼]

printf 函式在其螢幕上顯示其輸出。使用sprintf 將結果返回到字串中,使用fprintf 將其寫入檔案。請注意,fprintf 需要一個額外的引數來指定檔案識別符號。

  • printf(format, value, ...)
  • sprintf(format, value, ...)
  • fprintf(fid, format, value, ...)

請注意,這些函式可以同時輸出多個值,有關詳細資訊,請參見下一節。

格式字串

[編輯 | 編輯原始碼]

讓我們看一個例子。

octave:18> x = 10.1;
octave:19> y = 5.5;
octave:20> z = 'test';
octave:21> printf('An integer: %i. A real: %f. This is a %s.\n', x, y, z);
An integer: 10. A real: 5.500000. This is a test.

重要的是第 21 行中printf 函式的第一個引數。它指定了printf 的輸出應是什麼樣子。本質上,百分號 (%) 表示應將一個值放置在其在格式字串中的位置。在格式字串中

'An integer: %i. A real: %f. This is a %s.\n'

%i 將被替換為一個整數,%f 將被替換為一個實數 (f 表示浮點數),%s 將被替換為一個字串。整數、實數和字串的值作為引數傳遞給printf,位於格式字串之後。請注意,上面的示例中x 等於 10.1,但顯示的值為 10,因為我們指定了printf 應該顯示一個整數。最後,字串末尾的\n 告訴 Octave 移動到新的一行。

下一個示例演示了以下型別

  • 整數 (%i),
  • 實數 (%f),
  • 科學記數法 (%e),
  • 百分號 (%%)。

有關更多型別,請參閱 Octave 文件。

octave:22> x = 10.34;
octave:23> printf("x is a real number: %f (%e in scientific notation).\n", x, x);
x is a real number: 10.340000 (1.034000e+01 in scientific notation).
octave:24> printf("Write percentages as %i%%.\n", x);
Write percentages as 10%.

請注意

  • %e 格式將值輸出為 的形式,其中 b 為整數;
  • 變數x 在第 23 行傳遞給printf 兩次,因為我們希望將其輸出兩次(以不同的格式);
  • 第 24 行的雙百分號 (%%) 輸出一個單百分號。

我們可以透過指定以下內容來進一步自定義值的輸出

  • 輸出的寬度,以及
  • 輸出的精度。

寬度允許您右對齊數字,並在百分號和格式說明符之間指定。例如,

octave:36> x = 10;
octave:37> y = pi;
octave:38> z = 'test';
octave:39> printf("%9i\n%9f\n%9s\n", x, y, z);
       10
 3.141593
     test

請注意,在printf 中,每個格式說明符都包含一個整數 (9)。這告訴printf 使用 9 列輸出整數、實數和字串。

精度引數的效果取決於輸出型別。它最明顯的用法是指定在實數的小數點後顯示的位數。精度在寬度之後指定,並由一個點 (.) 字首。

octave:40> printf("%9.3f\n", pi);
    3.142

這將使用 9 列和小數點後 3 位顯示 π。請注意,數字是四捨五入的。有關精度引數的其他用途(例如,用於整數和字串),請參閱 Octave 幫助。

輸出矩陣

[編輯 | 編輯原始碼]

當傳遞給printf 函式的值為矩陣或向量時,將列印其中的所有值。如果格式字串中只有一個格式說明符,則它將用於矩陣中的每個值。

octave:51> A = [1, 2, 3; 4, 5, 6; 7, 8, 9];
octave:52> printf("%i\n", A)
1
4
7
2
5
8
3
6
9

請注意,值是從矩陣中以列優先順序讀取的,即首先顯示第一列的所有值,然後是第二列,依此類推。

如果格式字串中有多個格式說明符,printf 將迴圈遍歷它們。

octave:57> printf("[%i, %.1f, %.2e]\n", A)
[1, 4.0, 7.00e+00]
[2, 5.0, 8.00e+00]
[3, 6.0, 9.00e+00]

值仍然以列優先順序讀取。


返回Octave 程式設計教程索引

華夏公益教科書