C言語
AI作成コードで試行

/*
 * sample_tool.c
 * A small C program (~100 lines) demonstrating:
 *  - argument parsing
 *  - dynamic array growth
 *  - simple statistics (min/max/avg)
 *  - reading integers from stdin
 *
 * Build:  cc -Wall -Wextra -O2 -o sample_tool sample_tool.c
 * Usage:  ./sample_tool [-n LIMIT]
 * Then type integers (one per line). Ctrl+D (Unix) / Ctrl+Z then Enter (Windows) to finish.
 */

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <errno.h>

typedef struct {
    long *data;
    size_t size;
    size_t cap;
} LongVec;

static int vec_init(LongVec *v) {
    v->data = NULL;
    v->size = 0;
    v->cap  = 0;
    return 1;
}

static void vec_free(LongVec *v) {
    free(v->data);
    v->data = NULL;
    v->size = 0;
    v->cap  = 0;
}

static int vec_push(LongVec *v, long x) {
    if (v->size == v->cap) {
        size_t new_cap = (v->cap == 0) ? 16 : v->cap * 2;
        long *p = (long *)realloc(v->data, new_cap * sizeof(long));
        if (!p) return 0;
        v->data = p;
        v->cap  = new_cap;
    }
    v->data[v->size++] = x;
    return 1;
}

static int parse_long(const char *s, long *out) {
    char *end = NULL;
    errno = 0;
    long val = strtol(s, &end, 10);
    if (errno != 0) return 0;
    if (end == s || *end != '\0') return 0;
    *out = val;
    return 1;
}

static void print_usage(const char *prog) {
    fprintf(stderr, "Usage: %s [-n LIMIT]\n", prog);
    fprintf(stderr, "Read integers from stdin and print stats.\n");
}

