PowerPoint プレゼンテーション - 物理学情報処理演習

Similar documents
PowerPoint プレゼンテーション - 物理学情報処理演習

PowerPoint プレゼンテーション - 物理学情報処理演習

PowerPoint プレゼンテーション - 物理学情報処理演習

PowerPoint プレゼンテーション - 物理学情報処理演習

PowerPoint プレゼンテーション - 物理学情報処理演習

PowerPoint プレゼンテーション - 物理学情報処理演習

PowerPoint Presentation

memo

kiso2-06.key

Microsoft PowerPoint - CproNt02.ppt [互換モード]

Microsoft PowerPoint - 3.ppt [互換モード]

講習No.12

PowerPoint プレゼンテーション

Cプログラミング1(再) 第2回

Microsoft Word - no02.doc

02: 変数と標準入出力

Microsoft PowerPoint - 4.ppt [互換モード]

ゲームエンジンの構成要素

プログラミング実習I

char int float double の変数型はそれぞれ 文字あるいは小さな整数 整数 実数 より精度の高い ( 数値のより大きい より小さい ) 実数 を扱う時に用いる 備考 : 基本型の説明に示した 浮動小数点 とは数値を指数表現で表す方法である 例えば は指数表現で 3 書く

PowerPoint プレゼンテーション

Microsoft Word - Training10_プリプロセッサ.docx

gengo1-12

gengo1-12

02: 変数と標準入出力

Microsoft PowerPoint - 計算機言語 第7回.ppt

Microsoft PowerPoint - kougi2.ppt

ポインタ変数

PowerPoint プレゼンテーション

PowerPoint Presentation

PowerPoint Presentation

kiso2-03.key

新版 明解C++入門編

gengo1-12

slide5.pptx

C プログラミング演習 1( 再 ) 2 講義では C プログラミングの基本を学び 演習では やや実践的なプログラミングを通して学ぶ

PowerPoint プレゼンテーション

コマンドラインから受け取った文字列の大文字と小文字を変換するプログラムを作成せよ 入力は 1 バイトの表示文字とし アルファベット文字以外は変換しない 1. #include <stdio.h> 2. #include <ctype.h> /*troupper,islower,isupper,tol

PowerPoint プレゼンテーション

スライド 1

Microsoft PowerPoint - 10Com2.ppt

Microsoft Word - Cプログラミング演習(1)_2012

Microsoft PowerPoint - bp02.ppt

演習1

第1回 プログラミング演習3 センサーアプリケーション

C 言語の式と文 C 言語の文 ( 関数の呼び出し ) printf("hello, n"); 式 a a+4 a++ a = 7 関数名関数の引数セミコロン 3 < a "hello" printf("hello") 関数の引数は () で囲み, 中に式を書く. 文 ( 式文 ) は

プログラミング実習I

Microsoft Word - Cプログラミング演習(3)

プログラミング基礎

講習No.1

数値計算

デジタル表現論・第6回

ポインタ変数

Microsoft PowerPoint - prog06.ppt

gengo1-2

Prog1_10th

