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