- ベストアンサー
C言語で分からないことがあります
- C言語で分からないことがあります。初心者の私が参考書で見つけたプログラムについての疑問点を解決したいです。
- プログラムの中で使用されているnchar関数の引数の意味やputchar関数の役割についてよく理解できていません。
- 参考書に詳しい説明がなかったため、nchar関数の引数とputchar関数の役割が分かりません。お助けください。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
>noに入る値はどの文字(数値)で決まりますか? >例えば、このプログラムではmain関数のlnの値で決まるのでしょうか? はい、そうです。ncharを呼び出している、呼び出し側の設定している値によって決まります。 つまりnchar(a,b) のbの値です。aは画面に打つ文字です。 何段ですか:で、5を入力すると、lnには5が設定されます。 その後、 for(i=1;i<=ln;i++){ nchar(' ',ln-i); nchar('*',i); putchar('\n'); } の処理が実行されますので、for文の1回目の nchar(' ',ln-i);の呼び出しでは、noはln-iなので5-1=4が設定されます。 つまり、スペースを4個横に並べて打ちます。 次の、nchar('*',i);では、noはiなので1が設定されます。 つまり、'*'を1個打ちます。 for文の2回目の nchar(' ',ln-i);の呼び出しでは、noはln-iなので5-2=3が設定されます。 つまり、スペースを3個横に並べて打ちます。 次の、nchar('*',i);では、noはiなので2が設定されます。 つまり、'*'を2個打ちます。 これをiが5以内の間、繰り返します。
その他の回答 (3)
> noに入る値はどの文字(数値)で決まりますか? > 例えば、このプログラムではmain関数のlnの値で決まるのでしょうか? main関数の中で呼び出されるnchar関数の第二引数で決まります。つまりscanf関数で入力された整数 ln 、およびループ回数を表す整数 i で決まります。 for文の最初のループのとき i=1 なので、最初にnchar関数が実行されるとき no の数値は ln - 1 で始まり、二度目のとき no の数値は 1 で始まります。 このプログラムは段数がln段のとき、縦横にln✕ln文字を出力します。 各文字の座標を i, j (縦はi=1~ln、横はj=1~ln)で表すとき ・j < ln - i ならば空白文字( )を、 ・j ≧ ln - i ならばアスタリスク記号(*)を 出力しますね。
お礼
回答ありがとうございます。 とても参考になりました(^^)
- tatsu99
- ベストアンサー率52% (391/751)
nchar関数は、以下のように書くことができます。 void nchar(int ch,int no) { while(no>0){ no--; putchar(ch); } } noは文字を何個、画面に横に出力するかを示します。noが3なら3個出力されます。 chは出力する文字そのものです。chが'*'なら、*が出力されます。 従って、no=3、ch='*'の場合、*が横に3個出力されます。
補足
noに入る値はどの文字(数値)で決まりますか? 例えば、このプログラムではmain関数のlnの値で決まるのでしょうか?
- wormhole
- ベストアンサー率28% (1626/5665)
>・nchar関数のnoは何を表しているのか? nchar()を呼び出している側ではnoにあたる第2引数に何を渡しているか。 >・nchar関数のputchar(ch)は一体何を表しているのか? nchar()を呼び出している側ではchにあたる第1引数に何を渡しているか。 を考えればわかることかと思います。
お礼
回答ありがとうございます(^^)
お礼
ご親切な回答ありがとうございます。 とても分かりやすかったです(^^)