44日目 5分以内に九九の表を出力しなさい

5分でできる頭の体操。初心者向け。
九九の表をつくってみよう。
g:generation1986:id:oldfishはwhileとかでやるといいよ!

#include <stdio.h>

main()
{
	int i, j;
	for(i = 0; i < 9; i++) { 
		for(j = 0; j < 9; j++) {
			printf("%2d\t", (i+1)*(j+1));
		}
		printf("\n");
	}
	return 0;
}
実行結果
 1       2       3       4       5       6       7       8       9
 2       4       6       8      10      12      14      16      18
 3       6       9      12      15      18      21      24      27
 4       8      12      16      20      24      28      32      36
 5      10      15      20      25      30      35      40      45
 6      12      18      24      30      36      42      48      54
 7      14      21      28      35      42      49      56      63
 8      16      24      32      40      48      56      64      72
 9      18      27      36      45      54      63      72      81

あかん。もっと難しいことやんなきゃ。
例えば配列だとこうなる。

#include <stdio.h>

main()
{
	int i, j, kuku[9][9];
	for(i = 0; i < 9; i++) { 
		for(j = 0; j < 9; j++) {
			kuku[i][j] = (i+1)*(j+1);
			printf("%2d\t", kuku[i][j]);
		}
		printf("\n");
	}
	return 0;
}

せっかく配列を使ってみたのでもっと違うことできないか。
パスカルの三角形とか。

#include <stdio.h>

main()
{
	int i, j, pasc[4][4];
	pasc[0][0] = pasc[0][1] = pasc[1][0] = pasc[0][2] = pasc[2][0] = pasc[0][3] = pasc[3][0] = 1;
	for(i = 1; i < 4; i++) { 
		for(j = 1; j < 4; j++) {
			pasc[i][j] = pasc[i-1][j] + pasc[i][j-1];
			printf("%2d\t", pasc[i-1][j-1]);
		}
		printf("\n");
	}
	return 0;
}
実行結果
 1       1       1
 1       2       3
 1       3       6

初期化が汚い。
そもそも三角形じゃないし4×4領域確保して3×3しか表示できてないし、猛省。
なんかいい方法ないかなぁ。

二項定理自体を格納すればいいような気もしてきた。あとで追加するかも。

私信

こんなのどうだろう。

#include<stdio.h>

int main(void){
	int dan = 1, gyou;
	while(dan <= 9){
		gyou = 1;
		while(gyou <= 9) {
			printf("%3d", gyou * dan);
			gyou += 1;	
		}
		dan += 1;
		printf("\n");
	}
return 0;
}

switchのぐーちょきぱー表示をまとめられないだろか、とかうにうに考えてた。

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

int main(void){
	int x,y;
	srand((unsigned) time(NULL));
	
	printf("じゃん、けん…\n1.ぐー 2.ちょき 3.ぱー\n");
		scanf("%d",&y);
	
	printf("ぽん!\nあなた:");
	y = y-1;
	switch(y){  			//プレイヤの出した手を表示
		case 0:
		printf("ぐー!");
		break;

		case 1:
		printf("ちょき!");
		break;

		case 2:
		printf("ぱー!");
		break;
	}
	printf("\nCPU:");	
        x = rand() % 3;		//1~3の乱数でCPUの手を決定
	switch(x){  			
		case 0:
		printf("ぐー!\n\n");
		break;

		case 1:
		printf("ちょき!\n\n");
		break;

		case 2:
		printf("ぱー!\n\n");
		break;
	}

	if(x == y)
		printf("あいこ!");
	else if ((y+1)%3 == x%3)
		printf("かち!");
	else if ((y+2)%3 == x%3)
		printf("まけ!");
	else
		printf("1〜3の数を入力してね!");
	
return 0;
}

2008.6.7追記

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

int main(void){
	int x, y;
	char *str[]={"ぐー!", "ちょき!", "ぱー!"};	//「文字列の配列を表すポインタ」

	srand((unsigned) time(NULL));
	
	printf("じゃん、けん…\n1.ぐー 2.ちょき 3.ぱー\n");
		scanf_s("%d",&y);

	y = y-1;
	x = rand() % 3;

	printf("ぽん!\nあなた:%s", str[y]);		//プレイヤの出した手を表示
	printf("\nCPU:%s\n\n", str[x]);	

	if(x == y)
		printf("あいこ!");
	else if ((y+1)%3 == x%3)
		printf("かち!");
	else if ((y+2)%3 == x%3)
		printf("まけ!");
	else
		printf("1〜3の数を入力してね!");
	
return 0;
}