* 第7回 ファイルと構造体 [#y3a3a743] - ''基本課題''は,必ず授業時間中に終わらせること。 - ''★印の付いている問題''は,担当教員に見せて確認の印(またはサイン)を得ること。 - ''応用課題''は,終わらなかったら次週(1週間後の午前11:00)までの宿題とする。 - ''他人のコピーと判断されたものは正当な提出と認めない。''その場合,2人のコピーなら2分の1の点数,3人のコピーなら3分の1の点数(以下同様)とする。 - プログラムのファイル名は,「問題番号.c」とすること。 -- 例: a1.c, ax3.c - [[プログラムの提出のしかた>../提出]]をよく読むこと。 -- 提出URL http://vilab.org/upload/clab-upload.html ** 基本課題 [#z066f8ab] *** ファイル [#d1f8679f] ''g1)'' まず,kansou.txtというファイルにこの授業の感想を書いて準備しておく。そして,そのファイルの中身(=感想)を表示するプログラムを作って結果を確かめなさい。 ※感想を書いたファイルも提出してください。 > 【ポイント】 関数 fopen,fclose と getc(またはfgetc),putchar を用いる。 - http://www005.upp.so-net.ne.jp/h-masuda/cl/CStrPnt/c1040.html - http://www005.upp.so-net.ne.jp/h-masuda/cl/CKiso/ck0405.html ''★g2)'' ユーザが指定したファイル名のファイルを新しく作成し,そのファイルに1から1000までの整数を書き込むプログラムを作成しなさい. > 【ポイント】 関数 fprintf を用いる。 *** 構造体 [#q3989a23] ''★g3)'' 年,月,日からなる構造体を定義し,キーボードから値を読み込み,表示するプログラムを作成しなさい。 struct date { int year; int month; int day; }; - http://www005.upp.so-net.ne.jp/h-masuda/cl/CKiso/ck0601.html ''★g4)'' x座標,y座標からなる構造体pointを定義し,その変数を3つ作成しなさい。キーボードから三角形の3つの頂点の座標を読み込み,三角形の重心の座標を求め表示しなさい。 struct point { double x; double y; }; - 参考: http://www.geisya.or.jp/~mwm48961/koukou/bunten05.htm - http://www005.upp.so-net.ne.jp/h-masuda/cl/CKiso/ck0601.html ''g5)'' まず,商品名(文字列),価格(整数),数量(整数)をメンバとする構造体を定義する。次に,構造体を要素とする長さ10の配列を作成し,中身を適当な値で初期化する。キーボードから整数を読み込み,その価格以下のデータを探してすべて表示するプログラムを作成しなさい。 struct item { char name[20]; int price; int quantity; }; struct item item_list[10] = { /* 初期化 */ }; ** 応用課題 [#bc75819d] ''gx1)'' コマンドラインで与えられたファイル名のファイルの内容を画面に表示するC言語のプログラムを作成しなさい(UNIXのcat,Windowsのtype)。このプログラムを実行するためには,「コマンドプロンプト」からプログラムを実行しなければならない。 >【ポイント】 プログラム実行時のコマンドラインの引数は,メインの引数として取得することができる。 int main(int argc, char *argv[]); このargcに,コマンドライン引数の個数,argvにそれぞれの引数の文字列が得られる。 int main(int argc, char *argv[]) { int i; for (i = 0; i < argc; i++) printf("%s\n", argv[i]); } ''gx2)'' ユーザが指定したファイル名の英文テキストファイルを開き,そこに含まれている単語の平均長(平均文字数)を求めるプログラムを作成せよ。ただし,単語の定義は,アルファベットが連続している文字列とする。 ''gx3)'' ''g4)''の構造体変数へのポインタを引数にとり,キーボードから座標値をその変数に代入する関数を作成せよ。 ''gx4)'' ''g5)''の構造体変数へのポインタを引数にとり,キーボードから読み込んだ商品名,価格,数量をその変数に代入する関数と,構造体に格納された値を表示する関数を作成しなさい。 ''gx5)'' まず,氏名(文字列),年齢(整数),身長(実数)からなる構造体を定義しなさい。そして,その構造体の配列に10人分のデータをキーボードから読み込み,それをheight.txtファイルに格納するプログラム(gx5a.c)を作成しなさい。また,その10人分のデータを読み出して表示するプログラム(gx5b.c)も作成しなさい。 ** 発展課題 [#rced6f88] - 発展課題には''提出期限を設けない''ので,前回までの発展課題でやっていないものも含めて,どれでも自分の面白いと思うものをやってよい。 ''gz1)'' 最後の課題である。''fz1)''と''bz1)''を組み合わせて,RPGを作成してみなさい。しかし,それだけでは肝心の''「経験値」''と''「レベルアップ」''がないのでそれらを実現するとよいだろう。