作業環境の準備 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]: 文字配列
© Copyright 2024 Paperzz