C-language Narc Neac ARithmetic Compiler

Slides:



Advertisements
Similar presentations
プログラミング論 第八回数字の計算,整数の入出力. 本日の内容 前回の課題(続き) 前回の課題(続き) 数字の計算をする 数字の計算をする – 加減乗除を行う – インクリメント演算子とデクリメン ト演算子.
Advertisements

第 2 章 数値の入力と変数 scanf と変数をやります 第 2 章 数値の入力と変数 1. 以下のプログラムを実行してみよう  C 言語では文の最後に「 ; 」(セミコロン)が付きます 第 2 章 数値の入力と変数 2 #include int main() { int x; x = 3; printf("x.
C 言語講座 第 7 回 ポインター. メモリとアドレス(ポインターの前 に) コンピュータのメモリには 1 バイトずつ 0 番地、 1 番地、 2 番地・・・というように 住所が割り当てられている この住所をアドレスという。 メモリはデータをしまうもので それを引き出すためには メモリに番号(アドレス)を振っておけばよいな.
第3回:ボールを上下に動かそう! (オブジェクトの移動、一次元)
4章 制御の流れ-3.
計算技術研究会 C言語講座 第3回 Loops (for文 while文).
第2章 数値の入力と変数 scanfと変数をやります.
ファーストイヤー・セミナーⅡ 第8回 データの入力.
配列(2) 第10回[平成15年6月26日(木)]:PN03-10.ppt 今日の内容 1 素数を求める(教科書の例):復習
6/26 前回復習 for文、while文による繰り返し計算
岩村雅一 知能情報工学演習I 第9回(C言語第3回) 岩村雅一
C言語講座 配列と文字列 Ver 0.3.
C言語講座 第4回 ポインタ.
第6章 2重ループ&配列 2重ループと配列をやります.
第7回 条件による繰り返し.
情報基礎及び演習 プログラミング基礎① 電気・佐藤亮一.
ちょっとした練習問題① 配列iroを['R', 'W', 'R', 'R', 'W' , 'W' , 'W']を宣言して、「W」のときの配列の番号をprintfで表示するようなプログラムを記述しなさい。
岩村雅一 知能情報工学演習I 第11回(後半第5回) 岩村雅一
第二回 VB講座 電卓を作ろう.
繰り返し計算 while文, for文.
プログラミング入門 電卓を作ろう・パートIV!!.
地域情報学演習 VBAプログラミング 第3回 2017年10月24日
プログラミング 4 記憶の割り付け.
アルゴリズムとプログラミング (Algorithms and Programming)
第10章 これはかなり大変な事項!! ~ポインタ~
プログラミング入門2 第2回 型と演算 条件分岐 篠埜 功.
岩村雅一 知能情報工学演習I 第9回(後半第3回) 岩村雅一
第7回 条件による繰り返し.
岩村雅一 知能情報工学演習I 第10回(後半第4回) 岩村雅一
高度プログラミング演習 (02).
VBで始めるプログラミング こんにちは、世界。 /28 NARC.
高度プログラミング演習 (05).
関数への道.
プログラミング基礎B 文字列の扱い.
岩村雅一 知能情報工学演習I 第11回(後半第5回) 岩村雅一
岩村雅一 知能情報工学演習I 第9回(後半第3回) 岩村雅一
岩村雅一 知能情報工学演習I 第9回(C言語第3回) 岩村雅一
復習 一定回数を繰り返す反復処理の考え方 「ループ」と呼ぶ false i < 3 true i をループ変数あるいはカウンタと呼ぶ
疑似乱数, モンテカルロ法によるシミュレーション
C言語 はじめに 2016年 吉田研究室.
岩村雅一 知能情報工学演習I 第9回(後半第3回) 岩村雅一
第1章 いよいよプログラミング!! ~文章の表示 printf~
IF文 START もしも宝くじが当たったら 就職活動する 就職活動しない YES END NO.
プログラミングⅡ 第2回.
プログラミング入門 電卓を作ろう・パートI!!.
復習 if ~ 選択制御文(条件分岐) カッコが必要 true 条件 false 真(true)なら この中が aを2倍する 実行される
C言語講座 制御(選択) 2006年 計算技術研究会.
第5章 まだまだ続く反復処理!! ~繰り返しその2 for~
プログラミング基礎演習 第4回.
第2章 printf(“変数と入力”); scanf(“%d”,&num);
cp-15. 疑似乱数とシミュレーション (C プログラミング演習,Visual Studio 2019 対応)
プログラミング 4 文字列.
岩村雅一 知能情報工学演習I 第10回(後半第4回) 岩村雅一
第7章 そろそろ int 以外も使ってみよう! ~データ型 double , bool~
モバイルプログラミング第2回 C言語の基礎 (1).
プログラミング1 プログラミング演習I 第2回.
プログラミング序論演習.
プログラミング入門2 第3回 条件分岐(2) 繰り返し文 篠埜 功.
printf・scanf・変数・四則演算
第2章 数値の入力と変数 scanfと変数をやります.
知能情報工学演習I 第11回(後半第5回) 課題の回答
計算技術研究会 第5回 C言語勉強会 関数(function)を使う
復習 いろいろな変数型(2) char 1バイト → 英数字1文字を入れるのにぴったり アスキーコード → 付録 int
C言語講座 四則演算  if ,  switch 制御文.
計算技術研究会 C言語講座 第二回 制御構文 if , switch.
分岐(If-Else, Else if, Switch) ループ(While, For, Do-while)
知能情報工学演習I 第10回( C言語第4回) 課題の回答
岩村雅一 知能情報工学演習I 第7回(後半第1回) 岩村雅一
= 55 課題6-1 #define _CRT_SECURE_NO_WARNINGS
岩村雅一 知能情報工学演習I 第9回(C言語第3回) 岩村雅一
Presentation transcript:

