C++の簡単な例(4)

7917 ワード

5、構造体
(1)構造体タイプはプログラマがカスタマイズした構造データタイプであり,構造体タイプは異なるタイプのメンバーで構成される.構造体タイプに基づいて構造体変数を定義し、メンバー演算子"."構造体変数のメンバーを参照します.(2)同じ構造体タイプの複数の変数を同時に操作できる構造体タイプの配列を定義する.(3)typedefは、既存のデータ型に別名を定義し、プログラムの可読性を向上させることができる.
例1:構造体ポインタ変数を用いて実現:学生データを入力し、平均成績を出力する.
#include 
using namespace std;

struct Student{
    char num[8];
    char name[10];
    float score[3];
};

int main(){
    Student stu;
    Student * p;
    p = &stu;
    cout << "        、  ." << endl;
    cin >> p->num >> p->name;
    cout << "        ." << endl;
    for(int i=0;i<3;i++){
        cin >> p->score[i];
    }
    cout << "         :" << (p->score[0] + p->score[1] + p->score[2])/3 << endl;
    return 0;
}

注意:p->numはstuに等価である.numは(*p)に等価である.num.
例2:学生の構造体のタイプは学号、名前と英語、数学、コンピュータの3科の成績を含んで、すべての学生のコンピュータの成績の最高点を求めます.
#include 
using namespace std;

struct student{
    char num[8];
    char name[10];
    float score[3];
};

int main(){
    const int NUM = 3;
    student stu[NUM];
    float max;
    int index = 0;

    for(int i=0;icout << "    " << i+1 << "      、  。" << endl;
        cin >> stu[i].num >> stu[i].name;
        cout << "    " << i+1 << "      、         。" << endl;
        for(int j=0;jcin >> stu[i].score[j];
        }
    }

    max = stu[0].score[2];
    for(int k=1;kif(stu[k].score[2] > max){
            max = stu[k].score[2];
            index = k;
        }
    }

    cout << "              :" << stu[index].name << ",     :" << max << endl;
    return 0;
}

6、列挙
(1)定義形式:enum列挙タイプ名{列挙定数リスト};(2)実際の応用では、いくつかの変数はいくつかの可能な値しかなく、これらの値を整数で表すことができ、例えば週に7日ある.この場合、列挙タイプを定義し、いくつかの可能な値を列挙することができます.列挙定数のデフォルト値は0から順に1つ増えます.列挙定数の値を指定すると、前の値は変わらず、後の値は指定した値から順に1つ増えます.
例1:出力パラメータに対応する色.
#include 
using namespace std;
enum color{red,green,blue,black};

void output(color co){
    switch(co){
        case(0):
            cout << "red" << endl;
            break;
        case(1):
            cout << "green" << endl;
            break;
        case(2):
            cout << "blue" << endl;
            break;
        case(3):
            cout << "black" << endl;
            break;
    }   
}

int main(){
    color co1=red,co2=blue;
    output(co1);
    output(co2);
    return 0;
}

7、コンパイル前処理
(1)C++における主な前処理コマンドは、マクロ定義、条件コンパイル、ファイル含む.これらのコマンドはすべて「#」で始まり、コマンドの末尾にはセミコロンがありません.(2)マクロ定義は一般的にファイル先頭のincludeコマンドの後に置かれ,マクロ名は一般的に大文字で表される.(3)プログラム中の二重引用符のマクロ名はマクロ置換されない.(4)パラメータ付きマクロ定義:#defineマクロ名(パラメータテーブル)文字列.eg:#define AREA(x,y)(x)*(y)(5)パラメータ付きマクロおよび関数の同じ点と異なる点.同じ点:<1>識別子の後ろに括弧が付いているのは関数の識別子であり、参照マクロ定義が付いているのはマクロ名の後ろに括弧が付いているのと同じです.<2>関数またはパラメトリックマクロ定義は、定義時のカッコ内ではパラメトリックテーブルであり、使用時のカッコ内では実パラメトリックテーブルである.<3>実パラメータと形パラメータは1対1で対応し,実パラメータは形パラメータの代わりに計算される.相違点:<1>パラメータマクロ定義付きパラメータテーブルには、パラメータ名のみがリストされ、関数定義のパラメータテーブルには、パラメータタイプが同時にリストされます.<2>関数呼び出しでは、対応するパラメータに実パラメータの値が渡され、パラメータ付きマクロ定義では、対応するパラメータが実パラメータに直接置き換えられます.<3>最も本質的な違いは,関数呼び出しがプログラム実行時に制御フローの遷移であり,参照マクロ定義の使用はプログラムコンパイル前に発生し,コンパイル前にマクロ置換を行い,マクロ置換後のコードをコンパイルし,プログラム実行時に置換後のコードを直接計算または操作し,フローの遷移を行わないことである.したがって、パラメータ付きマクロ定義の使用は、関数呼び出しよりも実行時間を節約します.(6)ファイルに含まれる形式:<1>#includeまたは<2>#include"ファイル名"1と2の違いは、ヘッダファイルを検索する方法が異なることである.ヘッダファイルをカッコで含めると、プリプロセッサは開発環境のincludeディレクトリにヘッダファイルを統合して検索します.これを標準検索方式と呼び、一般的にシステムヘッダファイルを含む場合に使用します.ヘッダファイルを二重引用符で含む場合、プリプロセッサはまず現在の作業ディレクトリの下でヘッダファイルを検索し、開発環境を統合するincludeディレクトリが見つからない場合は検索します.ヘッダファイルがincludeディレクトリの下にも現在の作業ディレクトリの下にもない場合は、eg:#include "d:\temp\cyh.h"という絶対パスでファイル名を指定することもできます.(7)一般的に、グローバル変数はいずれも外部変数であり、あるファイルで定義されたグローバル変数は他のファイルで使用できるが、使用前にexternで外部説明を行う必要がある.グローバル変数定義の前にキーワードstaticを付けると、この変数は静的グローバル変数になります.静的グローバル変数は、定義されたファイルでのみ使用でき、他のファイルでは使用できません.(8)一般的に、関数は外部関数であり、あるファイルで定義された関数は他のファイルで使用できるが、使用前にexternで外部説明する必要がある.関数定義の前にキーワードstaticを付けると、この関数は静的関数です.静的関数は、定義されたファイルでのみ呼び出され、他のファイルでは呼び出されません.