Hello-World・変数

はじめに

この講座では基本的なC言語の知識を習得します。

また、このテキストを作成している人はプログラミング経験者ではありますが教育に関しては素人です。わかりづらいところなどあったらフィードバックしてもらえると助かります。

ではプログラミング講座に早速入っていく前に、この講座の概要を説明しましょう。

講座概要

先述しましたとおり、この講座はロボットを作っていくために必要な「 C言語プログラミングの知識 」を習得するためのものです。

この講座で習得するもの・習得しないもの

この講座で身につけてほしいものは以下のような技能です。

以下のようなものは 身につかない と思ってください。

もちろんこの講座で学習したことはC言語でソフトウェアを作ることに役立ちますが、実際にソフトウェアを作っていく上ではその他の知識も必要になります。その部分を埋めることはこのテキストでは行いませんので、ご了承ください1

この講座の対象者

この講座は今までプログラミングに一切触れたことがない人を対象にして作られています。今まで少しでもプログラミングをやったことがある人にとっては少しつまらない説明になってしまう可能性があります。そういうときは、資料を先に読み進めたり、資料が全て理解出来たのであれば練習問題を終わらせたことを先輩に見せたあと他の好きな作業をしてもらっていて構いません。もちろん迷惑にならなければ、ですが。

講座の方針

この講座は毎回次のような形で進めていきます。

  1. 説明を聞く
  2. 簡単な例で手を動かしてみる
  3. 練習問題を解く

練習問題がきちんと理解できれば、その回の内容は理解できるように作っています。自分が内容を理解しているかどうかの補助に利用してください。

環境構築

さて、プログラミングを早速学んでいこうと思ってもプログラムを書いて動かせる場所がなければどうしようもありません。その環境を今から作っていきます。

wandbox

今回の講座の中でC言語を実行するためのソフトウェアをインストールしてもらうのは時間の都合上厳しいものがあると判断しました。そこで、今回はプログラムをWebブラウザ上で実行できるサイト、wandbox.orgを利用してもらう形になります。

もちろん、自分でプログラミングを勉強している人で、すでにC言語を実行できる環境が手元にあるという方はそちらを使ってもらって構いません。

Wandboxへのアクセス

まずお好きなブラウザを開きます。私はGoogle ChromeFirefoxをおすすめします。

そうしたら、wandbox.orgにアクセスしてください。

ツールバーにwandbox.orgと打ち込もう

ツールバーにwandbox.orgと打ち込もう

言語選択

そうすると、左上に「wandbox」と書かれたツールバーがあるWebサイトにアクセスできたでしょう。そうしたら、まずプログラミング言語の選択をします。

皆さんはこれからC言語を学びますから、C言語を選択してください。ツールバーの下にあるボタンをクリックして、右側のLanguagesから「C」を選択します。そうすると、横にズラッと「gcc~」と書かれた選択肢が並ぶでしょう。とりあえず一番上を選択してください2

C言語を選択する様子

C言語を選択する様子

ここで少し用語の説明をはさみます。gccというのは、コンパイラの名前です。コンパイラは、みなさんが書いたプログラムを翻訳して、実行できるファイル3に変換してくれるものです。プログラムはプログラムのままでは意味がありません。みなさんが書いたプログラム(ソースコードとも言います)を、コンパイラが翻訳して実行ファイル(これをバイナリと言ったりします)に変換することで、初めて実行することができます。

gccのあとについている数字は、コンパイラのバージョンを指します。これが大きければ大きいほど、新しくなり、機能が追加されています。とりあえず今回は講習ですので、一番新しいバージョンを選んでもらえば問題ないです。

ちなみにclangというのも同じくC言語のコンパイラです。C言語には複数のコンパイラがあります。

テンプレート読み込み & 実行

言語まで選択できたら、テンプレートを読み込んで実行してみましょう。言語の選択ボタンの近くの、「Load template」というボタンを押してください。そうすると、中央に表示されているプログラムが変更されるはずです。その後に「Run (or Ctrl+Enter)」と書いてあるボタンを押してください。プログラムを実行することができます。

テンプレートを読み込んで実行