書式に示すように表示したい文字列をダブルクォーテーション (") の間に書けば良い ダブルクォーテーションで囲まれた文字列は 文字列リテラル と呼ばれる プログラム中では以下のように用いる プログラム例 1 printf(" 情報処理基礎 "); printf("c 言語の練習 "); printf

基礎プログラミング2015

プログラミング演習3 - Cプログラミング -

FORTRAN( と C) によるプログラミング 5 ファイル入出力 ここではファイルからデータを読みこんだり ファイルにデータを書き出したりするプログラムを作成してみます はじめに テキスト形式で書かれたデータファイルに書かれているデータを読みこんで配列に代入し 標準出力に書き出すプログラムを作り

文字列操作と正規表現

プログラミング基礎

PowerPoint プレゼンテーション

講習No.10

Microsoft PowerPoint - 09.pptx

(1) プログラムの開始場所はいつでも main( ) メソッドから始まる 順番に実行され add( a,b) が実行される これは メソッドを呼び出す ともいう (2)add( ) メソッドに実行が移る この際 add( ) メソッド呼び出し時の a と b の値がそれぞれ add( ) メソッド

2006年10月5日(木)実施

Microsoft PowerPoint - 2.ppt [互換モード]

Microsoft PowerPoint - VBA解説1.ppt [互換モード]

Microsoft Word _VBAProg1.docx

02: 変数と標準入出力

kiso2-09.key

C言語入門

プログラミング演習3 - Cプログラミング -

Prog1_12th

訋箊æ©�ã…Šã…�ㇰㅩã…�ㅳㇰ - 第5åłž 浆㇄ㆮ勶御2

数値計算

RX ファミリ用 C/C++ コンパイラ V.1.00 Release 02 ご使用上のお願い RX ファミリ用 C/C++ コンパイラの使用上の注意事項 4 件を連絡します #pragma option 使用時の 1 または 2 バイトの整数型の関数戻り値に関する注意事項 (RXC#012) 共用

Report#2.docx

Microsoft PowerPoint - 第3回目.ppt [互換モード]

Report#2.docx

ガイダンス

基礎プログラミング2015

02: 変数と標準入出力

解答編 第 7 章実数型の計算と標準数学関数 演習問題 7.1 文法事項 1 ) 暗黙の型変換とは何か答えなさい 代入演算子 (=) や算術演算子 (+,-,*,/,%) では 2 つの演算項のデータ型が揃っている事が必要です 2 つの演算項のデータ型が異なる場合 可能ならば 演算項のデータ型を変換

バイオプログラミング第 1 榊原康文 佐藤健吾 慶應義塾大学理工学部生命情報学科

Microsoft PowerPoint - program.ppt [互換モード]

Microsoft PowerPoint - kougi4.ppt

memo

ポインタ変数

3.Cygwin で日本語を使いたい Cygwin で以下のコマンドを実行すると それ以降 メッセージが日本語になります export LANG=ja_JP.UTF-8 これは 文字コードを日本語の UTF-8 に設定することを意味しています UTF-8 は Cygwin で標準の文字コードで, 多

問 2 ( 型変換 ) 次のプログラムを実行しても正しい結果が得られない 何が間違いかを指摘し 正しく修正せよ ただし int サイズが 2 バイト long サイズが 4 バイトの処理系での演算を仮定する #include <stdio.h> int main( void ) { int a =

8 / 0 1 i++ i 1 i-- i C !!! C 2

PowerPoint Presentation

プログラミング基礎I(再)

講習No.9

C#の基本

Microsoft Word - no11.docx

のプログラムはそのままでは 人間は理解できても コンピュータは理解できません 皆さんが作るプログラムはソースプログラム ( ソースファイル ) と呼ばれます C 言語では *.c という形式にファイルで作成します そのソースプログラムをコンピュータが理解できるようなデータ形式に変換することをコンパイ

Transcription:

物理学情報処理演習 5. C 言語 1 ver20150508 2015 年 5 月 8 日 5.1 プログラム開発 5.2 C 言語の構造 5.3 入出力 参考文献 やさしい C++ 第 4 版高橋麻奈 ( 著 ) ソフトバンククリエイティブ プログラミング言語 C++ 第 4 版ビャーネ ストラウストラップ, Bjarne Stroustrup, 柴田望洋 Numerical Recipes: The Art of Scientific Computing, Third Edition in C++ 5.4 変数の型 身内賢太朗レポート提出 :fsci-phys-jouhou@edu.kobe-u.ac.jp

5.1 プログラム開発 プログラム開発の流れ ( 先週の作業を思い出しながら ) 5.1.1 プログラム編集 ソースコードファイルを作る 5.1.2 コンパイル 文法エラーをチェック 5.1.3 デバグ ソースコードとコンパイルメッセージを照らし合わせて誤りを発見する 実行 実行時エラーをチェック 実行結果をチェック

5.1.1 プログラム編集 hello.cxx を眺める $mkdir lesson5 $cd lesson5 $cp../lesson4/hello.cxx./ $cat hello.cxx 表示 $emacs hello.cxx & editor を用いて hello.cxx を編集 editor: テキストファイルの編集ソフト 純粋にテキストファイルをいじるための機能に特化している 書式情報などは保存 表示されない 演習 5.1.1 次ページ以降のコマンドを見ながらやってみよう ( 提出は不要 ) emacs のウィンドウ分割 戻す 別 file 名で保存複数 file を開くバッファー間の移動 行の先頭に移動 カーソルより右をカット 別の場所にペースト 文字列検索 などなど

