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

Microsoft PowerPoint - prog03.ppt

N/A
N/A
Protected

Academic year: 2021

シェア "Microsoft PowerPoint - prog03.ppt"

Copied!
16
0
0

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

全文

(1)

プログラミング言語

2

03

回(

2007

05

07

日)

今日の配布物



片面の用紙

1



今日の課題が書かれています。

本日の出欠を兼ねています

(2)

 http://www.tnlab.ice.uec.ac.jp/~s-okubo/class/language/

にアクセスすると、教材があります。

 2007年05月07日分と書いてある部分が、本日の教材です。  本日の内容  先週の課題の簡単な解凍  アドレスアドレスとアドレスアドレスととポインタとポインタポインタポインタ  C言語言語における言語言語におけるにおけるにおける文字列文字列文字列文字列  標準入力標準入力からの標準入力標準入力からのからのからの書式付書式付き書式付書式付ききき入力入力入力入力

2

回の課題の簡単な解説

22行目:サイズ11の整数型の配列string を宣言。 23行目:整数i を宣言 string[8] string[7] string[5] string[4] string[3] string[2] string[6] string[10] string[9] string[1] string[0] 21:main(){ 22: char string[11]; 23: int i; 24: 25: scanf("%10s",string); 26: printf("%s¥n",string); 27: i=0; 21:main(){ 22: char string[11]; 23: int i; 24: 25: scanf("%10s",string); 26: printf("%s¥n",string); 27: i=0;

(3)

2

回の課題の簡単な解説

25行目:標準入力からstringに文字列を代入 26行目:試しに、出力してみる。 string[8] string[7] string[5] ¥0 string[4] t string[3] S string[2] string[6] string[10] string[9] E string[1] t string[0] 21:main(){ 22: char string[11]; 23: int i; 24: 25: scanf("%10s",string); 26: printf("%s¥n",string); 27: i=0; 21:main(){ 22: char string[11]; 23: int i; 24: 25: scanf("%10s",string); 26: printf("%s¥n",string); 27: i=0;

2

回の課題の簡単な解説

27行目:i に0 代入       string[i]は、sutring[0]を意味するように。 string[8] string[7] string[5] ¥0 string[4] t string[3] S string[2] string[6] string[10] string[9] E string[1] t string[0] 27: i=0; 28: while (string[i] != '¥0'){

29: if (string[i] >= 'A' && string[i] <= 'Z') { 30: string[i] = Atoa(string[i]);

31: }else if (string[i] >= 'a' && string[i] <= 'z') { 32: string[i] = atoA(string[i]); 33: } 34: i++; 35: } 27: i=0; 28: while (string[i] != '¥0'){

29: if (string[i] >= 'A' && string[i] <= 'Z') { 30: string[i] = Atoa(string[i]);

31: }else if (string[i] >= 'a' && string[i] <= 'z') { 32: string[i] = atoA(string[i]);

33: } 34: i++; 35: }

(4)

28行目:string[i]が¥0でない限り繰り返す。      i=0であり、string[0]はt なので続ける。 string[8] string[7] string[5] ¥0 string[4] t string[3] S string[2] string[6] string[10] string[9] E string[1] t string[0] 27: i=0; 28: while (string[i] != '¥0'){

29: if (string[i] >= 'A' && string[i] <= 'Z') { 30: string[i] = Atoa(string[i]);

31: }else if (string[i] >= 'a' && string[i] <= 'z') { 32: string[i] = atoA(string[i]); 33: } 34: i++; 35: } 27: i=0; 28: while (string[i] != '¥0'){

29: if (string[i] >= 'A' && string[i] <= 'Z') { 30: string[i] = Atoa(string[i]);

31: }else if (string[i] >= 'a' && string[i] <= 'z') { 32: string[i] = atoA(string[i]); 33: } 34: i++; 35: }

2

回の課題の簡単な解説

29行目:string[i]がA以上Z以下であるか判定。      つまり、大文字かどうかを判定。      今回は小文字なので、次の文は通過する。 string[8] string[7] string[5] ¥0 string[4] t string[3] S string[2] string[6] string[10] string[9] E string[1] t string[0] 27: i=0; 28: while (string[i] != '¥0'){

29: if (string[i] >= 'A' && string[i] <= 'Z') { 30: string[i] = Atoa(string[i]);

31: }else if (string[i] >= 'a' && string[i] <= 'z') { 32: string[i] = atoA(string[i]); 33: } 34: i++; 35: } 27: i=0; 28: while (string[i] != '¥0'){

29: if (string[i] >= 'A' && string[i] <= 'Z') {

30: string[i] = Atoa(string[i]);

31: }else if (string[i] >= 'a' && string[i] <= 'z') { 32: string[i] = atoA(string[i]);

33: } 34: i++; 35: }

(5)

2

回の課題の簡単な解説

31行目:string[i]がa以上z以下であるか判定。      つまり、小文字かどうかを判定。      今回は小文字なので、次の文を実行する。 string[8] string[7] string[5] ¥0 string[4] t string[3] S string[2] string[6] string[10] string[9] E string[1] t string[0] 27: i=0; 28: while (string[i] != '¥0'){

29: if (string[i] >= 'A' && string[i] <= 'Z') { 30: string[i] = Atoa(string[i]);

31: }else if (string[i] >= 'a' && string[i] <= 'z') { 32: string[i] = atoA(string[i]); 33: } 34: i++; 35: } 27: i=0; 28: while (string[i] != '¥0'){

29: if (string[i] >= 'A' && string[i] <= 'Z') { 30: string[i] = Atoa(string[i]);

31: }else if (string[i] >= 'a' && string[i] <= 'z') {

32: string[i] = atoA(string[i]); 33: } 34: i++; 35: }

2

回の課題の簡単な解説

32行目:atoAを実行する。 atoAは小文字を大文字にして返す。 戻り値をstring[i]に代入する。 string[8] string[7] string[5] ¥0 string[4] t string[3] S string[2] string[6] string[10] string[9] E string[1] T string[0] 27: i=0; 28: while (string[i] != '¥0'){

29: if (string[i] >= 'A' && string[i] <= 'Z') { 30: string[i] = Atoa(string[i]);

31: }else if (string[i] >= 'a' && string[i] <= 'z') { 32: string[i] = atoA(string[i]); 33: } 34: i++; 35: } 27: i=0; 28: while (string[i] != '¥0'){

29: if (string[i] >= 'A' && string[i] <= 'Z') { 30: string[i] = Atoa(string[i]);

31: }else if (string[i] >= 'a' && string[i] <= 'z') {

32: string[i] = atoA(string[i]);

33: } 34: i++; 35: }

(6)

34行目:i++する。 string[i]は、今までの次の文字になる。 string[8] string[7] string[5] ¥0 string[4] t string[3] S string[2] string[6] string[10] string[9] E string[1] T string[0] 27: i=0; 28: while (string[i] != '¥0'){

29: if (string[i] >= 'A' && string[i] <= 'Z') { 30: string[i] = Atoa(string[i]);

31: }else if (string[i] >= 'a' && string[i] <= 'z') { 32: string[i] = atoA(string[i]); 33: } 34: i++; 35: } 27: i=0; 28: while (string[i] != '¥0'){

29: if (string[i] >= 'A' && string[i] <= 'Z') { 30: string[i] = Atoa(string[i]);

31: }else if (string[i] >= 'a' && string[i] <= 'z') { 32: string[i] = atoA(string[i]); 33: } 34: i++; 35: }

2

回の課題の簡単な解説

28~35行目:string[i]が¥0の間、繰り返す。 iが4になったとき、whileが終了する。 string[8] string[7] string[5] ¥0 string[4] t string[3] S string[2] string[6] string[10] string[9] E string[1] T string[0] 27: i=0; 28: while (string[i] != '¥0'){

29: if (string[i] >= 'A' && string[i] <= 'Z') { 30: string[i] = Atoa(string[i]);

31: }else if (string[i] >= 'a' && string[i] <= 'z') { 32: string[i] = atoA(string[i]); 33: } 34: i++; 35: } 27: i=0; 28: while (string[i] != '¥0'){

29: if (string[i] >= 'A' && string[i] <= 'Z') { 30: string[i] = Atoa(string[i]);

31: }else if (string[i] >= 'a' && string[i] <= 'z') { 32: string[i] = atoA(string[i]);

33: } 34: i++; 35: }

(7)

2

回の課題の簡単な解説

36行目:stringの内容を出力する。 37行目:終了 string[8] string[7] string[5] ¥0 string[4] t string[3] S string[2] string[6] string[10] string[9] E string[1] T string[0] 34: i++; 35: } 36: printf("%s¥n",string); 37:} 34: i++; 35: } 36: printf("%s¥n",string); 37:}

