• 検索結果がありません。

Microsoft PowerPoint - bp02.ppt

N/A
N/A
Protected

Academic year: 2021

シェア "Microsoft PowerPoint - bp02.ppt"

Copied!
30
0
0

読み込み中.... (全文を見る)

全文

(1)

University of Electro-Communications Human Interface section

基礎プログラミングおよび演習

第2回

(2)

復習 C言語の基本

#include <stdio.h>

int main(int argc, const char* argv[]){

// insert code here

printf (“Hello, World! ¥n”);

return 0;

}

C言語では、この部分に書いた プログラムが

上から順に実行されます。

// insert code here

printf (“Hello, World!¥n”);

return 0; //から行末までは、コメント コンパイラはコメントを読みません。 他の人がプログラムを読むときに助け なるようなことや、自分のためのメモを 書くために使います。 このコメントは、Xcodeが書いたコメント で、「ここにコードを挿入してください」と いうことです。

(3)

復習 C言語の書き方

// insert code here

printf (”Hello, World! ¥n”);

return 0; printf という関数 (function: 機能)を 呼び出しています。 printf( ”出力したい文字列” ) ; 関数の名前 関数の引数 文の終わりをあらわす セミコロン 関数 printf は文字列を出力します。 ¥n は表示すると、改行になります。 MacとPCでフォントが違うので、 Macでは、¥nの代わりに、   n=バックスラッシュn になります。

(4)

復習 上から順に実行される

„

上から順に実行されることを確かめるために、も

う1つだけ関数を覚えましょう。

#include <stdio.h>

int main(){

printf (”Plase hit ENTER key¥n”); getchar(); printf (”Thankyou¥n”); } 1文字入力 [ENTER]キーが押される まで、キーボードからの文 字入力を待ちます。 [ENTER]が押されたら、 最初に入力されたキーを 読み出します。 上から順に実行されます

(5)

University of Electro-Communications Human Interface section

(6)

式とprintf()

„

C言語は、式が計算できます。

 

„

printf() は式の計算結果を表示できます。

z printf(文字列 , 式)  として、文字列の中に、 %d を書くと、 %dが、式の値で置き換えられて表示されます。 #include <stdio.h> int main(){ 10+20*3; } #include <stdio.h> int main(){ printf(”計算結果は %d です。 ¥n ”, 10 + 20*3); } 計算結果は70 です。 20を3倍して、10足す 計算をしてくれますが、これでは結果がわかりません 出力:

(7)

式とprintf()

z

%dをいくつも書くと、printf(”文字列” , 式1, 式2, 式3

…) の式1、式2…が順番に%dに入ります。

#include <stdio.h> int main(){ printf(”式1: %d 式2:%d ¥n ”, 13, 10 + 20*3); } 式1:13 式2:70 出力:

(8)

整数の式

„

C言語の計算では、自動で実数になりません。

z

計算結果が実数になる場合は、

小数点以下を切捨てます。

printf(” %d ¥n ”, 5 / 2 ); printf(” %d ¥n ”, 5 / 2 *2 ); 2 4

出力:

5/2は、2.5だけれども、小数は切り捨て 5/2*2は、切り捨ててから2倍するので

(9)

式の例と値

2

(9/2-3)*2

4

9/2

22

2*(2+8)+(5-3)

5

5

式の例

(10)

実数の式

„ 実数を計算したいときは、 5.0/2 か、 5/2.0ように、最初から2つの 数のどちらかを実数にします。 „ 実数を表示するためには、 %f を使います。 z %dと%fを間違えてもエラーメッセージは出ません z ですが出力は変になります。 printf(” %f ¥n ”, 5.0 / 2 ); printf(” %f ¥n ”, 5 / 2.0 *3 ); printf(” %f ¥n ”, 5 / 2*3.0 ); 5.0/2 は、2.5 5/2.0も2.5で、2.5 * 3 は7.5 5/2は、整数なので切り捨てで2 なので、2*3.0 は6.0 printf(” %d ¥n ”, 2.5 ); printf(” %f ¥n ”, 2 ); printf(” %f %d %d ¥n ”, 1, 2, 3, 4 ); 1074003968 0.000000 0.000000 3 4 出力: 整数2を%fで表示しようとしたので変に その後の%d にまで影響が…   (0.000000 2 3 になりそうなものですよね) %fは整数を2個食べちゃいます。

