関数を書く練習がまだの人は、それをやりましょう。 教科書 1.9, 1.10 のプログラム例はやや難しすぎると思うので、 それらに深入りすることはお勧めしません。
次のプログラムは、教科書の関数 power() を、 配列を使って計算するように書き換えてみたものです。 gcc でコンパイルでき、“正しく”動作しますが、 ANSI C の規格には合っていません。 関数 power() 内の配列 a[ ] の宣言が n のような変数を含んでいるからです。
===============================================================================
#include <stdio.h>
int power(int base, int n);
main()
{
int i;
for (i = 0; i < 10; i++) {
printf("%d %d %d\n", i, power(2,i), power(-3,i));
}
}
int power(int base, int n)
{
int i;
int a[n+1]; /* この宣言が問題 */
a[0] = 1;
for (i = 1; i <= n; ++i)
a[i] = a[i-1] * base;
return a[n];
}
===============================================================================
int a[101]; と宣言しておけば 100 乗まで OK なので、
このスタイルでプログラムを書きたいならそれがいいでしょう。
scanf() は標準ライブラリにある関数で、数などの入力に使う。 次のサンプルで使い方を学べ。
== scanf.c ====================================================================
#include <stdio.h>
main()
{
int n;
double x;
printf("整数 n の値を入力してください.\n");
scanf("%d", &n);
printf("浮動小数点数 x の値を入力してください.\n");
scanf("%lf", &x);
printf("n は %d, x は %f です.\n", n, x);
printf("整数 n, 浮動小数点数 x の値を、スペースで区切って入力してください.\n");
scanf("%d %lf", &n, &x);
printf("n は %d, x は %f です.\n", n, x);
}
===============================================================================
scanf("%d", &n); で int 型変数 n に、
scanf("%lf", &x); で double 型変数 x に、
キーボードから値を入力できる、と(とりあえずは)覚えてほしい。
変数の前にある & については、いまは説明しない。
double 型変数は printf() では %f だったが
scanf() では %lf であることにも注意。
教科書 1.9, 1.10 のアイディアを参考にして、 テストの最高点・最低点を出力するプログラムを書け。 得点は 0 点以上 100 点以下とし、 マイナスの数が入力されたら終わるようにせよ。 たとえば次のように動けばよい。
次の生徒の得点を入力してください。 36 いままでの最高点は 36 点、最低点は 36 点です。 次の生徒の得点を入力してください。 72 いままでの最高点は 72 点、最低点は 36 点です。 次の生徒の得点を入力してください。 50 いままでの最高点は 72 点、最低点は 36 点です。 次の生徒の得点を入力してください。 -1これはあくまでも一例なので、細部は自分で考えて設計せよ。
教科書 205 ページ、315 ページに、数学(に出てくる)関数がまとめられている。 これらを使うには #include <math.h> が必要である。 また、授業で使っている gcc の約束として、 「gcc sqrt.c -lm」のように -lm (マイナス、エル、エム) をつけてコンパイルする必要がある。
== sqrt.c =====================================================================
#include <stdio.h>
#include <math.h>
main()
{
double x;
x = 2;
printf("%f\n", sqrt(x));
}
===============================================================================
円周率πの値が必要なら、
#define PI 3.14159265358979323846をコピーして利用するとよい。
ここまで準備をすると、数学に関連したプログラムが (書こうと思えば)かなり書ける。
0 (0 次の項) (0 次の項までの和)
1 (1 次の項) (1 次の項までの和)
2 (2 次の項) (2 次の項までの和)
3 (3 次の項) (3 次の項までの和)
:
のように適当なところまで出力させるプログラムを書いてみよ。