2

回の課題の簡単な解説

04行目:文字型変数out を宣言。 05行目:整数型変数int を宣言。 07行目:symbolから'A'を引き算することで、 symbol が'A'から何文字先か計算。 その結果をcountに保存。 08行目:countを'a'に足し算することで、 'a'からcount 先の文字を計算。 その結果をoutに保存。 09行目:outを戻り値として返す。

03:char Atoa(char symbol){ 04: char out;

05: int count; 06:

07: count = symbol - 'A'; 08: out = 'a' + count; 09: return out; 10:}

03:char Atoa(char symbol){ 04: char out;

05: int count; 06:

07: count = symbol - 'A'; 08: out = 'a' + count; 09: return out; 10:}

(8)

atoAは、Atoaと、ほぼ同様です。

今日やること

 http://www.tnlab.ice.uec.ac.jp/~s-okubo/class/language/

にアクセスすると、教材があります。

 2007年05月07日分と書いてある部分が、本日の教材です。  本日の内容  先週の課題の簡単な解凍  アドレスアドレスとアドレスアドレスととポインタとポインタポインタポインタ  C言語言語における言語言語におけるにおけるにおける文字列文字列文字列文字列  標準入力標準入力からの標準入力標準入力からのからのからの書式付書式付き書式付書式付ききき入力入力入力入力

