C言語を知る (1万語の学習ノート)

目次

1. C言語とは何ですか?

2. 初めてのC言語プログラム

 2.1 最初の C 言語プログラム:

3. データ型

3.1 整数: 編集

 3.2 浮動小数点型: float—単精度浮動小数点数; double—倍精度浮動小数点数編集

3.3 void 型: void 型は、値が使用できないことを指定します。

3.4 データ型変換:

 4. 変数と定数

4.1 変数 (推奨される初期化)

4.1.1 変数の作成

4.1.2 識別子

4.1.3 変数名の規則

4.1.4 変数の命名術: 名前を見て意味を理解する。

4.1.5 変数の分類:

4.1.6 変数の範囲とライフサイクル

 4.2 定数 (通常はすべて大文字)

4.2.1 #define プリプロセッサの使用

4.2.2 const キーワードの使用

4.2.3 enum (列挙)

列挙型は、離散値を持つ定数のセットを定義するために使用される C 言語の基本データ型です。これにより、データがより簡潔で読みやすくなります。

 5. 文字列とエスケープ文字とコメント

5.1 文字列

5.2 エスケープ文字 

5.3 注意事項

6. 選択文とループ文

6.1 Select ステートメント

6.1.1 C 言語の if 文の構文:

 6.1.2 C 言語の if...else ステートメントの構文:

6.1.3 C 言語のネストされた if ステートメントの構文:

6.1.4 C 言語の switch ステートメントの構文: 編集

6.1.5 C 言語のネストされた switch ステートメントの構文:

6.2 ループ文

6.2.1 while ループ:

6.2.2 for ループ:

6.2.3 do...while ループ:

6.2.4 ループの入れ子:

6.2.5 ループ制御ステートメント:

 7. 機能

7.1 関数の定義

7.2 関数の呼び出し   

8. 配列

9. オペレーター

9.1 算術演算子

9.2 ビット演算子 (バイナリを含みますが、今のところは含みません)

9.3 代入演算子

 9.4 論理演算子

 9.5 関係演算子

9.6 その他の演算子 

 9.7 カンマ式

10. キーワード

11. ポインターについて理解する (基本)

11.1 メモリ

11.2 ポインタとは

11.3 ポインタの使用

11.4 ポインタ変数のサイズ

12. 構造

12.1 構造体とは

12.2 構造体の定義

 12.3 構造体の初期化


1. C言語とは何ですか?

1. C 言語は汎用コンピュータ プログラミング言語であり、低レベル開発で広く使用されています。

2. C 言語のオリジナル規格: ANSI C 、C89、C90、C99、C11....

3. コンピュータはバイナリ情報(011101000010011)を処理します。

4. C言語はプロセス指向のコンピュータプログラミング言語であり、C++やJavaなどのオブジェクト指向プログラミング言語とは異なります。

現在のコンパイラには主にClangGCC、 WIN-TC 、 SUBLIME 、MSVC (vs2019 統合開発環境)、 Turbo C などが含まれます。

2. 初めてのC言語プログラム

1. 統合開発環境:編集、コンパイル、リンク、実行、デバッグなどの多くのサブ機能を統合します。

 2. C 言語プログラムには通常 2 つのファイルがあります: .c ソース ファイル .h ヘッダー ファイル 

 2.1 最初の C 言語プログラム:

#include<stdio.h>

int main()
{
    printf("Hello World!");
    return 0;
}

注: (1) main 関数はプログラムのエントリ ポイントです。つまり、プログラムは main から実行を開始します。

        (2) プロジェクトには main 関数を 1 つだけ含めることができます。

        (3) プログラムの最初の行 #include <stdio.h> はプリプロセッサ ディレクティブで、実際のコンパイル前に stdio.h ファイルをインクルードするように C コンパイラに指示します。

         (4) printf(...) は、 画面上に情報を出力する C で使用できるもう 1 つの関数です。

         (5) return 0;  main()関数を終了し、値0を返します。

3. データ型

3.1 整数:

注: ①long long 8バイト   

②int型出力は%dを使用 long型出力は%ldを使用 long long型出力は%lldを使用

 3.2 浮動小数点型: float—単精度浮動小数点数、double—倍精度浮動小数点数

注: 直接書き込まれた浮動小数点データは、コンパイラによってデフォルトで double 型に設定されます。

3.3 void 型: void 型は、値が使用できないことを指定します。

3.4 データ型変換:

