Download presentation
Presentation is loading. Please wait.
1
C-language Narc Neac ARithmetic Compiler
入出力・制御の基礎
2
C言語を始めよう。 まずは、計算だけをしても、結果を見れなければ意味がないので、文字や数字を表示する方法を教えましょう^^・・・とその前に
#include <stdio.h> これは「standard I/O」の略で、OSの機能を使いますよという宣言 void main(void) { printf(“WELCOME TO THE K3!”); } void main(void) { なんたらかんたら } という部分は決まりなので、絶対に書きます。これは仕様なので、理由はありませんよ^^ この「{」と「}」の間にプログラムを書くわけですが、基本的にプログラムは「{」から「}」に流れるように実行されていきます。つまり、この例では「printf(“WELCOME”);」という指令をしたあとは「}」に到達してしまいますから、プログラムは終了します。まずはプログラムの流れから。
3
詳細printf() printf(“WELCOME TO THE K3!”); >NUMBER=1000
みなさんは関数というものをしっていますよね?? 高校などで教えてもらうf(x)などです。あれはXという数字をf()という関数に与えるとある規則によって変換された数字が帰ってくるというものですよね。 それと同じようにprintf()という関数は”WELCOME”という文字を渡すと、数を返すのではなく、モニタに表示してくれるというものなのです。 また、このような書き方もできます。 printf(“NUMBER=%d”,1000); 今度は、関数に渡す数(引数)が二つになりましたね。これは%dというところに二つ目の引数である1000をいれて表示してくれます。結果は >NUMBER=1000 となります。試してみましょう。
4
詳細printf() 2 では、もう少し、詳しく。先ほどの printf(“NUMBER=%d”,1000);
は、1000を表示した。でも、これでは常に1000しか表示できないよね? もし、 a=500; printf(“NUMBER=%d”,a); a=200; printf(“NUMBER=%d”,a); このように適当な数を放り込める「箱のようなa」があれば、柔軟に数字を表示できそうだね。このようなaを「変数a」という。その名の通り「変更ができる数」なのですね^^ もうひとつ気になることがあるでしょう。それは「%dって何」だと思います。まず、%~は「そこが他の引数に置き換わる」という意味です。そして「d」はDecimal(10進数)の略で、「後ろの引数を10進数でここの位置に表示」というのが%dです。 ほかにも、16進数を表示する%x,文字を表示する%cなどがあります。
5
変数の概念 最初の方で、複雑な計算はどこかにその値をメモしておかなければならない、と書きましたが、まさにそのとおりで、C言語ではそれらを「変数」と呼びます。 10 a = 10; a という変数に10という数字を入れる。 a b = a; aという変数の内容(数字)をbという変数に入れる。 b a
6
変数の宣言 変数を使用する際、気をつけなければならないのは、「変数の宣言」である。
変数を演算するまえに(使用するまえに)プログラマは「ここではaという変数を数字を扱うために使いますよ~」などと高らかに宣言しなければなりません。 変数というのは「箱」と考えることができますが、すべてが同じ形ではありません。大きい箱から、小さい箱などさまざまです。それは、入る内容が違うからです。小さな数字、大きな数字、文字、少数などはすべて大きさが異なり、変数はそれにあった形をしていなければなりません。 宣言の例 Int とはintegerの略で、簡単に言うと数字です。数字用の「a」という変数を使うことを宣言する。 int a; char とはcharacterの略で、文字です。文字用の「moji」という変数を使うことを宣言する。(別に変数はどんな名前でもいいですよ~。あ、数字はだめね(^^ char moji;
7
では、計算してみよう。 では実際にプログラムの例を紹介しよう。細かいことは各自確認してもらいたい。
#include <stdio.h> void main(void) { int a,b,c; a=5; b=3; c=0; c=(a+b)*b+(a+5b)*a; printf(“RES = %d”,c); } 気づいた人もいるかもしれないが、すべて行(一文)の最後には「;」を入れることとなっている。これを忘れると、エラーの原因となることもあるので、注意。
8
変数の初期化 変数を宣言するのは、わかった。では、このようなことをしたらどうなるだろうか。
#include <stdio.h> void main(void) { int a; printf(“a is %d”,a); } 勘違いしやすいが、「宣言したらみんな最初は0である」などと考えてはいけない。なぜなら、宣言によって確保される(すこし意味が違うんだけど)メモリ空間には、以前そこを使っていた誰かの数字(もしくは命令)が残っているからである。そこで、プログラマは「初期化」を行う必要がある。初期化は宣言したあと「a =0;」としてもいいが、宣言に組み込むこともできる。 int a=0; printf(“ a is %d”,a); 注)初期化は別に0でなくてもいい
9
四則演算+α a = a + 1; 加算 a = a - 1; 減算 a = a * 1; 掛け算 a = a / 1; 割り算
10
「計算の手順」の補足 先ほど、計算の手順のはなしや、「{」から「}」に流れるようになどと書いたが、プログラミングの便利なところは、それだけではない。プログラミングでは、分岐、繰り返しという機能がある。図をみてもらいたい。 分岐 繰り返し A は偶数か? いろんな処理 NO i は10以上か? NO YES この図はiが10以下の間、繰り返すという意味 YES これらを使うことにより、人間にとっての「機械的計算」はコンピューターがササッっとやってくれる。 例)1から100までの数字を足すプログラムは分岐と繰り返しどっちを使うべきか?
11
分岐1 例)入力した文字が偶数だったら「この文字は偶数です」、奇数だったら「この文字は奇数です」と表示するプログラム
#include <stdio.h> void main(void) { int input; scanf(“%d”,&input); /*文字の入力。口頭で解説?*/ if(input % 2 == 0){ printf(“この数字は偶数です”); }else{ printf(“この数字は奇数です”); } }
12
分岐2 今の例で、使ったのは「if」文といい、名前の通りif(もしも)である。
If(a == b){ } 括弧の中に、条件が入る。上の場合、「もしもaがbと等しいならば、{}内を実行」を意味する。注意する点は、「==」である。「=」と書いてしまうとうまく動かない。別に、「等しいとき」以外にも条件はあるので、乗せようと思う。 A == B もしAがBに等しいなら A < B もしAがB未満なら A <= B もしAがB以下なら A > B もしAがBより大きいなら A >= B もしAがB以上なら A !=0 もしAとBが等しくなければ
13
分岐3 では、if文の詳細。 If(a == b){ printf(“a ==b”); }else if(a <b){ printf(“a < b”); }else{ printf(“??”); } このようにif文はたくさん連ねる(?)ことができる。日本語でいうのならば「もし、aとbが等しいなら、もしそうではなくaはb未満ならば、それ以外は・・・」という感じである。 ここで重要なのは、a == bだったとする。すると上のプログラムでは「a == b」と表示をする。そのあとは、a<bであるか、などをしらべないで、else{}の下に移動してしまう。この動きはとても重要で、プログラムを少し組めばわかるとおもう^^
14
繰り返し1 繰り返しはとても興味深く、プログラムの世界が広くなるでしょう^^。まずは例題から。
例)1から100までの数字を加算するプログラム #include <stdio.h> Void main(void) { int i; int ans=0; for(i=1;i<=100;i++){ ans = ans + i; } printf(“RES = %d”,ans); } For文の中に先ほどの条件の演算子が入っているのがわかると思う。また、i++と書いてあるから、iがどんどん足されていくのかな?と予想できるだろうか^^
15
繰り返し2 for( i = 1 ; i <= 100 ; i++){ } For文の詳細。 一項目: 初期化(ここでは、iを初期化)
二項目: 条件式、これを満たしている間{}間をループ 三項目: ステップ、再初期化(ループのたびに実行される) また、日本語で説明すると「i が1から100まで1刻みでくりかえし」となる。For分は、繰り返す回数が決まっているときなどに多用される。他にも、while()文などがあるが、それは参考書で調べるなどして、自分で勉強してみてください。参考書の見方も重要ですからね。
16
課題 では問題。九九を以下のように表示するプログラムを書きなさい。
できればfor文をしっかりと使ってください。 改行は 「printf(“\n”);」
17
課題の答え これはどうでしょうか?For文の中にfor文がありますね^^これは良く使う手なので、覚えておきましょう。
#include <stdio.h> void main(void) { int i,j; for(i=1;i<=9;i++){ for(j=1;j<=9;j++)printf("%d ",i*j); printf("\n"); } これはどうでしょうか?For文の中にfor文がありますね^^これは良く使う手なので、覚えておきましょう。
18
SCANF ~ とりあえず、数字の入力 ~ scanf(“%d”,&input);
また、scanfとprintfのfはフォーマット(format)のfなので、入力にもフォーマットを使える。たとえば、 Scanf(“%d %d %d”,&a,&b,&c); とすれば、ユーザーが [enter] とすれば、三つの数字が三つの変数に入るということである。でも当分はひとつの数字だけを入力できればいいので、上の(黄色)のような書き方を覚えておけばよい。
19
SCANFの罠 Scanf(“%d”,&a); Scanf(“%d”,&a); このようにscanf()を連続して書いた場合、うまく動かないことが多い。Scanf()はエンター自体は読み込んでいないため、そのエンターが次のscanf()でのエンターとして実行されてしまう。(つまり、二つ目のscanf()は何も入力されずに終わってしまう。そこで、ねんのため、このような呪文を唱える。 Scanf(“%d”,&a); (void)getchar(); Scanf(“%d”,&a); (void)getchar(); で、OK。詳細は参考書に任せる。
20
おぉ、入力と出力、制御も終わった! おぉ!C言語の基本が結構おわったぞ!!! これまでの命令を見返してみよう。
If(a == b){ …………} For(i=0;i<100;i++){……………….} Printf(“NUM = %d\n”,a); Scanf(“%d”,&input); これで、数字に関する計算のプログラムはできるようになったよ。 たとえば、入力する数値をNとすると、1~Nまで加算していくプログラムとか、作れそうな気がするでしょ??では、いろいろなプログラム例をみて、プログラムを理解する練習をしよう。
21
細かい調節 exit(0); これが実行されると、そのまま終了する。エラーのときはexit(1)と書くのが通説 これを使うときは、#include <stdlib.h>を追加して書く break; これはループ中でしか使えない。ループ中にこれが使われると、強制的にルー プから、抜け出すことができる。素数のプログラムでは、それを利用している。
22
シグマを計算するプログラム Main(void) { int input=0; int i=0; int ans=0; printf(“Please Input The Number :”); scanf(“%d”,&input); if(input <=0){ printf(“ERROR! %d is not Realnumber!\n\a”,input); }else{ for(i=1;i<=input;i++){ ans = ans + i; } printf(“Result is %d\n”,ans); } }
23
入力した数字が素数か? Main(void) { int i=0; int input=0; printf(“NUMBER?>”); scanf(“%d”,&input); if(input <= 0){ printf(“ERROR!\n\a”); exit(1); } for(i=1;i<=input;i++){ if(input % I ==0){ break; } } if(i>input){ printf(“THIS IS SOSU\n”); }else printf(“THIS IS NOT SOSU\n”); } }
24
課題 入力された数字の約数をすべて表示するプログラムを書きなさい。
Similar presentations
© 2024 slidesplayer.net Inc.
All rights reserved.