C-language Narc Neac ARithmetic Compiler 入出力・制御の基礎

C言語を始めよう。 まずは、計算だけをしても、結果を見れなければ意味がないので、文字や数字を表示する方法を教えましょう^^・・・とその前に #include <stdio.h> これは「standard I/O」の略で、OSの機能を使いますよという宣言 void main(void) { printf(“WELCOME TO THE K3!”); } void main(void) { なんたらかんたら } という部分は決まりなので、絶対に書きます。これは仕様なので、理由はありませんよ^^  この「{」と「}」の間にプログラムを書くわけですが、基本的にプログラムは「{」から「}」に流れるように実行されていきます。つまり、この例では「printf(“WELCOME”);」という指令をしたあとは「}」に到達してしまいますから、プログラムは終了します。まずはプログラムの流れから。

詳細printf() printf(“WELCOME TO THE K3!”); >NUMBER=1000 みなさんは関数というものをしっていますよね?? 高校などで教えてもらうf(x)などです。あれはXという数字をf()という関数に与えるとある規則によって変換された数字が帰ってくるというものですよね。 それと同じようにprintf()という関数は”WELCOME”という文字を渡すと、数を返すのではなく、モニタに表示してくれるというものなのです。 また、このような書き方もできます。 printf(“NUMBER=%d”,1000); 今度は、関数に渡す数(引数)が二つになりましたね。これは%dというところに二つ目の引数である1000をいれて表示してくれます。結果は >NUMBER=1000 となります。試してみましょう。

詳細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などがあります。

変数の概念 最初の方で、複雑な計算はどこかにその値をメモしておかなければならない、と書きましたが、まさにそのとおりで、C言語ではそれらを「変数」と呼びます。 10 a = 10; a という変数に10という数字を入れる。 a b = a; aという変数の内容(数字)をbという変数に入れる。 b a

変数の宣言 変数を使用する際、気をつけなければならないのは、「変数の宣言」である。 変数を演算するまえに(使用するまえに)プログラマは「ここではaという変数を数字を扱うために使いますよ~」などと高らかに宣言しなければなりません。 変数というのは「箱」と考えることができますが、すべてが同じ形ではありません。大きい箱から、小さい箱などさまざまです。それは、入る内容が違うからです。小さな数字、大きな数字、文字、少数などはすべて大きさが異なり、変数はそれにあった形をしていなければなりません。 宣言の例 Int とはintegerの略で、簡単に言うと数字です。数字用の「a」という変数を使うことを宣言する。 int a; char とはcharacterの略で、文字です。文字用の「moji」という変数を使うことを宣言する。(別に変数はどんな名前でもいいですよ~。あ、数字はだめね(^^ char moji;

では、計算してみよう。 では実際にプログラムの例を紹介しよう。細かいことは各自確認してもらいたい。 #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); } 気づいた人もいるかもしれないが、すべて行(一文)の最後には「;」を入れることとなっている。これを忘れると、エラーの原因となることもあるので、注意。

変数の初期化 変数を宣言するのは、わかった。では、このようなことをしたらどうなるだろうか。 #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でなくてもいい

四則演算+α a = a + 1; 加算 a = a - 1; 減算 a = a * 1; 掛け算 a = a / 1; 割り算

「計算の手順」の補足 先ほど、計算の手順のはなしや、「{」から「}」に流れるようになどと書いたが、プログラミングの便利なところは、それだけではない。プログラミングでは、分岐、繰り返しという機能がある。図をみてもらいたい。 分岐 繰り返し A は偶数か? いろんな処理 NO i は10以上か? NO YES この図はiが10以下の間、繰り返すという意味 YES これらを使うことにより、人間にとっての「機械的計算」はコンピューターがササッっとやってくれる。 例)1から100までの数字を足すプログラムは分岐と繰り返しどっちを使うべきか?

分岐1 例)入力した文字が偶数だったら「この文字は偶数です」、奇数だったら「この文字は奇数です」と表示するプログラム #include <stdio.h> void main(void) { int input; scanf(“%d”,&input);    /*文字の入力。口頭で解説?*/ if(input % 2 == 0){ printf(“この数字は偶数です”); }else{ printf(“この数字は奇数です”); } }