(9)

4.1

メモリとアドレス



計算機内部では、データは

2

進数で保存している。



計算機は、メモリにデータを蓄えている。



bit



byte

1byte

1bit

8

つ集まっている。

1bit

0

もしくは

1

のどちらかを保存

byte

が、メモリの基本単位として使用される。

4.1

メモリとアドレス

0000

0001

0002

0003

0004

0005

0006

アドレスがふられている

メモリの概念図



メモリは、

1byte

を保存で

きる場所が大量にある。



それぞれの場所には、

アドレスがふられている。

(10)

0000 0001 0002 0003 0004 

C

言語で用いる変数等も、実際の値はメモリ上にある。



メモリ上のどこに置くかとかは、

OS

やコンパイラが

適時やってくれる。



C

言語では、実際にどこにデータが保存されいるのか、

プログラム中で参照できる。

これは此処 に入れるか 計算機 変数T 変数Tを 使用と・・・

4.2

アドレスの参照

0000 0001 0002 0003 0004 

C

言語で用いる変数等も、実際の値はメモリ上にある。



メモリ上のどこに置くかとかは、

OS

やコンパイラが

適時やってくれる。



C

言語では、実際にどこにデータが保存されいるのか、

プログラム中で参照できる。

計算機 変数T 変数Tの アドレスは?

0002です

(11)

4.2

アドレスの参照

#include <stdio.h> main(){ int i; pirntf("%u¥n",&i); } #include <stdio.h> main(){ int i; pirntf("%u¥n",&i); }

&i

とすることで、i

が保存されているアドレスを参照できる。

変数の前に& をつけると、その値をどこに保存し ているか(アドレス)を参照できる 例:

4.2

アドレスの参照

アドレスの前に* をつけると、そのアドレスに保存 している値を参照できる 

どこに保存されているか』はわかる。



次にやりたいことは?

その場所に入っている値が何か  更に、C言語では、アドレスを保存する型も存在する。 ポインタ

(12)



ポインタ

アドレスを保存している変数です。



このポインタを型として宣言することができます。



整数型や文字型と合わせて宣言されます。

『変数

poi

はアドレスである』と宣言するのでは

ない!



『変数

poi

は整数型の変数を保存しているアドレス』

『変数

poi

は文字型の変数を保存しているアドレス』

のように、

どの型を保存しているアドレスなのかを区別。

4.2

ポインタとアドレス

#include <stdio.h> main(){ int i; int *poi_01; int arr[10]; } #include <stdio.h> main(){ int i; int *poi_01; int arr[10]; } 例: *poi_01は整数型である。 poi_01の部分が 整数型のデータを保存する アドレスとなる。

ポインタの宣言の仕方

宣言するときに

*

をつけると、

*

の次の文字は、アドレスになる。

(13)

4.2

ポインタとアドレス

