- 引数と戻り値はともにint型変数とする。
データを格納する関数のFuncで以下の配列変数とデータ数を格納する変数はともに静的変数とする。 配列の長さは マクロ定数 N に定める。
データ数は、スタックの末尾の位置(配列の添字)でもある。
引数が正のとき、その数値をスタックに格納して(スタックの末尾にデータを追加し、データ数を 1 増やす)、戻り値 0 を返す。 ただし、スタックが満杯のとき(数値を格納できないとき)は、戻り値として マクロ定数 FULL を返す。
引数が負のとき、スタックからデータを取り出して(スタックの最後のデータを取り出し、データ数を 1 減らす)、戻り値として取り出した数値を返す。 ただし、スタックが空のとき(データを取り出せないとき)は、戻り値として マクロ定数 EMPTY を返す。
スタックの最後のデータは、スタックの末尾の一つ前(size-1 の位置)に格納されている。
引数が 0 のとき、データ数とスタックの内容を表示して、戻り値 0 を返す。
- 引数と戻り値はともにint型変数とする。
prog03.c: 関数 ‘func’ 内:
prog03.c:49:10: エラー: ‘size’ undeclared (first use in this function); did you mean ‘size_t’?
49 | retu[size++] = a;
| ^~~~
| size_t
prog03.c:49:10: 備考: 未宣言の識別子は出現した各関数内で一回のみ報告されます
やりたい実行結果
% ./a.out
スタックを実現するプログラム
正の整数値:入力値をスタックに格納する(Push)
負の整数値:スタックからデータを取り出す(Pop)
整数値を入力 (正:格納,負:取出,0:終了): 31
size = 1 [31 ]
整数値を入力 (正:格納,負:取出,0:終了): 41
size = 2 [31 41 ]
整数値を入力 (正:格納,負:取出,0:終了): 59
size = 3 [31 41 59 ]
整数値を入力 (正:格納,負:取出,0:終了): -1
取出データ = 59
size = 2 [31 41 ]
整数値を入力 (正:格納,負:取出,0:終了): 26
size = 3 [31 41 26 ]
整数値を入力 (正:格納,負:取出,0:終了): 53
size = 4 [31 41 26 53 ]
整数値を入力 (正:格納,負:取出,0:終了): 58
size = 5 [31 41 26 53 58 ]
整数値を入力 (正:格納,負:取出,0:終了): -1
取出データ = 58
size = 4 [31 41 26 53 ]
整数値を入力 (正:格納,負:取出,0:終了): -1
取出データ = 53
size = 3 [31 41 26 ]
整数値を入力 (正:格納,負:取出,0:終了): -1
取出データ = 26
size = 2 [31 41 ]
整数値を入力 (正:格納,負:取出,0:終了): 97
size = 3 [31 41 97 ]
整数値を入力 (正:格納,負:取出,0:終了): -1
取出データ = 97
size = 2 [31 41 ]
整数値を入力 (正:格納,負:取出,0:終了): -1
取出データ = 41
size = 1 [31 ]
整数値を入力 (正:格納,負:取出,0:終了): -1
取出データ = 31
size = 0 []
整数値を入力 (正:格納,負:取出,0:終了): 0
自分のソースコード
int func(int a)
{
static int retu[N];
static int kosu = 0;
int i;
if (a > 0) {
if (kosu == N) return FULL;
retu[size++] = a;
}
else if (a < 0) {
if (kosu == 0) return EMPTY;
return retu[--kosu];
}
else {
printf("size = %d [", kosu);
for (i = 0; i < kosu; i++) printf("%d ", retu[i]);
printf("]\n");
}
return 0;
}