講義資料

作業環境の準備
1.Microsoft Visual C++ 実行環境の設定
Programing言語フォルダ → Microsoft Visual C++
ツールタブ → Visual Studio 2008 Command Prompt
2.O:¥CPP フォルダへの移動
C:¥Program Files¥Microsoft Visual Studio 9.0¥vc¥bin>O:
O:¥>cd CPP
3.コンパイルと実行
コンパイル → O:¥CPP> cl filename.c
実行
→ O:¥CPP> filename.exe 又は filename
基礎生物・情報実験・演習
第6回 情報演習
文字変数とファイル入出力
出席メールの提出
宛先:いつも通り
件名:日付出席学生番号氏名
本文:文字変数とファイル入出力
出席メールの提出を終えた人は,画面に以下の通
りに出力するCプログラムを作成し実行せよ.
‐‐‐
今日のキーワード「文字変数とファイル入出力」
次回は総合演習
冬休み中にプログラミングの勉強をしよう!
アナウンス
次回の情報演習(第7回)
プログラムを独力で時間内に作成して提出
 教員・RA・TAへの相談不可
 学生間の相談禁止
 Webの閲覧禁止 ∴授業用ホームページの閲覧禁止
 携帯電話等の情報端末やメールの使用禁止
 Oドライブの閲覧は可能
 テキストは持ち込み可能