エディター emacs コマンド集 1 メニューバーから選ぶより圧倒的に編集効率が上がる この他にもコマンドあり 自分で調べて使い倒そう C-: ctrl を押しながらの意味 M-: esc を押してから もしくは alt を押しながらの意味 必須 知ってると便利 慣れたら覚えよう < 全般 > C-g コマンドのキャンセル C-x C-c Emacsの終了 C-x u 最後の操作の取り消し C-z Emacsの中断 < ファイル関連 > C-x C-s 編集中のファイルのセーブ C-x C-w 別名のファイルにセーブ C-x C-f ファイルを開く C-x i 別のファイルを挿入 C-x k ファイルを閉じる C-x b バッファー ( 開いているファイル ) の移動 C-x C-v 別のファイルに置き換える < ウィンドウ関連 > C-x 2 現在カーソルのあるウィンドウを上下に2 分割 C-x 1 現在カーソルのある他のウィンドウを1つ消す C-x o 現在カーソルのあるウィンドウ間のカーソルの移動 C-x 0 現在カーソルのあるウィンドウを削除 C-x 3 現在カーソルのあるウィンドウを垂直方向に分割 C-x s 編集中の全てのバッファをファイルの保存

エディター emacs コマンド集 2 C-: ctrl を押しながらの意味 M-: esc を押してから もしくは alt を押しながらの意味 必須 知ってると便利 慣れたら覚えよう < 編集関連 > C-k カーソルから行末までを消去 C-y 最後に消去したものの再入 C-s 文字列の検索 C-r 文字列の検索 ( 逆方向 ) C-d カーソルの位置にある文字を削除 M-k カーソルから文末までを消去 M-% 文字列の置換 (yで置換,nでそのまま) C-space 範囲の開始位置を指定 C-w 指定範囲のカット M-w 指定範囲のコピー M-x replace-string 文字列の一括 C-x C-o 空行の一括削除 <カーソル関連 > C-a カーソルの位置を行頭に移動 C-e M-< M-> M-x goto-line カーソルの位置を行末に移動 ファイルの先頭に移動 ファイルの末尾に移動 特定の行へ移動 C-f カーソルの位置を次の文字に移動 C-b カーソルの位置を前の文字に移動 C-n カーソルの位置を次の行に移動 C-p カーソルの位置を行頭に移動 C-v M-v C-x C-x 次の画面に移動 前の画面に移動 マークした位置に移動. 再入力で元に戻る < 日本語入力関連 ( 入力方法依存あり )> C- : 日本語入力モード C-n 又はSPACE 次の変換候補を表示 C-p 前の変換候補を表示 C-i 変換対象を短くする C-o 変換対象を長くする

5.1.2 コンパイル GNU のコンパイラ gcc: C コンパイラ g++:c++ コンパイラ本演習では C++ を使用しますが クラスを利用したオブジェクト指向という C++ 特有の機能まではカバーしません C++ でのみ許されている若干の文法表現のみ使用します i. pre-processor ii. C-compiler iii. assembler iv. linker 全てを含んでいる識別子により判断.c: C 言語ソース i, ii, iii, iv.cxx.c.cpp : C++ 言語ソース i, ii, iii, iv.h: ソース ( ヘッダーファイル ) i, ii, iii, iv.i: プリプロセス後のC 言語ソース i, ii, iii, iv.o: オブジェクトファイル iv

g++ のオプション 書式 gcc [option filename] よく使うオプション -c: コンパイルまたはアセンブルまでで止める コンパイラの出力はそれぞれのソースファイル (xxx.cxx) に対応したオブジェクトファイル (xxx.o) となる -o file: 出力先をfileに指定 -o と fileの指定がないと a.out という実行 fileができる -V: バージョン情報 -I dir: dirをインクルードファイルの検索するディレクトリのリスト中に追加 -O1, -O2 : 最適化を行う 数字が大きい方が最適化が深い

5.1.3 デバグ 文法間違いなどがあると コンパイル時にメッセージ error: 重大な間違いでコンパイル未完了 要 debug warning: 軽微な間違いなどでコンパイルは完了したが 想定通りに動作しない可能性あり debug 推奨 コンパイルは通るが 実行時にエラー