(1)データ型変換: C 言語では、式中に異なる型の定数や変数が含まれる場合、計算時に自動的に同じ型に変換されますが、C 言語では強制的にデータ型を変換することもできます

//强制类型转换:(数据类型)


int a = (int)3.14;     //3.14默认为double类型,但是通过(int)被强制转换为整型
printf("a=%d", a);   //输出结果为a=3

(2)自動変換規則: ①浮動小数点数を整数型に代入し、浮動小数点数の小数点を切り捨てます。

                                   ②) 浮動小数点型に整数を代入すると、値はそのままで対応する浮動小数点変数に格納されます。

添付ファイル: コンピュータの一般的なユニット:

 4. 変数と定数

4.1 変数 (推奨される初期化)

4.1.1 変数の作成

1. データ型 + 変数名。( float の後ろのデータに f を追加しますが、 double には追加しません)

4.1.2 識別子

C 識別子は、変数、関数、またはその他のユーザー定義項目を識別するために使用される名前です。識別子は、文字 AZ または az またはアンダースコア _ で始まり、その後に 0 個以上の文字、アンダースコア、および数字 (0 ~ 9) が続きます

@、$、% などの句読点文字はC 識別子内では使用できません。C は大文字と小文字を区別するプログラミング言語です。したがって、C では、Manpower と manpower は 2 つの異なる識別子です。

4.1.3 変数名の規則

1. 識別子と同じですが、変数名はC言語のキーワードと同じにすることはできません

4.1.4 変数の命名術:名前を見て意味を知る

①ラクダ命名法:変数や関数の名前を形成するために大文字と小文字を混合して使用することを指します。例: キャメルケース、サンフラワーなど。

②ハンガリーの命名法: 基本原則は、変数名 = 属性 + 型 + オブジェクトの説明です。各オブジェクトの名前には明確な意味が必要で、完全な名前または名前の一部を使用できます。例:char chGraden、int nLength、p = *pDoc など。

③下線表記:独立した単語に直接下線を付けることを指します。この名前付けは、カーネル コードで特に一般的です。例: sun_flower 学生データなど。

4.1.5 変数の分類:

ローカル変数 (グローバル変数よりも優先度が高い) とグローバル変数。(添付: scanf は入力関数です。変数名の前にアドレス文字 & が追加されることを除いて、使い方は printf と同じです)

添付ファイル: extern は外部変数を使用します (extern int a = 0;)

4.1.6 変数の範囲とライフサイクル

 4.2 定数 (通常はすべて大文字)

4.2.1  #define プリプロセッサの使用

#define はプログラム内で定数を定義でき、コンパイル時に対応する値に置き換えられます。(代入記号「=」を除く)

#define MONEY 100;

4.2.2  const キーワードの使用

const キーワードは、読み取り専用変数を宣言するために使用されます。つまり、プログラムの実行中に変数の値を変更することはできません。(本質はまだ変数です)

const int a = 100;

4.2.3 enum (列挙)

列挙型は、離散値を持つ定数のセットを定義するために使用される C 言語の基本データ型です。これにより、データがより簡潔で読みやすくなります。

 5. 文字列とエスケープ文字とコメント

5.1 文字列

1. この二重引用符(Double Quote)で囲まれた文字列を文字列リテラル(String Literal)、または略して文字列と呼びます。

注: 文字列の末尾は \0 エスケープ文字です。文字列の長さを計算する場合、\0 は終了マークであり、文字列の内容としてカウントされません。

2. 文字列には二重引用符が使用され、単一文字には単一引用符が使用されます。文字列には %s が使用され、単一文字には %c が使用されます。 

(文字列は文字配列に入れることができます! 1 文字の場合は \0 を追加する必要がありますが、文字列全体を入力する必要はありません)

char site[7] = {'R', 'U', 'N', 'O', 'O', 'B', '\0'};
char site[] = "RUNOOB";
printf("%s", RUNOOB);
printf("%c", 'R');

3. %d などについての紹介:

付属:%f—float %lf—double

 4. 文字列操作に関連する関数:

注: strlen は、最初の \0 より前の文字数を求めます( \0 は文字列の長さとしてカウントされません)。

例: 

5.2 エスケープ文字 

1. エスケープ文字:

注: ① \を印刷するには、'\\'を使用する必要があります。

        ② 文字列の長さを計算する場合、エスケープ文字 1 文字を 1 文字としてカウントします。

        ③ \ddd は 8 進数であり、数字の 8 が含まれないことに注意してください。

