知能情報工学演習 I 第 12 回( C 言語第6 回) 課題の回答 岩村雅一

Slides:



Advertisements
Similar presentations
C 言語講座第 5 回 構造体. 構造体とは ... 異なる型の値をまとめて新しい型とする 機能がある . つまり , 複数の変数を 1 つのまとまりにできる . 配列と違って同じ型でデータをまとめるのではな く違った型のデータをまとめられる .
Advertisements

第 2 章 数値の入力と変数 scanf と変数をやります 第 2 章 数値の入力と変数 1. 以下のプログラムを実行してみよう  C 言語では文の最後に「 ; 」(セミコロン)が付きます 第 2 章 数値の入力と変数 2 #include int main() { int x; x = 3; printf("x.
オブジェクト指向言語・ オブジェクト指向言語演習 中間試験回答例. Jan. 12, 2005 情報処理技術基礎演習 II 2 オブジェクト指向言語 中間試験解説 1  (1) 円柱の体積(円柱の体積 = 底面の円の面積 x 高さ) を求めるプログラムを作成しなさい。ただし、出力結果は、入 力した底面の円の半径.
情報・知能工学系 山本一公 プログラミング演習Ⅱ 第3回 配列(1) 情報・知能工学系 山本一公
コンピュータープログラミング(C言語)(3) 1.関数と分割コンパイル (復習) 2.キーボード入力
情報基礎演習B 後半第5回 担当 岩村 TA 谷本君.
第2章 数値の入力と変数 scanfと変数をやります.
岩村雅一 知能情報工学演習I 第9回(C言語第3回) 岩村雅一
知能情報工学演習I 第7回( C言語第1回) 課題の回答
C言語講座 第4回 ポインタ.
第6章 2重ループ&配列 2重ループと配列をやります.
演習問題の答え #include #include #define NUM 5 typedef struct { // 構造体の定義 float shincho; // 身長 float taiju; // 体重 } shintai; void hyouji(shintai.
岩村雅一 知能情報工学演習I 第8回(後半第2回) 岩村雅一
C言語講座 第3回 ポインタ、配列.
岩村雅一 知能情報工学演習I 第11回(後半第5回) 岩村雅一
関数と配列とポインタ 1次元配列 2次元配列 配列を使って結果を返す 演習問題
関数の定義.
第10回関数 Ⅱ (ローカル変数とスコープ).
第10章 これはかなり大変な事項!! ~ポインタ~
知能情報工学演習I 第9回( C言語第3回) 課題の回答
岩村雅一 知能情報工学演習I 第9回(後半第3回) 岩村雅一
知能情報工学演習I 第12回(後半第6回) 課題の回答
indentについて forやifの「中身」を右に寄せる. forやifの「外枠」は右に寄せない. int x; x = 3;
知能情報工学演習I 第9回(後半第3回) 課題の回答
岩村雅一 知能情報工学演習I 第10回(後半第4回) 岩村雅一
復習 前回の関数のまとめ(1) 関数はmain()関数または他の関数から呼び出されて実行される.
知能情報工学演習I 第8回( C言語第2回) 課題の回答
知能情報工学演習I 第7回( C言語第1回) 課題の回答
関数の再帰呼び出しとは ハノイの塔 リダイレクト レポート課題
岩村雅一 知能情報工学演習I 第11回(後半第5回) 岩村雅一
岩村雅一 知能情報工学演習I 第9回(後半第3回) 岩村雅一
岩村雅一 知能情報工学演習I 第9回(C言語第3回) 岩村雅一
岩村雅一 知能情報工学演習I 第12回(C言語第6回) 岩村雅一
演習07-0 “Hello\n” “World!\n”と
Cプログラミング演習資料.
岩村雅一 知能情報工学演習I 第9回(後半第3回) 岩村雅一
プログラミング序論演習.
知能情報工学演習I 第7回(後半第1回) 課題の回答
知能情報工学演習I 第11回( C言語第5回) 課題の回答
情報基礎演習B 後半第2回 担当 岩村 TA 谷本君.
ループだよ!難しいよ! 第5章 while(ループ);.
知能情報工学演習I 第8回(後半第2回) 課題の回答
オブジェクト指向 プログラミング 第四回 知能情報学部 新田直也.
演習00-0 “Hello\n” “World!\n”と
岩村雅一 知能情報工学演習I 第12回(後半第6回) 岩村雅一
知能情報工学演習I 第12回( C言語第6回) 課題の回答
岩村雅一 知能情報工学演習I 第10回(後半第4回) 岩村雅一
高度プログラミング演習 (07).
プログラミング言語論 第九回 理工学部 情報システム工学科 新田直也.
関数と再帰 教科書13章 電子1(木曜クラス) 2005/06/22(Thu.).
プログラミング演習I 2003年6月11日(第9回) 木村巌.
モバイルプログラミング第2回 C言語の基礎 (1).
オブジェクト指向言語論 第七回 知能情報学部 新田直也.
プログラミング言語論 第九回 理工学部 情報システム工学科 新田直也.
オブジェクト指向言語論 第七回 知能情報学部 新田直也.
第10回 関数と再帰.
湘南工科大学 2013年10月22日 情報理論2 湘南工科大学情報工学科 准教授 小林 学.
プログラミング序論演習.
第2章 数値の入力と変数 scanfと変数をやります.
知能情報工学演習I 第11回(後半第5回) 課題の回答
知能情報工学演習I 第9回(後半第3回) 課題の回答
計算技術研究会 第5回 C言語勉強会 関数(function)を使う
岩村雅一 知能情報工学演習I 第13回(後半第7回) 岩村雅一
知能情報工学演習I 第10回( C言語第4回) 課題の回答
プログラミング演習I 補講用課題
岩村雅一 知能情報工学演習I 第7回(後半第1回) 岩村雅一
第1章 文字の表示と計算 printfと演算子をやります 第1章 文字の表示と計算.
第1章 文字の表示と計算 printfと演算子をやります.
= 55 課題6-1 #define _CRT_SECURE_NO_WARNINGS
岩村雅一 知能情報工学演習I 第9回(C言語第3回) 岩村雅一
Presentation transcript:

