プログラミング言語2 第02回 4/23 回答例
氏名 学籍番号
問題: サンプルプログラムについて、以下を答えなさい。
1. 何をやるプログラムなのか、説明しなさい。
標準入力から最大10文字を読み取り、大文字を小文字に、小文字を大文字に変換したものを、標準出力に 出力する。
2. どのようにして、1.の内容を実現しているか、プログラムの流れに沿って説明しなさい。
1. sprintfを用いて、標準入力から10文字貰う
2. i=0とする(string[i]はstring[0]となり、中身は文字列の先頭の文字となる)。
3. string[i]の中身が\0になるまで、以下を繰り返す。
1. string[i]に入っている文字が、AからZの間の文字か否かを、大小関係を比べることで評価する。も
し、AからZの間の文字であった場合は、Atoaを用いて小文字に変換する。Atoaの中身について は後述する。AからZの間の文字であった場合は、ステップ5に進む。さもなければ、ステップ4に 進む。
2. string[i]に入っている文字が、aからzの間の文字か否かを、大小関係を比べることで評価する。もし、
aからzの間の文字であった場合は、atoAを用いて小文字に変換する。atoAの中身については口 述する。
3. iに1を加える(これにより、string[i]が、1文字先になる)。
4. 結果を出力する。
Atoaの中身
1. symbolから'A'を引き算することで、symbolがAから何文字先の大文字かを計算し、その結果をcount に入れる。
2. 'a'にcountを加えることで、'a'からcount数先の文字を計算し、その結果をoutに入れる。
3. outを戻り値として返す。
atoAの中身
1. symbolから'a'を引き算することで、symbolがaから何文字先の大文字かを計算し、その結果をcountに 入れる。
2. 'A'にcountを加えることで、'A'からcount数先の文字を計算し、その結果をoutに入れる。
3. outを戻り値として返す。
3. 各行が何をやっているのか、わかる範囲で説明しなさい。
(プログラムに直接書き込みなさい)
この授業について、ご意見ご感想、もっと説明して欲しいところ等、何かあったらお書きください。
注: このシートは、4/23の授業の出欠を兼ねています。
サンプルプログラム 1: #include <stdio.h>
2:
3: char Atoa(char symbol){
4: char out;
5: int count;
6:
7: count = symbol – 'A';
8: out = 'a' + count;
9: return out;
10: } 11:
12: char atoA(char symbol) { 13: char out;
14: int count;
15:
16: count = symbol – 'a';
17: out = 'A' + count;
18: return out;
19: } 20:
21: main(){
22: char string[11];
23: int i;
24:
25: scanf("%10s",string);
26: printf("%s\n",string);
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: }
36: printf("%s\n",string);
37: }
入出力を用いるので、 stdio.h を include する。
関数 Atoa の宣言。
入力として文字を貰い、戻り値として文字を返す。
文字型変数 out を宣言 整数型変数 count を宣言
引き算を行うことで、 A から何文字先かを計算し、結 果を count に入れる。
足し算を行うことで、 a から count 文字先も文字を計 算し、結果を out に入れる。
戻り値として out を返す。
関数 atoA の宣言。
入力として char を貰い、戻り値として char を返す。
文字型変数 out を宣言 整数型変数 count を宣言
引き算を行うことで、 A から何文字先かを計算し、結 果を count に入れる。
足し算を行うことで、 a から count 文字先も文字を計 算し、結果を out に入れる。
戻り値として out を返す。
関数 main の宣言。入力なし。
サイズ 11 の文字型の配列 string を宣言。
整数型の変数 i を宣言。
標準入力から配列 string に、最大 10 文字入力。
標準出力に配列 string の内容を出力。
i に 0 を代入。
見ている文字が \0 になる
まで繰り返す。 大小関係を比べて、 A か ら Z の間の文字かを判定。
大小関係を比 べて、 a から z の間の文字 かを判定。
Atoa に 1 文字渡して、
結果を string[i] に入れる atoA に 1 文字渡して、
結果を string[i] に入 れる
結果を出力する。
i の値を 1 つ増やす。