以下のプログラムに関数 average の定義を追加することで、3人の体重 ( 74.0kg, 54.2kg, 68.5kg )の平均体重を求めるプログラムを作成せよ。
ヒント1: average 関数を main の後ろで定義した場合は、プロトタイプ宣言を忘れないこと。
#include<stdio.h>
#define N 3
double average(double weight[], int n);
int main(void){
double weight[N];
double aw;
weight[0] = 74.0;
weight[1] = 54.2;
weight[2] = 68.5;
aw = average(weight, N);
printf("%.1f\n", aw);
return(0);
}
課題2
(テキスト p. 281 演習 10-4 に基づいています)
要素数が n の int型の配列を受け取り、全要素に添字(インデックス)と同じ値を代入する関数 set_idx を作成せよ。
#include<stdio.h>
#define N 1000
void set_idx(int *v, int n){
/* ここに set_idx(...) の処理を記述する */
}
int main(void){
int a[N];
int i;
/* ここで set_idx を使用する */
/* ここに結果を表示するコードを追加する */
/* (a[i] を iが0 から N-1 まで表示する */
return(0);
}
まず、main 関数の中で 0.0 から 1.0 の範囲で0.01刻みの値を要素とする double 型の配列 x[...] を作成せよ(注1)。
次に、2つの double 型の配列 a[...]、b[...] を配列へのポインタとして、a, b の要素数を整数型の(ポインタではない通常の)引数として受け取り、a[...] に b[...] の3乗を代入するような関数を作成せよ(注2)。ここで、a と b の要素数は同じであるとする。
main 関数の中で上で(2. で)定義した関数を使用して、x[...] の3乗を計算し、その結果を表示せよ。
注1) x は要素101個の配列になり、x[0] の値は 0.0、x[100] の値は 1.0 になります。
注2) この関数は「配列のポインタ」×2個 + 配列の要素数(int 型変数)x 1 個の、合計3個の引数を取る関数である、ということです。
課題4 (オプショナル)
提出は必要ありませんが、各自取り組んでみてください。
(テキスト p. 281 演習 10-5 に基づいています)
テキストの List 10-11 (p. 280, 下にも掲載) の関数 ary_set を、ary_set(&a[2], 2, 99) と呼び出すとどうなるか。
(1) まず、どうなるかをコードを見ながら実行結果を予想して回答(提出)せよ。
(2) 次に、実際にコードを実行してみて、その結果を回答(提出)する。
※ (1) の予想が間違っていても減点にはなりません。ただし、予想が間違っていたら、自分の考えたプログラムの挙動のどこが間違っていたのかを考えてみよう。
テキストの List 10-11
/*
配列の受け渡し
*/
#include <stdio.h>
/*--- 配列 v の先頭 n 個の要素に val を代入 ---*/
void ary_set(int v[], int n, int val)
{
int i;
for(i=0; i<n; i++){
v[i] = val;
}
}
int main(void){
int i;
int a[] = {1, 2, 3, 4, 5};
ary_set(a, 5, 99);
for(i=0; i<5; i++){
printf("a[%d] = %d\n", i, a[i]);
}
return(0);
}