ex09-3.c

正の整数 $n$ の値を入力すると、半角のアスタリスク(星マーク) * と 半角のドット(ピリオド) . を使って次のような $n\times n$ のサイズの模様を出力するプログラム ex09-3.c を作成し、kiso2コマンドを用いて提出しなさい。 出力される模様は、i 行目に i-1 個の . が表示され、続いて n-(i-1) 個の * が表示される。 また、n に正の整数以外の値が入力された場合は、何も出力せずに終了するものとする。

実行例:

t180900@s01cd0542-160:~/kiso2-2018/ex09$ ./ex09-3
n? 0
t180900@s01cd0542-160:~/kiso2-2018/ex09$ ./ex09-3
n? 1
*
t180900@s01cd0542-160:~/kiso2-2018/ex09$ ./ex09-3
n? 2
**
.*
t180900@s01cd0542-160:~/kiso2-2018/ex09$ ./ex09-3
n? 5
*****
.****
..***
...**
....*
t180900@s01cd0542-160:~/kiso2-2018/ex09$ ./ex09-3
n? 12
************
.***********
..**********
...*********
....********
.....*******
......******
.......*****
........****
.........***
..........**
...........*

ex09-4.c

正の整数 $n$ の値を入力すると、半角のアスタリスク(星マーク) * と 半角のドット(ピリオド) . を使って次のような模様を出力するプログラム ex09-4.c を作成し、kiso2コマンドを用いて提出しなさい。 出力される模様は、i 行目に i-1 個の . が表示され、続いて i 個の * が表示される。 また、n に正の整数以外の値が入力された場合は、何も出力せずに終了するものとする。

実行例:

t180900@s01cd0542-160:~/kiso2-2018/ex09$ ./ex09-4
n? 0
t180900@s01cd0542-160:~/kiso2-2018/ex09$ ./ex09-4
n? 1
*
t180900@s01cd0542-160:~/kiso2-2018/ex09$ ./ex09-4
n? 2
*
.**
t180900@s01cd0542-160:~/kiso2-2018/ex09$ ./ex09-4
n? 5
*
.**
..***
...****
....*****
t180900@s01cd0542-160:~/kiso2-2018/ex09$ ./ex09-4
n? 12
*
.**
..***
...****
....*****
.....******
......*******
.......********
........*********
.........**********
..........***********
...........************

ex09-5.c

大きさ(要素の数)が10の整数型の配列変数 a に対して、各要素 a[0] から a[9] までの値を順にキーボードから入力すると、a の各要素を逆順に(a[9]) から始まり a[0] で終わる順に)出力するプログラム ex09-5.c を作成し、kiso2コマンドを用いて提出しなさい。

実行例:

t180900@s01cd0542-160:~/kiso2-2018/ex09$ ./ex09-5
0? 1
1? 2
2? 4
3? 6
4? 8
5? 7
6? 6
7? 3
8? 0
9? -1
a[9] = -1
a[8] = 0
a[7] = 3
a[6] = 6
a[5] = 7
a[4] = 8
a[3] = 6
a[2] = 4
a[1] = 2
a[0] = 1

ex09-6.c

正の整数 $n$ の値を入力すると、全角のアスタリスク(星マーク) と全角の空白文字(あるいは、半角の空白文字2つ)を使って次のような $(2n+1)\times(2n+1)$ のサイズの模様を出力するプログラム ex09-6.c を作成し、kiso2コマンドを用いて提出しなさい。 ただし、n に正の整数以外の値が入力された場合は、何も出力せずに終了するものとする。

実行例:

t180900@s01cd0542-160:~/kiso2-2018/ex09$ ./ex09-6
n? 0
t180900@s01cd0542-160:~/kiso2-2018/ex09$ ./ex09-6
n? 1
***
* *
***
t180900@s01cd0542-160:~/kiso2-2018/ex09$ ./ex09-6
n? 2
*****
** **
*   *
** **
*****
t180900@s01cd0542-160:~/kiso2-2018/ex09$ ./ex09-6
n? 5
***********
***** *****
****   ****
***     ***
**       **
*         *
**       **
***     ***
****   ****
***** *****
***********
t180900@s01cd0542-160:~/kiso2-2018/ex09$ ./ex09-6
n? 12
*************************
************ ************
***********   ***********
**********     **********
*********       *********
********         ********
*******           *******
******             ******
*****               *****
****                 ****
***                   ***
**                     **
*                       *
**                     **
***                   ***
****                 ****
*****               *****
******             ******
*******           *******
********         ********
*********       *********
**********     **********
***********   ***********
************ ************
*************************
このプログラムは、たとえば各行を i、各列を j とすると、次のようなソースコードで表現することができます。
for (i=1; i<=2*n+1; i++) {        // 各行の表示
  for (j=1; j<=2*n+1; j++) {      // 各列の表示
    if ( /* "*" を出力する条件 */ )
      printf("*");
    else // それ以外は空白文字を出力する
      printf(" ");
    }
  printf("\n");                   // 行末の改行
}

*を出力する条件は、複数の不等式の組み合わせとして表現するのが考えやすいと思います。 図形が描かれる領域を i j 座標平面だと考えると、図形の左上の座標が (1,1)、左下の座標が (2n+1, 2n+1)、中央上の座標が (n+1, n+1) …と表現されます。 したがって、ひし形の境界面は i = -j + n + 1 で表すことができます。

  • lecture/kiso2/ex09.txt
  • 最終更新: 2018/11/23 14:17
  • by sano