課題08
必修課題 課題8-1, 8-2で指示されるプログラムを作成し,
そのプログラムと実行結果を提出する.
レポートは,以下で説明する「プログラムリスト」の後に,
実行結果を印刷したものを重ねてホッチキスで綴じ,提出する.
- プログラムリストの先頭には,見本と同じ形式で,
C言語の注釈(コメント)として
「科目名」「課題番号」「ログイン名」「学籍番号」「氏名」 「担当TA」
「作成履歴」「提出履歴」「プログラム説明」「感想」「実行結果」を必ず入れる.
- 「作成履歴」は出来るだけ詳細に,プログラム制作の過程や途中でつまづいた
点(コンパイルエラーや実行時の不具合など)を記録・記載すること.
少なくとも10行以上は書くように.ここが不十分なもの,不自然なものは
再提出の対象となったり,事情を聞くことがある.
- 「提出履歴」は,提出・再提出の日付と理由や段階を記入する事.
特に再提出の場合はどのような指摘を受けて再提出となったのか,
できるだけ詳しく書くこと.
- 「プログラム説明」の項には,問題を解くための考え方や方法を書くこと.
また,プログラムの途中の適切な場所にも注釈(コメント)として
プログラムの説明を入れる.
- プログラムは見やすいよう適切で正しい「段付け(インデント)」
をして提出すること.見づらいプログラムは再提出の対象である.
- 感想・質問についても,いつの時点の感想・質問なのか分かるように
日付を入れること.
- なお,過去の履歴や感想・質問は消去しないこと.
履歴等を正しく書いていない場合も再提出となることがあるので注意すること.
なお,プログラムが2頁以上に渡る場合には,1枚のA4用紙に2頁分を印刷せよ.
必修課題
- 課題8-1
文字列をキーボードから受け取り,その文字列の中の小文字を大文字に,
大文字を小文字に変換し,表示するプログラムを作成せよ.
ただし,
- 文字列をキーボードから受け取る関数には,text 8 の
example8_2.cに示した mygetline 関数を用いる.
- mygetlineとは別に,引数として文字列を受け取り,その文字
列の中の小文字を大文字に,大文字を小文字に
変換し,戻値として変換した文字数を返すような
関数を作成する.
(青文字の部分が抜けていました)
(ヒント)アスキーコードでは,0x41,0x42, --- 0x5aまでが大文字の アル
ファベットA,B --- Zに対応し,0x61,0x62, --- 0x7a が小文字のアルファベッ
トに対応する.
- 課題8-2
文字列をキーボードから受け取り,その文字列の順を逆に変換し,表示す
るプログラムを作成せよ.
ただし,
- 文字列をキーボードから受け取る関数には,text 8 の
example8_2.cに示した mygetline 関数を用いる.
- mygetlineとは別に,引数として文字列一つを受け取り,
文字列を逆転し,戻値として文字列の文字数を返すような
関数を作成する
例えば,文字列s を引数として渡せば,sの中身を下記のように逆転する.
s: "This is a pen."
↓
s: ".nep a si sihT"
戻り値: 14
力試し問題
以下は,力試し問題です.必ず各課題に対応した関数を使ったプログラムを
作成してください.
ただし,
s? は文字列を表し,添字が同じものは同一の配列を表し,全て引数として関
数に渡されること.
例以外の入力に対しても正しく動作するプログラムを作成すること.
作成した関数内で作業用に新たに文字配列用意しないこと.
strlen, strcpy, sprintf 等の文字列を扱う関数を使用しないこと.
なお,解答に対して十分に大きな要素数の配列を用意して,関数に渡して下さい.
(解答を入れる配列の要素数も引数として渡し,
要素数を越えて解答しなければならない場合には処理を中止して
-1を戻値として返すような関数とすれば安全な関数となる.)
- 課題8-3
文字列sの中の各単語の先頭の文字を大文字に,それ以後の文字
を小文字に置き換える.関数の戻り値は,文字列中の単語の数とする.ここで,
単語とは,'A'~'Z'と'a'~'z'だけで構成される1つ以上の文字の連なりと定
義する.
s: "This is a PEN. ABC123def,ghI"
↓
s: "This Is A Pen. Abc123Def,Ghi"
戻り値: 7
課題8-4
文字列sの内容をn回繰り返した文字列でsを置き換える.関数の
戻り値は,置き換えた後の文字列sの全文字数とする.
s: "This is a pen."
n: 3
↓
s: "This is a pen.This is a pen.This is a pen."
戻り値: 42