(11)

式の計算の順番

„

式の計算の順番は

z

数学と一緒

a+b*c なら、まず b*c をしてから aを足す。

z

左から右

a+b+cは、aとbを足してから、cを足す。

„

順番を変えたいときは()を使う

printf(” %f ¥n ”, 5 / (2*3.0) ); 2*3.0は、6.0。 5 /6.0 は、0.8333333…

(12)

式の例と値

実数 10.0 1+9 + 0.0 実数 0.5 5.0/2-5/2 実数 5.0 1.0*5 実数 4.5 9.0/2 実数 2.0 4.0/2 実数 2.3 2.3 整数 整数 整数 整数 型 2 (9/2-3)*2 4 9/2 22 2*(2+8)+(5-3) 5 5 値 式の例 整数か実数かの 区別をC言語では 型と言います

(13)

関数と式

„

式には、関数も使えます。

z

数学関数を使うには、#include が1行増えます

#include <stdio.h> #include <math.h>

int main(int argc, const char* argv[]){

// insert code here

printf (”sin 1.5 = %f¥n”, sin(1.5));

return 0; } 標準入出力を使うことを宣言 数学関数を使うことを宣言 無くても動きますが、ないと コンパイラは、printf()やsin() がどんな関数か知らない状態 になります。 その結果、エラーメッセージが 不親切になってしまいます。 sin(θ)のθ=1.5のときの値を計算してくれます 0.997495

(14)

関数いろいろ

„

C言語で使える数学の関数とその意味

z

上記は、どれも実数値をとります。

z 関数はとてもたくさんあります。自分で作ることもできます。 printf (”%f¥n”, sin(1.5)/2); printf (”%f¥n”, cos(1.5)/2); 0.498747 0.035369 1.5はπ /2よりちょっと小さいので、 sin(π /2)=1.0 /2 に近い値のはず cos(1.5)は0に近い値でしょう

(15)

整数値をとる関数

„

乱数を返す関数 rand()

0~2147483647の間のランダムな整数値を取ります。

#include <stdio.h>

#include <stdlib.h>

int main(int argc, const char* argv[]){

printf (”%d¥n”, rand()); printf (”%d¥n”, rand()); printf (”%d¥n”, rand()); return 0; } rand() を使うことを宣言 16807 282475249 1622650073 ランダムな整数を表示

(16)

整数値をとる関数

„

0.0~1.0を得るには

printf (”%d¥n”, rand() / 2147483647); printf (”%f¥n”, rand() / 2147483647.0); 0 0.131538 これだと、0ばっかり 1/2147483647の確率で 1が出る 0.0~1.0が出る

(17)

式の例

実数 ランダム(0.0~1.0) rand() / 2147483647.0 整数 ランダム rand()*2 実数 3.141593 asin(1.0)*2 実数 1.994990 sin(1.5) * 2 実数 5.0 1.0*5 整数 整数 型 4 9/2 22 2*(2+8)+(5-3) 値 式の例

(18)

課題3

„

次のことをプログラムで確かめてください

z

整数同士の計算で、小数点以下が切捨られること

z

実数と整数の計算では、結果が実数になること

z

printf()の%f, %d と引数の対応がおかしくてもコンパ

イルエラーにはならないことと、出力が変になること。

z

cos

-1

(0)*2が、π = 大体3.14になること

z

sin(π/4) と、

 の数値が等しいこと

„ プログラムができたら、デバッガで1行ずつ実行してみてください。

(19)

課題4

„

実は,getchar() は、整数値をとる関数です。

getchar() が取る整数値を10回表示するプログラ

ムを作り、実行して様子を見てください。

(20)

ビルドがうまくいかない?

„

いろいろ書いていると、ビルドがうまくいかないこ

とが起こりえます。たとえば、次の例では、

„

なぞの machigai という文字列があります。

コンパイラ(gcc)がその旨を伝えるためにエラー

メッセージを出します。(xCodeが表示します)

#include <stdio.h>

