狠狠撸

狠狠撸Share a Scribd company logo
ロボット技術研究会 C言語講習
前半戦 @2016/6/13
立命館大学理工学部ロボティクス学科2回生 迫 佑樹
1
自己紹介
名前: 迫 佑樹
所属: 理工学部ロボティクス学科 2回生
twitter: yuki_99_s
2
目的
?ロボットの制御に必須となるプログラミングの基礎中の基礎を身に
つけてもらう.
?C言語に関する基礎的な知識を身に付ける
3
はじめに
飽きちゃうと思うので途中から実践を挟んでいきます
https://ideone.com/
こちらへアクセスすると,オンライン環境が使用できる.
例題,演習問題の問,答えは後ほどアップします.
このスライドは http://yukisako.github.io/slide.html にあげます.
私の名前 yukisako で検索したら多分1番目にヒットします
4
プログラミングとは
?コンピュータに対して「これをやったら、これをしろ」という事を書くの
がプログラミング
?とっても難しいイメージがあるけどもそんなこともない
?簡単なことの集まり
5
プログラムの具体例
こんな簡単なのもプログラム
(Scratch)
6
プログラムの具体例
+++++++++[>++++++++>+++++++++++>+++++<<<-]>.>++.
+++++++..+++.>-. ------------.<++++++++.--------.+++.------.--------.>+.
これもプログラム(brainfuck)
7
プログラムの具体例
int a = 10;
int b = 10;
int sum = a + b;
これもプログラム(いろいろ)
8
プログラムって?
コンピュータへの命令の手段
コンピュータへ命令の伝え方はいろいろ
その1つに「C言語」を用いるという手がある
9
C言語でなにができるの?
?家電の制御
?ゲームも作れる
?OSも作れる
?プログラミング言語も作れる
10
C言語の特徴
?高水準言語(読みやすい書きやすい)
?コンパイルが必要(後で説明)
?実行速度が速い!!
11
んでコンパイルってなに?
コンピュータが理解できるのはスイッチのON?OFF
スイッチがONなら1,OFFなら0と対応させたものが「機械語」
例)110011111111101011101101111110100000011100000000
12
こんなの書いてられない
ってことで,C言語でプログラムを書いて,コンパイラに機械語への翻
訳作業を頼む.
この翻訳のことをコンパイルという.
13
プログラムの考え方
逐次処理???命令された順番に処理を行うこと
繰り返し???決められた回数,同じ処理を行うこと
条件分岐???条件によって行う処理を変えること
これだけでいろんな行動が表せるのすごくない?
14
日常生活をこの3つの処理に当てはめて見よう
15
もっとロボット制御っぽく
黒いものをつかむプログラム
16
コードを書く前に
?綺麗なコードを書くことを意識しよう
コードが汚いと
→ バグが増える
→ 自分でもなにがなんだかわからなくなってくる
→ 他人が見た時になにがなんだかわからなくなる
→ コードの変更が困難
17
汚いコードとは
?一つの処理が長い
?同じような処理を何回もしている
?記述が統一されていない
?スペース,インデントが適切でない
?コメントで補足しまくらないと意味が伝わらない
?よくわからない変数名を使用している(変数についてはあとで)
?(立?館大学のCampas Webのソースコード)
18
インデント(字下げ)をつけよう
インデントあり
カッコの対応がわかりやすい
インデントなし
カッコの対応がわからない
19
空白を開けよう
インデントあり
カッコの対応がわかりやすい
インデントなし
カッコの対応がわからない
空白あり
みやすい
空白なし
ぎちぎちでなんかみにくい
20
コメントをつけよう
あとでわかりやすくするように,コメントを残すことができる
#include <stdio.h>
//printfは画面に表示する命令
int main(void) {
printf("hello worldn");
return 0;
}
21
コメントをつけよう
//とすると,その行がまるごと一行コメントとなる
「/*」と「*/」で囲むと,その囲まれた行がすべてコメントとなる
例
//これがコメントです
/*
これもコメントになります
*/
22
はじめてのプログラムを書いてみよう
https://ideone.com/
こちらにアクセスして,プログラムを書いてみる
23
24
例1 初めてのプログラム
#include <stdio.h>
int main(void) {
printf("hello worldn");
return 0;
}
25
26
ライブラリの読み込み
#include <stdio.h>
ここで,stdio.hというファイルを読み込んでいる.
1からプログラムを書いていたらほんとうに大変なので,よく使う処理をまと
めてくれるものをライブラリという
(ロボ研のNHKロボコンで使ってるマイコンを使うためにはmbed.hとかを読
み込む)
27
main関数
この部分をmain関数という.C言語のプログラムは,main関数の中身が実
行される.
printfは,画面に文字列を出力する命令.(?nは改行を表す)
28
プログラム全体
つまりこれは,画面に「hello world」と表示させるプログラム
29
演習1
画面に自分の名前と年齢を表示するプログラムを作成してくだ
さい.
出力例「 I am Yuki. 19 years old.」
30
解答
#include <stdio.h>
int main(void) {
printf("I am Yuki. 19 years oldn");
return 0;
}
31
変数を使ってみよう
変数とは計算や処理を行うための数字や文字を入れておく
「箱」
C言語ではchar, int, long, float,double型の変
数がある.型によって保存できる情報の量や内容が変わる.
変数に代入するときは = をつかう
32
変数を使ってみよう
こうすると,sumには30が入っている
33
変数を使ってみよう
変数は,上書き可能,型宣言ははじめの一回だけ.
sumには50が入っている
34
変数の型について(今は覚えなくてもOK)
型名 変数名;
int a; 整数型 (integer)
double b; 倍精度実浮動小数点型
char c; 文字型 (character)
short d; 短整数型
long e; 長整数型
float f; 単精度実浮動小数点型
35
例2 変数の中身を表示させてみたい
36
例2 変数の中身を表示させてみたい
printf("I am Yuki. %d years oldn", age);
→ "I am Yuki. 19 years oldn"
と,%dの部分にageの中身が置き換わる.
37
38
演習2
変数 birthをint型で宣言し,あなたの誕生月を格納し,表示.
出力例「私の誕生月は8月です」
39
演算子
変数 birthをint型で宣言し,あなたの誕生月を格納し,表示.
出力例「私の誕生付きは8月です」
40
演算子
int a = 10;
a = a + 5;
とすると,a には 15が格納される.
a = a + 5;は a += 5;と同値
a++;,a--; とかけばa += 1;,a -= 1;と同値
41
例3
42
演習3 四則演算を使ったプログラムを書く
a = 20,b = 5という変数をint型で宣言し,aとbの
和,差,積,商を表示.
43
条件分岐を使ってみよう
?制御式に基づいて,処理の流れを決める.
構文
if(条件){
条件が満たされた時の処理
} else {
  条件が満たされなかった時の処理
}
44
45
よく使う演算子
?制御式に基づいて,処理の流れを決める.
構文
if(条件){
条件が満たされた時の処理
} else {
  条件が満たされなかった時の処理
}
46
注意
a = 10とa == 10は違う.
a = 10は代入を表すが,a == 10は等しいかどうかを比較する演算子
47
例4
48
演習4
numという変数をint型で用意し,好きな数字を格納.
そして,numが2で割り切れたら「偶数です」,割り切れなかったら「奇
数です」と表示するプログラムを作成してください.
ヒント: 「2で割り切れる」 == 「2で割ったあまりが0」
49
繰り返し処理を使ってみよう
繰り返し処理とは,ある条件を満たす間,同じ処理を繰り返し行うこと
?C言語には,for文とwhile文(とdo while文)がある.
?今回扱うのは,for文とwhile文
50
繰り返し処理を使ってみよう
for文
for(初期値 ; 条件 ; 増分){
処理
}
という構文をしている
51
52
例5 1からnまでの和を求めるプログラム
53
演習5 for文を使ってみよう
2のn乗を2の1乗から順番に2の10乗まで表示するプログラ
ムを書いてください
54
演習5 1からnまでの和を求めるプログラム
2のn乗を2の1乗から順番に2の10乗まで表示するプログラ
ムを書いてください
55
while文を使ってみよう
56
例6 while文を使って1?nまでの和を求める
57
演習6 while文を使ってみよう
自然数nに対して,nの階乗を求めるプログラムを作成してく
ださい.
nが大きすぎると,意図しない結果になる.n<10くらいで任意
の数を決めてテストしてみよう.
58
おつかれさまでした.
本日やったこと
?プログラミングってなんだ?
?変数について
?条件分岐
?繰り返し処理
59
確認問題(これができたら今日の内容はOK)
1?100までカウントアップし,その数が3の倍数ならばFizz,
5の倍数ならBuzz,3の倍数かつ5の倍数ならばFizzBuzz,
どれでもなければ単純な数字を表示するプログラムを書いて
ください.
60
確認問題(これができたら今日の内容はOK)
出力例
1,2,Fizz,4,Buzz,Fizz,7,8,Fizz,Buzz,11,Fizz,13,
14,FizzBuzz,16,17,Fizz,19,Buzz,Fizz,22,23,
Fizz,Buzz,26,Fizz,28,29,FizzBuzz,31,32,..... 97,
98,Fizz,Buzz
61
(ヒント)余力問題の思考過程
プログラムはちょっとずつ機能を足していく
2ステップに分けてみよう
ステップ1: 1?100までとりあえず表示するプログラムを作成(繰り返し処理)
ステップ2 : 3の倍数の時Fizz,5の倍数の時Buzz,3の倍数かつ5の倍数の時
FizzBuzzと表示する処理を追加(条件分岐)
倍数の処理は演習4を参照
62

More Related Content

颁言语讲习会资料(前半)