C言語講習会 第1回
ロボット技術研究会
13情報工学科
@odenhadengaku
今日やること
• 講習会について
• (titech-pubnetの設定)
• C言語について
• Ideone
• Hello Worldの前に
• Hello World
• エラーの対処法
• 変数 配列 型
• 次回予告
講習会について
• 時間・回数:2時間×4回
• マイコン講習会やF3RCにスムーズに対応でき
るレベルのC言語を教える(らしい)
-未学者・超初心者向けです 難しいことはやらないです
• わからないことがあったら積極的に質問しま
しょう
-優しい14が答えてくれる
講習会について
第1回:はじめに Hello World
変数 配列 型
第2回:関数 制御構文
第3回:配列再び ビット演算 マクロ
第4回:構造体、共用体、列挙体
ポインタ ヘッダファイル
titech-pubnetの設定
• titech-pubnet:キャンパスにある無線LAN
• 設定すると無線LANが自由に使えるので良い
-速度は、まぁ…
• 講習会で使用するIdeoneはWebサイトなので
ネットに繋がらないと使えない
• 設定しよう!!!!
titech-pubnetの設定
• http://www.noc.titech.ac.jp/wlan/guide.shtml
に設定方法が書いてある
1. 無線LANを有効にすると、titech-
pubnetが検出される
2. プロパティに以下を入力
1. セキュリティの種類:WPA2-パーソナル
2. 暗号化の種類:AES
3. ネットワーク セキュリティ:titech-pubnet
titech-pubnetの設定
• http://www.noc.titech.ac.jp/wlan/guide.shtml
に設定方法が書いてある
3. プロキシの設定をおこなう
• IE:メニューから[インターネットオプション]
• Chrome:[設定]->[プロキシ設定]
• Firefox:メニューから[ツール]->[オプション]
を選び,[詳細][ネットワーク][接続設定]と進
む
4. 自動検出にチェックを入れる
• もしくは自動構成(プロキシ)スクリプトに
「http://portal.titech.ac.jp/proxy.pac」
と入力
C言語について
• ロボット(マイコン)やPCを制御するには,
それらに命令を送らなければならない
– サーボをm度動かす,n秒前に進む,逆行列を求める…
• 命令を処理するには,ロボット/PCが理解でき
る言語で命令する必要がある→機械語
• 人間にとって非常に読みにくく,理解し難い
– 2進数(表示では16進数)
C言語について
• 人間もコンピュータも理解できる言語が必要
– プログラミング言語
– でもコンピュータはプログラミング言語自体を理解すること
はできない
• 様々な種類のプログラミング言語がある
– C,C#,C++,Java,Python,Scheme,Haskell…
• 今回はC言語を扱う
– マイコンは主にC言語を使用する
– C言語が分かれば,他のプログラミング言語を学ぶ際にも
参考になる(はず)
C言語について
• C言語によるプログラミング(GCCの場合)
1. ソースコードの作成
2. コンパイル
• ソースコード(プログラミング言語)を機械語に変換すること
• 機械語に変換するツールをコンパイラという
3. 実行ファイルが生成される
4. 実行!!
実行結果
Ideone
• C言語の開発環境は様々
– エディタ+コンパイラ(gcc, Borland C++ Compiler…)
– Visual Studio,Eclipseなどの統合開発環境(IDE)もある
– マイコン講習会ではAtmel Studioを使用
• 上記の方法はインストールなどが面倒
– 特にコンパイラを✝Windows✝に導入する場合
• 今回は気軽にC言語に触れてもらうために
Ideoneを使用
– https://ideone.com/
– 多言語対応オンラインコンパイラ
– WebサイトなのでOSに依存しない
Ideoneの使い方
1. https://ideone.com/にアクセス
2. ソースコードを書く
3. 左下のタブが「C」になっているか確認
4. 「Run」ボタンを押す
5. 「stdout」に実行結果が表示される
3
4
Hello World
• プログラミング言語を学ぶ際に,最初に書く
プログラムとして定番のもの
– 入門書の80-90%はこのタイプのプログラムが最初
• ただ「Hello World」と出力するだけのプログ
ラム
– 実際に目に見えたら面白い
– Ideoneの使い方を覚えるついでに,実際に書いてみよう
でもちょっと待って
Hello Worldの前に
• どちらか1つのコードはエラーが発生する
Hello Worldの前に
• どちらか1つのコードはエラーが発生する
#include <stdio.h>
int main(void){
printf(“Hello World¥n”);
return 0;
}
#include <stdio.h>
int main(void){
printf(“Hello World¥n”);
return 0;
}
Hello Worldの前に
• どちらか1つのコードはエラーが発生する
全角文字が入っていること
を示すエラー
• 右は全角スペースが混入している
• 全角スペースは箇所が特定
しにくい
• ソースコードは半角英数字を入力
しよう
Hello World
• Ideoneで下のプログラムを入力し,実行しよう
• 成功すると右のようになる
– 余裕のある人は「Hello World」の文字を変えてみたり,
プログラムの一部を変えてみてどうなるのか試してみよう
– 何度も変更する場合は実行結果画面左上の「edit」から
コードを変更し,[ideone it!]を押下すると,[Output]に結
果が順次出力される
Hello World
• C言語では int main(void){…}の{…}が実行され
るので,{…}の中にプログラムを記述する
– int main(void){…}はmain関数と呼ばれる関数.
• 1つの命令(文)の最後には「;」がつく
• 命令は上から下へ実行される
• C言語は改行や空白がある程度自由がきく
– 下図のように1行に書いても正常に動く
– でも読みにくいからあまりオススメしない
– インデントをして見やすくする(勝手にしてくれる場合も)
Hello World
• printfはコンピュータに文字列を出力するよう
命令する関数
– “”(ダブルクォーテーション)で囲まれたところを出力
– 「¥n」は「改行」を意味する
• return 0; は必ずプログラムの最後につける
• #include<stdio.h>はprintfなど,入出力に関す
る機能を使えるようにするために記述
– stdio.hというファイルにprintfなどの関数の定義がされて
おり,includeによりそのファイルを呼び出している
– stdioは”Standard I/O”の略.studioではない
エラーの対処法
• エラーはプログラミングをする際に必ずと言っ
ていいほど発生するもの
– 一発でコンパイラ通ると「どこかおかしいんじゃないか」
と疑うことも…?
– よくある間違いは,スペルミス,配列の範囲外アクセス…
• プログラミングでは,エラーに対処できるよう
になることも大事
• 主に,コンパイルエラーとランタイムエラーの
2つが発生する
エラーの対処法
• コンパイルエラー
• コンパイル時に発生
• エラーメッセージを出してくれるので,どこでエ
ラーが発生しているか見当をつけやすい
エラーの対処法
• ランタイムエラー
• 日本語では「実行時エラー」
• その名の通り,プログラムが実行されている時に発
生するエラー
• コンパイルは通るので,コンパイルエラーよりも対
処が厄介
• デバッガーなどを使ってエラーの原因を探す
例:ゼロ除算
エラーの対処法
• エラーが発生したら
– 怪しい箇所をいじったり消したりして,どこでエラーが
発生しているかを特定する
– スペルミス,全角スペースは定番
– コンパイルエラーならば,エラーメッセージにヒントがあ
る場合が多い
• エラーをできるだけ発生させないように,
見やすいコードを書くようにする
– インデントや改行を心がける
変数 配列 型 の概要
• 「データを入れる箱」が変数
• そしてその箱をたくさん用意したのが配列
• しかしその箱には特定のデータしか入れること
ができない
– 整数,小数…
• どのデータを入れることができるかを示したの
が型
(誤解を恐れず)ざっくり説明すると
こんな感じ
変数 型
• 右のコードを書いて
実行しよう
• 同時進行で,変数,型
の詳しい説明とコード
の説明もします
変数 型
• 情報を数値や文字とし
て保存する必要がある
• ロボットが何回線を通過
したか
• 成績の合計値
• C言語では数値や文字な
どの情報を変数として
保持することができる
a 3
変数 型
• 変数にはどのデータを入れて
もいいわけではない
• 整数,小数,文字などタイプを
指定する必要がある
→型
• 変数を定義するには,
int a;
(型)(変数名)
のように記述する
• 定義せずに,いきなりaを利用す
ることはできない
• 変数名は基本自由
• int b,c,d,e;のようにまとめて定義
もできる.この場合すべてint型
変数 型
• 型の種類(代表的なもの)
• void型の変数は作れない
• voidは関数,ポインタで登場
• float,doubleともに小数の型
• 違いは精度
• doubleの方が精度が良い
型名 意味 扱える値 変換文字
char 文字 ‘a’,’b’… %c
int 整数 1,100… %d,%o,%x,
%u
float 浮動小数点 3.14,1.6… %f,%e
double 倍浮動小数点 1.2e+54… %f,%e
void 空 ない
変数 型
• 変数に値を代入するには
b = 2;
• のように「=」を用いる
• この場合,int型の変数bに2を
代入している
• 数学の「=」ではない.左側の
変数に値を設定するという意味.
• 変数の宣言時に値を決める
こともできる
• 初期化という
• 初期化する前の状態の変数には
0や不定の値が入っているので,
最初から変数の値が定まってい
るなら初期化すること
変数 型
• 計算では数学と同じく,四則
演算(+,-,*,/)の記号が使える
• 他にも剰余(%)が使える
• 4%2→0, 15%2→1
• c = a + b; はa+bが計算され,
その値がcに代入される.つま
りcには…?
• 数学と同じように演算子の優
先度があるため,
d = a * (b + c); のように,
()で優先度の指定もできる.
変数 型
• a++; はa = a + 1;のこと
• インクリメントという
• a--;もあり,a = a – 1;の意味
• a += b は,a = a + b;の意味
• a *= b は,a = a * b;の意味
• a++;は++a;と書いても結果は同
じ.しかし,実際の動作はビ
ミョーーーーに違う.
• int型の変数aに関して,
printf(“%d¥n”,a);と書くと,a
の内容が出力される.
• 詳しく言うと,%dの部分がaに
置き換わる
変数 型
• 右のコードを実行した結果は,
右のようになる.
• 実行できたら,コードを
ちょっといじってみよう.
• %dと変数が対応していること
を意識して,
printf(“a:%d,b:%d¥n”,a,b); と
するとどうなるか考えてみる.
おまけ1
• printfで登場した「¥n」は改行を意味する
– だから printf(“Hello¥nWorld¥n”); とすると・・・?
– 「¥n」はエスケープシーケンスと呼ばれる
• エスケープシーケンスは,通常の文字列では表
せない文字や機能を,規定された文字で表した
もの
– たとえば,printfで「”」を表示させたい
– でも printf(“””); だとエラー
– ¥”で「”」を表すので, printf(“¥””); とする
– 他にも色々あるので,「エスケープシーケンス」でググっ
てみよう
おまけ2
• 変数名は基本自由
– でもダメな場合もある
– 変数名の先頭が数字はダメ(int 10a;とか),C言語で使われ
ている言葉(予約語:int,printf…)もダメ
• a++;と++a;の違い
– どちらも1を加算する(++ はインクリメント演算子)
– 前につけると前置演算子,後ろにつけると後置演算子
– a = 1;のときに,
– b = ++a;とした場合とb = a++;した場合のbの値は…?
• 配列を利用したい場合は,
– int a[5];(宣言), int a[5]={1,2,3,4,5}; (初期化)
– a[5]とすると,a[0]-a[4]にアクセスできることに注意!
次回予告
• 変数,型の続き
• 関数
• 制御構文
本日は以上です
ありがとうございました

C言語講習会1