【演習1】 #include struct data //構造体を作りました。 { //data という新しい変数の型を作った、と考えてもいいです。 int No; int Class; char Name[20]; int Jap; int Math; int Eng; int His; int Sci; }; int main(void) { int input , i , stop; //それぞれあとで使う変数です。 data students[4]; //先ほど作ったdata型の配列、『students』を作ります。要素数は4 stop = 0; for( i = 0 ; i < 3 ; i++) //このfor文で3人分のデータを入力します。 { printf("\n%d番目の生徒のデータを入力します。\n" , i + 1); printf("生徒のナンバーを入力してください。\n"); scanf("%d" , &(students[i].No)); printf("生徒のクラスを入力してください。\n"); scanf("%d" , &(students[i].Class)); printf("生徒の名前を入力してください。\n"); scanf("%s" , &(students[i].Name)); printf("生徒の国語の点数を入力してください。\n"); scanf("%d" , &(students[i].Jap)); printf("生徒の数学の点数を入力してください。\n"); scanf("%d" , &(students[i].Math)); printf("生徒の英語の点数を入力してください。\n"); scanf("%d" , &(students[i].Eng)); printf("生徒の社会の点数を入力してください。\n"); scanf("%d" , &(students[i].His)); printf("生徒の理科の点数を入力してください。\n"); scanf("%d" , &(students[i].Sci)); } while(stop != 1) //stop変数が1になったらループを止めます。 { printf("データを参照したい生徒のナンバーを入力してください。\n"); printf("データの参照を辞めたい場合は0を入力してください。\n"); scanf("%d" , &input); switch(input) //switch文。覚えていますか? { case 0: printf("終了します。\n"); stop = 1; break; case 1: printf("1番目の生徒の名前は%s、クラスは%d\n" , students[0].Name , students[0].Class); printf("成績は\n国語:%d点\n数学:%d点\n英語:%d点\n" , students[0].Jap , students[0].Math , students[0].Eng); printf("社会:%d点\n理科:%d点\nです。\n" , students[0].His , students[0].Sci); break; case 2: printf("2番目の生徒の名前は%s、クラスは%d\n" , students[1].Name , students[1].Class); printf("成績は\n国語:%d点\n数学:%d点\n英語:%d点\n" , students[1].Jap , students[1].Math , students[1].Eng); printf("社会:%d点\n理科:%d点\nです。\n" , students[1].His , students[1].Sci); break; case 3: printf("3番目の生徒の名前は%s、クラスは%d\n" , students[2].Name , students[2].Class); printf("成績は\n国語:%d点\n数学:%d点\n英語:%d点\n" , students[2].Jap , students[2].Math , students[2].Eng); printf("社会:%d点\n理科:%d点\nです。\n" , students[2].His , students[2].Sci); break; default: printf("不正な入力です。\n"); break; } } return 0; } 【演習2】 #include #include struct para //構造体を作ります。 { //変数の新しい型を作った、と考えても良いです。 char Name[20]; int HP; //ヒットポイント、体力です。 int STR; //Strength、攻撃力です。 int VIT; //Vital、防御力です。 }; int main(void) { int damage , gameover; //あとで使う変数を宣言しています。 damage = 0; //初期化を忘れないこと。 gameover = 0; para p1 , p2; printf("プレイヤー1の名前を入力してください。(半角英数字のみ)\n"); scanf("%s" , &(p1.Name)); printf("プレイヤー2の名前を入力してください。(半角英数字のみ)\n"); scanf("%s" , &(p2.Name)); srand( (int) p1.Name); //srand、ちょっと特殊な使い方をしています。 p1.HP = rand() % 11; //本来 srandへ渡す引数(かっこの中)はint型でなければなりません。 p1.STR = rand() % 11; //しかし、プレイヤーの名前は英数字なので、文字も入りますよね。 p1.VIT = rand() % 11; //だから、キャストというものを使います。第二回あたりでほんのちょっと触れたかと思います。 srand( (int) p2.Name); //型変換とも呼ばれます。 p2.HP = rand() % 11; p2.STR = rand() % 11; p2.VIT = rand() % 11; printf("\nゲームスタート!\n\n"); while(gameover != 1) //gameover という変数が1でなければループし続けます。 { printf("%sの攻撃!\n" , p1.Name); damage = p1.STR - p2.VIT + 1; //damage変数登場。 if( p2.VIT > p1.STR ) //このままだと、VITが高い場合HPが回復してしまうので--- { //もしVITが相手のSTRより高い場合、くらうダメージを1に固定します。 damage = 1; //0だと無限に続いてしまう可能性があるから。 } p2.HP -= damage; //HPからdamageを引きます。 printf("%sに%dのダメージ!\n%sの残りHPは%d!\n\n" , p2.Name , damage , p2.Name , p2.HP); if( p2.HP <= 0 ) //もしHPが0か負になったら--- { printf("%sの勝利!\n" , p1.Name); gameover = 1; //gameover 変数を1にして--- break; //breakですぐwhileから抜けます。 } getchar(); //ゲームっぽく、何か入力されるまで処理を止めます。 printf("%sの攻撃!\n" , p2.Name); //以下、コピー damage = p2.STR - p1.VIT + 1; if( p1.VIT > p2.STR ) { damage = 1; } p1.HP -= damage; printf("%sに%dのダメージ!\n%sの残りHPは%d!\n\n" , p1.Name , damage , p1.Name , p1.HP); if( p1.HP <= 0 ) { printf("%sの勝利!\n" , p2.Name); gameover = 1; break; } getchar(); } return 0; }