/
3. プログラミング応用 3. プログラミング応用

3. プログラミング応用 - PowerPoint Presentation

impristic
impristic . @impristic
Follow
343 views
Uploaded On 2020-08-29

3. プログラミング応用 - PPT Presentation

型と 色々 前回の復習 最初の C 言語 include lt stdioh gt int mainvoid printf Hello Worldn return 0 上のプログラムを実行する このセットを ID: 810993

int printf main include printf int include main return stdio void char define double 123 scanf memcpy abc float

Share:

Link:

Embed:

Download Presentation from below link

Download The PPT/PDF document "3. プログラミング応用" is the property of its rightful owner. Permission is granted to download and print the materials on this web site for personal, non-commercial use only, and to display it on your personal computer provided you do not modify the materials and that you retain all copyright notices contained in the materials. By downloading content from our website, you accept the terms of this agreement.


Presentation Transcript

Slide1

3.プログラミング応用

型と

色々

Slide2

前回の復習

Slide3

最初のC言語

#include <

stdio.h

>

int main(void){ printf("Hello World!\n"); return 0;}

上のプログラムを実行する

Slide4

このセットを

必ず覚える

こと!

#include <

stdio.h>int main(void) { return 0;

}

プログラムを書く

Slide5

変数の宣言

Slide6

varの代わりに変数で使うもの

char

1

文字

int整数long整数float実数double実数c

har

配列

にすることで文字列にすることができる

Slide7

printf()

printf

()

は黒い画面

(コマンドプロンプト)に文字を表示する命令です。「“(ダブルクォーテーション)」で囲まれた文字列を表示します。その中で\nは改行を意味します。これらの特殊文字はJavaScriptの場合と同じです。\n改行\tタブ\\文字としての

¥

\?

文字としての

?

\”ダブルクォーテーション\’

シングルクォーテーション

%%

文字としての

%

Slide8

%d

整数

の変数を表示する場合に使用します。後ろにある「

,コンマ」の変数や数値を文字列に変換して黒い画面(コマンドプロンプト)に表示します。printf("%dは%dより大きい\n

"

, 3, 2);

小数の変数は

%f

となります

Slide9

printfを変える

#include <

stdio.h

>

int main(void){ printf("1+1=%dです\n", 2);

return 0;

}

Slide10

printfで計算させる

#include <

stdio.h

>

int main(void){ printf("1+1=%dです\n"

,

1+1

);

return 0;

}

引数の値が

%d

に表示される

Slide11

scanf_s()

scanf_s

()

キーボードの入力を受け取る命令です。「“(ダブルクォーテーション)」で囲まれた型でアドレスとしてデータを受け取ります。

Slide12

%d

整数

を意味し、キーボードから入力された整数が変数として代入されます。

int hensu;scanf_s("%d",

&

hensu

);

小数の変数は

%f

となります

受け取るデータが

数値

のとき

入力された値が

hensu

に入る

&

が入ることに気を付ける

Slide13

scanf

scanf_s

との違い

scanfはC++で禁止されているこの授業ではC++上でC言語を実行しているすなわち、scanfは使えないその代わりscanf_sを使う文字列をキーボードから入力するときだけ気を付ける!

Slide14

実行してみる

#include <

stdio.h

>