int main(int argc, char **argv) {
    long limit = -1; /* -1 means no limit */
    for (int i = 1; i < argc; i++) {
        if (strcmp(argv[i], "-n") == 0) {
            if (i + 1 >= argc) {
                print_usage(argv[0]);
                return 2;
            }
            if (!parse_long(argv[i + 1], &limit) || limit < 0) {
                fprintf(stderr, "Invalid LIMIT: %s\n", argv[i + 1]);
                return 2;
            }
            i++;
        } else if (strcmp(argv[i], "-h") == 0 || strcmp(argv[i], "--help") == 0) {
            print_usage(argv[0]);
            return 0;
        } else {
            fprintf(stderr, "Unknown option: %s\n", argv[i]);
            print_usage(argv[0]);
            return 2;
        }
    }

    LongVec v;
    vec_init(&v);

    printf("Enter integers (one per line). Finish with EOF.\n");

    char line[256];
    while (fgets(line, sizeof(line), stdin)) {
        /* trim newline */
        size_t len = strlen(line);
        if (len > 0 && (line[len - 1] == '\n' || line[len - 1] == '\r')) {
            line[len - 1] = '\0';
            len--;
        }
        if (len > 0 && line[len - 1] == '\r') line[len - 1] = '\0';

        if (line[0] == '\0') continue; /* skip blank lines */

        long x;
        if (!parse_long(line, &x)) {
            fprintf(stderr, "[skip] not an integer: %s\n", line);
            continue;
        }

        if (!vec_push(&v, x)) {
            fprintf(stderr, "Out of memory.\n");
            vec_free(&v);
            return 1;
        }

        if (limit >= 0 && (long)v.size >= limit) break;
    }

    if (v.size == 0) {
        printf("No valid integers were read.\n");
        vec_free(&v);
        return 0;
    }

    long min = v.data[0], max = v.data[0];
    long long sum = 0;
    for (size_t i = 0; i < v.size; i++) {
        long x = v.data[i];
        if (x < min) min = x;
        if (x > max) max = x;
        sum += x;
    }
    double avg = (double)sum / (double)v.size;

    printf("\nCount: %zu\n", v.size);
    printf("Min  : %ld\n", min);
    printf("Max  : %ld\n", max);
    printf("Avg  : %.3f\n", avg);

    vec_free(&v);
    return 0;
}
関数番号 1:vec_init【動的配列構造体を初期化する】
%%{init: {'theme':'base','themeVariables':{ 'primaryColor':'white', 'primaryTextColor':'#000000', 'primaryBorderColor':'#000000', 'lineColor':'#808080', 'textColor':'#6A7FABCC', 'fontSize':'14px'}}}%% %%{ init: { 'flowchart': { 'curve': 'basis','wrap': true,'markdownAutoWrap': true,'wrappingWidth': 500 } } }%% graph TD; classDef default fill:#FFFFE0,stroke:#333,stroke-width:2px; classDef clrPattern1 fill:#FFFF00,stroke:#333,stroke-width:2px; classDef clrPattern2 fill:#F0E68C,stroke:#333,stroke-width:2px; classDef clrPattern3 fill:#ADD8E6,stroke:#333,stroke-width:2px; classDef clrPattern4 fill:#FFD700,stroke:#333,stroke-width:2px; classDef clrPattern5 fill:#FFC0CB,stroke:#333,stroke-width:2px; classDef clrPattern6 fill:#ADFF2F,stroke:#333,stroke-width:2px; classDef clrPattern7 fill:#D3D3D3,stroke:#333,stroke-width:2px; linkStyle default stroke:#808080,stroke-width:2px; %%データ設定 5(["25行目 関数 vec_init の開始: static int vec_init(LongVec *v) &#39;L27"]) 6["26行目 v-&gt;data に NULL を代入する: v-&gt;data = NULL; &#39;L30"] 7["27行目 v-&gt;size に 0 を代入する: v-&gt;size = 0; &#39;L31"] 8["28行目 v-&gt;cap に 0 を代入する: v-&gt;cap = 0; &#39;L32"] 9["29行目 定数値を返して関数を終了する: return 1; &#39;L33"] 10(["30行目 関数終了_1 &#39;L34"]) %%ルート設定 5-->6 6-->7 7-->8 8-->9 9-->10
関数番号 2:vec_free【動的配列が使用しているメモリを解放する】
%%{init: {'theme':'base','themeVariables':{ 'primaryColor':'white', 'primaryTextColor':'#000000', 'primaryBorderColor':'#000000', 'lineColor':'#808080', 'textColor':'#6A7FABCC', 'fontSize':'14px'}}}%% %%{ init: { 'flowchart': { 'curve': 'basis','wrap': true,'markdownAutoWrap': true,'wrappingWidth': 500 } } }%% graph TD; classDef default fill:#FFFFE0,stroke:#333,stroke-width:2px; classDef clrPattern1 fill:#FFFF00,stroke:#333,stroke-width:2px; classDef clrPattern2 fill:#F0E68C,stroke:#333,stroke-width:2px; classDef clrPattern3 fill:#ADD8E6,stroke:#333,stroke-width:2px; classDef clrPattern4 fill:#FFD700,stroke:#333,stroke-width:2px; classDef clrPattern5 fill:#FFC0CB,stroke:#333,stroke-width:2px; classDef clrPattern6 fill:#ADFF2F,stroke:#333,stroke-width:2px; classDef clrPattern7 fill:#D3D3D3,stroke:#333,stroke-width:2px; linkStyle default stroke:#808080,stroke-width:2px; %%データ設定 11(["32行目 関数 vec_free の開始: static void vec_free(LongVec *v) &#39;L36"]) 12["33行目 動的メモリを解放する: free(v-&gt;data); &#39;L39"] 13["34行目 v-&gt;data に NULL を代入する: v-&gt;data = NULL; &#39;L40"] 14["35行目 v-&gt;size に 0 を代入する: v-&gt;size = 0; &#39;L41"] 15["36行目 v-&gt;cap に 0 を代入する: v-&gt;cap = 0; &#39;L42"] 16(["37行目 関数終了_2 &#39;L43"]) %%ルート設定 11-->12 12-->13 13-->14 14-->15 15-->16
関数番号 3:vec_push【動的配列に要素を1件追加する】
%%{init: {'theme':'base','themeVariables':{ 'primaryColor':'white', 'primaryTextColor':'#000000', 'primaryBorderColor':'#000000', 'lineColor':'#808080', 'textColor':'#6A7FABCC', 'fontSize':'14px'}}}%% %%{ init: { 'flowchart': { 'curve': 'basis','wrap': true,'markdownAutoWrap': true,'wrappingWidth': 500 } } }%% graph TD; classDef default fill:#FFFFE0,stroke:#333,stroke-width:2px; classDef clrPattern1 fill:#FFFF00,stroke:#333,stroke-width:2px; classDef clrPattern2 fill:#F0E68C,stroke:#333,stroke-width:2px; classDef clrPattern3 fill:#ADD8E6,stroke:#333,stroke-width:2px; classDef clrPattern4 fill:#FFD700,stroke:#333,stroke-width:2px; classDef clrPattern5 fill:#FFC0CB,stroke:#333,stroke-width:2px; classDef clrPattern6 fill:#ADFF2F,stroke:#333,stroke-width:2px; classDef clrPattern7 fill:#D3D3D3,stroke:#333,stroke-width:2px; linkStyle default stroke:#808080,stroke-width:2px; %%データ設定 17(["39行目 関数 vec_push の開始: static int vec_push(LongVec *v, long x) &#39;L45"]) 18{"40行目 条件文:if (v-&gt;size 等しいか v-&gt;cap) &#39;L49"}:::clrPattern1 20(["40行目 (解析用)満たす場合 &#39;L51"]):::clrPattern7 22["42行目 long型の *p を定義して 初期値 (long *)realloc(v-&gt;data, new_cap * sizeof(long)) を設定する: long *p = (long …"] %%IF文本体 23{"43行目 条件文:if (!p)"}:::clrPattern1 %%補完THEN then23(["補完THEN 満たす場合"]):::clrPattern7 %%THEN内命令文 thenS23["43行目 return 0; &#39;L54"] %%補完END END54(["補完END 条件文終了"]):::clrPattern7 %%ELSE 24(["行目 そうでない場合"]):::clrPattern7 %%ELSE内命令文 elseS24["行目 (補完行)そうでない場合"] 25["44行目 v-&gt;data に p を代入する: v-&gt;data = p; &#39;L56"] 26["45行目 v-&gt;cap に new_cap を代入する: v-&gt;cap = new_cap; &#39;L57"] 27(["行目 (補完行)そうでない場合 &#39;L58"]):::clrPattern7 28(["46行目 条件文終了_1 &#39;L59"]):::clrPattern7 29["47行目 v-&gt;data[v-&gt;size++] に x を代入する: v-&gt;data[v-&gt;size++] = x; &#39;L60"] 30["48行目 定数値を返して関数を終了する: return 1; &#39;L61"] 31(["49行目 関数終了_3 &#39;L62"]) %%ルート設定 17-->18 18-->|真の場合|20 18-->|偽の場合|27 20-->22 22-->23 23-->|真の場合|then23-->thenS23-->END54 23-->|偽の場合|24 24-->elseS24-->END54-->25 25-->26 26-->28 27-->28 28-->29 29-->30 30-->31
関数番号 4:parse_long【文字列を数値(long型)に変換する】
%%{init: {'theme':'base','themeVariables':{ 'primaryColor':'white', 'primaryTextColor':'#000000', 'primaryBorderColor':'#000000', 'lineColor':'#808080', 'textColor':'#6A7FABCC', 'fontSize':'14px'}}}%% %%{ init: { 'flowchart': { 'curve': 'basis','wrap': true,'markdownAutoWrap': true,'wrappingWidth': 500 } } }%% graph TD; classDef default fill:#FFFFE0,stroke:#333,stroke-width:2px; classDef clrPattern1 fill:#FFFF00,stroke:#333,stroke-width:2px; classDef clrPattern2 fill:#F0E68C,stroke:#333,stroke-width:2px; classDef clrPattern3 fill:#ADD8E6,stroke:#333,stroke-width:2px; classDef clrPattern4 fill:#FFD700,stroke:#333,stroke-width:2px; classDef clrPattern5 fill:#FFC0CB,stroke:#333,stroke-width:2px; classDef clrPattern6 fill:#ADFF2F,stroke:#333,stroke-width:2px; classDef clrPattern7 fill:#D3D3D3,stroke:#333,stroke-width:2px; linkStyle default stroke:#808080,stroke-width:2px; %%データ設定 32(["51行目 関数 parse_long の開始: static int parse_long(const char *s, long *out) &#39;L64"]) 33["52行目 char型の *end を定義して 初期値 NULL を設定する: char *end = NULL; &#39;L68"] 34["53行目 errno に 0 を代入する: errno = 0; &#39;L69"] 35["54行目 long型の val を定義して 初期値 strtol(s, &amp;end, 10) を設定する: long val = strtol(s, &amp;end, 10); &#39;L7…"] %%IF文本体 36{"55行目 条件文:if (errno 等しくないか 0)"}:::clrPattern1 %%補完THEN then36(["補完THEN 満たす場合"]):::clrPattern7 %%THEN内命令文 thenS36["55行目 return 0; &#39;L71"] %%補完END END71(["補完END 条件文終了"]):::clrPattern7 %%ELSE 37(["行目 そうでない場合"]):::clrPattern7 %%ELSE内命令文 elseS37["行目 (補完行)そうでない場合"] %%IF文本体 38{"56行目 条件文:if (end 等しいか s または *e nd 等しくないか &#39;\0&#39;)"}:::clrPattern1 %%補完THEN then38(["補完THEN 満たす場合"]):::clrPattern7 %%THEN内命令文 thenS38["56行目 return 0; &#39;L73"] %%補完END END73(["補完END 条件文終了"]):::clrPattern7 %%ELSE 39(["行目 そうでない場合"]):::clrPattern7 %%ELSE内命令文 elseS39["行目 (補完行)そうでない場合"] 40["57行目 *out に val を代入する: *out = val; &#39;L75"] 41["58行目 定数値を返して関数を終了する: return 1; &#39;L76"] 42(["59行目 関数終了_4 &#39;L77"]) %%ルート設定 32-->33 33-->34 34-->35 35-->36 36-->|真の場合|then36-->thenS36-->END71 36-->|偽の場合|37 37-->elseS37-->END71-->38 38-->|真の場合|then38-->thenS38-->END73 38-->|偽の場合|39 39-->elseS39-->END73-->40 40-->41 41-->42
関数番号 5:print_usage「コマンドの使用方法を表示する】
%%{init: {'theme':'base','themeVariables':{ 'primaryColor':'white', 'primaryTextColor':'#000000', 'primaryBorderColor':'#000000', 'lineColor':'#808080', 'textColor':'#6A7FABCC', 'fontSize':'14px'}}}%% %%{ init: { 'flowchart': { 'curve': 'basis','wrap': true,'markdownAutoWrap': true,'wrappingWidth': 500 } } }%% graph TD; classDef default fill:#FFFFE0,stroke:#333,stroke-width:2px; classDef clrPattern1 fill:#FFFF00,stroke:#333,stroke-width:2px; classDef clrPattern2 fill:#F0E68C,stroke:#333,stroke-width:2px; classDef clrPattern3 fill:#ADD8E6,stroke:#333,stroke-width:2px; classDef clrPattern4 fill:#FFD700,stroke:#333,stroke-width:2px; classDef clrPattern5 fill:#FFC0CB,stroke:#333,stroke-width:2px; classDef clrPattern6 fill:#ADFF2F,stroke:#333,stroke-width:2px; classDef clrPattern7 fill:#D3D3D3,stroke:#333,stroke-width:2px; linkStyle default stroke:#808080,stroke-width:2px; %%データ設定 43(["61行目 関数 print_usage の開始: static void print_usage(const char *prog) &#39;L79"]) 44[/"62行目 指定したストリームに文字列を出力する: fprintf(stderr, “Usage: %s [-n LIMIT]&amp;yen;n“, prog); &#39;L82"/]:::clrPattern6 45[/"63行目 指定したストリームに文字列を出力する: fprintf(stderr, “Read integers from stdin and print stats.&amp;yen;n“); &#3…"/]:::clrPattern6 46(["64行目 関数終了_5 &#39;L84"]) %%ルート設定 43-->44 44-->45 45-->46
関数番号 6:main【メイン関数(エントリポイント)】
%%{init: {'theme':'base','themeVariables':{ 'primaryColor':'white', 'primaryTextColor':'#000000', 'primaryBorderColor':'#000000', 'lineColor':'#808080', 'textColor':'#6A7FABCC', 'fontSize':'14px'}}}%% %%{ init: { 'flowchart': { 'curve': 'basis','wrap': true,'markdownAutoWrap': true,'wrappingWidth': 500 } } }%% graph TD; classDef default fill:#FFFFE0,stroke:#333,stroke-width:2px; classDef clrPattern1 fill:#FFFF00,stroke:#333,stroke-width:2px; classDef clrPattern2 fill:#F0E68C,stroke:#333,stroke-width:2px; classDef clrPattern3 fill:#ADD8E6,stroke:#333,stroke-width:2px; classDef clrPattern4 fill:#FFD700,stroke:#333,stroke-width:2px; classDef clrPattern5 fill:#FFC0CB,stroke:#333,stroke-width:2px; classDef clrPattern6 fill:#ADFF2F,stroke:#333,stroke-width:2px; classDef clrPattern7 fill:#D3D3D3,stroke:#333,stroke-width:2px; linkStyle default stroke:#808080,stroke-width:2px; %%データ設定 47(["66行目 関数 main の開始: int main(int argc, char **argv) &#39;L86"]) 48["67行目 long型の limit を定義して 初期値 -1 を設定する(-1 means no limit): long limit = -1; /* -1 means no limit */ &#…"] 49[/"68行目 カウンタループ: for (int i = 1; i &lt; argc; i++) &#39;L91"\]:::clrPattern2 50{"69行目 条件文:if (strcmp(argv [i], “-n“) 等しいか 0) &#39;L 93"}:::clrPattern1 52(["69行目 (解析用)満たす場合 &#39;L95"]):::clrPattern7 53{"70行目 条件文:if (i + 1 以上か a rgc) &#39;L96"}:::clrPattern1 55(["70行目 (解析用)満たす場合 &#39;L98"]):::clrPattern7 56[["71行目 関数 print_usage を呼び出す: print_usage(argv[0]);: ユーザー定義関数呼出含む &#39;L99"]]:::clrPattern3 57["72行目 定数値を返して関数を終了する: return 2; &#39;L100"] 58(["行目 (補完行)そうでない場合 &#39;L101"]):::clrPattern7 59(["73行目 条件文終了_6 &#39;L102"]):::clrPattern7 60{"74行目 条件文:if (!parse_long (argv[i + 1], &amp;limit) または limit &lt; 0):ユーザー定義 関数呼出含む &#39;L103"}:::clrPattern1 62(["74行目 (解析用)満たす場合 &#39;L105"]):::clrPattern7 63[/"75行目 指定したストリームに文字列を出力する: fprintf(stderr, “Invalid LIMIT: %s&amp;yen;n“, argv[i + 1]); &#39;L106"/]:::clrPattern6 64["76行目 定数値を返して関数を終了する: return 2; &#39;L107"] 65(["行目 (補完行)そうでない場合 &#39;L108"]):::clrPattern7 66(["77行目 条件文終了_7 &#39;L109"]):::clrPattern7 68(["79行目 追加条件:else if (strcmp(argv[i], “-h“) 等しいか 0 または strcmp(argv[i], “--help“) 等しいか 0) &#39;L112"]):::clrPattern7 69[["80行目 関数 print_usage を呼び出す: print_usage(argv[0]);: ユーザー定義関数呼出含む &#39;L114"]]:::clrPattern3 70["81行目 定数値を返して関数を終了する: return 0; &#39;L115"] 71(["82行目 そうでない場合:else &#39;L117"]):::clrPattern7 72[/"83行目 指定したストリームに文字列を出力する: fprintf(stderr, “Unknown option: %s&amp;yen;n“, argv[i]); &#39;L119"/]:::clrPattern6 73[["84行目 関数 print_usage を呼び出す: print_usage(argv[0]);: ユーザー定義関数呼出含む &#39;L120"]]:::clrPattern3 74["85行目 定数値を返して関数を終了する: return 2; &#39;L121"] 75(["86行目 条件文終了_5 &#39;L122"]):::clrPattern7 76(["87行目 繰返文終了_1 &#39;L123"]):::clrPattern7 78[["90行目 関数 vec_init を呼び出す: vec_init(&amp;v);: ユーザー定義関数呼出含む &#39;L126"]]:::clrPattern3 79[/"92行目 標準出力に文字列を出力する: printf(“Enter integers (one per line). Finish with EOF.&amp;yen;n“); &#39;L128"/]:::clrPattern6 81[/"95行目 条件付きループ: while (fgets(line, sizeof(line), stdin)) &#39;L131"\]:::clrPattern2 82["97行目 size_t len に strlen(line) を代入する: size_t len = strlen(line); &#39;L134"] 83{"98行目 条件文:if (len &gt; 0 かつ (line[len - 1] 等しいか &# 39;&amp;yen;n&#39; または li ne[len - 1] 等しいか &#39;&am …"}:::clrPattern1 85(["98行目 (解析用)満たす場合 &#39;L137"]):::clrPattern7 86["99行目 line[len - 1] に &#39;&amp;yen;0&#39; を代入する: line[len - 1] = &#39;&amp;yen;0&#39;; &#39;L138"] 88(["行目 (補完行)そうでない場合 &#39;L140"]):::clrPattern7 89(["101行目 条件文終了_8 &#39;L141"]):::clrPattern7 %%IF文本体 90{"102行目 条件文:if (len &gt; 0 かつ lin e[len - 1] 等しいか &#39;\r&# 39;)"}:::clrPattern1 %%補完THEN then90(["補完THEN 満たす場合"]):::clrPattern7 %%THEN内命令文 thenS90["102行目 line[len - 1] = &#39;\0&#39;; &#39;L142"] %%補完END END142(["補完END 条件文終了"]):::clrPattern7 %%ELSE 91(["行目 そうでない場合"]):::clrPattern7 %%ELSE内命令文 elseS91["行目 (補完行)そうでない場合"] %%IF文本体 92{"104行目 条件文:if (line[0] 等しいか &#39 ;\0&#39;)"}:::clrPattern1 %%補完THEN then92(["補完THEN 満たす場合"]):::clrPattern7 %%THEN内命令文 thenS92["104行目 continue; /* skip blank lines */ &#39;L145"] %%補完END END145(["補完END 条件文終了"]):::clrPattern7 %%ELSE 93(["行目 そうでない場合"]):::clrPattern7 %%ELSE内命令文 elseS93["行目 (補完行)そうでない場合"] 95{"107行目 条件文:if (!parse_lon g(line, &amp;x)):ユーザー定義関数 呼出含む &#39;L149"}:::clrPattern1 97(["107行目 (解析用)満たす場合 &#39;L151"]):::clrPattern7 98[/"108行目 指定したストリームに文字列を出力する: fprintf(stderr, “[skip] not an integer: %s&amp;yen;n“, line); &#39;L152"/]:::clrPattern6 99(["109行目 次のループ繰り返しへ進む:continue; &#39;L153"]):::clrPattern7 100(["行目 (補完行)そうでない場合 &#39;L154"]):::clrPattern7 101(["110行目 条件文終了_11 &#39;L155"]):::clrPattern7 102{"112行目 条件文:if (!vec_push( &amp;v, x)):ユーザー定義関数呼出含む &#39;L157"}:::clrPattern1 104(["112行目 (解析用)満たす場合 &#39;L159"]):::clrPattern7 105[/"113行目 指定したストリームに文字列を出力する: fprintf(stderr, “Out of memory.&amp;yen;n“); &#39;L160"/]:::clrPattern6 106[["114行目 関数 vec_free を呼び出す: vec_free(&amp;v);: ユーザー定義関数呼出含む &#39;L161"]]:::clrPattern3 107["115行目 定数値を返して関数を終了する: return 1; &#39;L162"] 108(["行目 (補完行)そうでない場合 &#39;L163"]):::clrPattern7 109(["116行目 条件文終了_12 &#39;L164"]):::clrPattern7 %%IF文本体 110{"118行目 条件文:if (limit 以上か 0 かつ (l ong)v.size 以上か limit)"}:::clrPattern1 %%補完THEN then110(["補完THEN 満たす場合"]):::clrPattern7 thenS110{{"<脱出文> 118行目 ループまたはswitch文を終了する:break; &#39;L166"}}:::clrPattern2 %%補完END END166(["補完END 条件文終了"]):::clrPattern7 %%ELSE 111(["行目 そうでない場合"]):::clrPattern7 %%ELSE内命令文 elseS111["行目 (補完行)そうでない場合"] 112(["119行目 繰返文終了_2 &#39;L168"]):::clrPattern7 113{"121行目 条件文:if (v.size 等しい か 0) &#39;L170"}:::clrPattern1 115(["121行目 (解析用)満たす場合 &#39;L172"]):::clrPattern7 116[/"122行目 標準出力に文字列を出力する: printf(“No valid integers were read.&amp;yen;n“); &#39;L173"/]:::clrPattern6 117[["123行目 関数 vec_free を呼び出す: vec_free(&amp;v);: ユーザー定義関数呼出含む &#39;L174"]]:::clrPattern3 118["124行目 定数値を返して関数を終了する: return 0; &#39;L175"] 119(["行目 (補完行)そうでない場合 &#39;L176"]):::clrPattern7 120(["125行目 条件文終了_14 &#39;L177"]):::clrPattern7 121["127行目 変数定義(初期化あり): long min = v.data[0], max = v.data[0]; &#39;L179"] 122["128行目 long型の sum を定義して 初期値 0 を設定する: long long sum = 0; &#39;L180"] 123[/"129行目 カウンタループ: for (size_t i = 0; i &lt; v.size; i++) &#39;L181"\]:::clrPattern2 124["130行目 long型の x を定義して 初期値 v.data[i] を設定する: long x = v.data[i]; &#39;L183"] %%IF文本体 125{"131行目 条件文:if (x &lt; min)"}:::clrPattern1 %%補完THEN then125(["補完THEN 満たす場合"]):::clrPattern7 %%THEN内命令文 thenS125["131行目 min = x; &#39;L184"] %%補完END END184(["補完END 条件文終了"]):::clrPattern7 %%ELSE 126(["行目 そうでない場合"]):::clrPattern7 %%ELSE内命令文 elseS126["行目 (補完行)そうでない場合"] %%IF文本体 127{"132行目 条件文:if (x &gt; max)"}:::clrPattern1 %%補完THEN then127(["補完THEN 満たす場合"]):::clrPattern7 %%THEN内命令文 thenS127["132行目 max = x; &#39;L186"] %%補完END END186(["補完END 条件文終了"]):::clrPattern7 %%ELSE 128(["行目 そうでない場合"]):::clrPattern7 %%ELSE内命令文 elseS128["行目 (補完行)そうでない場合"] 129["133行目 sum + に x を代入する: sum 加算して代入 x; &#39;L188"] 130(["134行目 繰返文終了_3 &#39;L189"]):::clrPattern7 132[/"137行目 標準出力に文字列を出力する: printf(“&amp;yen;nCount: %zu&amp;yen;n“, v.size); &#39;L192"/]:::clrPattern6 133[/"138行目 標準出力に文字列を出力する: printf(“Min : %ld&amp;yen;n“, min); &#39;L193"/]:::clrPattern6 134[/"139行目 標準出力に文字列を出力する: printf(“Max : %ld&amp;yen;n“, max); &#39;L194"/]:::clrPattern6 135[/"140行目 標準出力に文字列を出力する: printf(“Avg : %.3f&amp;yen;n“, avg); &#39;L195"/]:::clrPattern6 136[["142行目 関数 vec_free を呼び出す: vec_free(&amp;v);: ユーザー定義関数呼出含む &#39;L197"]]:::clrPattern3 137["143行目 定数値を返して関数を終了する: return 0; &#39;L198"] 138(["144行目 関数終了_6 &#39;L199"]) %%ルート設定 47-->48 48-->49 49-->|繰返し文継続へ|50 49-->|繰返文終了後の処理へ|78 50-->|真の場合|52 50-->|偽の場合|71 50-->|上から順に判定|68 52-->53 53-->|真の場合|55 53-->|偽の場合|58 55-->56 56-->57 57-->59 58-->59 59-->60 60-->|真の場合|62 60-->|偽の場合|65 62-->63 63-->64 64-->66 65-->66 66-->75 68-->69 69-->70 70-->75 71-->72 72-->73 73-->74 74-->75 75-->76 76-->|繰返し文開始へ|49 78-->79 79-->81 81-->|繰返し文継続へ|82 81-->|繰返文終了後の処理へ|113 82-->83 83-->|真の場合|85 83-->|偽の場合|88 85-->86 86-->89 88-->89 89-->90 90-->|真の場合|then90-->thenS90-->END142 90-->|偽の場合|91 91-->elseS91-->END142-->92 92-->|真の場合|then92-->thenS92-->END145 92-->|偽の場合|93 93-->elseS93-->END145-->95 95-->|真の場合|97 95-->|偽の場合|100 97-->98 98-->99 99-->101 100-->101 101-->102 102-->|真の場合|104 102-->|偽の場合|108 104-->105 105-->106 106-->107 107-->109 108-->109 109-->110 110-->|真の場合|then110-->thenS110-->END166 110-->|偽の場合|111 111-->elseS111-->END166-->112 112-->|繰返し文開始へ|81 113-->|真の場合|115 113-->|偽の場合|119 115-->116 116-->117 117-->118 118-->120 119-->120 120-->121 121-->122 122-->123 123-->|繰返し文継続へ|124 123-->|繰返文終了後の処理へ|132 124-->125 125-->|真の場合|then125-->thenS125-->END184 125-->|偽の場合|126 126-->elseS126-->END184-->127 127-->|真の場合|then127-->thenS127-->END186 127-->|偽の場合|128 128-->elseS128-->END186-->129 129-->130 130-->|繰返し文開始へ|123 132-->133 133-->134 134-->135 135-->136 136-->137 137-->138