第7回 繰り返し(for文) (6/10)


今回は,繰り返しのもう一つ,for 文の演習を行う.


第6回演習の解答例


for文による繰り返し表現

(例)1から,入力した値 n までの和を求めるプログラムを作成せよ.

考え方:

 この問題は,1 から n までの値を自動的に作るプログラムを土台にする.


#include <stdio.h>

void main()
{
    int i, n;

    printf("n=");
    scanf("%d", &n);

    i = 1;                   /* カウンターの値を1に */

    while(i <= n) {          /* カウンターの値が n 以下の場合,以下を繰り返す */
        printf("%d\n", i);   /* 画面にカウンターの値を表示する */
        i++;                 /* カウンターの値に1加える */
    }
}

 ここで,ループの回数を数えるカウンタは,1 から n まで変化する.

i
1
2
...
n

別の変数 wa を用意し,ループで作成したカウンタを順番に加えていく.

i wa
1 1
2 1+2
... ...
n 1+2+...+n

#include <stdio.h>

void main()
{
    int i, n, wa;

    printf("n=");
    scanf("%d", &n);

    wa = 0;   /* 和をあらかじめ 0 に */ 
    i = 1;    /* カウンターの値を1に */

    while(i <= n) {      /* カウンターの値が n 以下の場合,以下を繰り返す */
        wa += i;         /* wa = wa + i */
        i++;             /* カウンターの値に1加える */
    }
    printf("和は %d です\n", wa);     /* 結果を表示する */ 
}

同じプログラムを,for文を用いて作成すると,



#include <stdio.h>

void main()
{
    int i, n, wa;

    printf("n=");
    scanf("%d", &n);

    wa = 0;

    for(i=1; i<=n; i++) {
        wa += i;
    }

    printf("和は %d です.\n", wa);
}

となる

while文と比較してみよう.


while for

式1;
while ( 式2 ) {
文1;
式3;
}

for(式1; 式2; 式3) {
文1;
}

式1 初期値設定 繰り返し実行の直前に1度だけ実行される.カウンタの初期値設定などに使う.
式2 反復条件 while分と同様,繰り返しを継続する条件を書く.この条件式がの間は繰り返す
式3 付加実行式 繰り返しを1度行うごとに実行したいことを書く.
文1 実行文 繰り返し実行する文


while 文と for 文の使い分けのめやす

for 文は,あらかじめ繰り返しの回数がわかっているときに,利用する.

while 文は,ある条件になるまで繰り返すという場合に,利用する.

ただし,どちらも書き換えが可能なので,必ずというわけではない.


変数double型の注意点

変数float :有効桁数桁の実数

変数double:有効桁数桁の実数

float型を使用したとき


	float n;
	printf("n=");
        scanf("%f", &n);

double型を使用したとき


	double n;
	printf("n=");
        scanf("%lf", &n);

scanf関数を使用する時、float型ならば%f,double型ならば%lfにすることに注意


演習課題

(1) sin関数を用いて0°から180°までのsin関数の値を10°ずつ表示せよ

sin関数の使い方は,以下のプログラムを参考にすること


#include <stdio.h>		/*printfなどの命令を使うためのファイルの読み込み*/
#include <math.h>		/*sin関数など数学用の関数を使うためには必ず読み込むこと*/

void main()
{
	double rad,pi;		/*sin(double x)のため,変数xはdouble型で定義すること*/
	double x;
	
	pi=3.141;			/*πの定義*/
	rad = 10.0/180.0*pi;	/*sin関数の引数は,ラジアン[rad]にすること*/
	
	
	x=sin(rad);
	
	printf("角度10°の時のsinの値は%1.3fです。¥n",x);
	
}


(2)以下の数列を計算するプログラムを作成せよ

ただし,乗数計算には以下のn乗計算用の関数が使える


#include <stdio.h>		/*printfなどの命令を使うためのファイルの読み込み*/
#include <math.h>		/*sin関数など数学用の関数を使うためには必ず読み込むこと*/

void main()
{
	float x,y,n;
	
	x = 2.0;
	n = 4.0;
	
	y=pow(x,n);		/*乗数計算用の関数:xが乗数される値,nが乗数*/
	
	printf("2の4乗は%.0fです.¥n",y);
	
}

上記の数列は無限大まで計算すると値がπ/4となる,実際に答えが近い値になっているかを確かめよ
n = 10000ぐらいの値を入力すると近い値がでる


(3) まずデータ(例えば実験データなど)の件数 n を整数で入力し,続いてその件数分データを入力すると,
  データの合計と平均値を求め画面に表示するプログラムをfor文を用いて作成せよ.

  データの例:5(データ件数,これは整数),続いて 10.2 9.8 3.3 8.4 11.9 と順に入力すると,合計は...

(4) 成績データ(0以上100以下)を何件か入力し,その最大値を求めるプログラムを作成せよ.ただし,データ件数は始めに入力する.

(5)以下の長方形則を用いて数値積分を実行するプログラムを作成せよ

  数値積分は関数を解析的に解くのが困難な場合に,近似的に値を求める手法である

  以下に基本的な数値積分手法である長方形則の概念と式を示す


      長方形則の概念図

  ここで,hは長方形の幅である.ab間を100に分割した時,h=0.01 ×(b-a)となる

  今回は以下に示す式の計算せよ.ただしab間を400分割して計算すること

  プログラムの値と,手計算で求めた値を比較せよ


授業終了時までのプログラムと完成した提出用プログラムをoh-meijiシステムを使って提出すること
授業終了時に送るのは出席の確認用である. 完成した課題は提出用の回に送ること
(提出期限を厳守し,提出用の回に提出しないと採点を行わない)