int main(void){ char str[128]; printf("文字列を入力してください\n"); scanf_s("%s", str, 128);

printf

("

入力された文字列は

%s です。\n", str);

return 0;

}

scanf_s

("%s", str, 128);

文字列は

&

がつかない

配列

の個数

Slide15

どうしてもscanf

を使いたいとき

#define _CRT_SECURE_NO_WARNINGS

#include <

stdio.h>int main(void){ char str[128]; printf("文字列を入力してください\n");

scanf

("%s", str);

printf("

入力された文字列は

%s

です。

\n", str);

return 0;

}

追加

変更

Slide16

C言語の四則演算

計算の基本は

,

四則演算と剰余算

.足し算と引き算は「+」「-」.掛け算と割り算には「*」と「/」.剰余算には「%」.Java Scriptと同じ

Slide17

#include <

stdio.h

>

int

main(void){ printf("10 + 3 = %d\n", 10 + 3); printf("10 - 3 = %d\n", 10 - 3); printf("10 * 3 = %d\n", 10 * 3); printf

("10 / 3 = %d\n", 10 / 3);

printf

("10

mod 3 = %d\n", 10 % 3); return 0;

}

上のプログラムを実行する

 

Slide18

練習問題①

整数の変数

a=123

と実数の変数

b=0.456を加算した結果a+bをprintfで表示しなさい。実数として表示させること。

Slide19

解答例

#include <

stdio.h

>

int

main(void){

int

a

= 123

;

double b = 0.345;

printf("%

.5f

\n",

a+b

);

return 0;

}

Slide20

練習問題②

身長

h(m)

と体重

w(kg)を変数に代入して、BMIと肥満度f(%)を計算し、身長、体重、BMIそして肥満度を表示する。BMI = w ÷ h2sd = 22 × h2f = (w - sd) ÷ sd ×100

Slide21

#include <

stdio.h

>

int

main(void) {

double h = 1.7;

double w = 65.0;

double BMI = w / (h * h);

double

sd = 22 * h * h;

double f = ((w -

sd

) /

sd

) * 100;

printf

("%f m, %

fkg

\n", h, w);

printf

("BMI = %f \n", BMI); printf("肥満度 = %f \n", f); return 0;}解答例

Slide22

復習はここまで

Slide23

p

rintf

をさらに詳しく

出力とは

Slide24

printfの書式指定

書式指定

意味

%d整数(小数のついていない数)1, 2, 3,-45%f実数(小数のついている数)0.1, 1.0,2.2%c

1

('

で囲まれた半角文字1個)'a', 'A'

%s

文字列

"

で囲まれた文字)

"A", "ABC",

"

"

Slide25

実行してみる①

#include <

stdio.h

>

int main(void){ printf("%d - %dは%dです \n", 3, 2, 3-2); return 0;}

Slide26

実行してみる②

#include <

stdio.h

>

int main(void){ printf("%s %c %f \n", "6 / 5", '=', 1.2); return 0;}

Slide27

よくやる間違い

printf

("1+1=%d

です

\n", 2);printf("1+1=%dです \n"2);printf("%f", 2);printf

(

"%c", "

abc

"

);Printf

(

"%s", 'a'

);

Slide28

型とは、変数のカタチ

Slide29

変数

C

言語の変数を詳しく説明します

Slide30

変数には入れること

のできる

データの大きさが

i

ntやdoubleによって全然違ってくる!

Slide31

整数型

型の名前

入る値の範囲

サイズ

(ビット数)intシステムによる-unsigned int

システムによる

-

long

-2147483648

2147483647

32(64)

unsined

long

0

4294967295

32(64)

short

-32768

32767

16

unsined short

0~6553516char-128~1278

unsined

char

0

255

8

Slide32

実数型

型の名前

入る値の範囲

サイズ

(ビット数)float-3.4×1038~3.4×103832

double

-1.7×10

308

1.7×10

308

64

Slide33

実行してみる①

#include <

stdio.h

>

int main(void){ char a = 'X'; int b = 10, c = 100; double d = 1.1; printf("%c, %d, %d, %f \n", a, b, c, d); return 0;}

Slide34

実行してみる②

#include <

stdio.h

>

int main(void){ unsigned char age = 25; double height = 166.7; float weight = 58.5; printf("年齢: %d歳\n", age);

printf

("

身長:

%fcm\n", height);

printf

("

体重:

%

fkg

\n", weight);

return 0;

}

Slide35

printfがややこしい!

printf

%d

%f%s1280.9

"ABC"

とりあえずは

%d

%f

%s

を覚えておく!

Slide36

printfはさらにややこしい!

#include <

stdio.h

>

int

main(void){

double

hoge

= 12345.12345;

printf

("

小数

4

桁:

%.4f

 

\n",

hoge

);

printf

("全体10桁と小数2桁: %10.2f \n", hoge); printf("0が追加される: %010.2f

 \n", hoge);

printf("小数点以下倍精度: %lf \n", hoge); return 0;}実行してみよう

Slide37

printfの表示桁指定

printf

% 全体の桁数 . 小数の桁数   d, fなど0を入れると0が追加される

%lf

%f

の2倍の小数表現ができる

Slide38

整数(

int

)型とは

0

1

1

0

0

1

0

0

2

7

2

6

2

5

2

4

2

3

2

2

2

12012864

32

16

8

4

2

1

パソコンのメモリ上

64

32

4

100

i

nt

a = 100;

Slide39

浮動小数点(float)型とは

正負

小数の桁数

(指数部)

各桁の数値(仮数部)パソコンのメモリ上全体で32bit 、 64bit

-5

256

2.56×10

-5

float

a = 0.0000256;

Slide40

固定小数点だと

1

0

0

00000.

0

a

=

0

.

0

0

0

0

0

0

0

1

b=

固定

a

+ b

をしたとき

bit

サイズによって桁落ちするbitサイズ

Slide41

文字列とは配列

Slide42

文字型(1文字のとき)

文字は

0〜127

の番号の

ASCIIコードで表すcharは-128〜127の整数だが、C言語では文字と文字コード( 0〜127)を同等とみなす'A'は数値の65と同じである

Slide43

Slide44

実行してみる①

#include <

stdio.h

>

int main(void){ char a = 'A'; printf("%d \n", a); printf("%c \n", a); return 0;}

Slide45

実行してみる②

#include <

stdio.h

>

int main(void){ int i = 72; printf("%d \n", i); printf("%c \n", i); return 0;}

Slide46

よくやる間違い

char a = 'ABC';

char a = "ABC";

char a = "

あ";

Slide47

文字列(複数文字のとき)

文字列は文字の集まり、

配列

で表す

ダブルクォート " は文字列、シングルクォート 'は1文字を表すchar s[6]の配列で5文字を表すことができる

Slide48

実行してみる①

#include <

stdio.h

>

int main(void){ char m[6] = "Hello"; printf("%c%c%c%c%c \n", m[0], m[1], m[2], m[3], m[4]); printf("%c \n", m[3]); printf("%s \n", m);

return 0;

}

Slide49

実行してみる②

#include <

stdio.h

>

int main(void){ char str1[] = "Fukui"; char str2[] = "National"; char str3[] = "College"; char str4[] = "of Technology"; printf("%s %s %s %s \n", str1, str2, str3, str4); return 0;}

Slide50

文字列は配列

c

har m[6] = "Hello";

‘\0’

NULL文字

Slide51

日本語は気をつける!

#include <

stdio.h

>

int

main(void){

char a[3] = "

";

char m[11] = "こんにちは

";

printf

("%s \n", a);

printf

("%s \n", m);

return 0;

}

日本語は全角(

2

バイト)なので、配列の個数は

2倍になる

Slide52

よく間違える、文字の代入

c

har a = 'A';

a = 'B';

printf("%c ¥n", a);char a[6] = "Hello";a = "Good!";printf("%s ¥n", a);文字列をそのまま代入することはできない

Slide53

実行してみる①(strcpy_s

)

#include <

stdio.h

>

#include <

string.h

>

int

main(void){

char m[

10

] = "Hello";

printf

("%s \n", m);

strcpy_s

(m, 10, "Good bye!");

printf

("%s \n", m);

return 0;}strcpy()を使うためのヘッダファイル文字列を代入するための関数 

‘\0’ もコピーするので文字列a はその分も考えて大きさを宣言すること

Slide54

実行してみる②(memcpy

)

#include <

stdio.h

>

#include <

string.h

>

int

main(void){

char m[

10

] = "Hello";

printf

("%s \n", m);

memcpy

(m, "Good bye!", 10);

printf

("%s \n", m);

return 0;}memcpy()を使うためのヘッダファイルメモリをコピーするための関数 

第3引数のバイト数だけのすべての配列をコピーする

Slide55

strcpy

_s

’\0’

#include <

stdio.h

>

#include <

string.h

>int main(void) { char a[10] = "

abc

\0

def";

char b[10] = "123

\0

456";

strcpy_s

(a, 10, b);

for(int

i = 0; i < 10; i++) printf("%c", a[i]); return 0;

}

‘\0’NULL文字

Slide56

memcpyの

’\0’

#include <

stdio.h

>

#include <

string.h

>

int main(void) {

char a[10] = "

abc

\0

def";

char b[10] = "123

\0

456";

memcpy

(a, b, 10);

for(int

i = 0; i < 10; i++) printf("%c", a[i]); return 0;

}

‘\0’NULL文字

Slide57

どちらも配列をコピーしている

"

abc

\0 def""123 \0 456"a

b

"123

\0

"

"123

\0

456"

a

b

s

trcpy_s

"

abc

\0

def"

"123

\0

456"

ab"123 \0 456""123

\0

456"

a

b

memcpy

\0

まで

指定した個数

すべて

Slide58

s

trcpy_s

memcpy

どちらを使っても良い‘\0’をどうするかで判断すること

Slide59

s

trcpy

もあるが

MS

が推奨していないstrcpy_sを使うこと#define _CRT_SECURE_NO_WARNINGSがあれば使える

Slide60

文字列は配列

c

har m[6] = "Hello";

‘\0’

NULL文字何もしなくても文字列を代入すれば’\0’はつく!

Slide61

C

言語でいう

s

ize

とは

Slide62

bit と byte

sizeof

演算子)

10101010

8

ビット=

1

バイト

1

ビット

sizeof

演算子

を使うと、

バイト数

がわかる

Slide63

実行してみる

#include <

stdio.h

>

int main(void){ char ch[20]; int data[20]; printf("char のサイズ : %d\n",

sizeof

(char));

printf

("int

のサイズ

: %d\n",

sizeof

(

int

));

printf

("

配列

ch

のサイズ : %d\n", sizeof(ch)); printf("配列 data のサイズ : %d\n", sizeof(data));

return 0;}

Slide64

型の変換

誤>

÷2の結果を求める<正>3÷2の結果を求める3(整数) / 2(整数) 答え↓ 1(

整数

で小数の切り捨て)

3.0

実数) / 2.0(実数) 答え↓

1.5

実数

正確な計算をするためには

型を統一しなければならない

Slide65

実行してみる

#include <

stdio.h

>

int main(void){ printf(" 3÷2= %d\n", 3 / 2); printf(" 3÷

2=

%d\n", 3.0 / 2.0);

printf

(" 3÷

2=

%d\n", 3.0 / 2);

printf

("

÷

2=

%d\n", 3 / 2.0);

return 0;

}

警告文をなくすためにはどうしたらいい?

Slide66

暗黙の変換

異なる型が現れたときは、

精度の高い型に統一される

Slide67

m

emcpy

のバイトサイズ

Slide68

memcpyでの

バイトサイズ

#include <

stdio.h

>

#include <

string.h

>

int

main(void){

char

m[

10

] = "Hello";

printf

("%s \n", m);

memcpy

(m, "Good bye!",

10

); printf("%s \n", m); return 0;}バイトのサイズを入れなければならない

charは1バイト

intだった場合、システムによってバイトサイズが変わってくる配列の個数でいい

Slide69

int

だった

とき

#include <

stdio.h

>

#include <

string.h

>

int main(void) {

int

m[10] = {11,12,13,14,15,16,17,18,19,20};

int

n[10] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};

memcpy

(m, n,

10 *

sizeof

(int)

); for (int i = 0; i < 10; i++) printf("%d", m[

i]); return 0;}

strcpy_sは文字列専用の関数で、char型でしか使えないシステムに関係なくmemcpyが使える

Slide70

結局m

emcpy

がやっていること

#include <

stdio.h

>

#include <

string.h

>

int main(void) {

int m[10] = { 11,12,13,14,15,16,17,18,19,20 };

int n[10] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };

for (int

i

= 0;

i

< 10;

i

++)

m[

i

] = n[i]; for (int i = 0; i < 10; i++)

printf("%d", m[i]);

return 0;}memcpy

Slide71

キャスト

Slide72

実行してみる①

#include <

stdio.h

>

int main(void){ int i = 5; long l = 5; double d = 23.6; double kekka;

kekka

=

i

* l + d; printf

("%

lf

\n",

kekka

);

return 0;

}

Slide73

実行してみる②

#include <

stdio.h

>

int main(void){ unsigned char a = 1000; unsigned char b = -3; printf("%d \n", a); printf("%d \n", b); return 0;}

Slide74

キャスト演算子(明示的変換)

int

float

1

1.0(float)

型キャスト

Slide75

実行してみる①

#include <

stdio.h

>

int main(void){ int a = 3; int b = 2; float f; f = (float) a / b;

printf

("

÷

2= %f\n", f); return 0;

}

Slide76

実行してみる②

#include <

stdio.h

>

int main(void){ printf("3÷2= %f\n", 3 / (float)2); return 0;}

Slide77

演算子の優先順位

Slide78

実行してみる

#include <

stdio.h

>

int main(void){ printf("2×8-6÷2= %d\n", 2 * 8 - 6 /2); printf("

×

(8-6)

÷

2= %d\n", 2 * (8 - 6) / 2);

printf

("

1-2+3=

%d\n", 1 - 2 + 3);

printf

("

1ー(2+3)=

%d\n", 1 - (2 + 3));

return 0;

}

Slide79

複雑な式になって優先順位がわからなかったら…

適度な位置に

( )

を使う!

Slide80

型の再定義

Slide81

実行してみる

#include <

stdio.h

>

int main(void) { typedef unsigned char u_char; u_char c; c = 100; printf("%d \n", c);

return 0;

}

Slide82

型の名前を変更する

型の名前は「

unsigned char

」などを組み合わせると、長くなる。そんなとき

typedefを使うと、任意の名前を付けることができるtypedef unsigned char u_char既存の型名

新しい

型名

自由に名前を付けなおせる

Slide83

マクロ(

値を定義

)

#

から始まる命令文#define

Slide84

不変の値、定数①(

#define

#include <

stdio.h

>

#define PI 3.14

int

main(void) {

int

r = 5;

printf

("%f \n", r * r *

PI

);

return 0;

}

main.c

3.14

に置き換わる

Slide85

不変の値、定数②(

#define

#include <

stdio.h

>

#define PI 3.14

int

main(void) {

int

r = 5;

PI = 3;

printf

("%f \n", r * r * PI);

return 0;

}

main.c

エラーになる

Slide86

#defineの書き方

#define LOOPNUM 10

スペース

セミコロンは

いらない

大文字

セミコロン自体が値になってしまう

Slide87

不変の変数enum

(定数)①

#include <

stdio.h

>

enum

{

aiu

,

eo

,

kakiku

,

keko

};

int

main(void) {

printf("%d, %d \n", aiu, eo); printf("%d, %d \n", kakiku

, keko); return 0;

}0,1,2…と定数が代入される

Slide88

不変の変数enum

(定数)②

#include <

stdio.h

>

enum

{

aiu

,

eo

= 5,

kakiku

,

keko

= 6

};

int

main(void) {

printf("%d, %d \n", aiu, eo); printf("%d, %d \n", kakiku

, keko); return 0;

}別の定数に代入することもできる

Slide89

マクロ

(関数の詳細は次々回くらいになる)

#

から始まる命令文

#defineする簡易関数

Slide90

簡易関数①(#define

#include <

stdio.h

>

#define

HIKU(

x,y

) ((x) - (y))

int

main(void) {

printf

("%d \n",

HIKU(5,3)

);

return 0;

}

main.c

実行してみよう!

Slide91

簡易関数②(#define

#include <

stdio.h

>

#define

HIKU(

x,y

) ((x) - (y))

int

main(void) {

printf

("%d \n",

HIKU(5+2,1+3)

);

return 0;

}

main.c

実行してみよう!

Slide92

簡易関数③(#define

#include <

stdio.h

>

#define

HIKU(

x,y

) (x - y)

int

main(void) {

printf

("%d \n",

HIKU(5+2,1+3)

);

return 0;

}

main.c

違いを確認しよう!

Slide93

簡易関数④(#define

#include <

stdio.h

>

#define PRINTM(X)

printf

("%d\n", X)

int

main(void) {

PRINTM(10);

return 0;

}

main.c

実行してみよう!

Slide94

今週はここまで何か質問はありませんか?

Slide95

とりあえず、実験や数値計算で

やりそうなことは、

網羅したはず

Related Contents


Next Show more