int main(int argc, const char* argv[]){

// insert code here machigai

printf (”Hello, World!¥n”);

return 0;

(21)

ビルド時のエラー

„

「プロジェクト」のエラーと警告を見るか、

„

main.c の 赤丸×印にマウスをあわせるとメッセー

(22)

エラーメッセージを読もう

„

先ほどの例では、

error: `machigai‘ undeclared (first use in this function)

エラー:machigai は宣言されていません(この関数の中

では、ここで初めて使われました)

と出ています。C言語には、まだお話していない文法が

たくさんあるので、意味が取りにくいと思います。ですが、

z

コンパイラ(gcc)が machigai をどう解釈してよいかわ

からず、なにか言っている。

z

この行の machigai のあたりに何か問題があるようだ

ということは判ると思います。メッセージはいろいろあり

ますが、必ずよく読んで、意味を考えてください。

(23)

エラーメッセージの例

error:parse error before ‘}’ token

エラー:語 ‘}’ の前で構文解析エラーが起きました

„

}の前に、何かが足りないために、コンパイラ(gcc)がC言

語の解析(解釈)ができなくなったと言っています。

„

この場合前の文の最後に足りない文字がありますね。

#include <stdio.h> int main(){

printf (”Hello, World!¥n”); printf (”Hello, World!¥n”)

(24)

エラーメッセージの例

error: missing terminating “ character

エラー:終わりの文字 ” が必要です。

error:parse error before ‘}’ token

エラー:語 ‘}’ の前で構文解析エラーが起きました „ 文字列の終わりの”がないと言っています。 „ コンパイラは、 ); も表示する文字列(Hello World! ¥n)の続きだと思ったようで す。このため構文解析エラーも起きています。 „ このように、ひとつの原因で複数エラーが出ることもあります。 エラーメッセージは最初の方から見て行きましょう。 „ ひとつ直すと全部直ることもあります。こまめにビルドしましょう。 #include <stdio.h> int main(){

printf (”Hello, World!¥n”); printf (”Hello, World!¥n);

(25)

エラーメッセージの意味

„

そのほかのエラーメッセージについては、

C科大久保先生のページ

http://www.tnlab.ice.uec.ac.jp/~sokubo/class/language/ref

/error.html

を見てください

„

MacOSのgccは日本語のエラーメッセージを出し

てくれません。

Windowsの場合、Visual C++ / Borland C++ /

cygwinのgccで日本語のメッセージが出ます。

(26)

プログラムのデバッグ

„

ビルドがうまくいっても、プログラムが思ったよう

に動作しないこともあります。

„

デバッグ・デバッガとは?

z

デバッグ:プログラムが正しく動作するように修正する

こと

z

デバッガ:修正を助けるプログラム

¾プログラムを1行ずつ実行 ¾動作の様子をゆっくり見ることなどができる。

(27)

デバッグの実際

(28)

デバッグ

„

ブレークポイントを設定

z

ブレークポイントを設定してデバッグを始めると、

プログラムがブレークポイントのところで止まる。

int main(…. の行にブレークポイントを 設定して、デバッグを開始 してみてください。

(29)

デバッグ – ステップ実行

„

ブレークポイントで止まった後は、

ステップオーバーで1行ずつ実行して様子を見る

ことができます。

„

参考

„ mainが終わっても しばらくプログラムは続きま す。C言語のソースがない ので、アセンブリ言語やマ シン語が表示されます。驚 かないで。 „ステップインを選ぶと関数 の中にどんどん入っていき ます。printfの中身が全部 わかるためには結構勉強 が必要です。

(30)

課題と提出

„

課題提出Webサイト

http://haselab.hi.mce.uec.ac.jp/class/basic/

ここをクリックして指示に従ってWebのアカウントを作る ・パスワードを設定させられます ・一度ログアウトしてからログインしなおすよう指示されます

参照

関連したドキュメント

この条約において領有権が不明確 になってしまったのは、北海道の北

つまり、p 型の語が p 型の語を修飾するという関係になっている。しかし、p 型の語同士の Merge

・沢山いいたい。まず情報アクセス。医者は私の言葉がわからなくても大丈夫だが、私の言

モードで./していることがわかります。モータの インダクタンスがÑnˆきいので、 2 Íの NXT パ ルスの'k (Figure 18 のºˆDWをk) )

自然言語というのは、生得 な文法 があるということです。 生まれつき に、人 に わっている 力を って乳幼児が獲得できる言語だという え です。 語の それ自 も、 から

従いまして、本来は当社が責任を持って担うべき業務ではあり

下山にはいり、ABさんの名案でロープでつ ながれた子供たちには笑ってしまいました。つ

大変な盛り上がりを見せましたリオ 2016 が終わり、次は いよいよ東京です。東京 2020