課題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