C言語演習 基本構造
|
|
|
- ぎんと もちやま
- 7 years ago
- Views:
Transcription
1 1
2 変数 関数 宣言 定義 配列 多次元配列 関数と引数 演算子 スコープ 制御構造 条件分岐 条件式 While ループ do-while ループ For ループ 入出力 printf ファイル入出力 2
3 a 00 x 0 + a 01 x a 0n x n = b 0 a 10 x 0 + a 11 x a 1n x n = b 1 a (n 1)0 x 0 + a (n 1)1 x a n 1 n 1 x n 1 = b n 1 n 元連立一次方程式をガウスの消去法で解く いわゆる Ax=b の x を求める問題 3
4 ガウスの消去法のフローは? 講義を思い出して設計してみましょう ( ファイルからの入力 ) 前進消去ステップ 後退代入ステップ 答えの出力 それぞれ関数化して main 内で順番に呼べば良さそう! 4
5 補足 : 引数 N は実質的に不要でした 全体のフローを考えて プログラムの全体像を書いてみよう 関数の作り方 ( 引数 ) を思いだそう 行列の読み書きだけ作ってみよう ファイルには行列 A とベクトル b の要素が書いてあると仮定する data1.dat #include <stdio.h> #include <stdlib.h> #define N 3 // 今回は 3 行 3 列の行列を対象とする void makemat( 引数 ) { 中身 void forward_elimination( 引数 ) { /* 後で書く */ void backward_substitution( 引数 ) { /* 後で書く */ void printresult( 引数 ){ 中身 int main(int argc, char** argv) { double A[N][N], b[n]; /* ここに引数個数確認を入れておくべき */ makemat(a, b, argv[1]); forward_elimination(a, b, N); backward_substitution(a, b, N); printresult(a, b, N); return EXIT_SUCCESS; 5 引数でファイル名を指定しよう
6 C 言語は行単位の言語ではない 色々なところで改行できる 1 行に複数の処理を書いても良い funca(n,m); funcb(o,p); funcc(q,r); void funca(int n, int m); void funcb (int n, int m); void funcc(int n, int m); if や for の中身を括弧で括らない書き方もある ( 括らない場合は直後の 1 命令だけ実行 ) if( x == y ) funca(a,b); funcb(c,d); 変数名や関数名の途中では改行できない 改行が意味を持つこともある ( 例 :#define) x==y のときは funca と funcb が実行される x!=y のときは funcb だけが実行される読みにくくなりすぎないように注意すること 6
7 コンパイルする時にオプションを付加できる 提供される機能はコンパイラにより異なる 同じ機能が異なるオプションで提供されることもある 指定する順番はある程度自由 出力ファイル名を変える :-o ファイル名 警告を表示する :-Wall gcc には警告 (warning) を出してくれる -Wall オプションがある ちょっとした問題 に容易に気がつけるようになるため バグを減らす助けになることがある $ gcc -Wall -o b.out source.c $./b.out 7
8 ファイルから行列 A とベクトル b を読み込む関数 makemat() を作成しましょう main 関数と同様にフロー設計してみましょう 必要な関数等は一日目に学んでいます データ形式は 1 行目行列 A の 0 行目の要素 ( スペース区切り ) N 行目行列 A の N-1 行目の要素 ( スペース区切り ) N+1 行目ベクトル b の要素 ( スペース区切り ) 行列 A とベクトル b を表示する関数 printresult() を作成しましょう 8
9 講義を思い出して設計してみましょう 前進消去ステップ i( 最初は1) 行目に注目 各要素をa ii で除算する j=i+1 行目に注目 各要素について i 行目の要素をa ji 倍した値を減算する N 行目まで jをj+1にして繰り返す N 行目まで iをi+1にして繰り返す ベクトルについても行列とあわせて計算する必要があるので注意が必要 9
10 反復作業をループとして考える void forward_elimination(a, b, n){ for(i=0; i<n;i++){ // i 行目に注目 N 行目まで繰り返す // i 行目の各要素に対する除算 for(){ // i+1 行目に注目 N 行目まで繰り返す // j 行目の各要素に対する減算 10
11 各要素に対する処理もループとして考える必要がある void forward_elimination(a, b, n){ for(i=0; i<n;i++){ // i 行目に注目 N 行目まで繰り返す for(){ // i 行目の各要素に対する除算 for(){ // i+1 行目に注目 N 行目まで繰り返す for(){ // j 行目の各要素に対する減算 11
12 ループの初期値やベクトル b について考えてみる void forward_elimination(a, b, n){ for(i=0; i<n;i++){ // i 行目に注目 N 行目まで繰り返す for(j=0; j<n; j++){ A[i][j] = // i 行目の各要素に対する除算 b[i] = for(j=i+1; j<n; j++){ // i+1 行目に注目 N 行目まで繰り返す for(k=i; k<n; k++){ A[j][k] = // j 行目の各要素に対する減算 b[j] = ; ヒント計算前の値を保存しておかねばならない場合があるのでは? 12
13 残りを全部作ってみましょう 前進消去を完成させよう 後退代入も同様に作ってみよう 前進消去を完成させた時点で実行し 値を確認してみるとプログラムのミスを早く見つけられるかもしれません 途中の時点でおかしかったら最終結果が正しいはずがない! 13
14 デバッグのためのツール ( デバッガ ) を使う gdb というのは ちょっと大変なので 途中の状態を出力してみると良い 条件式と printf を組み合わせる ここでこの変数はこの値になっているはず を確認する どこでおかしくなっているかの目安をつける デバッガを使うのも 基本的な使い方であれば そんなに難しいことではない ( 今回はやりません ) 14
15 C 言語の float 型や double 型はルールに則った方式でデータを保持している n*2^m 形式で保持している (IEEE754 形式 ) 扱うデータと計算の内容によってはルールの都合により計算結果がおかしくなることがある 手書きでは分数として表現できる数値も実数として持たねばならないため誤差が生じる 絶対値があまりに大きな値や小さな値は正しく表現 計算できない 絶対値が大きく異なる値の加減算を行うと 絶対値の小さい値が無視されてしまう 値がほぼ同じ数値同士の差を取ると誤差が大きくなる etc. printf の出力上の都合のこともあるので注意 15
16 何を実装すれば良いか? 新たな行の処理を行う際に 絶対値が一番大きな行を選ぶ処理 大小の比較 :if 文で判定すれば良い 絶対値の取得 : 負数の場合は正数に変換する? 行を入れ替える処理 値を入れ替える : 変数の交換は どう書く? 値を入れ替えない : たくさんの変数を入れ替えるのは処理に時間がかかる 実際には入れ替えずに入れ替えたような扱いをしてはどうか 16
17 fabs(double f)/fabsf(float f)/fabsl(long double f) 浮動小数変数の絶対値を求める 型によって関数が違う 使うには準備が必要 コーディング時 :#include <math.h> が必要 三角関数や指数 対数関数なども使えるようになる コンパイル時 : 特別な指定が必要 $ gcc gaussian_elimination_xx.c -lm 17
18 変数 a と変数 b を入れ替える方法 代入してしまうと一方の値がわからなくなってしまう 一時変数が必要 x = a; // a を待避しておく a = b; // a を上書きしてしまったが b = x; // 待避しておいたから大丈夫 変数を入れ替える関数は作れるだろうか 変数を関数内で書き換えても呼び出し側に反映されないはず 18
19 値渡し 変数をそのまま渡す 関数の仮引数もそのまま 呼び出し側では値が変わらない void func1(int a){ a = 1; int a = 0; func1(a); printf( a = %d n, a); 参照渡し 変数に & を付けて渡す 関数の仮引数に * を付ける 呼び出し側でも値が変わる void func2(int *a){ *a = 1; int a = 0; func2(&a); printf( a = %d n, a); 変数の入れ替えを関数化したいときには気をつけよう 19
20 配列を参照する際に別の配列を経由させることで 参照先を変えることができる メモリ使用量が増える アクセス速度が低下しうる というデメリットもある X[i] = B[A[i]] 配列 A 配列 C A B C D 配列 B 配列 A A B C 配列 B X[i] = B[C[A[i]]] 0 2 D 20
21 部分ピボッティングを行うガウスの消去法を作ってみましょう ここで確認と入れかえをすれば良さそう void forward_elimination(a, b, n){ for(i=0; i<n;i++){ // i 行目に注目 N 行目まで繰り返す for(j=0; j<n; j++){ A[i][j] = // i 行目の各要素に対する除算 b[i] = for(j=i+1; j<n; j++){ // i+1 行目に注目 N 行目まで繰り返す for(k=i; k<n; k++){ A[j][k] = // j 行目の各要素に対する減算 b[j] = ; 入力データ :data2.dat ヒント : 間接参照を使う場合はその後の処理全てに影響する 21
22 完全ピボッティングを行うガウスの消去法を作ってみましょう 22
23 対象の行列サイズを変更したくなったらどうすれば良いだろうか 毎回ソースコードを書き換えて N を変えるのは大変であり 現実的ではない 大きなプログラムだとコンパイルだけでも結構な時間がかかる 実行中に大きさが決まる配列が必要なときはどうすれば良いだろうか ソースコードを書き換えられない ( 十分に大きな配列を確保しておく?) 23
24 動的配列 ( 可変長配列 ) プログラム実行中に任意の長さの配列を作る方法 問題サイズに合わせて配列サイズを変える時などに使う #include <stdio.h> #include <stdlib.h> int main(int argc, char** argv) { int *a; n = atoi(argv[1]); a = (int*) malloc (sizeof(int) * n); if (a == NULL){ perror( MALLOC: ); exit(exit_failure); ここで配列 a を使う free(a); atoi は文字列から数字を得る関数 n は実行中に決まる int 型で要素数が n の配列を確保 ( 確保しただけ 中身は不定 ) 確保できなかったときの処理ここではエラーメッセージの出力と異常終了使い終わったら片付ける 24
25 動的配列の確保は malloc で行う 確保できたかどうかは NULL(0 のようなもの ) でわかる 確保された時点では中身は不定 0 が入っているかも知れない 入っていないかも知れない ( calloc) 確保した配列 ( メモリ ) はどうなるか プログラムが終われば自動的に解放されるため ほったらかしにしてプログラムを終了しても良い 確保しすぎると足りなくなる ( メモリ不足でエラーする ) ため不要になったら解放するのが良い 明示的に解放するには free を使う malloc と free の対応を間違えないように注意すること 同じ配列を複数回 freeしてはいけない mallocし直したい時にはfreeしてから if(a!=null){ free(a); a=null; 25
26 二次元配列の動的確保 主な方法は 2 つある 1. 配列のための配列を確保する int **a; a = (int**)malloc(sizeof(int*)*n); for(i=0; i<n; i++)a[i] = (int*)malloc(sizeof(int)*m); for(i=0; i<n; i++)free(a[i]); free(a); 2. 大きな配列を確保して途中を参照する ポインタ を少し知らないとできないため 今回は説明しない 26
27 関数内で malloc した配列を関数外でも使いたいときはどうするか void func(int *x, int n){ x = (int*)malloc(sizeof(int)*n); int *a=null; func(a, n); void func(int **x, int n){ *x = (int*)malloc(sizeof(int)*n); int *a=null; func(&a, n); NG OK 呼び出し元のaはNULLのまま呼び出し元のaは配列として利用可能 ( 配列として使おうとするとエラー ) 今回の問題では main 関数内で malloc/free し 得られた配列を関数に渡すようにすれば大丈夫です ( 新しいことを考えなくて済みます ) 27
28 暗黙な型変換 ある程度は勝手に変換してくれる 例 :double 型と int 型を混合して計算 代入できる 基本型については精度の高い型に統一して処理される 代入する場合は代入先の精度に依存 情報が欠落してしまい想定外の結果になることも コンパイラが警告してくれる -Wall オプションを付けておくと確実 必要に応じて明示的に変換する (int) や (double) などを付ける :double d = (double)0; main 関数 int main(int, char**) でないこともある void だったり引数が無かったりする資料を見ても気にしなくて良い 28
29 正しい結果を得られるプログラムの書き方は 1 つではない プログラムの作り方次第で性能 ( 実行時間 ) に大きな差が生じることがある 100 倍 1000 倍以上の差が生じることもあるため 高速化はとても重要 1 日かかるプログラムが 高速化によって数秒で終わるようになるかもしれない 1 時間で終わるはずのプログラムが 作り方が悪いと 1 週間以上かかってしまうかも!? 高速化手法を幾つか紹介する 29
30 CPU はどんな計算も同じ速度で行えるわけではない ( 計算式の書き方で性能が変わる ) 一般的に 除算はとても重い 加算 減算 乗算はあまり変わらない 論理演算が高速なことがある 同じ計算を何度も行う場合はまとめると良い 一度変数に格納しておいて 変数を参照するだけにする 分岐処理を減らすと良い 例 : 多重ループの最内部で if を使わない 30
31 同じ回数の配列アクセスでも所要時間に差が生じる 連続したアクセスは高速 連続でない ( ランダムな 飛び飛びな ) アクセスは低速 多次元配列のアクセス順序をよく見てみよう ループを入れ替えても計算結果が変わらないが 性能が全く異なってしまうことがある 同じ配列要素に何度も書き込む場合には 一旦局所変数上で計算を行って 最後に配列に書き込んだ方が良いことがある 例 : 多重ループの最内部における足し込み処理 31
32 配列に順番にアクセスできているかを考える for(i=0; i<n; i++){ for(j=0; j<n; j++){ A[i][j] =... どちらが高速? for(j=0; j<n; j++){ for(i=0; i<n; i++){ A[i][j] =... A[0][0] A[0][1] A[0][2] A[0][3] A[1][0] A[1][1] A[1][2] A[1][3] A[2][0] A[2][1] A[2][2] A[2][3] A[3][0] A[3][1] A[3][2] A[3][3] 32
33 世の中の多くのコンパイラにはプログラムを最適化する機能が備わっている 最適化オプションを使う 例えば gcc では -O1 -O2 -O3( 数字が大きい方が強力な最適化を行う ) など コンパイラによって異なるため確認が必要 常にうまく行くわけではない 簡単な ( コンパイラにとってわかりやすい ) プログラムはうまく行きやすい 手動での最適化も重要 これまでに挙げた高速化技術を適用しなくても コンパイラによる最適化だけで十分に良い性能が得られることもある 最適化の有無とコンパイラオプションの組み合わせで性能が変わる 33
34 malloc/free には時間がかかる ループ内で何度も malloc/free するようなプログラムは作らないようにする あまりに大きなローカル変数は扱えない 巨大な配列 ( 行列 ) を静的に使いたいときはグローバル配列にする 動的配列であれば大丈夫 34
35 ガウスの消去法を高速化してみよう 計算を置き換えられるところは無いか? 計算順序 配列アクセス順序を変更できないか? コンパイルオプションを変えてみよう 問題サイズが小さいと差がわからないため 大きな問題を作ってみましょう 実行時間の測定には time コマンドが便利です time コマンドに続けて測定したいコマンド列を与える $ time./a.out data.dat 35
36 それぞれの分野における よく使うお決まりの処理 ( 関数 ) というものが存在する ( 例 : 行列積など ) プログラミングの得意な人が作った ( 最適化された ) 処理を使い回せれば便利 ソースコードを共有する? プログラムの中身が全部見られてしまう ライブラリを使う 簡単に言えば 関数を切り出して別のプログラムからも使えるようにしたもの ライブラリを作る方法 コンパイラにオプションを指定 専用プログラムでまとめる ライブラリを使う方法 宣言を行う :#include <xxxx.h> 指定したファイルの中に宣言が書かれている コンパイラに使うライブラリを教える gcc source.c -lxxxx という書式で指定する 36
37 古めの教科書に書かれたC 言語のプログラムを読んでいると古い書き方のプログラムに出くわすことがある 読み方自体は難しくないので安心 古い記法の例 int func(a, b, n) double a[][n], b[]; int n; { int i,j, 仮引数に型情報が無い 関数本体の前に変数名と型情報が並んでいる 関数の型と名前だけを宣言として書く ( 仮引数を書かない ) 記法もある 37
38 速習コースに関する問い合わせは担当助教實本 (jitumoto at cc.u-tokyo.ac.jp) 大島 (ohshima at cc.u-tokyo.ac.jp) までメールでお願いします (gmail 等からの送信でも特に問題ありませんが 送信者の所属と氏名は明記してください ) 38
プログラミング実習I
プログラミング実習 I 05 関数 (1) 人間システム工学科井村誠孝 [email protected] 関数とは p.162 数学的には入力に対して出力が決まるもの C 言語では入出力が定まったひとまとまりの処理 入力や出力はあるときもないときもある main() も関数の一種 何かの仕事をこなしてくれる魔法のブラックボックス 例 : printf() 関数中で行われている処理の詳細を使う側は知らないが,
memo
数理情報工学演習第一 C プログラミング演習 ( 第 5 回 ) 2015/05/11 DEPARTMENT OF MATHEMATICAL INFORMATICS 1 今日の内容 : プロトタイプ宣言 ヘッダーファイル, プログラムの分割 課題 : 疎行列 2 プロトタイプ宣言 3 C 言語では, 関数や変数は使用する前 ( ソースの上のほう ) に定義されている必要がある. double sub(int
C プログラミング演習 1( 再 ) 2 講義では C プログラミングの基本を学び 演習では やや実践的なプログラミングを通して学ぶ
C プログラミング演習 1( 再 ) 2 講義では C プログラミングの基本を学び 演習では やや実践的なプログラミングを通して学ぶ 今回のプログラミングの課題 次のステップによって 徐々に難易度の高いプログラムを作成する ( 参照用の番号は よくわかる C 言語 のページ番号 ) 1. キーボード入力された整数 10 個の中から最大のものを答える 2. 整数を要素とする配列 (p.57-59) に初期値を与えておき
PowerPoint プレゼンテーション
講座準備 講座資料は次の URL から DL 可能 https://goo.gl/jnrfth 1 ポインタ講座 2017/01/06,09 fumi 2 はじめに ポインタはC 言語において理解が難しいとされる そのポインタを理解することを目的とする 講座は1 日で行うので 詳しいことは調べること 3 はじめに みなさん復習はしましたか? 4 & 演算子 & 演算子を使うと 変数のアドレスが得られる
Microsoft PowerPoint - 09.pptx
情報処理 Ⅱ 第 9 回 2014 年 12 月 22 日 ( 月 ) 関数とは なぜ関数 関数の分類 自作関数 : 自分で定義する. ユーザ関数 ユーザ定義関数 などともいう. 本日のテーマ ライブラリ関数 : 出来合いのもの.printf など. なぜ関数を定義するのか? 処理を共通化 ( 一般化 ) する プログラムの見通しをよくする 機能分割 ( モジュール化, 再利用 ) 責任 ( あるいは不具合の発生源
第1回 プログラミング演習3 センサーアプリケーション
C プログラミング - ポインタなんて恐くない! - 藤田悟 [email protected] 目標 C 言語プログラムとメモリ ポインタの関係を深く理解する C 言語プログラムは メモリを素のまま利用できます これが原因のエラーが多く発生します メモリマップをよく頭にいれて ポインタの動きを理解できれば C 言語もこわくありません 1. ポインタ入門編 ディレクトリの作成と移動 mkdir
/*Source.cpp*/ #include<stdio.h> //printf はここでインクルードして初めて使えるようになる // ここで関数 average を定義 3 つの整数の平均値を返す double 型の関数です double average(int a,int b,int c){
ソフトゼミ A 第 6 回 関数 プログラムは関数の組み合わせでできています 今までのゼミAでも printf や scanf など様々な関数を使ってきましたが なんと関数は自分で作ることもできるのです!! 今日は自作関数を中心に扱っていきます ゲーム制作でも自作関数は避けては通れないので頑張りましょう そもそもまず 関数とは 基本的には 受け取った値に関数によって定められた操作をして その結果の値を返す
PowerPoint Presentation
プログラミング基礎 第 2 週 (4,5,6 回 ) 2011-10-07 出村公成 この資料の再配布を禁止します 予定 プログラミング入門 (45 分 ) 変数 入出力 分岐 演習 (90 分 ) タッチタイプ練習 統合開発環境 Codeblocksの使い方 教科書例題の打ち込みと実行 プログラミング入門 C 言語の簡単な例を体験 変数 入出力 分岐 プログラムの例リスト 2.1 改 #include
講習No.1
プログラムはどこに保存され, どこで実行されるのか? 復習 ハードディスク キーボード Central Processing Unit 例えば i7, ARM, Cortex-A17 ディスプレイ 例えば 4G バイト メモリ プログラムは, ワープロ文章などと同様, ハードディスクなどにファイルとして保存されている. プログラムは, メモリ上に呼び出されて ( ロード ) 実行される. プログラムの作成
Microsoft PowerPoint - å®�æ−•試é¨fi3ㆮ対ç�Œ.pptx
C言語の繰り返し処理 for文と while文と do文 臼杵 潤 0) 準備 変数の加減算 int a, b=10; // a= a = 0; a = a+1; // a= a += 1; // a= // a= a ++; a = a + b; // a= a += b; // a= // a= a --; 下を1行ずつ実行すると それぞれ aの値はどう変わるか 0 1 2 3 13 23 22
プログラミング実習I
プログラミング実習 I 03 変数と式 人間システム工学科井村誠孝 [email protected] 3.1 変数と型 変数とは p.60 C 言語のプログラム中で, 入力あるいは計算された数や文字を保持するには, 変数を使用する. 名前がついていて値を入れられる箱, というイメージ. 変数定義 : 変数は変数定義 ( 宣言 ) してからでないと使うことはできない. 代入 : 変数には値を代入できる.
バイオプログラミング第 1 榊原康文 佐藤健吾 慶應義塾大学理工学部生命情報学科
バイオプログラミング第 1 榊原康文 佐藤健吾 慶應義塾大学理工学部生命情報学科 ポインタ変数の扱い方 1 ポインタ変数の宣言 int *p; double *q; 2 ポインタ変数へのアドレスの代入 int *p; と宣言した時,p がポインタ変数 int x; と普通に宣言した変数に対して, p = &x; は x のアドレスのポインタ変数 p への代入 ポインタ変数の扱い方 3 間接参照 (
cp-7. 配列
cp-7. 配列 (C プログラムの書き方を, パソコン演習で学ぶシリーズ ) https://www.kkaneko.jp/cc/adp/index.html 金子邦彦 1 本日の内容 例題 1. 月の日数配列とは. 配列の宣言. 配列の添え字. 例題 2. ベクトルの内積例題 3. 合計点と平均点例題 4. 棒グラフを描く配列と繰り返し計算の関係例題 5. 行列の和 2 次元配列 2 今日の到達目標
Microsoft PowerPoint - lec10.ppt
今日の内容, とポインタの組み合わせ, 例題 1. 住所録例題 2. と関数とは. を扱う関数. 例題 3. のリスト とポインタの組み合わせ 今日の到達目標 自分で を定義する 自分で定義したについて, 配列やポインタを作成する データ型 基本データ型 char 文字 (1 文字 ) int 整数 double 浮動小数など その他のデータ型配列 データの並び ( 文字列も, 文字の並び ) ポインタ
数はファイル内のどの関数からでも参照できるので便利ではありますが 変数の衝突が起こったり ファイル内のどこで値が書き換えられたかわかりづらくなったりなどの欠点があります 複数の関数で変数を共有する時は出来るだけ引数を使うようにし グローバル変数は プログラムの全体の状態を表すものなど最低限のものに留
第 10 章分割コンパイル 1 ソースを分割する今まで出てきたソースは全て一つのソースファイルにソースを記述してきました しかし ソースが長くなっていくと全てを一つのファイルに書くと読みづらくなります そこで ソースを複数のファイルに分割してコンパイルを行う分割コンパイルをします 今章は章名にもなっている 分割コンパイルの方法についてやります 分割コンパイルする時は大抵 関連性のある機能ごとにファイルにまとめます
02: 変数と標準入出力
C プログラミング入門 総機 1 ( 月 1) 11: 動的メモリ確保 Linux にログインし 以下の講義ページを開いておくこと http://www-it.sci.waseda.ac.jp/ teachers/w483692/cpr1/ 2015-06-22 1 まとめ : ポインタを使った処理 内容 説明 呼び出し元の変数を書き換える第 9 回 文字列を渡す 配列を渡す 第 10 回 ファイルポインタ
PowerPoint プレゼンテーション
講座を行う前に 自己紹介 僕と上回生について 1 年生同士で少しお話しよう! オリエンテーションの宿題 アルゴロジック http://home.jeita.or.jp/is/highschool/algo/index3.html どこまでできましたか? あまりできなかった人はこれから全部クリアしよう! 2016 年度 C 言語講座 第一回目 2016/6/11 fumi 今回の目標 プログラムを書いて実行するやり方を覚える
コマンドラインから受け取った文字列の大文字と小文字を変換するプログラムを作成せよ 入力は 1 バイトの表示文字とし アルファベット文字以外は変換しない 1. #include <stdio.h> 2. #include <ctype.h> /*troupper,islower,isupper,tol
コマンドラインから受け取った文字列の大文字と小文字を変換するプログラムを作成せよ 入力は 1 バイトの表示文字とし アルファベット文字以外は変換しない 1. #include 2. #include /*troupper,islower,isupper,tolowerを使うため宣言*/ 3. 4. int get_n(char *); 5. void replace(char
02: 変数と標準入出力
C プログラミング入門 基幹 2 ( 月 4) 11: 動的メモリ確保 Linux にログインし 以下の講義ページを開いておくこと http://www-it.sci.waseda.ac.jp/ teachers/w483692/cpr1/ 2014-06-22 1 まとめ : ポインタを使った処理 内容 説明 呼び出し元の変数を書き換える第 9 回 文字列を渡す 配列を渡す 第 10 回 ファイルポインタ
Microsoft Word - Cプログラミング演習(12)
第 12 回 (7/9) 4. いくつかのトピック (5)main 関数の引数を利用したファイル処理 main 関数は, 起動する環境から引数を受け取ることができる 例えば 次に示すように,main 関数に引数を用いたプログラムを作成する 01 /* sample */ 02 /* main 関数の引数 */ 03 #include 04 05 main(int argc, char
第9回 配列(array)型の変数
第 12 回 配列型の変数 情報処理演習 ( テキスト : 第 4 章, 第 8 章 ) 今日の内容 1. 配列の必要性 2. 配列の宣言 3. 配列変数のイメージ 4. 配列変数を使用した例 5. 範囲を超えた添字を使うと? 6. 多次元配列変数 7. 多次元配列変数を使用した例 8. データのソーティング 9. 今日の練習問題 多数のデータ処理 1. 配列の必要性 ( テキスト 31 ページ )
char int float double の変数型はそれぞれ 文字あるいは小さな整数 整数 実数 より精度の高い ( 数値のより大きい より小さい ) 実数 を扱う時に用いる 備考 : 基本型の説明に示した 浮動小数点 とは数値を指数表現で表す方法である 例えば は指数表現で 3 書く
変数 入出力 演算子ここまでに C 言語プログラミングの様子を知ってもらうため printf 文 変数 scanf 文 if 文を使った簡単なプログラムを紹介した 今回は変数の詳細について習い それに併せて使い方が増える入出力処理の方法を習う また 演算子についての復習と供に新しい演算子を紹介する 変数の宣言プログラムでデータを取り扱う場合には対象となるデータを保存する必要がでてくる このデータを保存する場所のことを
Cプログラミング1(再) 第2回
C プログラミング 1( 再 ) 第 2 回 講義では Cプログラミングの基本を学び演習では やや実践的なプログラミングを通して学ぶ 1 前回のレポートから 前回の宿題 数あてゲーム の説明において 次のように書いていたものがいた : これはコンピュータがランダムに設定した数字を人間が当てるゲームである この説明でどこかおかしなところはないだろうか? 2 コンピュータの用語と日常的な用語の違い 物理において
gengo1-11
関数の再帰定義 自然数 n の階乗 n! を計算する関数を定義してみる 引数は整数 返却値も整数 n! = 1*2*3*... * (n 1)*n である ただし 0! = 1 とする int factorial(int n) int i, tmp=1; if( n>0 ) for(i=1; i
FORTRAN( と C) によるプログラミング 5 ファイル入出力 ここではファイルからデータを読みこんだり ファイルにデータを書き出したりするプログラムを作成してみます はじめに テキスト形式で書かれたデータファイルに書かれているデータを読みこんで配列に代入し 標準出力に書き出すプログラムを作り
FORTRAN( と C) によるプログラミング 5 ファイル入出力 ここではファイルからデータを読みこんだり ファイルにデータを書き出したりするプログラムを作成してみます はじめに テキスト形式で書かれたデータファイルに書かれているデータを読みこんで配列に代入し 標準出力に書き出すプログラムを作ります FORTRAN の場合 OPEN 文でファイルを開いた後 標準入力の場合と同様に READ 文でデータを読みこみます
(1) プログラムの開始場所はいつでも main( ) メソッドから始まる 順番に実行され add( a,b) が実行される これは メソッドを呼び出す ともいう (2)add( ) メソッドに実行が移る この際 add( ) メソッド呼び出し時の a と b の値がそれぞれ add( ) メソッド
メソッド ( 教科書第 7 章 p.221~p.239) ここまでには文字列を表示する System.out.print() やキーボードから整数を入力する stdin.nextint() などを用いてプログラムを作成してきた これらはメソッドと呼ばれるプログラムを構成する部品である メソッドとは Java や C++ などのオブジェクト指向プログラミング言語で利用されている概念であり 他の言語での関数やサブルーチンに相当するが
Microsoft PowerPoint - kougi2.ppt
C プログラミング演習 第 2 回 Microsoft Visual Studio.NET を使ってみよう 説明 例題 1. プログラム実行の体験 コンピュータを役に立つ道具として実感する 次ページのプログラムを使って, Microsoft Visual Studio.NETでの C++ ソースファイル編集, ビルド, テスト実行の一連の過程を体験する 例題 1 のプログラムの機能 計算の繰り返し
PowerPoint プレゼンテーション
プログラミング初級 第 7 回 2017 年 5 月 29 日 配列 ( 復習 )~ 文字列 1 配列とは 2 配列 : 複数の変数をグループとしてまとめて扱うもの 配列 変数 int data[10]; 整数型の配列 同種のデータ型を連続して確保したものを配列とよぶ = 整数がそれぞれにひとつずつ入る箱を 10 個用意したようなもの int data; 整数型の変数 = 整数がひとつ入る dataという名前の箱を用意したようなもの
PowerPoint プレゼンテーション
2018/10/05 竹島研究室創成課題 第 2 回 C 言語演習 変数と演算 東京工科大学 加納徹 前回の復習 Hello, world! と表示するプログラム 1 #include 2 3 int main(void) { 4 printf("hello, world! n"); 5 return 0; 6 } 2 プログラム実行の流れ 1. 作業ディレクトリへの移動 $ cd
情報工学実験 C コンパイラ第 2 回説明資料 (2017 年度 ) 担当 : 笹倉 佐藤
情報工学実験 C コンパイラ第 2 回説明資料 (2017 年度 ) 担当 : 笹倉 佐藤 2017.12.7 前回の演習問題の解答例 1. 四則演算のできる計算機のプログラム ( 括弧も使える ) 2. 実数の扱える四則演算の計算機のプログラム ( 実数 も というより実数 が が正しかったです ) 3. 変数も扱える四則演算の計算機のプログラム ( 変数と実数が扱える ) 演習問題 1 で行うべきこと
RX ファミリ用 C/C++ コンパイラ V.1.00 Release 02 ご使用上のお願い RX ファミリ用 C/C++ コンパイラの使用上の注意事項 4 件を連絡します #pragma option 使用時の 1 または 2 バイトの整数型の関数戻り値に関する注意事項 (RXC#012) 共用
RX ファミリ用 C/C++ コンパイラ V.1.00 Release 02 ご使用上のお願い RX ファミリ用 C/C++ コンパイラの使用上の注意事項 4 件を連絡します #pragma option 使用時の 1 または 2 バイトの整数型の関数戻り値に関する注意事項 (RXC#012) 共用体型のローカル変数を文字列操作関数で操作する場合の注意事項 (RXC#013) 配列型構造体または共用体の配列型メンバから読み出した値を動的初期化に用いる場合の注意事項
<4D F736F F D20438CBE8CEA8D758DC F0939A82C282AB2E646F63>
C 言語講座第 2 回 作成 : ハルト 前回の復習基本的に main () の中カッコの中にプログラムを書く また 変数 ( int, float ) はC 言語では main() の中カッコの先頭で宣言する 1 画面へ出力 printf() 2 キーボードから入力 scanf() printf / scanf で整数を表示 / 入力 %d 小数を表示 / 入力 %f 3 整数を扱う int 型を使う
ファイル入出力
C プログラミング Ⅱ の基礎 とは ファイルへデータを書き込んだり ( 出力 ), ファイルからデータを読み込んだり ( 入力 ) する C 言語では キーボードからの入力 画面への出力と同じようなコードで 処理を実現できる プログラム 入力 出力 ファイル 出力 入力 2 入出力の基本 ストリーム プログラム上で様々な装置への入出力を行う機構様々な入出力装置を統一的な方法で扱うことができる ハードディスクなどではファイルデータによって入出力が行われる
デバッグの工夫
バグを減らす デバッグの工夫 ~ プログラミング実習で生き残るために ~ 2013/02/12 金森由博 よくあるプログラミングの風景 課題めんどくさい とりあえず適当に書くか エラーチェック めんどくさい あとまわし ちゃんと動くかわかんないけど全部書いちゃお ふー やっと全部書けた コンパイルしよ!? エラーメッセージの意味がわからん!! はぁ やっとコンパイルが通った 実行しよ えっ!? なんでセグメンテーション違反!?
スライド 1
数値解析 平成 30 年度前期第 10 週 [6 月 12 日 ] 静岡大学工学研究科機械工学専攻ロボット 計測情報分野創造科学技術大学院情報科学専攻 三浦憲二郎 講義アウトライン [6 月 12 日 ] 連立 1 次方程式の直接解法 ガウス消去法 ( 復習 ) 部分ピボット選択付きガウス消去法 連立 1 次方程式 連立 1 次方程式の重要性 非線形の問題は基本的には解けない. 非線形問題を線形化して解く.
Microsoft PowerPoint - prog04.ppt
プログラミング言語 2 第 04 回 (2007 年 05 月 14 日 ) 今日の配布物 片面の用紙 1 枚 今日の課題が書かれています 本日の出欠を兼ねています 1 今日やること http://www.tnlab.ice.uec.ac.jp/~s-okubo/class/language/ にアクセスすると 教材があります 2007 年 05 月 14 日分と書いてある部分が 本日の教材です 本日の内容
Java講座
~ 第 1 回 ~ 情報科学部コンピュータ科学科 2 年竹中優 プログラムを書く上で Hello world 基礎事項 演算子 構文 2 コメントアウト (//, /* */, /** */) をしよう! インデントをしよう! 変数などにはわかりやすい名前をつけよう! 要するに 他人が見て理解しやすいコードを書こうということです 3 1. Eclipse を起動 2. ファイル 新規 javaプロジェクト
PowerPoint Presentation
工学部 6 7 8 9 10 組 ( 奇数学籍番号 ) 担当 : 長谷川英之 情報処理演習 第 7 回 2010 年 11 月 18 日 1 今回のテーマ 1: ポインタ 変数に値を代入 = 記憶プログラムの記憶領域として使用されるものがメモリ ( パソコンの仕様書における 512 MB RAM などの記述はこのメモリの量 ) RAM は多数のコンデンサの集合体 : 電荷がたまっている (1)/ いない
Microsoft Word - Cプログラミング演習(10)
第 10 回 (6/25) 3. ファイルとその応用 (3) ファイルの更新 シーケンシャルファイルの更新 シーケンシャルファイルでは, 各レコードが可変長で連続して格納されており, その中の特定のレコードを変更することができない そこで一般的には, マスタファイルからデータを取り出し, 更新処理を行ったあとに新マスタファイルに書き込む 注 ) マスタファイル : 主ファイル, 基本ファイルと呼ばれるファイルで内容は比較的固定的であり,
PowerPoint プレゼンテーション
プログラミング応用演習 第 4 回再帰的構造体 プログラミングを 余談 : 教えることの難しさ 丁寧に説明しないと分かってもらえない 説明すると 小難しくなる学生が目指すべきところプログラム例を説明されて理解できる違うやり方でも良いので自力で解決できる おっけー 動けば良い という意識でプログラミング 正しく動くことのチェックは必要 解答例と自分のやり方との比較が勉強になる 今日のお題 再帰的構造体
C 言語の式と文 C 言語の文 ( 関数の呼び出し ) printf("hello, n"); 式 a a+4 a++ a = 7 関数名関数の引数セミコロン 3 < a "hello" printf("hello") 関数の引数は () で囲み, 中に式を書く. 文 ( 式文 ) は
C 言語復習 C 言語の基礎 来週もこの資料を持参してください C 言語, ソースファイルの作成, コンパイル, 実行 1 C 言語 C 言語プログラミングの手順 とは, 計算機を動かす手順を記述したもの. 計算機に命令を与えて動かすには を作成する ことになる. C 言語はプログラミング言語の 1 個 手続き型言語に分類される. C/C++ は非常に多くの場面で使われる言語 C++ は C 言語をオブジェクト指向に拡張したもの
Microsoft PowerPoint ppt
基礎演習 3 C 言語の基礎 (5) 第 05 回 (20 年 07 月 07 日 ) メモリとポインタの概念 ビットとバイト 計算機内部では データは2 進数で保存している 計算機は メモリにデータを蓄えている bit 1bit 0 もしくは 1 のどちらかを保存 byte 1byte 1bitが8つ集まっている byte が メモリの基本単位として使用される メモリとアドレス メモリは 1byte
Taro-ファイル処理(公開版).jtd
ファイル処理 0. 目次 1. はじめに 2. ファイル内容の表示 3. ファイル内容の複写 3. 1 文字単位 3. 2 行単位 4. 書式付き入出力 5. 文字配列への入出力 6. 課題 6. 1 課題 1 ( ファイル圧縮 復元 ) - 1 - 1. はじめに ファイル処理プログラムの形は次のようになる #include main() { FILE *fp1,*fp2; ファイルポインタの宣言
ガイダンス
情報科学 B 第 2 回変数 1 今日やること Java プログラムの書き方 変数とは何か? 2 Java プログラムの書き方 3 作業手順 Java 言語を用いてソースコードを記述する (Cpad エディタを使用 ) コンパイル (Cpad エディタを使用 ) 実行 (Cpad エディタを使用 ) エラーが出たらどうしたらよいか??? 4 書き方 これから作成する Hello.java 命令文 メソッドブロック
