ページ 11

c言語初心者のくだらない質問4

Posted: 2013年3月22日(金) 08:49
by まるくま
| 1 2 3 4 5 6 7 8 9
-----------------------------------
1 | 1 2 3 4 5 6 7 8 9
2 | 2 4 6 8 10 121416 18
3 | 3
4 |・・・・・(以下略)・・・・・・

と表示するように九九の表を表示するプログラムを作りたいのですが、

横のタイトルを表示することはできたのですが、
縦のタイトルをどう表示すればいいのかわかりません。

printf関数などだとfor文の途中に入れることになると思うので厄介です。

コード:

#include <stdio.h>

int main(void)
{

	int i;
	int j;
	int yoko;



	for(yoko=1; yoko<=9; yoko++)
		printf("%3d",yoko);
	putchar('\n');

	printf("----------------------------");
	putchar('\n');

	for(i=1; i<=9; i++){
		for(j=1; j<=9; j++)
			printf("%3d",i*j);
		putchar('\n');
	}

	return(0);
}

Re: c言語初心者のくだらない質問4

Posted: 2013年3月22日(金) 09:25
by Tatu
iが1の時、"1 |"と書いて1の段を書く。
iが2の時、"2 |"と書いて2の段を書く。
...
というようにしたいのですね?

それならば、まるくまさんが書いた通りにfor文にprintfを入れればよいと思います。

Re: c言語初心者のくだらない質問4

Posted: 2013年3月22日(金) 09:26
by ホヅミ
改行の入れ方と考え方は同じです。

Re: c言語初心者のくだらない質問4

Posted: 2013年3月22日(金) 09:31
by zxc
  for文が重なると厄介に感じるかもしれませんが、for文中の関数などの処理と同じように考えれば問題ないと思います。外側のfor文に必要な処理くわえれば大体終わりです。

Re: c言語初心者のくだらない質問4

Posted: 2013年3月22日(金) 09:42
by まるくま
Tatuさん、ホズミさん、zxcさんありがとうございます。

きちんと表示することができました。

iが1のときiが2のとき・・・・という考え方は思い浮かばなかったです(`・ω・´)

表示できたのはいいんですが、

コード:

#include <stdio.h>

int main(void)
{

	int i;
	int j;
	int yoko;


	printf("  |");
	for(yoko=1; yoko<=9; yoko++)

		printf("%3d",yoko);
	
	putchar('\n');

	printf("--------------------------------");
	putchar('\n');

	for(i=1; i<=9; i++){
		printf("%d |",i);
		for(j=1; j<=9; j++)
			printf("%3d",i*j);
		putchar('\n');
	}

	return(0);
}
のprintf(" |");この部分が気になるのですがこういう修正は
あっても仕方のないものなのでしょうか?
(横のタイトルと九九のがそろってなかったんでずらしました)

省略したりはできませんか?

Re: c言語初心者のくだらない質問4

Posted: 2013年3月22日(金) 09:57
by zxc
   九九の結果と「|」を表示するような、段を引数にとる関数を作るのはどうでしょう。
最初にそれを呼び出して、次にfor文に段を表示する処理と一緒に入れてしまえば大体解決すると思います。本当はできるだけ、こういうわけ方をすべきではないと思います。

Re: c言語初心者のくだらない質問4

Posted: 2013年3月22日(金) 10:04
by まるくま
zxcさん、ありがとうございます。
まだよくわかりませんが、だんだんわかるようにしていきたいと思います。

Re: c言語初心者のくだらない質問4

Posted: 2013年3月22日(金) 10:21
by zxc
  さっき自分が言ったのは大体こういうことです。分け方については、あまり関係のないものを纏めてしまうと、広い範囲で使うことが難しくなるからです。今回は短いので別にかまわないでしょう。

コード:

#include <stdio.h>
 
void func(int);
void down();
 
int main(void){
 
    func(1);
 
    printf("----------------------------");
    down();
 
    for(int j=1; j<=9; j++){
        printf("%3d",j);
        func(j);
    }
 
    return(0);
}
 
void func(int num){
    printf("  |");
    for(int i=1; i<=9; i++){
        printf("%3d",(i*num) ) ;    
    }
    down();
}
 
void down(){
    putchar('\n');
}