文書の表示以前のリビジョンバックリンクブックに追加文書のコピーPDF の出力文書の先頭へ この文書は読取専用です。文書のソースを閲覧することは可能ですが、変更はできません。もし変更したい場合は管理者に連絡してください。 === ex09-6.c === 正の整数 $n$ の値を入力すると、**全角**のアスタリスク(星マーク) //*// と全角の空白文字(あるいは、半角の空白文字2つ)を使って次のような $(2n+1)\times(2n+1)$ のサイズの模様を出力するプログラム <wrap em>ex09-6.c</wrap> を作成し、__kiso2コマンドを用いて提出しなさい。__ ただし、//n// に正の整数以外の値が入力された場合は、何も出力せずに終了するものとする。 実行例: <code sh> t190900@s01cd0542-160:~/kiso2-2019/ex09$ ./ex09-6 n? 0 t190900@s01cd0542-160:~/kiso2-2019/ex09$ ./ex09-6 n? 1 *** * * *** t190900@s01cd0542-160:~/kiso2-2019/ex09$ ./ex09-6 n? 2 ***** ** ** * * ** ** ***** t190900@s01cd0542-160:~/kiso2-2019/ex09$ ./ex09-6 n? 5 *********** ***** ***** **** **** *** *** ** ** * * ** ** *** *** **** **** ***** ***** *********** t190900@s01cd0542-160:~/kiso2-2019/ex09$ ./ex09-6 n? 12 ************************* ************ ************ *********** *********** ********** ********** ********* ********* ******** ******** ******* ******* ****** ****** ***** ***** **** **** *** *** ** ** * * ** ** *** *** **** **** ***** ***** ****** ****** ******* ******* ******** ******** ********* ********* ********** ********** *********** *********** ************ ************ ************************* </code> <note hint> このプログラムは、たとえば各行を //i//、各列を //j// とすると、次のようなソースコードで表現することができます。 <code C> for (i=1; i<=2*n+1; i++) { // 各行の表示 for (j=1; j<=2*n+1; j++) { // 各列の表示 if ( /* "*" を出力する条件 */ ) printf("*"); else // それ以外は空白文字を出力する printf(" "); } printf("\n"); // 行末の改行 } </code> *を出力する条件は、複数の不等式の組み合わせとして表現するのが考えやすいと思います。 図形が描かれる領域を //i j// 座標平面だと考えると、図形の左上の座標が //(1,1)//、左下の座標が //(2n+1, 2n+1)//、中央上の座標が //(n+1, n+1)// ...と表現されます。 したがって、ひし形の境界面は //i = -j + n + 1// で表すことができます。 </note> lecture/kiso2/ex/ex09-6.c.txt 最終更新: 2019/11/18 14:32by sano ログイン