2018年7月13日自由課題提出分

自由プログラムの画像 C言語
自由プログラム

夏休み前に実施した授業中の課題だ。

7人提出があったぞ。

では順番に見ていこう!

まずは2次元配列を使ったこちら。

ishikawa.c

/* 他プログラムを参考にしました。 */
#include <stdio.h>
int main(void)
{
	int maru[5][5] = {
		{0,0,0,0,0},
		{0,1,0,1,0},
		{0,1,0,1,0},
		{1,0,0,0,1},
		{0,1,1,1,0},
	};
	int i, k;
	char kigou[5], kigou2[5];
	
	printf("記号を入力してね(■or●)>");
	scanf("%s", kigou);
	printf("もう一つ入力してね(○or◎)>");
	scanf("%s", kigou2);

	for(i=0; i<5; i++){
		for(k=0; k<5; k++){
			if(maru[i][k]){
				printf("%s", kigou);
			}
			else{
				printf("%s", kigou2);
			}
		}
		printf("\n");
	}
	
	return 0;
}

テトリスなどのブロックデータもこんな感じの2次元配列を使って表現しているよ。

数値をキャラクタに置き換えて表示しているんだね。

次はドラクエの戦闘シーンを再現したプログラムだ。

nakano.c

/* 自由課題 スライムを倒せ! */

#include <stdio.h>
#include <stdlib.h>
#include <time.h>

int main(void)
{
	int suraimu,n,panti,raihu;
	srand((unsigned)time(NULL));
	suraimu = rand() % 5 + 8;
	raihu = 3;
	printf("スライムが現れた!\n");
	
	while(suraimu > 0 && raihu > 0){
		printf(" ---- \n");
		printf("| HP %d |\n",suraimu);
		printf(" ---- \n");
		
		printf("どうする?\n1.戦う\n2.逃げる\n\n何番?:");
		scanf("%d",&n);
	
		if(n == 1){
			panti = rand() % 3 + 3;
			printf("スライムにパンチをくらわせた!\n%dのダメージ!\n",panti);
			if (panti == 5){
				printf("会心の一撃!\n");
			}
			suraimu -= panti;
		}
		else if(n == 2){
			printf("逃げられない!\n");
		}
		else{
			printf("そんな選択肢はないぞ!\n");
		}
		
		if(suraimu > 0){
			printf("\nスライムの攻撃!\n");
			raihu -= 1;
			printf("自分の残りライフは「%d」です\n\n",raihu);
			printf("-----------------------------------\n");
		}
	}
	
	if(suraimu <= 0 && raihu > 0){
		printf("\nやった!スライムを倒した!\n");
	}
	else{
		printf("\nGAME OVER\n");
	}
	
	return 0;
}

suraimu = rand() % 5 + 8;の部分がポイントだね。

スライムのHPが実行するたびに変わるよ。

while文の条件を使って戦闘終了するまでをループ化している。

なかなかやるな!

次は、if文のお手本のようなプログラム!

natsuki.c

#include<stdio.h>
int main(void)
{

	int house;
	
	printf("家から学院に行くのに何分掛かる?\n");
	scanf("%d",&house);
	
	if(house==0){
		printf("どこでもドア~!!!!!111111111\n");
	}
	else if(house>=1&& house<=10){
		printf("近くに住んでいるのかな?うらやまし~\n");
	}
	else if(house>=11&& house<=20){
		printf("おー、僕もそれくらいです\n");
	}
	else if(house>=30&& house<=60){
		printf("うわっ、それは大変ですね…\n");
	}
	else{
		printf("ふざけないでちゃんと、家よ!!!!!\n");
	}

	return 0;
}

あたしとしては21分から29分までのときの処理が気になるねぇ。

次は今回一番ショートなプログラムだよ。

noguchi.c

#include <stdio.h>
int main(void)
{
	int i;
	
	for(i=1; i<11; i++){
		printf("%d\n",i);
	}
	
	return 0;
}

実行結果は次のうちどれでしょう?

1)1 2 3 4 …11 まで表示

2)0 1 2 3 …10 まで表示

3)1 2 3 4 …10 まで表示

う~ん。1かしら?

こっちの魔王はくせがあるぞ!

sakuraba.c

#include<stdio.h>
int main(void)
{

	int x, y, z;
	printf("あなたの攻撃 威力:");
	scanf("%d", &x);
	printf("仲間の攻撃 威力:");
	scanf("%d", &y);
	printf("魔王の攻撃 威力:");
	scanf("%d", &z);

	printf("結果は!!     ");
	if(x>y,x>z)
		printf("魔王を倒した!おめでとう!!(HAPPY END)\n");
	else if(y>x,y>z)
		printf("魔王を倒した!………………あなたを巻き込んで(BAD END)\n");
	else if(z>x,z>y)
		printf("残念だが世界は滅亡してしまった……………(BAD END)\n");
	else
		printf("次回に続く!!!(TO BE CONTINUED)\n");
	return 0;
}

うん。これはif文でよくやってしまう例だ。

実はif(x>y,x>z)と書くと左側のx>yは条件には入らず無視されてしまうんだ。

 

もし、x>yまたはx>zという条件にしたいなら

if(x>y || x>z)

と書いてみて。

カンマ(,)は左から右に処理が移るだけで、あまり意味はないのね。

作成者からクイズです!

できれば下のプログラムは見ないで答えてね。

問題!

0+1=ワン
0+2=ニャー
6+3=ワン
6+7=ワンワン
7+9=ワンニャー
11+12=ニャーワン
11+17=ニャーニャー

である。
では、1+「?」=ワンワンワン の「?」に入る最も小さい数はなんだろう。

yae.c

#include<stdio.h>
int main(void)
{
	int kotae;
	printf("問題。\n\n0+1=ワン\n0+2=ニャー\n6+3=ワン\n6+7=ワンワン\n7+9=ワンニャー\n11+12=ニャーワン\n11+17=ニャーニャー\n\nである。\n");
	printf("では、1+「?」=ワンワンワン の「?」に入る最も小さい数はなんだろう。\n");

	scanf("%d",&kotae);
	
	if(kotae==110){
		printf("\n正解!奇数のときにワン、偶数のときにニャーと表していたんだ\n");
	}
	else{
		printf("\n残念...不正解だ。必ず規則性があるはず、それを探してみよう\n");
	}
	
	return 0;
}

次のおみくじプログラムは、rand()を使ったプログラムだけど雰囲気が夏らしいプログラムだね。

わたしはちょっと怖いかな。

yamagata.c

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main(void)
{
	/*ここにプログラムを記述*/
	int i,omikuji,n;
	
	srand((unsigned)time(NULL));
	printf("++心霊おみくじ++\n\n\n\n\n\n");
	printf("おみくじを引いてください\n");
	getchar();
	
		omikuji = rand() % 3;
	
	for(i=0; i<1; i++){
		if(omikuji!=0)break;
		printf("大吉!\n\n沢山の心霊現象を体験できる夏になるよおめでとう^^\n\n\n");
		for(n=0;n<333; n++){
			printf("9646");
		}
		printf("\n");
	}
	for(i=0; i<1; i++){
		if(omikuji!=1)break;
		printf("吉t_t\n\n微妙だね、でも心霊スポットとかに行けば何かしらは起こるかも...\n");
		for(n=0;n<222;n++){
			printf("4649");
		}
		printf("\n");
	}
	for(i=0; i<1; i++){
		if(omikuji!=2)break;
		printf("凶;_;\n\n残念、今年の夏も去年と同じで平凡です。\nお化けのおの字すら感じ取れない夏休みになるでしょうね\n");
	}

	
	return 0;	
}

コメント