狠狠撸

狠狠撸Share a Scribd company logo
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]にアクセスできることに注意!
次回予告
? 変数,型の続き
? 関数
? 制御構文
本日は以上です
ありがとうございました

More Related Content

颁言语讲习会1