* 第7回 ファイルと構造体 [#y3a3a743] - ''基本課題''は授業時間中に終わらせること。 - ★印の付いている問題は,担当教員に見せて確認の印(またはサイン)を得ること。 - 授業時間中に終わらなかった''応用課題''は,次週(1週間後の午前11:00)までの宿題とする。 - ''他人のコピーと判断されたものは正当な提出と認めない。''その場合,2人のコピーなら2分の1の点数,3人のコピーなら3分の1の点数(以下同様)とする。 - [[C言語のコンパイルと実行のしかた>../C言語環境]] -- プログラムのファイル名は,「問題番号.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)'' キーボードから読み込んだ10人分の名前(文字列),年齢(整数),身長(実数)をheight.txtファイルに格納するプログラムを作成しなさい。また,その10人分のデータを読み出して表示するプログラムも作成しなさい。 ''gx2)'' コマンドラインで与えられたファイル名のファイルの内容を画面に表示する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]); } ''gx3)'' ユーザが指定したファイル名の英文テキストファイルを開き,そこに含まれている単語の平均長を求めるプログラムを作成せよ。ただし,単語の定義は,アルファベットが連続している文字列とする。 ''gx4)'' まず,商品名と価格をメンバとする構造体を定義する。そして,その構造体変数へのポインタを引数にとり,キーボードから読み込んだ商品名と価格を,その変数に代入する関数を作成せよ。 ''gx5)'' 氏名と教科の点数(N科目分)からなる構造体(seiseki)を定義して,値をキーボードから読み込む関数,構造体に格納された値を表示する関数を作成しなさい。 ** 発展課題 [#rced6f88] - 発展課題には''提出期限を設けない''ので,前回までの発展課題でやっていないものも含めて,どれでも自分の面白いと思うものをやってよい。