知能情報工学演習 I 第 12 回( C 言語第6 回) 課題の回答 岩村雅一

前回の課題 1  球の体積を計算するマ クロを作り、球の半径 ( 小数とする ) を入力した とき、球の体積を返す プログラムを作成しな さい。 #include #define V(r) 4.0/3.0*M_PI*r*r*r int main(void){ float i; printf(" 半径を小数で入力: "); scanf("%f",&i); printf(" 半径 %f の球の体積は %f です。 \n",i,V(i)); return(0); } マクロ中の r を i に置き換える マクロ中の r を i に置き換える

課題1で実際にあった間違い(そ の1) 間違いではないが、ファイル名が日本語なの は文字化けして大変なのでやめてください 値を 2 回入力させられる scanf("%f\n",&a); 答えが違う #define kyu(r) 4/3*(M_PI)*r*r*r #define seki(r) 3.0/4.0*M_PI*r*r*r; マクロを作っていない  関数を作っている  main 関数で計算

課題1で実際にあった間違い(そ の2) コンパイルが通らない(その1) printf(" 球の体積は %f です \n",(4*M_PI*(r^3))/3); コンパイルが通らない(その2)  LaTeX の命令 (\begin{verbatim} など ) が入ってい る(先週からずっと) 間違いではないが、 M_PI を改めて定義し ている人がいる。 /usr/include/math.h の中 に M_PI が定義されているので、 #include とすれば OK  #define M_PI

コメント 課題1のほうで gcc の後に -lm をつけなくてもコ ンパイルできたのですが、なぜでしょうか?  math.h に書いてあるもののうち、 M_PI を使っている だけで、関数を使っていないから マクロが #define v(r) 4*M_PL*r*r*r/3 だと error: ‘ M_PL ’ undeclared と表示されてコンパイルできませんでした  M_PL ではなく、 M_PI です

前回の課題 2  階乗 (1 から n までの自然数の積 ) を計算する関数 を作り、順列と組み合わせを表示しなさい 順列 組み合わせ

前回の課題の回答例1 (for 文を使った場合 ) #include /* 階乗を計算する関数 */ int fact(int x) { int i, fact = 1; for(i = 2; i <= x; i++) { fact *= i; } return(fact); } int main (void){ int n, r, p, c; printf("n: "); scanf("%d", &n); printf("r: "); scanf("%d", &r); p = fact(n) / fact(n-r); c = fact(n) / fact(n-r) / fact(r); printf("nPr = %d\n", p); printf("nCr = %d\n", c); return(0); } fact = 1* 2* 3* 4*… 0! や 1! も ok

前回の課題の回答例2 (関数の再帰的呼び出し) #include /* 階乗を計算する関数 */ int fact(int x) { if (x==1 || x==0) { return(1); } else { return(x*fact(x-1)); } int main (void){ int n, r, p, c; printf("n: "); scanf("%d", &n); printf("r: "); scanf("%d", &r); p = fact(n) / fact(n-r); c = fact(n) / fact(n-r) / fact(r); printf("nPr = %d\n", p); printf("nCr = %d\n", c); return(0); } main 関数は説明 のために消去

/* 階乗を計算する関数 */ int fact(int x) { if (x==1 || x==0) { return(1); } else { return(x*fact(x-1)); } #include 前回の課題の回答例2 (関数の再帰的呼び出し) /* 階乗を計算する関数 */ int fact(int 2) { if (x==1 || x==0) { return(1); } else { return(2*fact(2-1)); } /* 階乗を計算する関数 */ int fact(int x) { if (x==1 || x==0) { return(1); } else { return(x*fact(x-1)); } fact(1) = /* 階乗を計算する関数 */ int fact(int 1) { if (x==1 || x==0) { return(1); } else { return(1*fact(1-1)); } 1 = 例: fact(2) の場 合 fact(1) の計算

#include /* 階乗を計算する関数 */ int fact(int x) { if (x==1 || x==0) { return(1); } else { return(x*fact(x-1)); } 前回の課題の回答例2 (関数の再帰的呼び出し)

コメント・その1 課題二にかんして質問です。一からNま での自然数の積を階乗とするなら、今回 はゼロの階乗が一という定義は使いませ んよね?  使いませんが、関数の再利用性を考えると、 0 にも対応した関数を作成しておく方がいい でしょう。 文字化けに苦労しました。テフのソース の文字コードは何だったらいいんでしょ う。

コメント・その2 pdf が見付からなくて、かなり苦戦してしま いました …… 。  ごめんなさい、サーバートラブルに加えて、あの 後すぐに出張だったのでアップロードが遅くなり ました 課題の 2 に関しては冗長になる気がして順列 と組合せをまとめてしまったのですが、別々 の入力で異なる変数を取った方が良かったの でしょうか。  一緒の方が確かめるのが楽でいいです