2. ASCII テーブル: 一般的に使用される ( A-65 a-97 文字 0-48 )

 ASCII テーブルは、エスケープ文字\ddd、\xddに関連しています。 

例: ① \130: 130 (8 進数) = 88 (10 進数) なので、X を出力します。

       ② \x30: 30(16進数) = 48(10進数)なので0を出力

5.3 注意事項

1. コメントの役割① コード内の不要なコードは直接削除したり、コメントアウトすることができます。

                         ② コード内の一部のコードがわかりにくい場合は、コメントテキストを追加できます。

2. 2 種類のコメント: ① /*xxxxxx*/ はコメントを複数行にまたがることができます 欠点: コメントをネストすることができません

                      ② //xxxxxxxx は 1 行または複数行コメント可能 欠点: 行をまたいでコメントできない

6. 選択文とループ文

1. 構造化プログラミング言語としての C 言語: シーケンス構造、選択構造、ループ構造。

6.1 Select ステートメント

6.1.1 C言語の if文の構文 :

 6.1.2 C言語の if...else文の構文 :

6.1.3 C 言語の ネストされた ifステートメント の構文:

6.1.4 C言語の switch文 の構文 :

 注記:

  • switchステートメント の 式は 定数式であり、整数または列挙型である必要があります。
  • スイッチには任意の数の case ステートメントを含めることができます。各ケースの後には、比較する値とコロンが続きます。
  • case の 定数式は、 スイッチ内の変数と同じデータ型を持ち、定数またはリテラルでなければなりません。
  • テストされる変数が case 内の定数と等しい場合、case に続くステートメントは、  break ステートメントに遭遇するまで実行されます。
  • Breakステートメントが見つかると  、switch は終了し、制御フローは switch ステートメントの後の次の行にジャンプします。
  • すべてのケースにBreakを含める必要があるわけではありません case ステートメントに Break が含まれていない場合、制御フローは  Break が検出されるまで後続の Case を続行します。
  • switch ステートメント には、switch の最後に表示されるオプションのデフォルトケース 含めることができます 。上記のいずれのケースにも当てはまらない場合、デフォルトのケースを使用してタスクを実行できます。デフォルトの場合、  breakステートメント は必要ありません。

6.1.5 C 言語の 入れ子の switchステートメント の構文:

例: 性別に応じた勤続年数報酬アプレットを満たす

#include<stdio.h>
int main(void)
{
    char sex;
    int age  ;
    printf("请输入你的性别简称!男(M),女(F)\n");
    scanf_s("%c", &sex);
    switch (sex)
    {
    case 'M':
    case 'm':
    printf("你的性别为“男”请你进入测试!\n");
    printf("请输入你的工龄!\n");
    scanf_s("%2d",&age);
        switch (age)
        { 
        case 5:
            printf("奖励iphone一台!!\n");
            break;
        case 10:
            printf("奖励汽车一辆!!\n");
            break;
        case 15:
            printf("奖励小楼一栋!!\n");
            break;
        default:
            printf("抱歉,未满足奖励条件或者超出工龄!!\n");
            break;
        }
    break;
    case 'F':
    case 'f':
        printf("你的性别为“女”请你进入测试!\n");
        printf("请出入你的工龄!\n");
        scanf_s("%2d",&age);
        switch (age)
        {
        case 5:
            printf("奖励iphone一台!\n");
            break;
        case 10:
            printf("奖励名牌化妆品一套!\n");
            break;
        case 15:
            printf("奖励爱马仕包一个!\n");
            break;
        default:
            printf("抱歉, 未满足奖励条件或者超出工龄!!\n");
            break;
            }
        break;    
    }
    return 0;
}

6.2 ループ文

6.2.1 while ループ:

C 言語のwhileループ ステートメントは、指定された条件が true である限り、  ターゲット ステートメントを繰り返し実行します。

6.2.2 for ループ:

for ループを使用すると、指定した回数だけ実行するループ制御構造を作成できます。

6.2.3 do...while ループ:

for ループや whileループとは異なり  、ループの先頭でループ条件をテストします。C では、do...while ループはループの最後にその状態をチェックします。

do...while ループは while ループに似ていますが、do...while ループはループが少なくとも 1 回実行されることを保証します。

6.2.4 ループの入れ子:

C 言語では、ループを別のループ内で使用できます。

①whileの入れ子:

②forのネスト:

 

③do...whileの入れ子:

6.2.5 ループ制御ステートメント:

Break: ループ内にBreakステートメントが出現すると 、ループは直ちに終了し、プログラム フローはループの直後にある次のステートメントの実行を続行します。

