課題1
下記のプログラムは、配列に格納された10個のデータを 表示させるプログラムである。 下記のプログラムをarray1.cとして書き、正しく実行されることを確認せよ。
#include <stdio.h> int main(void) { int i; int data[10]={2,3,0,9,12,8,9,-2,7,6}; for (i=0; i<10; i++) { printf("data[%d] = %d\n", i, data[i]); } return (0); }
課題2
下記のプログラムは、10個のデータ(等差数列)を生成し、各々を 配列に格納した後、表示させるプログラムである。 下記のプログラムをarray2.cとして書き、正しく実行されることを確認せよ。
#include <stdio.h> int main(void) { int i; int data[10]; for (i=0; i<10; i++) { data[i] = 3 * i + 10; } for (i=0; i<10; i++) { printf("data[%d] = %d\n", i, data[i]); } return (0); }
課題3
下記のプログラムをarray3.cとして書き、様々な数値で試して 正しく実行されることを確認せよ。
#include <stdio.h> int main(void) { int i, n; double data[100]; printf("数字を入力してください。\n"); printf("入力を終えるときにはCtrl-dを押してください。\n"); n = 0; while (scanf("%lf", &data[n]) != EOF) { n++; } for (i=0; i<n; i++) { printf("data[%d] = %f\n", i, data[i]); } return (0); }
(実行例) % ./a.out 数字を入力してください。 入力を終えるときにはCtrl-dを押してください。 3.4 9.2 -2.54 3 2 ^d <- キーボードから入力しても画面には表示されないので注意 data[0] = 3.400000 data[1] = 9.200000 data[2] = -2.540000 data[3] = 3.000000 data[4] = 2.000000
課題4
テストの点数(0〜100までの整数)を入力させ、下記のような 階級ごとの人数を把握したい。 下記のプログラムをarray4.cとして完成させ、 様々な数値を入力して正しく実行されることを確認せよ。
0点以上10点未満 |
10点以上20点未満 |
20点以上30点未満 |
30点以上40点未満 |
40点以上50点未満 |
50点以上60点未満 |
60点以上70点未満 |
70点以上80点未満 |
80点以上90点未満 |
90点以上100点未満 |
100点 |
#include <stdio.h> #include <stdlib.h> #define N 11 int main(void) { int i, n, data, num[N]; /* 配列の初期化 */ for (i=0; i<N; i++) { num[i] = 0; } /* データの入力 */ printf("テストの点数を入力してください。\n"); printf("入力を終えるときにはCtrl-dを押してください。\n"); n = 0; while (scanf("%d", &data) != EOF) { if (data < 0 || data > 100) { printf("入力された数字は0から100までの数字ではありません。\n"); exit(1); } else { num[data/10]++; n++; } } /* 結果の表示 */ for (i=0; i<N-1; i++) { printf("%3d点以上%3d点未満 = %3d人\n", i*10, (i+1)*10, num[i]); } printf("100点 = %3d人\n", num[N-1]); printf("--------------------------------\n"); printf("合計 = %3d人\n", n); return (0); }
(実行例) % ./a.out テストの点数を入力してください。 入力を終えるときにはCtrl-dを押してください。 32 33 33 34 5 0点以上 10点未満 = 1人 10点以上 20点未満 = 0人 20点以上 30点未満 = 0人 30点以上 40点未満 = 4人 40点以上 50点未満 = 0人 50点以上 60点未満 = 0人 60点以上 70点未満 = 0人 70点以上 80点未満 = 0人 80点以上 90点未満 = 0人 90点以上100点未満 = 0人 100点 = 0人 -------------------------------- 合計 = 5人 (実行例) テストの点数を入力してください。 入力を終えるときにはCtrl-dを押してください。 20 90 -30 入力された数字は0から100までの数字ではありません。
課題5
各要素を3桁の整数で表示するプログラムが下記に示されているが、 そのプログラムをarray5.cとして書き、正しく表示される ことを確認せよ。
#include <stdio.h> #define N 5 int main(void) { int i, j; int mat[N][N]={ {2,0,2,0,0},{0,1,0,0,0},{3,0,6,0,0},{0,4,0,1,0},{0,0,0,7,1}}; for (i=0; i<N; i++) { for (j=0; j<N; j++) { printf("%3d", mat[i][j]); } printf("\n"); } return (0); }
(実行結果) % ./a.out 2 0 2 0 0 0 1 0 0 0 3 0 6 0 0 0 4 0 1 0 0 0 0 7 1
課題6
m×nの行列A, Bが存在するとき、その行列の和、A+Bは下記のように定義される。 プログラムarray5.cを一部修正して、実行例のように行列の和を計算し、表示する プログラムをarrray6.cとして書き、正しく表示されることを確認せよ。ただし、行列 A, Bは、プログラムarray5.cと同様、プログラム内で定義されているものとする。
(実行例) % ./a.out A= 2 0 2 0 0 0 1 0 0 0 3 0 6 0 0 0 4 0 1 0 0 0 0 7 1 B= 0 0 0 2 0 2 1 0 0 5 0 0 3 0 0 1 4 0 1 0 2 0 0 0 1 A+B= 2 0 2 2 0 2 2 0 0 5 3 0 9 0 0 1 8 0 2 0 2 0 0 7 2
課題7
下記に、文字列を1文字ずつ表示させるプログラムが示されている。この プログラムをarray7.cとして書き、正しく実行されることを確認せよ。
#include <stdio.h> int main(void) { char name[] = "Wakaba-ku"; int i; for(i=0; name[i] != '\0'; i++){ printf("%c\n", name[i]); } return 0; }
(実行結果) % ./a.out W a k a b a - k u
課題8
下記に、文字列の長さを表示させるプログラムが示されている。この プログラムをarray8.cとして書き、正しく実行されることを確認せよ。
#include <stdio.h> int main(void) { char name[] = "Wakaba-ku"; int i, n=0; for(i=0; name[i] != '\0'; i++){ n++; } printf("n = %d\n", n); return 0; }
課題9
下記に、複数の科目名を表示させるプログラムが示されているが、 ここでは2次元配列が使われている。その意味を理解した上で、この プログラムをarray9.cとして書き、正しく実行されることを確認せよ。
#include <stdio.h> int main(void) { char name[3][10] = {"英語", "国語", "数学"}; int i; for(i=0; i<3; i++){ printf("%s\n", name[i]); } return (0); }
(実行結果) % ./a.out 英語 国語 数学
課題10
体重を入力させ、下記のような階級ごとの人数を把握したい。 課題4を参考にして、 *********で隠されている部分を補ってプログラムをarray10.cとして完成させ、 様々な数値で試して正しく実行されることを確認せよ。
40kg未満 |
40kg以上50kg未満 |
50kg以上60kg未満 |
60kg以上70kg未満 |
70kg以上80kg未満 |
80kg以上 |
#include <stdio.h> #include <stdlib.h> #define N 6 int main(void) { int i, n, data, num[N]; /* 配列の初期化 */ for (i=0; i<N; i++) { num[i] = 0; } printf("体重を整数値で入力してください。\n"); printf("入力を終えるときにはCtrl-dを押してください。\n"); n = 0; while (scanf("%d", &data) != EOF) { ********************************* ********************************* ********************************* ********************************* ********************************* ********************************* n++; } /* 結果の表示 */ printf("40kg未満 = %3d人\n", num[0]); for (i=1; i<N-1; i++) { printf("%dkg以上%dkg未満 = %3d人\n", i*10+30, i*10+40, num[i]); } printf("80kg以上 = %3d人\n", num[N-1]); printf("-------------------------\n"); printf("合計 = %3d人\n", n); return (0); }
(実行例) % ./a.out 体重を整数値で入力してください。 入力を終えるときにはCtrl-dを押してください。 55 64 109 39 46 56 40kg未満 = 1人 40kg以上50kg未満 = 1人 50kg以上60kg未満 = 2人 60kg以上70kg未満 = 1人 70kg以上80kg未満 = 0人 80kg以上 = 1人 ------------------------- 合計 = 6人 % % ./a.out 体重を整数値で入力してください。 入力を終えるときにはCtrl-dを押してください。 45 100 67 -20 入力された数字は負の値です。
課題11
あらかじめ人数が分かっている学生集団において、英語、数学、国語の各科目ごとの 点数を入力した後に、各々の平均点と標準偏差を知りたい。 入力された点数を配列に代入し、また科目名の表示に配列を使用(課題9を参照) すると効率的である。 下記の実行結果を参考にしながら、要求を満たすプログラムを array11.cとして作成し、正しく実行することを確認せよ。ただし、 平均点、標準偏差は小数とし、各々小数点が揃うように表示させよ。
注意:平方根を計算するためには、以下の3つを実行しなければならない。
(実行例) % ./a.out 学生の人数? 3 学生1の英語: 50 学生1の数学: 70 学生1の国語: 60 学生2の英語: 40 学生2の数学: 20 学生2の国語: 30 学生3の英語: 90 学生3の数学: 60 学生3の国語: 90 英語の平均点: 60.0 数学の平均点: 50.0 国語の平均点: 60.0 英語の標準偏差: 21.6 数学の標準偏差: 21.6 国語の標準偏差: 24.5