分岐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が等しくなければ

分岐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{}の下に移動してしまう。この動きはとても重要で、プログラムを少し組めばわかるとおもう^^

繰り返し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がどんどん足されていくのかな?と予想できるだろうか^^

繰り返し2 for( i = 1 ; i <= 100 ; i++){ } For文の詳細。 一項目: 初期化(ここでは、iを初期化) 二項目: 条件式、これを満たしている間{}間をループ 三項目: ステップ、再初期化(ループのたびに実行される) また、日本語で説明すると「i が1から100まで1刻みでくりかえし」となる。For分は、繰り返す回数が決まっているときなどに多用される。他にも、while()文などがあるが、それは参考書で調べるなどして、自分で勉強してみてください。参考書の見方も重要ですからね。

課題 では問題。九九を以下のように表示するプログラムを書きなさい。 1 2 3 4 5 6 7 8 9 2 4 6 8 10 12 14 16 18 3 6 9 12 15 18 21 24 27 4 8 12 16 20 24 28 32 36 5 10 15 20 25 30 35 40 45 6 12 18 24 30 36 42 48 54 7 14 21 28 35 42 49 56 63 8 16 24 32 40 48 56 64 72 9 18 27 36 45 54 63 72 81 できればfor文をしっかりと使ってください。 改行は 「printf(“\n”);」

課題の答え これはどうでしょうか?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文がありますね^^これは良く使う手なので、覚えておきましょう。

SCANF ~ とりあえず、数字の入力 ~ scanf(“%d”,&input); また、scanfとprintfのfはフォーマット(format)のfなので、入力にもフォーマットを使える。たとえば、   Scanf(“%d %d %d”,&a,&b,&c); とすれば、ユーザーが   10 20 30 [enter] とすれば、三つの数字が三つの変数に入るということである。でも当分はひとつの数字だけを入力できればいいので、上の(黄色)のような書き方を覚えておけばよい。

SCANFの罠 Scanf(“%d”,&a); Scanf(“%d”,&a); このようにscanf()を連続して書いた場合、うまく動かないことが多い。Scanf()はエンター自体は読み込んでいないため、そのエンターが次のscanf()でのエンターとして実行されてしまう。(つまり、二つ目のscanf()は何も入力されずに終わってしまう。そこで、ねんのため、このような呪文を唱える。 Scanf(“%d”,&a); (void)getchar(); Scanf(“%d”,&a); (void)getchar(); で、OK。詳細は参考書に任せる。

おぉ、入力と出力、制御も終わった! おぉ!C言語の基本が結構おわったぞ!!! これまでの命令を見返してみよう。 If(a == b){ …………} For(i=0;i<100;i++){……………….} Printf(“NUM = %d\n”,a); Scanf(“%d”,&input); これで、数字に関する計算のプログラムはできるようになったよ。 たとえば、入力する数値をNとすると、1~Nまで加算していくプログラムとか、作れそうな気がするでしょ??では、いろいろなプログラム例をみて、プログラムを理解する練習をしよう。

細かい調節 exit(0); これが実行されると、そのまま終了する。エラーのときはexit(1)と書くのが通説 これを使うときは、#include <stdlib.h>を追加して書く break; これはループ中でしか使えない。ループ中にこれが使われると、強制的にルー       プから、抜け出すことができる。素数のプログラムでは、それを利用している。

シグマを計算するプログラム 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); } }

入力した数字が素数か? 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”); } }

課題 入力された数字の約数をすべて表示するプログラムを書きなさい。