continue: C 言語の continueステートメントは、 breakステートメント に似ています  。ただし、これは強制終了ではありません。続行すると、現在のループ内のコードがスキップされ、次のループが強制的に開始されます。forループの場合  、Continueステートメントの実行 後も自動インクリメント ステートメントが実行されます。while および do...whileループの場合  、Continue ステートメントは条件ステートメントを再実行します。

goto: C 言語の gotoステートメントを 使用すると、同じ関数内のマークされたステートメントに無条件で制御を移すことができます。

注: goto ステートメントは、どのプログラミング言語でも推奨されません。プログラムの制御フローがわかりにくくなり、プログラムが理解しにくくなり、修正が難しくなるからです。

 7. 機能

関数: この関数の特徴は、コードを簡素化し、コードを再利用することです。

7.1 関数の定義

注: 戻り値の型: 関数は値を返すことができます。return_type は 、関数によって返される値のデータ型です。一部の関数は、値を返さずに目的の操作を実行します。この場合、 return_type はキーワード voidです。

        ②関数名:実際の関数名です。関数名とパラメーター リストが一緒になって関数シグネチャを形成します。

        ③ パラメータ: パラメータはプレースホルダーのようなものです。関数が呼び出されるとき、実パラメータと呼ばれるパラメータに値を渡します。パラメータ リストには、関数パラメータのタイプ、順序、数が含まれます。パラメーターはオプションです。つまり、関数にはパラメーターが含まれていない場合があります。

        ④ 関数本体: 関数本体には、関数によって実行されるタスクを定義する一連のステートメントが含まれます。

7.2 関数の呼び出し   

関数が main 関数の後に定義されている場合は、最初に宣言する必要があります。

#include <stdio.h>
 
/* 函数声明 */
int max(int num1, int num2);
 
int main ()
{
   /* 局部变量定义 */
   int a = 100;
   int b = 200;
   int ret;
 
   /* 调用函数来获取最大值 */
   ret = max(a, b);
 
   printf( "Max value is : %d\n", ret );
 
   return 0;
}
 
/* 函数返回两个数中较大的那个数 */
int max(int num1, int num2) 
{
   /* 局部变量声明 */
   int result;
 
   if (num1 > num2)
      result = num1;
   else
      result = num2;
 
   return result; 
}

付属:関数定義時に関数ヘッダの左端にキーワード extern を付加すると、その関数は外部関数となり、他のファイルからも呼び出すことができます。

たとえば、関数ヘッダーは次のようになります。

extern int max (int a,int b)

8. 配列

1. 定義: 同じ種類のデータの集合。

int arr[10] = {1,2,3,4,5,6,7,8,9,10};//定义一个整形数组,最多放10个元素

2. 初期化:

3. 配列の添字: 配列の添字は0 から始まり、 a[0] は配列の最初の要素を表します。

4. 配列の使用:データの入力か出力かにかかわらず、配列はループを通じて使用する必要があります。

9. オペレーター

9.1 算術演算子

1. 次の表に、C 言語でサポートされるすべての算術演算子を示します。変数 A の値が 10、変数 B の値が 20 であると仮定すると、次のようになります。

注: ①% には整数のみを指定できます。

②++と--については、preとpostがあります。

Pre: 最初に 1 を加算 (減算) し、次に使用します。 post: 最初に 1 を使用し、次に 1 を加算 (減算) します。

9.2 ビット演算子 (バイナリを含みますが、今のところは含みません)

&        |        ^        ~        <<        >>

9.3 代入演算子

1. 次の表は、C 言語でサポートされる代入演算子のリストです (最後の 5 つはビット単位の演算子を含みます)。

 9.4 論理演算子

1. 次の表は、C 言語でサポートされているすべての関係論理演算子を示しています。変数 A の値が 1、変数 B の値が 0 であると仮定すると、次のようになります。

 9.5 関係演算子

1. 次の表は、C 言語でサポートされているすべての関係演算子を示しています。変数 A の値が 10、変数 B の値が 20 であると仮定すると、次のようになります。

9.6 その他の演算子 

1. 次の表は、 sizeof や ? :など、C 言語でサポートされているその他の重要な演算子を示しています 

注: ① sizeof() 単位はバイトです

②上記の最後の演算子は三項演算子とも呼ばれ、次のように使用できます。

 

 9.7 カンマ式

1. カンマ式: exp1、exp2、exp3、...expN

