http://www.phys.ynu.ac.jp/labs/cosmic/shibata/jisshu/ 物理情報処理基礎実習II 第9回 文字と配列 ~文字・アスキーコード~ 柴田 [email protected] (原 [email protected]) 石川 [email protected] §課題7-解答例 aplsrvky01% cat kadai7.c #include <stdio.h> main() { double a,b; char c; printf(" The four rules of arithmetic: \n"); printf(" Input ( a [+,-,*,/] b ): "); scanf("%lf %c %lf",&a,&c,&b); switch(c){ case '+': printf(" Addition: %lf %c %lf = %lf\n",a,c,b,a+b); break; case '-': printf(" Subtraction: %lf %c %lf = %lf\n",a,c,b,a-b); break; case '*': printf(" Multiplication: %lf %c %lf = %lf\n",a,c,b,a*b); break; §課題7-解答例つづき case '/': if(b!=0){ printf(" Division: %lf %c %lf = %lf\n",a,c,b,a/b); }else{ printf(" ERROR: %lf %c %lf Divided by ZERO!\n",a,c,b); } break; default: printf(" ERROR: %lf %c %lf Undefined Operation!\n",a,c,b); } } aplsrvky01% cc kadai7.c aplsrvky01% ./a.out The four rules of arithmetic Input ( a [+,-,*,/] b ): 2 + 3 Addition: 2.000000 + 3.000000 = 5.000000 aplsrvky01% ./a.out The four rules of arithmetic Input ( a [+,-,*,/] b ): 2 - 3 Subtraction: 2.000000 - 3.000000 = -1.000000 §課題7-解答例つづき aplsrvky01% ./a.out The four rules of arithmetic Input ( a [+,-,*,/] b ): 2 * 3 Multiplication: 2.000000 * 3.000000 = 6.000000 aplsrvky01% ./a.out The four rules of arithmetic Input ( a [+,-,*,/] b ): 2 / 3 Division: 2.000000 / 3.000000 = 0.666667 aplsrvky01% ./a.out The four rules of arithmetic Input ( a [+,-,*,/] b ): 2 / 0 ERROR: 2.000000 / 0.000000 Divided by ZERO! aplsrvky01% ./a.out The four rules of arithmetic Input ( a [+,-,*,/] b ): 2 @ 3 ERROR: 2.000000 @ 3.000000 Undefined Operation! §課題8 方程式の根 X2ーsin(x)=0の解(x=0以外)が0.1≦x≦1.0 の間にある。この区間内の関数f(x)=X2ーsin(x)の 端点での値を調べて誤差10ー6以内で解を求めたい。 端点のひとつと端点の中点の区間で解の存在範囲を 調べる。誤差が10ー6より大きければ、区間を半分にせ ばめ解の存在範囲を繰り返し調べる。収束後(誤差が 10ー6以内)の反復回数と、端点・中点および関数の値 を表示するプログラムを作成し、実行せよ。 ただし、端点(0.1、1.0)および誤差10ー6は入力とし、 反復の最大回数は10000と限定する。 また、レポートには簡単なフローチャートも添付すること。 ※出力書式はprintf(“x1=%15.10lf¥n”、x1); を参考にせよ。 §課題8 フローチャート 課題8 f(x)=x2-sin(x)=0 の根 x1,x2:初期端点 真→青分岐 偽→赤分岐 X1,x2,e 入力 e:誤差 10-6 i<10000 f1*fm<0 X2=xm f1*fm>0 X1=xm 端点の更新 xm=(x1+x2)/2 f1=f(x1) fm=f(xm) (|f1|<e)||(|fm|<e) 端点、中点の誤差判定 出力/終了 §注意 ここから先、 教科書に沿って学ぶことは限られます。 この章「文字と配列」では、以下の様に。 文字型変数の理解 文字列の扱いと配列 整数・実数配列(追加事項) テキスト中の例題の多くは、 データ型の理解と文字処理のために用意されているが、 科学計算用には整数・実数配列が重要である。 時間数の理由により多くの例題は省略し、 科学計算のために必要な事項を付け加える。 テキスト第3章の例題は自分で勉強しておくこと! §文字 文字は整数 計算機では、文字を整数として管理している。 ※計算機には0と1しか無いし、そうせざるを得ない。 ex.) int c; c = getchar(); ※getchar()は1文字を入力する関数なのに、 整数変数のcに結果を代入している。 アスキーコード(ASCII code) 文字には対応するアスキーコードが存在する。 ‘A’=65 ‘B’=66 … ’Z’=90 小文字アルファベット ‘a’=97 ’b’=98 … ’z’=122 数字 ‘0’=48 ’1’=49 … ’9’=57 ※‘0’=0ではない! コントロールコード 0~31 ※改行(LF), tab, ^C, ^D, ^Z等画面制御やジョブ制御 その他、特殊記号 → 教科書p.95 表3-1 大文字アルファベット §コントロールコード コントロールコード(control code、Ctrl-?と表記)と 呼ばれる文字は、getcharで正常入力できない! ジョブ制御 Ctrl-C (3) プログラムの実行を中断する。 Ctrl-D (4) 入力の終了を意味し、EOFを返す。 (DOSではCtrl-Z) Ctrl-Z (26) 実行中のプログラムを一時停止させる。(fg コマンドで再開) 入力編集 Ctrl-H (8) バックスペース Ctrl-J(10) 改行 Ctrl-U(21) 行消去 Ctrl-V(22) コントロールコード入力のためのプレフィックス。 Ctrl-Vに続けて入力した1文字が実際に入力される。 端末制御 Ctrl-S(19) 通信停止 Ctrl-Q(17) 通信再開 その他 NULL(0) は空文字の意味として使われる。 §文字の決まりごと 値の表現 c = ‘A’ ; ※シングルクォートで囲む 出力書式 printf(“%c”,c) ; ※文字として出力。出力結果は:A printf(“%d”,c) ; ※アスキーコードを出力。出力結果:65 文字の大小=アスキーコードの大小 ‘1’ < ‘A’ < ‘a’ → 49 < 65 < 97 様々な文字コード パソコンなど EBCDICコード: メインフレーム、大型計算機など ASCIIコード: §エスケープシーケンス エスケープシーケンス(escape sequence) \(¥)記号を用いて表す特殊表示 コントロールコード \n(改行)=10、\t(Tab)=9、\a(ビープ音)=7 C言語の仕様(制限)によって、 特別な扱いが必要となる文字。 \‘(‘)、\“(“)、\\(\) ex.) printf(“ \”ABC\\”) → 出力結果 ”ABC\ 特殊な場合 printfで、%を表示したいとき ex.) printf(“%%”) → 出力結果 % §文字 -例 キーボードに割り当てられた文字の アスキーコードを表示するプログラム 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. #include <stdio.h> main() { int c; printf(“Hit any key(s), Ctrl-C to finish\n”); while(1){ ※無限ループ(Ctrl-Cで中断) c=getchar(); if(c<32){ ※コントロールコードの場合 printf(“ASCII code of Ctrl-%c = %d\n”,64+c,c); }else{ ※普通の文字の場合 printf(“ASCII code of %c = %d“,c,c); } } } §文字 -例- 解説と問い 解説 while(1)は、条件が常に真になっているので、 無限ループを形成する。 → Ctrl-Cでプログラムの実行を強制終了させること。 コントロールコードもキーボードに割り当てられている。 ※Ctrlキーを押しながらアルファベットキーを押す ex.) [Ctrl]-[a] = 1、[Ctrl]-[b] = 2、... [Ctrl]-[z] = 26。 その他いくつかの特殊キー [ESC] = 27、 [Tab] = 9 等。 問い 問1:NULL(値は0) は、 どのキーに割り当てられているか? ※ヒント:‘A’(値65)から1を引いたものに相当する文字は? 問2:カーソル移動キー(矢印キー)や、 ファンクションキー([F1]~[F12])には、 どんなアスキーコードが割り当てられているか? §課題9 大文字・小文字変換 アルファベットの大文字と小文字のアスキーコードには 大文字+32=小文字の関係がある(例:‘A’=65, ‘a’=97)。 キー入力した文字が大文字なら小文字に変換し、その 逆に小文字ならば大文字に変換して標準出力装置 (ディスプレイ)に出力するプログラムを作成し、実行例 を示せ。フローチャートも示せ。 ただし、アルファベット以外の文字については変換せず にそのまま出力するものとする。 ヒント: 1文字キー入力関数はgetcharを使用。 ctrl-Dを入力したらプログラムを終了する。 1文字出力の書式は“%c”。 §来週はテスト!! 遅刻しないように! 範囲は第2章まで。 変数の型、入出力書式、四則演算、 制御構造
© Copyright 2024 ExpyDoc