コンパイル時のメッセージ例 ( よくある順 必要に応じて確認のこと ) <Erorr> parse error before xxx 品詞解析エラー 括弧 セミコロン クォーテーションのつけ間違いで 文の構造がおかしくなっているとき xxx undeclared 宣言せずに変数または型 xxx が使われたとき redeclearation of xxx 変数 xxx を 2 回宣言したとき invalid value in assignment 定数等 代入できないものに値を代入しようとしたとき invalid operands to binary + 2 項演算子 + の使い方がおかしいとき例 : x = x + yy ;double と char* は足せない array subscript is not an integer 配列の添字が整数でないとき conflicting types for xxx 関数 xxx の宣言部と定義部で返り値の型 引数の個数 型が違うとき too many arguments to function xxx 関数 xxx の引数の個数が多いとき incompatible type for argument i of xxx 関数 xxx の i 番目の引数の型が違うとき undefined reference to xxx 関数 xxx が定義されていないとき 定義がされていない または関数名のミスタイプ ライブラリーがリンクされていない <Warning> warning: assignment makes pointer from int without a cast 整数をポインター型の変数に代入したとき warning: assignment from incompatible pointer type 違う型へのポインター型の変数に変換したとき warning: control reaches end of non-void function 返り値が void 以外なのに return 文が無いとき warning: unused variable xxx 変数を宣言したのに使わなかったとき

実行時のメッセージ例 ( よくある順 必要に応じて確認のこと ) <Erorr> Segmentation fault (core dumped) 保護されているメモリー領域 ( コード領域 カーネル領域等 ) にアクセスを行った (SEGV とも書き表す ) nan 負の数の sqrt を求めるなど 実行できない演算を行った inf ( または -inf) 0 で割るなど無限大のでる演算を行った Illegal instruction 不正な命令の発行 Bus error ワード境界を超えてアクセスした または外部バスのエラー

