Cプログラミング
 Computer >> コンピューター >  >> プログラミング >> Cプログラミング

可変個引数関数を使用して合計、最大、最小を見つけるCプログラム


複数の引数を取ることができるいくつかの関数を作成したいとしますが、引数の数は固定されていません。 3つの関数sum()、max()、min()を作成します。これらの関数は、それぞれ、数値の合計、数値の最大値、および指定された数値の最小値を計算できます。これらの各関数は、最初の引数としてカウントされる引数の数を取ります。このタイプの関数を定義するには、関数の引数に省略記号(...)の3つのドットを使用する必要があります。これを使用するには、stdarg.hヘッダーファイルをインクルードする必要があります。このタイプの関数は、variadict関数と呼ばれます。可変引数にアクセスするために、私たちが気付くかもしれない4つの異なることがあります-

  • va_list:これは指定されたすべての引数を格納します

  • va_start:これは変数引数ap変数へのアクセスを開始します

  • va_arg:これは、指定されたタイプの次の引数を取得するために使用されます

  • va_end:これで可変引数リストへのアクセスが終了します

したがって、-;

のような関数を呼び出すと
  • sum(5、5、2、8、9、3)
  • max(3、5、9、2)
  • min(6、8、5、2、6、7、9)

その場合、出力は27(5つの数値すべての合計)、9(指定された3つの数値の最大値)、2(指定された6つの数値の最小値)になります。

これを解決するには、次の手順に従います-

関数sum()を定義します。これには、cntと可変数の引数が必要です

  • va_listapを定義する
  • va_start(ap、cnt)でapを初期化します
  • n:=0
  • iを初期化する場合:=0、i
  • n:=n + va_arg(ap、int)による次の引数
  • va_end(ap)によるapへのアクセスを終了します
  • return n
  • 関数min()を定義します。これには、cntと可変数の引数が必要です
  • va_listapを定義する
  • va_start(ap、cnt)でapを初期化します
  • 最小:=99999
  • iを初期化する場合:=0、i
  • current:=va_arg(ap、int)による次の引数
  • 現在<最小の場合:
    • 最小:=現在
  • va_end(ap)によるapへのアクセスを終了します
  • 最小返品
  • 関数max()を定義します。これには、cntと可変数の引数が必要です
  • va_listapを定義する
  • va_start(ap、cnt)でapを初期化します
  • 最大:=0
  • iを初期化する場合:=0、i
  • current:=va_arg(ap、int)による次の引数
  • 現在>最大の場合:
    • 最大:=現在
  • va_end(ap)によるapへのアクセスを終了します
  • 最大値を返す
  • 理解を深めるために、次の実装を見てみましょう-

    #include <stdio.h>
    #include <stdarg.h>
    int sum (int cnt,...) {
        va_list ap;
        int i, n;
        va_start(ap, cnt);
        n = 0;
        for (i=0;i<cnt;i++){
            n += va_arg(ap, int);
         }
        va_end(ap);
        return n;
    }
    int min(int cnt,...) {
        va_list ap;
        int i, current, minimum;
        va_start(ap, cnt);
        minimum = 99999;
        for (i=0;i<cnt;i++){
            current = va_arg(ap, int);
            if (current < minimum)
                minimum = current;
        }
        va_end(ap);
        return minimum;
    }
    int max(int cnt,...) {
        va_list ap;
        int i, current, maximum;
        va_start(ap, cnt);
        maximum = 0;
        for (i=0;i<cnt;i++){
            current = va_arg(ap, int);  
            if (current > maximum)
                maximum = current;
        }
        va_end(ap);
        return maximum;
    }
    int main(){
        printf("%d\n",sum(5, 5, 2, 8, 9, 3));
        printf("%d\n",max(3, 5, 9, 2));
        printf("%d\n",min(6, 8, 5, 2, 6, 7, 9));
    }
    

    入力

    sum(5, 5, 2, 8, 9, 3)
    max(3, 5, 9, 2)
    min(6, 8, 5, 2, 6, 7, 9)

    出力

    27
    9
    2

    1. ExcelのMIN、Max、およびAVERAGE関数の使用方法

      機能 Excelのセルの範囲で数学計算を実行します。最も一般的な機能 SUM 、平均 、カウント 、 MIN 、および MAX 。個人がデータの平均、最小、または最大を見つけたい場合は、平均を使用できます。 、 MIN 、およびMAX関数 。この投稿では、Excelで平均、最小、最大を計算する方法を紹介します。 ExcelのAVERAGE、MIN、およびMAX関数 平均 :特定のセルの数値を検索し、1つ以上の値の平均値を返します。数字を含む名前、配列、参照にすることができます。 MIN :セルの範囲で最小値を検索します。 最大 :セルの範囲で最大値を検索します。

    2. Pythonで左右のサブツリーの合計で値を更新してツリーを見つけるプログラム

      二分木があるとすると、同じツリーを見つける必要がありますが、すべてのノードの値は、その値+左右のサブツリーのすべての合計に置き換えられます。 したがって、入力が次のような場合 その場合、出力は次のようになります これを解決するには、次の手順に従います- 関数tree_sum()を定義します。これは木の根を取ります ルートがnullの場合、 0を返す ルートのデータ:=tree_sum(ルートの左側)+ tree_sum(ルートの右側)+ルートのデータ ルートのデータを返す mainメソッドから、次の手順を実行します。 tre