記錄

前頁 目錄 下頁

定義記錄數據類型及宣告記錄 記錄陣列

定義記錄數據類型及宣告記錄 Top

在 C++ 中,我們使用保留字 struct 去定義記錄數據類型及宣告記錄類型的變量︰

struct StudentRecord {             // 定義一個記錄數據類型,用來儲存學生資料
  char student_no[8];              // 第一欄︰學生編號
  char name[20];                   // 第二欄︰姓名
  char class_name[3];              // 第三欄︰班別
  int class_no;                    // 第四欄︰班號
};

struct StaffRecord {               // 定義一個記錄數據類型,用來儲存職員資料
  char employee_no[6];             // 第一欄︰僱員編號
  float salary;                    // 第二欄︰工資
};

struct StudentRecord a_student;   // a_student 是一個學生記錄類型的變量
struct StaffRecord an_employee;   // an_employee 是一個職員記錄類型的變量

為了方便起見,我們使用 typedef 去定義一個記錄類型︰

C++ 版本 等同的 Pascal 版本

typedef struct StudentRecord {
  char student_no[8];
  char name[20];
  char class_name[3];
  int class_no;
} StudRec;

typedef struct StaffRecord {
  char employee_no[6];
  float salary;
} StaffRec;


StudRec a_student;
StaffRec an_employee;
type
  StudRec = record
              student_no: string[8];
              name: string[20];
              class_name: string[3];
              class_no: integer
            end;

  StaffRec = record
               employee_no: string[6];
               salary: real;
             end;

var
  a_student: StudRec;
  an_employee: StaffRec;

在 C++ 中,要引用一個記錄的其中一欄的語法和 Pascal 的一樣︰用一點(.)。例如,跟據以上記錄的定義an_employee.salary 即是記錄 an_employee 中的欄 salary


記錄陣列 Top

宣告記錄陣列的方法跟宣告簡單數據類型的陣列方法相似。例如,跟據以上記錄的定義, 以下語句宣告了兩個記錄陣列︰

StudRec students[1500];    // 一個有 1500 個學生記錄的陣列
StaffRec staff[100];       // 一個有 100 個職員記錄的陣列

以下程序範例列出所有姓陳的學生︰

記錄二十七︰使用記錄陣列
C++ 版本 Pascal 版本
#include <iostream.h>
#include <string.h>
#define MAX 5
main()
{
  typedef struct StudentRecord {
    char student_no[8];
    char name[20];
  } StudRec;

  StudRec students[MAX];
  int i;
  char s[20];

  for (i = 0; i < MAX; i++) {
    cout << "Student " << i << ":\n";
    cout << "Student Number: ";
    cin.getline(
students[i].student_no, 8);
    // 以上語句讀取一個最長為 8 個字符的字符串,
    // 並儲存在變量 students[i].student_no 內。
    cout << "Name: ";
    cin.getline(
students[i].name, 20);
  }

  for (i = 0; i < MAX; i++) {
    strncpy(s,
students[i].name, 4);
    s[4] = '\0';
    if (strcmp(s, "Chan") == 0)
      cout <<
students[i].name << endl;
  }
  return 0;
}
program prog_27(input, output);
const
  MAX = 5;

type
  StudRec = record
              student_no: string[8];
              name: string[20]
            end;
var
 
students: array[0..MAX - 1] of StudRec;
  i: integer;
  s: string[20];
begin
  for i := 0 to MAX - 1 do begin
    writeln('Student ', i, ':');
    write('Student Number: ');
    readln(
students[i].student_no);



    write('Name: ');
    readln(
students[i].name)
  end;

  for i := 0 to MAX - 1 do


    if copy(
students[i].name, 1, 4) = 'Chan'
      then writeln(
students[i].name)
end.
輸出範例(紅色的文字由使用者輸入)︰
Student 0:
Student Number: 123456
Name: Chan Chi Ming
Student 1:
Student Number: 475721
Name: Lam Wai Ming
Student 2:
Student Number: 134578
Name: Chan Kin Wing
Student 3:
Student Number: 721535
Name: Chan Lai Sheung
Student 4:
Student Number: 127310
Name: Man Chi Wah
Chan Chi Ming
Chan Kin Wing
Chan Lai Sheung

前頁 目錄 下頁