テンプレートを読み込んで実行

Hello,World

環境をセットアップできたでしょうか。そうしたら、だれもが最初に書くプログラムを書いてみましょう。

#include <stdio.h>

int main(void){
  printf("Hello,World!");
  return 0;
}

これを書いたら、実行してみてください。画面上にHello,World!と表示されたのではないでしょうか。これが皆さんの最初のプログラムです。やったね。「Hello,World」という言葉はプログラミングの世界で使われるちょっとした掛け声みたいなものです。この言葉自体に深い意味はありません。 さて、このプログラムを読んでみましょう。よくわからないところばかりですね。

printf("Hello,World!");

この行だけならなんとなくわかるでしょうか?printfという文字を書いて、その後のカッコにダブルクオーテーション(")で囲われた文字を入れればそれが表示されるのかな、と想像できます。

実際にそうなるか試してみましょう。

#include <stdio.h>

int main(void){
  printf("Hello,World!");
  printf("Hello!");
  return 0;
}

先程のプログラムにもう一行表示して実行してみてください。Hello,World!Hello!と表示されたのではないでしょうか。それぞれの文字を変えて見てください。

ここでprintfは関数と呼ばれるものになります。詳しい解説は第4章に行いますが、数学の関数(例えばy=2x+3)のように、渡した値(これを引数と言います)に応じて何か返してくれるものだと考えてください。printf("Hello,World!"); は、"Hello,World!"という引数を渡すとその引数をそのまま画面に表示してくれる関数となります。

とりあえず関数がよくわからないーという人は、「printf("Hello");と書くとHelloと表示され、printf("World");と書くとWorldと表示される。」と憶えてしまってください。

printf("Hello,World");という部分がなにをしているのかはわかりました。ではあとの部分はなんなのでしょうか?それを今説明しようとすると、皆さんがとても大変な思いをすることになってしまうので、今はとりあえずそういうものが必要なんだと思ってください(これを俗におまじないといいます)。

// ここから↓
#include <stdio.h>

int main(void){
// ここまでおまじない
  // ここに色々書いていく
// ここから↓
  return 0;
}
// ここもおまじない

これからは新しい説明があるまで、基本上のプログラムの『//ここに色々書いていく』と書かれてる部分を書き換えていく形になります。『//』はコメントを意味します。『//』と最初にかくとその行はコメントとなり、無視されます。プログラムを書く上で、説明を書いたりするときに便利です。

あと、文章のあとにいちいち『;』がついていることに気がついたでしょうか。これは文の区切れ目を意味します4

まとめ

変数・型・演算

Hello,World!はプログラミングを勉強する人が最初にやる儀式のようなものでした。ここからは少しだけ目的を持ってプログラムを勉強して見ましょう。

具体的なイメージはともかくとして、簡単な計算プログラムを作ることを考えてみましょう。例えば、3の6乗をぱっと計算してくれるような。階乗をぱっと計算してくれるような。そういうのが出来たらいいですね。

まずどんなプログラムを書くにも必要になる変数について学んでいきます。下のプログラムをコピー&ペーストしてください。

#include <stdio.h>

int main(void){
  int num;
  num = 0;
  printf("numは%dです",num);
  return 0;
}

実際に実行してみてください。「numは0です」とだけ表示されてプログラムが終了したのではないでしょうか。では早速プログラムの中身を見てみましょう。

変数の概要・変数宣言

int num;と書いてあります。これはどういう意味なのでしょうか?この文章は、「int型のnumという変数を宣言します」という意味です。なるほど、なんもわからないですね。もうちょっと簡単に説明しましょう。

プログラムを書いていくと、あるデータを保存しておきたい、という場面があります。ロボットで言えば、「このセンサーから読み取った値を後でプログラム中で使いたい」というような感じです。読み取られた値を使って、例えばモーターをどのようなスピードで動かすかを決める場面があるというのは想像できるでしょうか。この値を保存し、ある固有の名前をつけるものが変数です。変数は値を入れることができる入れ物です。

では型とはなんでしょうか。これは次回もうちょっと詳しく説明しますが、簡単に言うと「変数にどのような種類の値が入るかを決めるもの」です。int型の変数には整数のデータしか入りません5。どうして型があるのか、ということを説明するのはとても難しいのですが、データの種類の区別をつけるためだと思ってください。

もう一度説明すると、int num;という文章は「int型の(つまり整数が入る)numという名前の変数を宣言する」という意味です。宣言するというのは、「こういう名前の変数を使います!」ということを示すという意味です。わかってもらえたでしょうか?

int x; //int型のxという値を宣言
int y,z; //int型のy,zという値を宣言

変数への代入

わかったと仮定して、次の行を見てみましょう。num = 0;という文があります。これは「numという変数に0を代入する」という意味になります。「numという変数に」の部分はわかりやすいですが、「0を代入する」という文章の意味は少し難しいです。

変数は値を入れることができる入れ物だという話を先程しました。代入というのは、実際にその箱の中に値をいれることを指します。この場合、numという入れ物に0という値を入れているということです。

さきほど宣言しただけでは、numにはなんの値も入っていませんでした6。そこに0という数字を代入することで、numは0が格納された変数となります。

=を見ると数学の等式を思い出してしまいがちですが、C言語では等しいという意味ではなく、=の右側にある値を=の左側の変数に代入する、という意味になります。=の右側には他の変数や数字を直接指定することが出来ます。

a = 0; // aに0を代入
b = 3; // bに3を代入
c = a; // cにaの値を代入
0 = 2; // これはできない。エラーになります。

変数の表示

numの値を表示させているのがprintf("numは%dです",num);の部分です。Hello,Worldのプログラムで使ったprintf関数とは違う部分があります。カッコの中がダブルクオーテーションで囲まれた文字だけではなく、その後に,があり、numがあります。,は関数において複数の引数を指定するときに使います。ではどうしてさきほどまで1つの引数しか渡していなかったprintf関数で、なぜ2つの引数を指定しているのでしょうか。これを詳しく説明するととても大変なので、簡単に説明します。

printfに渡す文字列中で%dを含めると、そこに値を指定して表示することができるようになります。numは%dですの中には値を指定する%dが1つだけありますから、1つだけ表示したい値を渡してあげればよいというわけです。これが例えば、numは%dです。繰り返します。numは%dですという文章であった場合は、2つ値を指定してあげる必要があります。

int num = 0;
printf("numは%dです",num); // => 「numは0です」と表示される
printf("numは%dです、繰り返します、numは%dです",num,num); // => 「numは0です、繰り返します、numは0です」と表示される

大体わかってもらえたでしょうか。int num = 0;0を好きな数字に変えてみてください。表示される数字が変わります。

もう1つ大切なことを教えます。下のプログラムをコピーしてください。

#include <stdio.h>

int main(void){
  int num;
  num = 0;
  num = 2;
  printf("numは%dです",num);
  return 0;
}

さて、実行してみると何が表示されたでしょうか。「numは2です」と表示されたのではないのでしょうか。変数は1つの値しか持てません。変数に新しく数字を代入した場合、その変数がどんな値を持っていたにせよ、変数は新しく代入された値を持ちます。過去の値を持つことは出来ませんから、注意してください。

練習問題

  1. varという名前の変数を宣言して、その変数にすきな数字を代入して表示するプログラムを書いてください。

ヒント

#include <stdio.h>

int main(void){
  // ここにプログラムを書く
  return 0;
}

まとめ


  1. といっても、そんなに心配することはないです。

  2. 動画が小さくて見づらい場合は、動画を右クリックし「動画を別タブで開く」などをクリックしてください

  3. Windowsで言えば.exeファイルです

  4. プログラムを書き始めたばかりの人が多く躓く場所として、このセミコロンの書き忘れが存在します。プログラムは正しいはずなのに動かない、というときは必ずセミコロンが抜けている行がないか確認してください。ただ、かならず全ての行につけるわけではないのでそこは注意してください。

  5. ここを正確に説明しようとすると本当に厳しいので、こういう表現になってしまいます。ごめんなさい。気になった人は次回のテキストを見るか、自分で調べるかなどしてください

  6. 正確には初期値と言われる値が入っています