PR

7月21日 「こうしろう,今日何するが?」と訊ねると,C言語の勉強をすると言う。「MindStorms飽きたのか?」,「なーん,MindStorms時間かかるから,今日はCをちょっと。」確かに中学生はお忙しいみたいだが,Cのプログラミングにカッコ良さを感じているようなところもあるのだろう。「C言語の勉強」はしばらく続きそうだ。

 日経ソフトウエア2000年8月号の『データ処理は演算子と変数を覚えればバッチリ』に従い,演算子の勉強を進める。演算子はNQCで経験済みなのでスラスラと読み進める。つまったところは a = i++ と a = ++i の違いだ(典型的なところでひっかかってくれるので,私は書きやすくて助かる)。後置インクリメント演算子(a = i++)は,iの値をaに代入してからiの値を1つ増加させる。仮にiが3の状態でa = i++を実行するとaは3に,iは4になる。それに対し,前置インクリメント演算子(a = ++i)では,加算,代入の順で処理が実行されるので,a,iとも4になる。

 まず,こうしろうが入力したサンプルプログラムが以下である。

#include <stdio.h>

main()
{
  int a;

  printf("今日の天気は?\n");
    printf("晴れ=1 曇り=2 雨=3:");
    scanf("%d",&a);

    if(a == 1||a == 2)
      printf("傘はいりません。\n");
    else
      printf("傘が必要です。\n");

  return 0;
}

 2つの値が等しいかどうかを判定する比較演算子(==)とOR(または)を表す論理演算子(||)を使っている。

7月28日 続いて構造体を学ぶ。

#include<stdio.h>

main()
{
  /*構造体の宣言*/
  struct book{
    char name[100];
    int yen;
  }buybook[5];

  /*変数の宣言*/
  int id = 0;
  int maxID,maxYen = 0;

  while(id < 5){
    printf("%d番目の本の"
      "名前を入力してください: ",id + 1);
    scanf("%s",buybook[id].name);
    printf("%d番目の本の"
      "金額を入力してください:",id + 1);
    scanf("%d",&buybook[id].yen);

    if(buybook[id].yen > maxYen){
      maxID = id;
      maxYen = buybook[id].yen;
    }

  id++;
  }

  printf("一番高い本は%d円の「%s」です。\n",
    buybook[maxID].yen,buybook[maxID].name);

  return 0;
}

 本の名前とその価格を記憶する構造体bookを定義して,buybook[5]でbook構造の配列を作成する。本の名前と価格をscanf関数で受け取り,もっとも値段の高い本の添え字(id)をmaxID に代入し,その価格をmaxYenに保存している。

 「構造体,わかったか?」とこうしろうに説明を求めると,なんか「もちゃもちゃ」とした説明をしている。「構造体を使うとさ,例えば名刺,名刺には住所や会社名,名前,…といろんな情報があるだろ。こんな情報のかたまり,つまりレコードを扱うのに便利なんだよ。」,「はい」と良いお返事のこうしろうに,C言語身につくかもしれんなと期待が湧く。

 自然言語でもコンピュータ言語でも,言語の獲得はまず,まねることから始まるのだろうが,こうしろうの妹ほのちゃん(2才9カ月)は最近変な言葉ばかりをまねて,周囲に笑いとびっくりを与えている。まず,私の口真似で「おーい」,こうしろうの真似で「わしは」,かずの真似で「こりゃ,なんじゃ。」まるでおとっつあんのようだ。極めつけは妻の真似で「ごくらく,ごくらく。」お人形を横に寝かしては「極楽,極楽」とほのは言っている。こっちの学習は,ほっておこう。面白いからいいや。(解説:とても気持ちのいい時,今風に言うと「いやされているとき」に極楽,極楽と言います。年配の方がよく使うのですが,ということは私の妻は…,む,やばい。やめておこう)