Upload
yuma-yoshimoto
View
122
Download
4
Embed Size (px)
Citation preview
プログラム講習第2回
講習スケジュール前半 後半
9日(月) フローチャート ビルド 進数計算
プログラムとは? 関数 変数(前)
10日(火) 学生総会、お疲れでした!
11日(水) データ型 変数(後)
if文 条件式
12日(木) for文 while文 do-while文 配列 自作関数
13日(金) 最終日 演習 予約
復習• 前回やったこと
• 進数変換
• OR算・AND算・XOR算・NOT算
• Shift算
• フローチャート
• ビルド
• 変数
• 関数
フローチャート
プログラムの流れを示すもの。
「こんなプログラムを組んで」
と言われて、
頭に流れが浮かぶようになれば完璧
START
起きる
時間がある
着替える 課題やる
END
Yes
No
変数
プログラムにおいて、
値を保存する場所。
int a, b; ◀このように宣言する。
種類については、今日講習します。
#include int main(void) { int a,b;
コンパイラ
ソースコード (プログラミング言語)
1000101011101010110101110101010100010111
オブジェクトファイル (機械語)
100010101110101011010111010101010001
実行ファイル (機械語)
リンカ
1000101011101010110101110101010100010111
1000101011101010110101110101010100010111
+
+
コンパイル
リンク
これだけ全部が
ビルド
コンパイル リンク ビルド
関数
プログラムは関数の集まりだと言える。
printfもscanfも全部関数。
!
C言語プログラムには必ず main関数 が存在し、
始めは main関数 から実行される。
復習1問目1. 10進数の18を2進数に変換しなさい
2. 2進数の(0010 1100)を10進数と16進数に変換しなさい
3. AND、OR、XOR、NOTの真理値表を書きなさい
4. 2進数の(0010 1100)を左へ2ビットシフトしなさい
解答
1. (0001 0010)
2. 10進数:44 16進数:2C
!
4. (1011 0000)
解答
x y z
0 0 0
0 1 1
1 0 1
1 1 1
x y z
0 0 0
0 1 0
1 0 0
1 1 1
x y z
0 0 0
0 1 1
1 0 1
1 1 0
x z
0 1
1 0
OR AND XORNOT
3.
復習2問目
「S-ken」と表示するプログラム
解答
#include<stdio.h> int main(void){ printf(“S-ken”); return 0; }
START
S-kenと 表示
OSへ応答を 返す
END
復習3問目
数値を入力してもらい、 !
入力された数値をそのまま表示するプログラム
解答
#include<stdio.h> int main(void){ int x; scanf(“%d”, &x); printf(“%d”,x); return 0; }
START
変数を用意
入力を待つ
END
変数を表示
復習終わり本題に入ります。
計算しよう
入力された変数を 表示するプログラム
#include<stdio.h> int main(void){ int x; scanf(“%d”, &x); printf(“%d”,x); return 0; }
START
変数を用意
入力を待つ
END
変数を表示
二つの数字の足し算を 表示するプログラム
#include<stdio.h> int main(void){ int x, y, z; scanf(“%d %d”, &x, &y); z = x + y; printf(“%d”,z); return 0; }
START
変数を用意
入力を待つ
足し算する
END
結果を表示
式の種類第1位 () (カッコ)第2位 * (乗算) / (余算) % (余り)第3位 + (足し算) - (引き算)第4位 | (OR算) & (AND算)第5位 < (比較) <= (比較) > (比較) >= (比較)第6位 == (等しい) != (異なる)第7位 && (AND比較)第8位 || (OR比較)
第9位= (代入) += (加算) -= (減算) *= (乗算)/= (余算) %= (余り)
二つの数字の足し算を 表示するプログラム
#include<stdio.h> int main(void){ int x, y, z; scanf(“%d %d”, &x, &y); z = x % y; printf(“%d”,z); return 0; }
START
変数を用意
入力を待つ
余り算する
END
結果を表示
二つの数字の足し算を 表示するプログラム
#include<stdio.h> int main(void){ int x, y, z; scanf(“%d %d”, &x, &y); z = x | y; printf(“%d”,z); return 0; }
START
変数を用意
入力を待つ
OR算する
END
結果を表示
二つの数字の足し算を 表示するプログラム
#include<stdio.h> int main(void){ int x, y, z; scanf(“%d %d”, &x, &y); z = x & y; printf(“%d”,z); return 0; }
START
変数を用意
入力を待つ
AND算する
END
結果を表示
変数とデータ型
変数<ソースコード> #include<stdio.h> int main(void) { int x, y, z; scanf(“%d %d”, &x, &y); z = x + y; printf(“%d”,z); return 0; }
変数宣言int x, y, z;全ての変数は、 変数宣言しないと使えない
変数変数宣言
int x, y, z;全ての変数は、 変数宣言しないと使えないWhat’s this ?
データ型の宣言
データ型コンピュータでは、 値の「型(種類)」が明確に分けられる
どういうことか
文字は文字用の変数へ 整数は整数用の変数へ 実数は実数用の変数へ
データ型
なぜデータ型があるのか?
コンピュータに対し、 変数用に確保すべきメモリの量を示すため
データ型の種類データ型 表示書式 バイト数 範囲 備考
文字型 char %c 1 0~255 基本的に文字を扱う型。 AVRではあまり使わない。
整数型
short %d 2 -32768~ 32767
あまり使わない。
int %d 4 -2147486948 ~2147486948
プログラムでは 基本的にint型を使う。
long %d 4 -2147486948 ~2147486948
VC++ではintと同じ
実数型float %f 4 -3.4*10^38
~3.4*10^38小数を使うことができる。
double %lf 8 -1.7*10^308 ~1.7*10^308
floatよりスゴイ精度
#include<stdio.h> int main(void){ char val_char; short val_short; int val_int; long val_long; float val_float; double val_double; val_char = ‘a’; val_short = 20.7; val_int = 20.7;
val_long = 20.7; val_float = 20.7; val_double = 20.7; printf("%c ",val_char); printf("%d ",val_short); printf("%d ",val_int); printf("%d ",val_long); printf("%f ",val_float); printf("%lf ",val_double); return 0; }
#include<stdio.h> int main(void){ char val_char; short val_short; int val_int; long val_long; float val_float; double val_double; val_char = ‘a’; val_short = 20.7; val_int = 20.7;
val_long = 20.7; val_float = 20.7; val_double = 20.7; printf("%d ",val_char); printf("%d ",val_short); printf("%d ",val_int); printf("%d ",val_long); printf("%f ",val_float); printf("%lf ",val_double); return 0; }
#include<stdio.h> int main(void){ char val_char; short val_short; int val_int; long val_long; float val_float; double val_double; val_char = 97; val_short = 20.7; val_int = 20.7;
val_long = 20.7; val_float = 20.7; val_double = 20.7; printf("%c ",val_char); printf("%d ",val_short); printf("%d ",val_int); printf("%d ",val_long); printf("%f ",val_float); printf("%lf ",val_double); return 0; }
#include<stdio.h> int main(void){ char val_char; short val_short; int val_int; long val_long; float val_float; double val_double; val_char = 97; val_short = 20.7; val_int = 97;
val_long = 20.7; val_float = 20.7; val_double = 20.7; printf("%c ",val_char); printf("%d ",val_short); printf("%c ",val_int); printf("%d ",val_long); printf("%f ",val_float); printf("%lf ",val_double); return 0; }
説明すること
• int型、char型とか
• オーバーフロー、アンダーフロー
制御文 前編if・while・do-while
今までのプログラム#include<stdio.h> int main(void){ int a; scanf(“%d”,&a); a = a * 10; printf(“答えは%d”,a); return 0; }
START
変数を用意
入力を待つ
計算する
END
結果を表示
分岐するプログラム
正解である
正解と表示 違うと表示Yes
No
START
変数を用意
式を表示
入力を待つ
END
if文の書式
if (条件式) { //条件式が真(正しい)ときの //処理内容 }else { //条件式が偽(誤り)のときの //処理内容 } }省略可
#include<stdio.h> int main(void){ int a; //入力用変数 printf(“2×5=“); scanf(“%d”,&a); if(a == 10){ printf(“正解!”); }else{ printf(“違う!”); } return 0; }
さらに分岐するプログラム
入力が10だ
正解と表示
違うと表示
Yes
No
入力が9だ
おしいと表示Yes
入力が11だ
No
Yesおしいと表示
No
if文の書式
if (条件式1) { //条件式が真ときの処理内容 }else if (条件式2){ //条件式2が真の時の処理内容 }else { //条件式が偽の時の処理内容 }
if文の書式if (条件式1) { //条件式が真ときの処理内容 }else if (条件式2){ //条件式2が真の時の処理内容 }else if (条件式3){ //条件式3が真の時の処理内容 }else { //条件式が偽の時の処理内容 }
#include<stdio.h> int main(void){ int a; printf(“2×5=“); scanf(“%d”,&a); if(a == 10){ printf(“正解!”); }else if(a == 9){ printf(“おしい!”); }
else if(a == 11){ printf(“おしい!”); }else{ printf(“違う!”); } return 0; }
入力が10だ
正解と表示
違うと表示
Yes
No
入力が 9か11だ
おしいと表示Yes
No
さらに分岐するプログラム
OR ANDOR
AND
(条件A) もしくは (条件B)( a == 9 ) || ( a == 11)どちらかが真ならば、真
(条件A) かつ(条件B)
両方が真の時、真( a == 9 ) && ( b == 11)
a == 9 a == 11
OR
b == 11a == 9
AND
#include<stdio.h> int main(void){ int a; printf(“2×5=“); scanf(“%d”,&a); if(a == 10){ printf(“正解!”); }else if((a == 9) || (a == 11)){ printf(“おしい!”); }else{ printf(“違う!”); } return 0; }
さらに分岐するプログラム
入力が10だ
正解と表示Yes
No
入力9以下
小さいと表示Yes
No
大きいと表示
#include<stdio.h> int main(void){ int a; printf(“2×5=“); scanf(“%d”,&a); if(a == 10){ printf(“正解!”); }else if(a <= 9){ printf(“答えより小さい¥n”); }else{ printf(“答えより大きい”); } return 0; }
if文の書式
if (条件式) { //条件式が真(正しい)ときの //処理内容 }else { //条件式が偽(誤り)のときの //処理内容 }
#include<stdio.h> int main(void){ int a; scanf(“%d”,&a); a = (a == 10); printf(“%d”,a); return 0; }
式の種類第1位 () (カッコ)第2位 * (乗算) / (余算) % (余り)第3位 + (足し算) - (引き算)第4位 | (OR算) & (AND算)第5位 < (比較) <= (比較) > (比較) >= (比較)第6位 == (等しい) != (異なる)第7位 && (AND比較)第8位 || (OR比較)
第9位= (代入) += (加算) -= (減算) *= (乗算)/= (余算) %= (余り)
#include <stdio.h> int main(void) { int a; scanf(“%d”,&a); if(a == 2) { int b; b = 10+a; } else { int c; c = 20+a; } printf("%d",b); return 0; }
繰り返すプログラムを 書こう
正解である
正解と表示 違うと表示Yes
No
START
変数を用意
式を表示
入力を待つ
END
違う間ループ
START
式を表示
END
変数を用意
正解だ
入力を待つ
ループ終了処理
違うと表示 Yes
No
正解と表示
while文
while (条件式){ //繰り返す処理 } !
while ( a != 10){ scanf(“%d”,&a); }
条件式
繰り返す処理
while文 サンプル
#include <stdio.h> int main(void){ int ans = 1; while (ans != 10){ printf("2×5="); scanf("%d",&ans); } printf("正解!"); return 0; }
while文 サンプル
#include <stdio.h> int main(void){ int ans = 1; while (ans != 10){ printf("2×5="); scanf("%d",&ans); } printf("正解!"); return 0; }
while文 サンプル
#include <stdio.h> int main(void){ int ans = 1; while (ans != 10){ printf("2×5="); scanf("%d",&ans); } printf("正解!"); return 0; }
繰り返す処理
条件式
do-while文
do{ //繰り返す処理 }while (条件式); !
do{ scanf(“%d”,&a); }while ( a != 10);
"
繰り返す処理
条件式
do-while文
do{ //繰り返す処理 }while (条件式); !
do{ scanf(“%d”,&a); }while ( a != 10);
"
do-while文 サンプル
#include <stdio.h> int main(void){ int ans; do{ printf("2×5="); scanf("%d",&ans); } while (ans != 10); printf("正解!"); return 0; }
do-while文 サンプル
#include <stdio.h> int main(void){ int ans; do{ printf("2×5="); scanf("%d",&ans); } while (ans != 10); printf("正解!"); return 0; }
do-while文 サンプル
#include <stdio.h> int main(void){ int ans; do{ printf("2×5="); scanf("%d",&ans); } while (ans != 10); printf("正解!"); return 0; }
課題• 電卓を作ってください。
• 最初に計算モード
(足し算、引き算、かけ算、割り算)
を選択し、二つの数字を入力すると、
計算結果が出力される。