#include <stdio.h> main(){ int i; int *poi_01; int arr[10]; } #include <stdio.h> main(){ int i; int *poi_01; int arr[10]; } arr[0] arr int arr[10]; *pot_01 poi_01(または &*poi_01) int *poi_01; i &i int i; 値を参照するには アドレスを参照するには 整数型の変数 i を宣言 整数型の変数 *poi_01 を宣言   poi_01はアドレス サイズ10の整数型の配列  arrは配列の最初の要素のアドレス

5.2 C

言語における文字列



C

言語では、文字列は配列として扱うことができる。

例えば、文字列"test" が、サイズ10の文字型の配列stに 保存されているなら、 st[0] t st[1] st[2] st[3] st[4] st[5] st[6] st[7] st[8] st[9] e s t ¥0 文字列の最後には、NULL がつきます。 (「つきます」というか、「つけます」)

(14)



NULL

がないと、どうなるのか?

st[0] t st[1] st[2] st[3] st[4] st[5] st[6] st[7] st[8] st[9] e s t ¥0 文字列は test と。 計算機 t e s t ¥0 st[0] t st[1] st[2] st[3] st[4] st[5] st[6] st[7] st[8] st[9] e s t -文字列は test-test と。 計算機 t e s t ¥0 この ¥0 が違う文字だと… … 文字列を扱うときには、文字列の末尾に NULLがついているかどうかが重要になる

4.2

ポインタとアドレス

#include <stdio.h> main(){ char st[11]; st=="test-test¥0"; } #include <stdio.h> main(){ char st[11]; st=="test-test¥0"; }

駄目

駄目

駄目

駄目

です

です

です

です

文字列の 比較...

stは アドレス

アドレス

アドレス

アドレスです

文字列を扱うときには、 文字列を扱う命令を用いることになります。 文字列を便利に扱う関数は、今日はやりません。

(15)

7.2

書式付きの入力(

scanf

scanf(format [,pointer]) scanf(format [,pointer]) 標準入力からの入力を、format に従って変換し、 結果を各ポインタ(pointer)に値を代入します。 #include<stdio.h> main(){ int i; scanf("%d",&i);

printf("Inputed value is %d¥n",i);

}

#include<stdio.h> main(){

int i;

scanf("%d",&i);

printf("Inputed value is %d¥n",i); } 例: 標準入力から読み込んだ入力を、 符合付き整数として i に代入

7.2

書式付きの入力(

scanf

scanf(format [,pointer]) scanf(format [,pointer]) 標準入力からの入力を、format に従って変換し、 結果を各ポインタ(pointer)に値を代入します。 #include<stdio.h> main(){ int i; char c; scanf("%d%c",&i,&c);

printf("Inputed value is %d¥n",i);

} #include<stdio.h> main(){ int i; char c; scanf("%d%c",&i,&c);

printf("Inputed value is %d¥n",i); } 例: 標準入力から読み込んだ 2つの入力を、 1つ目は符合付き整数として i に 2つ目は文字として k に代入 改行やスペースを区切りとして認識

(16)

scanf(format [,pointer]) scanf(format [,pointer]) 標準入力からの入力を、format に従って変換し、 結果を各ポインタ(pointer)に値を代入します。 #include<stdio.h> main(){ char str[11]; scanf("%10s",str);

printf("Inputed value is %d¥n",i);

}

#include<stdio.h> main(){

char str[11]; scanf("%10s",str);

printf("Inputed value is %d¥n",i); }

例:

標準入力から読み込んだ文字列を、 文字列としてstrに代入。

参照

関連したドキュメント

「文字詞」の定義というわけにはゆかないとこ ろがあるわけである。いま,仮りに上記の如く

月額利用料: 200円(税抜)/1アドレス

噸狂歌の本質に基く視点としては小それが短歌形式をとる韻文であることが第一であるP三十一文字(原則として音節と対応する)を基本としへ内部が五七・五七七という文字(音節)数を持つ定形詩である。そ

これはつまり十進法ではなく、一進法を用いて自然数を表記するということである。とは いえ数が大きくなると見にくくなるので、.. 0, 1,

このような情念の側面を取り扱わないことには それなりの理由がある。しかし、リードもまた

“〇~□までの数字を表示する”というプログラムを組み、micro:bit

備考 1.「処方」欄には、薬名、分量、用法及び用量を記載すること。

口文字」は患者さんと介護者以外に道具など不要。家で も外 出先でもどんなときでも会話をするようにコミュニケー ションを