今週は,もう一度構造体について練習しましょう.
先週演習用に用意したファイルだと,うまく読み込めません.修正したので,新しいデータファイルに直してください.
2 1 1 アベ 50 60
2 1 2 イトウ 70 45
2 1 3 ウエダ 90 53
2 1 4 エンドウ 75 65
2 1 5 オカダ 30 15
2 1 6 カトウ 90 76
2 1 7 キダ 80 56
2 1 8 クリタ 86 95
成績対応表
|
|
A
|
80点以上
|
B
|
60点以上
|
C
|
50点以上
|
F
|
50点未満
|
変数のポインタと同じように,構造体のポインタというのもあります.頭が混乱しそうですが,よく整理して理解しましょう.
前回定義した構造体を用いて,ポインタ変数を定義してみると,
struct seiseki{ int gakunen; int kumi; int bangou; char simei[25]; int ten_1; int ten_2; float heikin; char seiseki; };
struct seiseki list1; struct seiseki *kp; kp = &list1;
となります.ポインタを用いるとき,構造体の各要素はどのように表されるのでしょうか?ポインタの中身を参照するには,
int *p;
だったら,
*p
でしたね.では,構造体だと,
struct seiseki *kp;
と定義すると要素は,
*kp.gakunen
で良いでしょうか?これでは,コンパイラのエラーになってしまいます.正確には,
(*kp).gakunen
と書きます.ちょっと面倒なので,C言語ではこれを
kp->gakunen
と書きます.
#include <stdio.h> struct seiseki{ int gakunen; int kumi; int bangou; char simei[25]; int ten_1; int ten_2; float heikin; char seiseki; }; void main() { struct seiseki list2; struct seiseki *kp; kp = &list2; kp->gakunen = 2; kp->kumi = 1; printf("%d年%d組\n", kp->gakunen, kp->kumi); }
上記の成績の平均点を求めるプログラムにおいて,平均点を求める部分を関数にし,メイン関数から,引数として構造体を渡し,平均点を計算して構造体の平均に代入するようにする.
文字列は,変数に直接代入することができません.
char name[20]; name = "kobayashi";
これは,エラーになります.では,どうやって文字列に代入するかというと,
char name[20]; name[0] = 'k'; name[1] = 'o'; ....
と,とても大変です.そこで,文字列の代入をする関数が用意されています.
#include <string.h> char name[20]; strcpy(name, "kobayashi");
今回で,今年度の情報処理・演習で学ぶべき内容は全てカバーしました.
ちょっと,盛りだくさんで理解が追いついていないようですが,いろいろなプログラムを自分で組んでみてください.
来年は2回ある予定ですが,前期・後期を通しての総復習と,総合的なプログラムの作成を行います.