5.2 C 言語の構造 hello.cxx を眺める $cat hello.cxx int main(){ // comment can be writen starting with "//" cout <<"Hello World!" << endl;

5.2 C 言語の構造 hello.cxx を眺める $cat hello.cxx 5.2.1 関数 int main(){ // comment can be writen starting with "//" cout <<"Hello World!" << endl; hello.cxx 関数 文の集合で 特定の機能を持つ 型に応じた値を返す (return) { で囲まれる プログラムは関数の集まりである 実行モジュールは必ず main 関数を持つ

5.2.2 ライブラリ int main(){ // comment can be writen starting with "//" cout <<"Hello World!" << endl; hello.cxx ライブラリ : 特定の目的を持った関数の集合 #include で読み込む <iostream> 入出力に関する関数 <stdlib.h> 基本的なライブラリ <string.h> 文字列を扱う関数 <math.h> 数学関係の関数

5.2.3 文 int main(){ // comment can be writen starting with "//" cout <<"Hello World!" << endl; hello.cxx 文 ; までが一文 宣言文と実行文がある 宣言文変数の宣言 実行分式 制御

5.2.4 書式 プログラムを書き換えるとき もともとの記述をコメントアウトしておくとすぐに元に戻せる int main(){ // comment can be writen starting with "//" cout <<"Hello World!" << endl; hello.cxx インデント 同じ階層の文は揃えて記述する TAB で自動インデント可能 コメントは超重要 コメントアウト 行の中で // 以降はコンパイル時に無視される /** と **/ で囲む表記も可能 複数行にまたがるコメントも可能

5.3 入出力 hello.cxx を眺める $cat hello.cxx int main(){ // comment can be writen starting with "//" cout <<"Hello World!" << endl;

5.3 入出力 5.3.1 出力 int main(){ // comment can be writen starting with "//" cout <<"Hello World!" << endl; hello.cxx cout 標準出力 iostream の std という namespace に定義されている 標準出力に出力するための関数 コマンドラインでのリダイレクション > 等でファイルに書き込める cerr 標準エラー出力 常に画面に表示される 参考 file:hello_hello.cxx 演習 5.3.1 ( 提出は不要 ) hello.cxx の名前を変えてコンパイルしてみよう 実行ファイルの名前も適当に変えること 出力する文字を変えてみよう 元の出力行はコメントアウトしておくこと cout と cerr を共存させ ファイルへとリダイレクトしてみよう

5.3.2 入力 int main(){ // comment can be writen starting with "//" char c[16]; cout <<"Hello, input a message >"; cin>>c; cout <<c << endl; cin 標準入力 標準入力から入力するための関数 ここでは c という変数に入力している hello_cin.cxx 参考 file:hello_cin.cxx 演習 5.3.2 ( 提出は不要 ) hello_cin.cxx をダウンロード 実行してみよう

5.3.3 コマンドラインパラメータ hello_com.cxx int main(int argc, char *argv[]){ // comment can be writen starting with "//" cout <<"Input a message with a command."<<endl; cout << "Number of command line parameters (argc)="<< argc << endl; cout << "Comand line paremeter 0 (argv[0]) : "<< argv[0] << endl; cout << "Comand line paremeter 1 (argv[1]) : "<< argv[1] << endl; main 関数は引数を取ることができる 引数 : 実行時にコマンド名に続けて与えるパラメータ argc にパラメータの数 argv には引数の内容が代入される 演習 5.3.3 ( 提出は不要 ) hello_com.cxx をダウンロード 実行してみよう 実行時にパラメータを渡してみよう $./hello_com $./hello_com hello $./hello_com hello hellooo の出力の違いを比べてみよう 参考 file:hello_com.cxx

5.4 変数 5.4.1 変数 変数 : 値 を入れておく箱 変数は 名前と型を持ち ( 変数定義 ) 指し示した値を見たり ( 参照 ) 値を変えたり ( 代入 ) できる 使用される変数は全て宣言する 参考 file:triangle_1.cxx 演習 5.4.1 triangle_1.cxx をダウンロード 実行してみよう 実行時にパラメータ 50 プログラム中で 20 を渡す $./triangle_1 50 次ページからの説明を読みながら このプログラムの内容を理解しよう #include <stdlib.h> #include <string.h> #include <math.h> int main(int argc, char *argv[]){ //calculate the area of a triangle. //command line parameter is angle C(degree). int i=1; double a,b,c; double A,B,C,S; char message[128]; a=10.0; triangle_1.cxx strcpy(message,"input length b >"); cerr <<"STEP"<< i <<": "; cout <<message; cin>>b; C=atof(argv[1]); cout << "a="<<a << " b="<<b<<" C="<<C<<"(degree)"<<endl; S=a*b*sin(M_PI*C/180)/2.; cout << "area="<<s<<endl; triangle_1.cxx :2 辺とその間の角度から三角形の面積を求めるプログラム

5.4.2 定数と変数 定数 整定数 : 0xFF, 12 浮動小数点整数 : 123.4, 1.5e-10 文字定数 : a, 0, xb 文字列 : Hello 文字定数と文字列は異なる x : 文字定数 x : 文字列 ( x と 0 から構成) 0: ヌル文字 定数と変数 例 int i, j; 変数定義 i = 3; 変数に定数を代入 j = i * i; 変数を参照 演算をし 結果を変数に代入 9 = j; 定数には代入できない #include <stdlib.h> #include <string.h> #include <math.h> int main(int argc, char *argv[]){ //calculate the area of a triangle. //command line parameter is angle C(degree). int i=1; double a,b,c; double A,B,C,S; char message[128]; a=10.0; triangle_1.cxx strcpy(message,"input length b >"); cerr <<"STEP"<< i <<": "; cout <<message; cin>>b; C=atof(argv[1]); cout << "a="<<a << " b="<<b<<" C="<<C<<"(degree)"<<endl; S=a*b*sin(M_PI*C/180)/2.; cout << "area="<<s<<endl; triangle_1.cxx :2 辺とその間の角度から三角形の面積を求めるプログラム

5.4.2 変数の型 整数型 short 16bit -2 15 ~ 2 15-1 先頭 bitは符号 int 32 bit -2 31 ~ 2 31-1 先頭 bitは符号 long 32(or 64) bit 先頭 bitは符号 unsigned short 16bit 0~2 16-1 unsigned int 32bit : 0~2 32-1 unsigned long 32(or 64)bit 浮動小数点型 float 32bit double 64bit long double 32bit 文字型 char 8bit 1 文字 8bitのデータ整数と見ることもできる signed char 8bit -2 7 ~ 2 8-1 先頭 bitは符号 unsigned char 8bit 0~2 8-1 #include <stdlib.h> #include <string.h> #include <math.h> int main(int argc, char *argv[]){ //calculate the area of a triangle. //command line parameter is angle C(degree). int i=1; double a,b,c; double A,B,C,S; char message[128]; a=10.0; triangle_1.cxx strcpy(message,"input length b >"); cerr <<"STEP"<< i <<": "; cout <<message; cin>>b; C=atof(argv[1]); cout << "a="<<a << " b="<<b<<" C="<<C<<"(degree)"<<endl; S=a*b*sin(M_PI*C/180)/2.; cout << "area="<<s<<endl; triangle_1.cxx :2 辺とその間の角度から三角形の面積を求めるプログラム

5.4.2 変数への代入 定数 定数とは 値 定数には 以下のようなものがある 整定数 : 0xFF, 12 浮動小数点整数 : 123.4, 1.5e-10 文字定数 : a, 0, xb 文字列 : Hello 文字定数と文字列は異なる x : 文字定数 x : 文字列 ( x と 0 から構成) 0: ヌル文字 定数と変数 例 int i, j; 変数定義 i = 3; 変数に定数を代入 j = i * i; 変数を参照 演算をし 結果を変数に代入 9 = j; 定数には代入できない #include <stdlib.h> #include <string.h> #include <math.h> int main(int argc, char *argv[]){ //calculate the area of a triangle. //command line parameter is angle C(degree). int i=1; double a,b,c; double A,B,C,S; char message[128]; a=10.0; triangle_1.cxx strcpy(message,"input length b >"); cerr <<"STEP"<< i <<": "; cout <<message; cin>>b; C=atof(argv[1]); cout << "a="<<a << " b="<<b<<" C="<<C<<"(degree)"<<endl; S=a*b*sin(M_PI*C/180)/2.; cout << "area="<<s<<endl; 宣言時に代入することも 宣言と独立に代入することも可能 一般には = を用いて代入するが strcpy を用いた文字列への代入 cin による標準入力からの代入なども可能

5.5 演算 5.4.1 算術演算 +( 和 ) ( 差 ) *( 積 ) /( 除 ) %( 整数同士の除算で余り ) *, /, % が +,- よりも優先される 5.4.2 数学演算 <math.h> をincludeする sin(x) 正弦 (radで与える) cos(x) 余弦 (radで与える) tan(x) 正接 (rad) asin(x) arc sin acos(x) arc cos atan(x) arc tan exp(x) 指数関数 sqrt(x) 平方根 log(x) 自然対数 ( 底 e) log10(x) 常用対数 ( 底 10) pow(x,y) xのy 乗 fabs(x) 絶対値 M_PI 円周率 #include <stdlib.h> #include <string.h> #include <math.h> int main(int argc, char *argv[]){ //calculate the area of a triangle. //command line parameter is angle C(degree). int i=1; double a,b,c; double A,B,C,S; char message[128]; a=10.0; triangle_1.cxx strcpy(message,"input length b >"); cerr <<"STEP"<< i <<": "; cout <<message; cin>>b; C=atof(argv[1]); cout << "a="<<a << " b="<<b<<" C="<<C<<"(degree)"<<endl; S=a*b*sin(M_PI*C/180)/2.; cout << "area="<<s<<endl; triangle_1.cxx :2 辺とその間の角度から三角形の面積を求めるプログラム

ソースコードファイル名 :2015_jouhou_05_ 学籍番号の下 4 桁.cxx 出力結果ファイル名 :2015_jouhou_05_ 学籍番号の下 4 桁.txt 課題 5:C 言語 1 三角形の面積を計算するプログラムで以下の仕様を全て持つものを製作し ソースコード及び出力結果を提出せよ 11 辺とその両端の角度をコマンドライン引数として入力する 2 標準出力には 3 辺の長さ 3 角の大きさ 面積 円周率を出力する 31 辺の長さは 10 2 角は 30 度と 45 度として実行を行い 出力を上記出力結果ファイルに記録せよ

課題提出 宛先 fsci-phys-jouhou@edu.kobe-u.ac.jp 件名 2015-report05_ 学籍番号の下 4 桁 本文学籍番号と名前 添付ファイル : 2015_jouhou_05_ 学籍番号の下 4 桁.cxx 2015_jouhou_05_ 学籍番号の下 4 桁.txt 締め切り 2014 年 5 月 22 日 ( 金 )13:00 26