2. カンマ式の機能: 左から右に計算され、式全体の結果は最後の式の結果になります。

添付ファイル: 添字参照([ ])、関数呼び出し(( ))、構造体メンバ(. ->)

10. キーワード

1. C言語の予約キーワード

 

11. ポインターについて理解する (基本)

11.1 メモリ

1. メモリはコンピュータ上で特に重要なメモリであり、コンピュータ内のプログラムの実行はメモリ内で行われます。

したがって、メモリを有効に使用するために、メモリは小さなメモリ単位に分割され、各メモリ単位のサイズは1 バイトになります。

メモリの各ユニットに効果的にアクセスできるようにするために、メモリ ユニットには番号が付けられており、これらの番号はメモリ ユニットのアドレスと呼ばれます。

2. 変数はメモリ内に作成され (メモリ内に空間が割り当てられます)、各メモリ単位にはアドレスがあるため、変数にもアドレスがあります。次のように変数アドレスを取り出します。

#include <stdio.h>
int main()
{
     int num = 10;
     &num;    //取出num的地址
    //注:这里num的4个字节,每个字节都有地址,取出的是第一个字节的地址(较小的地址)
     printf("%p\n", &num);//打印地址,%p是以地址的形式打印
     return 0;
}

11.2 ポインタとは

1. 一般的に言えば、それはショートカットです。ポインタはメモリアドレスであり、ポインタ変数はメモリアドレスを格納するために使用される変数です。他の変数または定数と同様に、ポインターを使用して別の変数のアドレスを格納する前に、ポインターを宣言する必要があります。ポインタ変数宣言の一般的な形式は次のとおりです。

type *var_name;

2. ここで、type はポインタの基本型であり、有効な C データ型である必要があり、var_name はポインタ変数の名前です。ポインターの宣言に使用されるアスタリスク * は、乗算で使用されるアスタリスクと同じです。ただし、このステートメントでは、変数がポインターであることを示すためにアスタリスクが使用されています。有効なポインタ宣言は次のとおりです。

int    *ip;    /* 一个整型的指针 */
double *dp;    /* 一个 double 型的指针 */
float  *fp;    /* 一个浮点型的指针 */
char   *ch;    /* 一个字符型的指针 */

注記:

整数、浮動小数点、文字、その他のデータ型に関係なく、すべての実際のデータ型は、メモリ アドレスを表す長い 16 進数であるポインタの同じ値型に対応します。

異なるデータ型のポインター間の唯一の違いは、ポインターが指す変数または定数のデータ型が異なることです。

11.3 ポインタの使用

ポインターを使用する場合、次の操作が頻繁に実行されます。

ポインタ変数を定義し、変数アドレスをポインタに割り当て、ポインタ変数で使用可能なアドレスの値にアクセスします。これらは、単項演算子 * を使用して、オペランドで指定されたアドレスにある変数の値を返すことによって返されます。

#include <stdio.h>
int main()
{
     int a = 10;
     // &-取地址操作符   
     int* pa = &a;  // '*'说明pa叫做指针变量 
     // int————说明pa是指向int类型的变量
     *pa = 20;   // * 解引用操作符——通过地址找到地址所指向的对象,*pa就等价于a                 
     printf("%d\n", a); 
     return 0;
}  //输出结果为20

注:&aは4バイトのうちアドレスが小さい方のバイトのアドレスを取り出す場合

11.4 ポインタ変数のサイズ

1. ポインターのサイズは、32 ビット プラットフォームでは 4 バイト、64 ビット プラットフォームでは 8 バイトです。

12. 構造

12.1 構造体とは

C 配列を使用すると、同じ型のデータ項目を格納できる変数を定義できます。また、構造体は、C プログラミングで使用できる別のユーザー定義データ型で、異なる型のデータ項目を格納できるようになります。

12.2 構造体の定義

 12.3 構造体の初期化

struct Stu
{
    char name[20];    //名字
    int age;          //年龄
    char sex[5];      //性别
    char id[15];     //学号
};    //注意有分号
//打印结构体信息
struct Stu s = {"张三", 20, "男", "20180101"};

//.为结构成员访问操作符
printf("name = %s age = %d sex = %s id = %s\n", s.name, s.age, s.sex, s.id);

//->操作符
struct Stu *ps = &s;
printf("name = %s age = %d sex = %s id = %s\n", ps->name, ps->age, ps->sex, ps-
>id);

おすすめ

転載: blog.csdn.net/2303_77414881/article/details/131602978