問 9(提出プログラム名:ex1109a.c)
※上級クラスは必須(中級クラスはできる人だけでよい)
(いずれも加点対象)
このプログラム(ex1109a.c)をダウンロードし,この中の関数 expand を完成させなさい.
このプログラムは,最初に長さ 2 の char 配列 str を malloc を使ってメモリ確保し,そこに "a" という文字列を格納している('a' という文字とナル文字を直接代入している).
次に,整数 n を読み込み,
str = expand(str);
を n 回繰り返しながら,繰り返しのたびに str の内容を出力している.
str の内容は最初は "a" であるが,expand を呼び出すたびに 1 文字ずつ増え,"ab", "abc", "abcd", … と変化していく.
以下の仕様に従って,関数 expand を完成させなさい.
main の内容は変更しないこと.
[関数 expand] char *expand(char *p)
p は拡張前の文字列(char 配列)を指すポインタ(その参照先が文字列)
処理内容は以下の通り(手順②と④を実装せよ):
①文字列 p の長さを調べ,これを len とする.(実装済み)
② p の指す char 配列の長さは(ナル文字の分があるので)len+1 であることから,
別途,長さ len+2 の char 配列のメモリを malloc または calloc を使って確保する.
そちらのポインタを q とする.
③ char 配列 q へ char 配列 p の内容をコピーする.(実装済み)
④ p に格納されていた最後の文字を ch としたとき,q の末尾に「ch の次の文字」を追加する.
ただし,ch が 'z' の場合は「次の文字」を 'a' とする.
末尾にナル文字も追加する必要があるのを忘れないこと.
⑤ p の指す char 配列のメモリを解放する.(実装済み)
⑥ q を return する.(実装済み)
- 【プログラムの実行結果】(その1)※赤字は実行時にキーボードから入力する内容
繰り返し回数を入力してください:10 1:[ab]⏎ 2:[abc]⏎ 3:[abcd]⏎ 4:[abcde]⏎ 5:[abcdef]⏎ 6:[abcdefg]⏎ 7:[abcdefgh]⏎ 8:[abcdefghi]⏎ 9:[abcdefghij]⏎ 10:[abcdefghijk]⏎
- 【プログラムの実行結果】(その2)※赤字は実行時にキーボードから入力する内容
繰り返し回数を入力してください:50 1:[ab]⏎ 2:[abc]⏎ ... 49:[abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwx]⏎ 50:[abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxy]⏎
【過去にあったミス(実際に減点となり,やり直しを命じられた例)】
■ 上の実行例と出力が違っていることを見落としている.
■ インデントに不備がある(VSCode 上でインデントを自動で揃える作業をやっていない).
問 4 ~問 9 は 7/9(火)12:00 までに提出を済ませてください.※23:59 ではないので注意!
(ex1104a.c ~ ex1109a.c を Moodle から提出してください.)
くれぐれも各問題で記載されている注意事項や「過去にあったミス」を見落とさないようにしてください.
なお,提出後に間違いに気付いた場合,〆切前であれば差し替え(上書き)は可能です.
← [ 問 7 (ex1107a.c) ]
← [ 問 8 (ex1108a.c) ]