ex13-2.c

キーボードから正の整数 n の値を入力し、つづいて n 個の整数値を順に入力すると、まず偶数番目の値を順に出力し、その後奇数番目の値を順に出力するプログラム ex13-2.c を作成してkiso2コマンドを用いて提出しなさい。ただし、n に 0 以下の値が入力された場合は、再度 n の値を入力するものとする。

実行例:

t180900@s01cd0542-160:~/kiso2-2018/ex13$ ./ex13-2
n? 0
n? 1
0? 2
EVEN:
 0: 2
ODD:
t180900@s01cd0542-160:~/kiso2-2018/ex13$ ./ex13-2
n? 2
0? 3
1? 4
EVEN:
 0: 3
ODD:
 1: 4
t180900@s01cd0542-160:~/kiso2-2018/ex13$ ./ex13-2
n? 10
0? 9
1? 3
2? 5
3? 4
4? 6
5? 3
6? 6
7? 8
8? 0
9? -2
EVEN:
 0: 9
 2: 5
 4: 6
 6: 6
 8: 0
ODD:
 1: 3
 3: 4
 5: 3
 7: 8
 9: -2

ex13-3.c

関数 nchar() は、char型とint型の引数を1つずつ受け取り、int型の返り値を返す関数である。 関数 nchar() は、引数として受け取ったchar型の文字を、同じく引数として受け取ったint型の数だけ連続して出力し、出力した文字の数を返り値として返す。 ただし、引数として受け取ったint型の値が、0以下であるときは何も出力しないものとする。

このような関数 nchar() を定義し、以下の main() 関数(を変更せずそのまま利用して)で実行するプログラム ex13-3.c を作成してkiso2コマンドを用いて提出しなさい。

ex13-3.c
int main(void) {
  int n;
  char c;
 
  printf("c n? ");
  scanf("%c%d", &c, &n);
 
  int o = nchar(c, n);
  printf("%c は %d 個出力されました。\n", c, o);
 
  return 0;
}

実行例:

t180900@s01cd0542-160:~/kiso2-2018/ex13$ ./ex13-3
c n? a -1

a は 0 個出力されました。
t180900@s01cd0542-160:~/kiso2-2018/ex13$ ./ex13-3
c n? a 0

a は 0 個出力されました。
t180900@s01cd0542-160:~/kiso2-2018/ex13$ ./ex13-3
c n? a 1
a
a は 1 個出力されました。
t180900@s01cd0542-160:~/kiso2-2018/ex13$ ./ex13-3
c n? a 2
aa
a は 2 個出力されました。
t180900@s01cd0542-160:~/kiso2-2018/ex13$ ./ex13-3
c n? * 9
*********
* は 9 個出力されました。

ex13-4.c

要素の値が 0 から100 の範囲にある大きさ50の整数型の配列変数 data[] が以下のように与えられている。 この配列 data[] の要素の値が 0〜9, 10〜19, …, 90〜99, 100 のような10刻みの範囲に何個ずつ含まれているかを出力するプログラム ex13-4.c を作成してkiso2コマンドを用いて提出しなさい。

int data[] = {57, 25, 5, 82, 39, 37, 3, 16, 1, 7, 80, 4, 72, 81, 95, 8, 67, 83, 9, 95, 40, 13, 34, 49, 100,
              83, 79, 5, 90, 11, 8, 96, 89, 38, 30, 45, 59, 90, 32, 71, 42, 6, 57, 84, 97, 17, 84, 51, 64, 56};

実行例:

t180900@s01cd0542-160:~/kiso2-2018/ex13$ ./ex13-4
0-9: 10
10-19: 4
20-29: 1
30-39: 6
40-49: 4
50-59: 5
60-69: 2
70-79: 3
80-89: 8
90-99: 6
100: 1

ex13-5.c

要素の値が 0 から100 の範囲にある大きさ50の整数型の配列変数 data[] が以下のように与えられている。 この配列 data[] の要素の値が 0〜9, 10〜19, …, 90〜99, 100 のような10刻みの範囲に何個ずつ含まれているかを * によってヒストグラム表示するプログラム ex13-5.c を作成してkiso2コマンドを用いて提出しなさい。

int data[] = {35, 71, 53, 95, 1, 74, 28, 55, 44, 47, 33, 44, 33, 83, 81, 5, 35, 64, 23, 27, 68, 52, 88, 11, 75,
              100, 18, 48, 27, 56, 85, 77, 56, 51, 74, 52, 54, 29, 74, 29, 18, 66, 28, 9, 27, 69, 5, 73, 0, 27};

実行例:

t180900@s01cd0542-160:~/kiso2-2018/ex13$ ./ex13-5
00-09: *****
10-19: ***
20-29: *********
30-39: ****
40-49: ****
50-59: ********
60-69: ****
70-79: *******
80-89: ****
90-99: *
100  : *

ex13-6.c

2種類のテストの $N$ 人分の点数 $x_i, y_i (i=1,\cdots,N)$ に対する相関係数 $$\frac{\displaystyle\sum_{i=1}^N (x_i-\bar{x})(y_i-\bar{y})}{\sqrt{\displaystyle\sum_{i=1}^N (x_i-\bar{x})^2 \displaystyle\sum_{i=1}^N (y_i-\bar{y})^2}}$$ を計算したい。ただし、ここで $\bar{x}, \bar{y}$ は、それぞれ $x_i, y_i$ の平均値である。

まず、人数 $N$ の値を自然数として入力し、次いで $N$ 人分の $x_i, y_i$ の点数を整数として順に入力すると、$x_i, y_i$ の相関係数を出力するプログラム ex13-6.c を作成し、kiso2コマンドを用いて提出しなさい。 ただし、$N$ に 2 未満の値が入力された場合は何も出力せずにプログラムを終了するものとする。

実行例(相関係数の定義式の添字と配列の添字がずれていることに注意):

t180900@s01cd0542-160:~/kiso2-2018/ex13$ ./ex13-6
N? 0
t180900@s01cd0542-160:~/kiso2-2018/ex13$ ./ex13-6
N? 1
t180900@s01cd0542-160:~/kiso2-2018/ex13$ ./ex13-6
N? 2
0:x y? 1 2
1:x y? 2 4
平均値: 1.500000 3.000000
相関係数: 1.000000
t180900@s01cd0542-160:~/kiso2-2018/ex13$ ./ex13-6
N? 3
0:x y? 1 3
1:x y? 2 2
2:x y? 3 1
平均値: 2.000000 2.000000
相関係数: -1.000000
t180900@s01cd0542-160:~/kiso2-2018/ex13$ ./ex13-6
N? 9
0:x y? 1 9
1:x y? 2 8
2:x y? 5 6
3:x y? 1 1
4:x y? 9 7
5:x y? 3 2
6:x y? 6 3
7:x y? 9 2
8:x y? -1 3
平均値: 3.888889 4.555556
相関係数: -0.016993
  • lecture/kiso2/ex13.txt
  • 最終更新: 2018/12/20 16:34
  • by sano