第1回から第6回の演習問題とその解答例は各担当教員のWebページから公開
するのでそれを参考にして勉強をしておくこと.
今日の講義内容
• 1.文字の扱い(文字変数)
(第11章)
• 2.ファイルの入出力
(第12章)
• 演習問題
11章 文字を記録しよう
書式:char 変数名;
機能:文字変数を宣言
使用例:
・moji という文字変数を宣言する.
char moji ;
・変数 moji に「a」とい文字を格納する.
moji = 'a'
・変数 moji に格納されている文字を画面に表示する.
printf ("%c", moji) ;
・変数 moji にキーボードから文字を入力する.
scanf ("%c", &moji);
例題 ex11‐1.c (文字変数)
#include<stdio.h>
main() {
char moji; // 文字変数mojiを宣言
moji=‘b’;
printf(“moji=%c ¥n”,moji);
scanf(“%c”, &moji);
printf(“moji=%c ¥n”, moji);
}
終わった人は,
1. キーボードから2文字以上を入力してみよ.
2. printf文のmojiをmoji-1やmoji+1,moji+2としてみよ.
ポイント
・文字変数の書式は%c
・文字変数には1文字しか入らない
文字コード
コンピュータやプログラムの中では,様々な文
字をそのままの形で記憶するのではなく,数
値に置き換えて記憶している.
その文字と数値の対応を決めている表を,文
字コード表という.
例えば, A→65,a→97, b→98 など.
文字コード表(10進数表示)
30
31
32
33
34
35
36
!
"
#
$
37
38
39
40
41
%
&
'
(
)
42
*
43
44
45
+
,
-
46
47
48
49
.
/
0
1
67
68
69
C
D
87
88
89
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
2
3
4
5
6
7
8
9
:
;
<
=
>
?
@
A
B
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
F
G
H
I
J
K
L
M
N
O
P
Q
R
S
T
U
V
W
X
Y
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
Z
[
¥
]
^
_
`
a
b
c
d
e
f
g
h
i
j
k
l
m
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
n
o
p
q
r
s
t
u
v
w
x
y
z
{
|
}
~
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
.
「
」
,
・
ヲ
ア
イ
ウ
エ
オ
ヤ
ユ
ユ
ツ
ー
ア
イ
ウ
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
エ
オ
カ
キ
ク
ケ
コ
サ
シ
ス
セ
ソ
タ
チ
ツ
テ
ト
ナ
ニ
ヌ
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
ネ
ノ
ハ
ヒ
フ
ヘ
ホ
マ
ミ
ム
メ
モ
ヤ
ユ
ヨ
ラ
リ
ル
レ
ロ
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
ワ
ン
゙
゚
E
例題 ex11‐2.c (文字変数)
文字変数に保存された文字が数字で記憶されていることを確認する.
#include<stdio.h>
main() {
char moji;
scanf("%c", &moji);
printf(“moji=%c ¥n”,moji);
printf(“code=%d ¥n”, moji); //書式%dに注意
}
例題11-3.c
キーボードから数字(文字コード)を入力して,この数字と数字
(文字コード)に対応する文字を表示せよ.
例題 ex11‐3.c (文字変数)
#include<stdio.h>
main() {
int a;
scanf("%d", &a);
printf(“code=%d ¥n",a);
printf(“moji=%c ¥n",a);
}
例題 ex11‐4.c (文字の判定)
#include<stdio.h>
main() {
char m;
while(1==1) {
scanf("%c", &m);
if (m=='y') {
printf("yes ¥n");
break;
}
if (m=='n') {
printf("no ¥n");
break;
}
}
}
キーボードから文字を入力し,文字が
yであればyes
nであればno
と出力し,それ以外のときは文字入力
を続けるプログラム
「 m=='y' 」であれば,
{ }内の命令を実行する.
「 m=='n' 」であれば,
{ }内の命令を実行する.
ポイント:
文字変数の条件判定は,
' ' でくくる.
文字列の扱い
文字列(String): 「Hello」, 「Yes」 など複数の文字からなる
文字列は配列に1文字ずつ格納
文字列の最後は「終端文字」
char st[6];
st[0]
st[1]
st[2]
st[3]
st[4]
st[5]
H
e
l
l
o
終
ポイント:
・配列は0からカウントする.
・「終端文字」は,文字コード表の 0 に対応する.
文字列
書式:char 変数名[長さ];
機能:文字列を宣言
使用例:
・st という長さ100の文字変数の配列を宣言する.
char st[100];
・配列 st に格納されている文字列を画面に表示する.
printf ("%s ¥n", st);
・配列 st にキーボードから文字列を入力する.
scanf ("%s", &st);
ポイント:
・文字列(string)の表示と入力には %s を使う
例題 ex11‐5.c (文字列)
#include<stdio.h>
main() {
char st[100];
int i;
scanf("%s", &st);
printf(“まとめて出力¥n”);
printf(“%s¥n”, st);
printf(“1文字ずつ出力¥n”);
for (i=0; st[i] != 0; i=i+1){
printf(“%c”, st[i]);
}
}
キーボードから文字列を入力し,
画面に表示するプログラム
文字変数の配列をまとめて出力
する.この場合,文字列として%s
を使う.
i 番目の文字が終端文字(0)
ではない(!=)ところまでiを増やす.
文字変数の配列の要素を1つず
つ出力する.この場合,文字変数
として%cを使う.
文字変数/文字列に文字を代入する
文字変数: char moji;
moji = 'A'
文字列:
char moji[100];
char moji[100];
moji[0] = 'A'
moji[1] = 'B'
moji[2] = 'C'
moji[3] = 0
moji = 'ABC'
例題 ex11‐6.c (文字列の操作)
#include<stdio.h>
main() {
char st1[100], st2[200];
int i;
scanf("%s", st1);
for(i=0; st1[i] != 0; i=i+1){
st2[i*2] = st1[i];
st2[i*2+1] =‘+‘;
}
st2[i*2] = 0; //終端文字
printf("%s", st2);
}
キーボードから文字列を入力し,
1文字毎に+をいれて表示
i
st1
st2
0
a
a
1
b
+
2
終
b
3
4
+
終
st2の偶数番目にst1の文字を
st2の奇数番目に+を代入する.
第11章 小テスト
キーボードから入力した文字列の各文字を3文字ずつ表示する
プログラムを作成せよ.
12章 ファイルの読み書き
プログラムでファイルからデータを読み込んだり,計算結
果をファイルに書き出したりできると便利である.
大量のデータを読み込んだり,出力する場合や様々な
データをファイル毎に出力するなど,実用的なプログラム
作成には必須の技術である.
ファイル入出力は,約束事(手順)さえ理解すれば,特別
な工夫やテクニックは必要なく,簡単に使いこなせる.
ファイルへの書き込み
1. FILEという種類の変数を宣言する.
FILE *fp1;
FILEは大文字,*を忘れない
2. 使用するファイル名と書き込みであることを指定する.
fp1 = fopen("ファイル名", "w")
3. ファイルに文字や数字を書き込む.
fprintf (fp1, "書式", 変数, 変数, …) ;
例: fprintf(fp1, "%d %d %s", a, b, s);
4. ファイルの読み書きが終了したらファイルを閉じる.
fclose (fp1);
例題 ex12‐1.c (ファイルへの書き込み)
ファイル(data.txt)に数値を書き込む
#include<stdio.h>
main() {
FILE *fp;
int i;
fp=fopen("data.txt", "w");
for(i=1;i<=10;i=i+1){
printf("%d,",i*i);
fprintf(fp,“%d,”,i*i); //カンマ区切り
}
fclose (fp);
}
data.txt の内容を確認せよ.
O:¥CPP> type data.txt
終わった人は,上記プログラムに加筆して,name.txtというファイ
ルに自分の学生番号と氏名を書き込むプログラムを作成せよ.
ファイルからの読み込み
1. FILEという種類の変数を宣言する.
FILE *fp1;
FILEは大文字,*を忘れない
2. 使用するファイル名と読み込みであることを指定する.
fp1 = fopen("ファイル名", "r")
3. ファイルから文字や数字を読み込む.
fscanf (fp1, "書式", &変数, &変数, …) ;
例: fscanf(fp1, "%d %d %s", &a, &b, &s);
4. ファイルの読み書きが終了したらファイルを閉じる.
fclose (fp1);
例題 ex12‐2.c (ファイル読み込み)
data.txtから数値を読み込み,画面に合計を表示するプログラム
#include<stdio.h>
main() {
FILE *fp;
int i,x,sum=0;
fp=fopen("data.txt", "r");
for(i=1;i<=10;i=i+1){
fscanf(fp,“%d,”,&x);// 読み込むデータの書式
printf("%d,",x);
sum=sum+x;
}
printf("sum=%d",sum);
fclose (fp);
}
終わった人は,読み込んだ数値の平均値を画面に表示させよ.
例題 ex12‐3.c (ファイル入出力)
data.txtから数値を読み込み,その和をout.txtに書き込む
#include<stdio.h>
main() {
FILE *fp1,*fp2;
int i,x,sum=0;
fp1=fopen("data.txt", "r");
fp2=fopen("out.txt","w");
for(i=1;i<=10;i=i+1){
fscanf(fp1,"%d,",&x);
sum=sum+x;
}
printf("sum=%d",sum);
fprintf(fp2,"sum=%d",sum);
fclose(fp1); fclose(fp2);
}
out.txt の内容を確認
type out.txt
終わった人は,読み込
んだ数値の最大値と最
小値をファイルに書き込
むプログラムを作成せよ.
ファイル入出力のまとめ
使用するファイル毎にFILE変数を宣言する.
FILE *fp1, *fp2, *fp3;
ファイルと読み書きを指定してファイルを開く.
読込み: fp1 = fopen ("ファイル名", "r");
書込み: fp2 = fopen ("ファイル名", "w");
ファイルへのデータ読込み/書込み.
読込み: fscanf (fp1, "%d %s", &a, &st);
書込み: fprintf (fp2, " %d %c %s", a, m, st);
使い終わったファイルは必ず閉じる.
fclose ( fp1 );
flocse ( fp2 );
a: 整数
m: 文字変数
st[100]: 文字配列