第12回:配列(数値)


演習の解答

A,B が1桁の正整数のとき,(A * 10 + B) ― (B * 10 + A) = 45となる,A,Bの組み合わせを求めよ.


答え

A,B ともに1桁の正整数であるから,それぞれ0から9の間の数を取る.どの組み合わせの時45になるかを毎回計算しながら,確かめていけばよい.

1. Aを0にする

2. Aが9になるまで,以下を繰り返す

   2-1 Bを0にする

   2-2 Bが9になるまで,以下を繰り返す

      2-2-1 式が成り立つか判定しする

        2-2-1T 成り立つとき,AとBの値を表示する

        2-2-1F 成り立たないとき,なにもしない

となる.これを,プログラムにしてみよう.


解答例:

#include <stdio.h>

void main()
{
    int a, b;

    for(a=0; a<=9; a++){
        for(b=0; b<=9; b++){
            if((a*10+b)-(b*10+a)==45)
                printf("A=%d B=%d\n", a, b);
        }
    }
}

演習の解答

年利5%の複利(1年経つごとに利子を元金に繰り入れて,その加算額を次期の元金とする)の定期預金に1万円預けると,元利合計が10万円を超えるのは何年後になるかを求めよ.


答え

この問題では,毎年元利合計金額を計算しその額が10万円を超えるまでの年数を数える.何年繰り返すかは,プログラム作成時点ではわかっていないので,whileループを使ってみよう.

1. 預けた年数を0,元利合計を1万円にする

2. 元利合計が10万円を超えるまで,以下を繰り返す

   2-1 年数に1加える

   2-2 前の年の元利合計に,利息分を上乗せする

3. かかった年数を表示する

となる.これを,プログラムにしてみよう.


解答例:

#include <stdio.h>

void main()
{
    int year, sum;

    year = 0;
    sum = 10000;

    while(sum<100000){
        year++;
        sum *= 1.05;
    }

    printf("%d年後です", year);
}

第2回:配列


今週は,配列について学びます.

配列は,同じ型のデータを一つにまとめて扱うために編み出された方法です.多くのデータを扱うには,なくてはならないものです.

int型一つ分の数値を入れることのできる箱を で表すと,

4つのint型変数を用意するには,

int a, b, c, d;

と宣言し,

この図のようなイメージになります.変数a, b, c, d に同じ仲間の数が入るような場合,これらをまとめて扱うために配列を用います.配列を用いて,4つのint型変数を用意するには,

int a[4];

と宣言し,

この図の用なイメージとなり,4つの変数をまとめて配列aとして扱います.

ここで,中身 a[0] から a[3] (0から3の4個であることに注意)を配列 a の要素とよび,a[0] の 0 のことを,添え字とかインデックスと呼びます.

配列を初期化するには,{ } を使って値を列挙します.

int a[4] = { 1, 2, 3, 4 };


要素への代入と参照

配列の各要素への代入や要素の値の参照は,普通の変数と同じです.

int a[4];
int n = 1;

						
a[0] = 1;
a[1] = 2;

						
printf("%d\n", a[0]);
printf("%d\n", a[n]);

						

注意!!:添え字は,0から(要素数-1)の範囲です.この範囲外の要素を参照しようとすると,ハングアップします.


10個の数の和を求めるプログラム(配列版)

#include <stdio.h>

void main()
{
    int a[10] = {1,2,3,4,5,6,7,8,9,10};
    int i, sum;

    sum = 0;

    for(i=0; i<10; i++){
        sum += a[i];
    }

    printf("合計 = %d\n", sum);
}


[練習]

整数型配列に初期値として,{10,20,30,40,50}を設定する.

キーボードから配列の要素番号を入力すると,その配列の要素の値を表示するプログラムを作成しなさい.

#include <stdio.h>

void main()
{
    int a[5] = {10, 20, 30, 40, 50};
    int num;

    printf("Select  data (0-4):"); scanf("%d", &num);
    if (num<0 || num>4){
        printf("範囲を出ています");
    }else{
        printf("Data  = %d\n",a[num]);
    }
}

[応用]

整数型配列に初期値として,(10,20,30,40,50)を設定したとき,全ての要素の値を表示するプログラムを作成しなさい.

(forループを使って)


【今日の演習】

配列に格納された10個の数を,大きい順に並べかえて表示するプログラム(ソート)を作りなさい.

手順:

まず,「応用」のプログラムを利用して,10個の数を画面に表示するプログラムを作ろう.

大きい順に並べ替えるには,どのようなプログラムを作ったらよいか,アルゴリズムを考えてから,プログラムを考えよう.