コンピュータ基礎実験 第6回 コンピュータープログラミング (C言語)(3) 1.関数と分割コンパイル (復習) 2.キーボード入力 「関数と分割コンパイル」の復習 「関数」:データ処理の「ひとまとまり」 「f(a,b)」は、データa,bに対する、決まった処理(計 算や文字出力等)を表す 見通しのよさ、定型処理の繰り返し 「分割コンパイル」:巨大なプログラムを複数 のファイルに分けて、個々でコンパイル 編集、変更、分担開発が容易 コンパイル時間の短縮 分割コンパイルの手順 • 「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」 ex-5-4-2.c ソース ファイル リンク 「cc 」 ex-5-4-1.o オブジェクト ファイル a.exe 実行ファイル 3 前回課題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」というソー スファイルを作り、これを改造して和、差を計 算するプログラムを作れ 4 前回課題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); #include <stdio.h> int main(void) このファイル内では定義さ { float a,b; れていない「basiccalc」 void basiccalc(float a, float b) { float c,d; という関数を使うことを宣言 a=1; b=2; basiccalc(a,b); a=3; b=4; basiccalc(a,b); a=5; b=6; basiccalc(a,b); c=a*b; b=a/b; printf(”a=%f b=%f の時、”,a,b); printf(”積%f 商%f\n”,c,d); } a=17; b=18; basiccalc(a,b); a=19; b=20; basiccalc(a,b); return 0; } 5 前回課題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); } 6 前回分割コンパイルの手順 • 「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-5-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 7 キーボードからの入力 コンピューターは、「キーボード」や「マウス」、 「タブレット」などからデータを入力することが できます 例えば、「四則計算プログラム」でもキーボー ドから好きな数を入力して計算できると便利 ですね C言語では、「データの入力」も、「関数」(入出 力関数)を利用して実現可能です キーボード入力関数「scanf()」 変数型宣言 int a; のあとに scanf(“%d”, &a); とすると,キーボードから入力した整数の値が aに入力される. 9 • 2つ以上の数の場合も同様に int a, b, c, …, ; ☜ 整数型の 変数の場合 printf(“2つの整数? ”); scanf(“%d %d”, &a, &b); ・ 実数型なら ☜ 実数型の 変数の場合 float x; printf(“x= ”); scanf(“%f”, &x); 文字型変数 ☟ の場合 文字型なら char name[10]; printf(“%s”); scanf(“%s”, name); & は不要 10 アドレス修飾演算子「&」(発展) 「scanf(”%d”,&a)」では、変数「a」に「&」という記号 が付いています。これは何でしょう? 「scanf(”%d”,&a)」は、「キーボードから読み込んだ データを「a」という箱に記録してくれ」という命令です 「a」に記録するには、「a」が何番目の箱かがわからな ければなりません(今「a」に何が記録されているかは どうでもよい) 「&a」は、「a」の番号(アドレス)の値になります アドレス(箱番号) 0 値 325 1 2441 2 3 -523 39 4 812 「a」と名付けた a ⇒ 39 &a ⇒ 3 5 -3665 ‥‥ 課題6-1: ex1-4で用いたa,bをキーボードから入力するプログラムに 書き替えてみよう. /* ex1-4 */ #include <stdio.h> main() { int a,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 として 下さい. } 12 ■ 以下の課題に対するプログラムを作り,実行例を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つ以上示せ. 13 ■ 発展課題 課題 6-5: 三角形の3辺の長さa, b, cを与え,面積を求めるプロ グラム( ex6-5.c )を示せ.ただし,三角形の面積を与える 公式(Heronの公式)は既知とする. Heronの公式 S = s(s - a)(s - b)(s - c) ここで,平方根の計算は where 2s = a + b + c sqrt(…) とすればよい. [ヒント] プログラムの最初に #include <math.h> を加えること 発展課題 6-6: 課題 6-5において,平方根の計算を正確に 計算するプログラムを示せ.( ex6-6.c ) [ヒント]変数をdouble a,b,c,… scanf(“%lf,…,&a, …) 、 printf(“%1.15f…”,a)として下さい. 14 算術関数 三角関数や指数関数など、数学で使う関数 はワープロやウエブブラウザなどの、よく使わ れる普通のソフトではめったに使われません 算術関数を使いたい時には、その旨宣言す る必要があります 「prinf()」を使いたいときには「#include <stdio.h>」 「sin()」を使いたいときには「#include <math.h>」 リンクのとき、算術関数を含むオブジェクト ファイル(既に用意されている)をリンクする必 要があります 算術関数のリンク 算術関数の例 sin(), cos(), asin(), exp(), sqrt(), pow() ⇒ WEB検索 算術関数のオブジェクトファイルをリンクする 場合には「-lm」のオプションをつける $ cc -lm hoge.c (単一ソース) 「hoge.c」はsin()」を含む単一ソース $ cc -lm hoge1.o hoge2.o (分割コンパイル) 分割コンパイルの場合の最後のリンク時 既に準備されている「オブジェクトファイル」を「ラ イブラリ」と呼びます 実習結果のレポート • 3つのソースファイル「ex6-2.c」、「ex6-3.c」、 「ex6-4.c」を添付ファイルにしてメールを送って ください。 • 宛先: [email protected] • 件名:コンピューター基礎実験6 • 本文:感想および一言 17
© Copyright 2024 ExpyDoc