構造体と関数の演習
構造体
複数のメンバーを持つ自分で作るデータ型
時間
code:time.c
struct Mytime{
int h; //時 (メンバー)
int m; //分
};
struct Mytime t1; // stuct Mytime という型の 変数 t1 を宣言(作る)
t1.h = 3;
t1.m = 30; // 3:30
複素数
code:c.c
struct Mycomplexnum{
double a;
double b;
};
struct Mycomplexnum c;
c.a = 2.0;
c.b = 3.0; // c = 2 + 3i
関数
y = func(x) のように x を入れると答えを返す機能。答えは y に代入される。引数 x
三角形の面積を計算する関数 menseki_sanakaku( )
code:menseki.c
double menseki_sankaku(double teihen, double takasa){
double m;
m = teihen * takasa / 2.0;
return m;
}
double menseki;
menseki = menseki_sankaku(2.0, 3.0);
printef("menseki = %lf\n", menseki;
// printef("menseki = %lf\n", menseki_sankaku(2.0, 3.0);
// output : "menseki = 3.0\n"
奇数かどうか判定する関数 is_kisu ( )
code:kisu.c
int is_kisu(int n){
if(n % 2 == 0) return 0;
return 1;
}
int i;
for(i=0; i<=100; i++){
if( is_kisu(i) ){
printf("%d\n", i);
}
}
// 100以下の奇数を出力
時間を構造体変数にセットする関数
code: timeset.c
struct Mytime{
int h; //時
int m; //分
};
struct Mytime mytime_set(int hour, int min){
struct Mytime w;
w.h = hour;
w.m = min;
return w;
}
struct Mytime time1, time2;
time1 = mytime_set(13, 00);
time2 = mytime_set(14, 30);
クイズ
menseki_sankaku( )にはいくつの引数が必要か
menseki_sankaku( ) の返り値の型はなにか
演習問題
1)トランプを表す構造体を書こう (1.c)
struct Card { ...
2)トランプの値をセットする関数を書こう(2.c)
stuct Card card_set( ...)
3)52枚のカード配列を作る関数を書こう(3.c)
code: card.c
card_turumpset(trump){ ...
4)2枚のカードがペア(数字が同じ)かどうか調べる関数を書こう(4.c)
int card_ispair(struct Card a, struct Card b);
5)5枚のカードがフラッシュ(マークが同じ)かどうか調べる関数を書こう(5.c)
演習補助プログラム
code: trumbasic.c
struct Card {
// ....
};
/* prototypes */
struct Card card_set(/* ... */);
void card_trumpset(struct Card cards[]);
int card_ispair(struct Card a, struct Card b);
int card_isflash(struct Card a1, struct Card a2, struct Card a3, struct Card a4, struct Card a5);
/* main */
int main(void){
struct Card c1, c2,c3,c4,c5;
card_trumpset(trump);
if( card_ispair(c1, c2) == 1){
printf("It is pair.\n");
}else{
printf("They are not pair.\n");
}
if( card_isflash(c1, c2, c3, c4, c5) == 1){
printf("It is flash.\n");
}else{
printf("They are not flash.\n");
}
}
/* functions */
struct Card card_set(/* .... */){
// ...
}
void card_trumpset(struct Card cards[]){
// ...
// cards0 = card_set(// .... }
int card_ispair(struct Card a, struct Card b){
// ...
}
int card_isflash(struct Card a, struct Card b){
// ...
}