1 / 17

コンピュータ基礎実験  第6 回

コンピュータ基礎実験  第6 回. コンピュータープログラミング( C 言語)(3) 1.関数と分割コンパイル (復習) 2.キーボード入力. 「関数と分割コンパイル」の復習. 「関数」:データ処理の「ひとまとまり」 「 f( a,b ) 」は、データ a,b に対する、決まった処理(計算や文字出力等)を表す 見通しのよさ、定型処理の繰り返し 「分割コンパイル」:巨大なプログラムを複数のファイルに分けて、個々でコンパイル 編集、変更、分担開発が容易 コンパイル時間の短縮. 分割コンパイルの手順. 「 ex-5-4-1.c 」をコンパイル

Download Presentation

コンピュータ基礎実験  第6 回

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. コンピュータ基礎実験 第6回 コンピュータープログラミング(C言語)(3) 1.関数と分割コンパイル (復習) 2.キーボード入力

  2. 「関数と分割コンパイル」の復習 • 「関数」:データ処理の「ひとまとまり」 • 「f(a,b)」は、データa,bに対する、決まった処理(計算や文字出力等)を表す • 見通しのよさ、定型処理の繰り返し • 「分割コンパイル」:巨大なプログラムを複数のファイルに分けて、個々でコンパイル • 編集、変更、分担開発が容易 • コンパイル時間の短縮

  3. 分割コンパイルの手順 • 「ex-5-4-1.c」をコンパイル $ cc -c ex-5-4-1.c ⇒ ex-5-4-1.o (オブジェクトファイル) • 「ex-5-4-2.c」をコンパイル $ cc -c ex-5-4-2.c ⇒ ex-5-4-2.o (オブジェクトファイル) • 「ex-5-4-1.o, ex-5-4-2.o」をリンク $ cc ex-5-4-1.o ex-5-4-2.o ⇒ a.exe (実行ファイル) ex-5-4-1.c ex-5-4-1.o コンパイル 「cc -c」 リンク 「cc 」 a.exe ex-5-4-2.c ex-5-4-1.o 実行ファイル ソース   ファイル オブジェクト ファイル

  4. 前回課題2:分割コンパイル:ex5-5-1.c, ex-5-5-2.c,ex5-5-3.c • (a,b)=(1,2)、(3,4)、(5,6)…(19,20)の10個の実数の組に対し、積a*b、商a/bを計算するプログラムを、「main()」(ex5-5-1.c)と「basiccalc()」(ex5-5-2.c)の2つのソースファイルに分けて、分割コンパイルせよ。 • 「ex5-5-2.c」をコピーして「ex5-5-3.c」というソースファイルを作り、これを改造して和、差を計算するプログラムを作れ

  5. 前回課題2回答例1/2:ex5-5-1.c, ex5-5-2.c 「printf()」は、このファイル内で使う ex5-5-1.c: ex5-5-2.c: void basiccalc(float a, float b); int main(void) { float a,b; a=1; b=2; basiccalc(a,b); a=3; b=4; basiccalc(a,b); a=5; b=6; basiccalc(a,b); a=17; b=18; basiccalc(a,b); a=19; b=20; basiccalc(a,b); return 0; } #include <stdio.h> void basiccalc(float a, float b) { float c,d; c=a*b; b=a/b; printf(”a=%f b=%f の時、”,a,b); printf(”積%f 商%f\n”,c,d); } このファイル内では定義されていない「basiccalc」 という関数を使うことを宣言

  6. 前回課題2回答例2/2:ex5-5-3.c ex5-5-3.c: #include <stdio.h> void basiccalc(float a, float b) { float c,d; c=a+b; b=a-b; printf(”a=%f b=%f の時、”,a,b); printf(”和%f 差%f\n”,c,d); }

  7. 前回分割コンパイルの手順 • 「ex-5-5-1.c」をコンパイル $ cc -c ex-5-5-1.c ⇒ ex-5-5-1.o • 「ex-5-5-2.c」をコンパイル $ cc -c ex-5-5-2.c ⇒ ex-5-4-2.o • 「ex-5-5-3.c」をコンパイル $ cc -c ex-5-5-3.c ⇒ ex-5-5-3.o • 組み合わせを変えてリンク • 「積」と「商」: $ cc ex-5-5-1.o ex-5-5-2.o • 「和」と「差」: $ cc ex-5-5-1.o ex-5-5-3.o

  8. キーボードからの入力 • コンピューターは、「キーボード」や「マウス」、「タブレット」などからデータを入力することができます • 例えば、「四則計算プログラム」でもキーボードから好きな数を入力して計算できると便利ですね • C言語では、「データの入力」も、「関数」(入出力関数)を利用して実現可能です

  9. キーボード入力関数「scanf()」 変数型宣言 int a; のあとに scanf(“%d”, &a); とすると,キーボードから入力した整数の値が aに入力される.

  10. ☜ 整数型の 変数の場合 • 2つ以上の数の場合も同様に inta, b, c, …, ; printf(“2つの整数? ”); scanf(“%d %d”, &a, &b); ・実数型なら float x; printf(“x= ”); scanf(“%f”, &x); 文字型変数 ☟ の場合 文字型なら char name[10]; printf(“%s”); scanf(“%s”, name); ☜ 実数型の 変数の場合 &は不要

  11. アドレス修飾演算子「&」(発展) • 「scanf(”%d”,&a)」では、変数「a」に「&」という記号が付いています。これは何でしょう? • 「scanf(”%d”,&a)」は、「キーボードから読み込んだデータを「a」という箱に記録してくれ」という命令です • 「a」に記録するには、「a」が何番目の箱かがわからなければなりません(今「a」に何が記録されているかはどうでもよい) • 「&a」は、「a」の番号(アドレス)の値になります アドレス(箱番号) 1 2 3 4 0 5 ‥‥ 値 「a」と名付けた a⇒ 39 &a ⇒ 3

  12. 課題6-1: ex1-4で用いたa,bをキーボードから入力するプログラムに書き替えてみよう. /* ex1-4 */ #include <stdio.h> main() { inta,b; a=11,b=3; printf("a=%d",a); printf(", b=%d\n",b); printf(" a+b=%d\n",a+b); printf(" a-b=%d\n",a-b); printf(" a*b=%d\n",a*b); printf(" a/b=%d",a/b); printf(" あまり %d\n",a%b); } printf("2つの整数?"); scanf("%d %d",&a, &b); のように書き替える • このファイル名は • ex6-1.cとして •  下さい.

  13. ■以下の課題に対するプログラムを作り,実行例を3つ以上示せ.■以下の課題に対するプログラムを作り,実行例を3つ以上示せ. 課題 6-2: 半径を与え,周囲の長さと面積を求めるプログラム (ex6-2.c)を作成せよ.ただし,円周率π= 3.14159265 とする. 課題6-3: 三角形の底辺の長さaと高さhを与え,面積を求める  プログラム(ex6-3.c)を作成せよ. 課題6-4: 質量m1の質点の置かれている座標をx1,質量m2の 質点の置かれている座標をx2とする.x1, m1, x2, m2を与え,   重心の座標xGを求めるプログラム(ex6-4.c)を作成せよ.   ただし,例としてx1= 0, m1=10, x2= 1, m2=1の場合を含めて   実行例を3つ以上示せ.

  14. ■ 発展課題 課題6-5: 三角形の3辺の長さa, b, cを与え,面積を求めるプロ グラム(ex6-5.c)を示せ.ただし,三角形の面積を与える 公式(Heronの公式)は既知とする. Heronの公式 ここで,平方根の計算は sqrt(…) とすればよい. 発展課題 6-6: 課題6-5において,平方根の計算を正確に 計算するプログラムを示せ.(ex6-6.c) [ヒント] プログラムの最初に #include <math.h> を加え, 変数もdouble a,b,c,… scanf(“%lf,…,&a, …) として下さい.

  15. 算術関数 • 三角関数や指数関数など、数学で使う関数はワープロやウエブブラウザなどの、よく使われる普通のソフトではめったに使われません • 算術関数を使いたい時には、その旨宣言する必要があります • 「prinf()」を使いたいときには「#include <stdio.h>」 • 「sin()」を使いたいときには「#include <math.h>」 • リンクのとき、算術関数を含むオブジェクトファイル(既に用意されている)をリンクする必要があります

  16. 算術関数のリンク • 算術関数の例 • sin(), cos(), asin(), exp(), sqrt(), pow() ⇒ WEB検索 • 算術関数のオブジェクトファイルをリンクする場合には「-lm」のオプションをつける • $ cc -lm hoge.c (単一ソース) • 「hoge.c」はsin()」を含む単一ソース • $ cc -lm hoge1.o hoge2.o (分割コンパイル) • 分割コンパイルの場合の最後のリンク時 • 既に準備されている「オブジェクトファイル」を「ライブラリ」と呼びます

  17. 実習結果のレポート • 3つのソースファイル「ex6-2.c」、「ex6-3.c」、「ex6-4.c」を添付ファイルにしてメールを送ってください。 • 宛先: muroo@cc.tuat.ac.jp • 件名:コンピューター基礎実験6 • 本文:感想および一言

More Related