Upload
robert-harrell
View
25
Download
0
Embed Size (px)
DESCRIPTION
コンピュータ基礎実験 第6 回. コンピュータープログラミング( C 言語)(3) 1.関数と分割コンパイル (復習) 2.キーボード入力. 「関数と分割コンパイル」の復習. 「関数」:データ処理の「ひとまとまり」 「 f( a,b ) 」は、データ a,b に対する、決まった処理(計算や文字出力等)を表す 見通しのよさ、定型処理の繰り返し 「分割コンパイル」:巨大なプログラムを複数のファイルに分けて、個々でコンパイル 編集、変更、分担開発が容易 コンパイル時間の短縮. 分割コンパイルの手順. 「 ex-5-4-1.c 」をコンパイル - PowerPoint PPT Presentation
Citation preview
コンピュータ基礎実験 第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 ⇒ (実行ファイル)
3
ex-5-4-1.c
ex-5-4-2.c
ex-5-4-1.o
ex-5-4-1.o
ソース ファイル
オブジェクト ファイル
a.exe
実行ファイル
コンパイル 「 cc -c 」
リンク 「 cc 」
前回課題2:分割コンパイル :ex5-5-1.c, ex-5-5-2.c,ex5-5-3.c
4
(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 」というソースファイルを作り、これを改造して和、差を計算するプログラムを作れ
前回課題2回答例 1/2 :ex5-5-1.c, ex5-5-2.c
5
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);}
ex5-5-1.c: ex5-5-2.c:
このファイル内では定義されていない「 basiccalc 」という関数を使うことを宣言
「 printf() 」は、このファイル内で使う
前回課題2回答例 2/2 :ex5-5-3.c
6
#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);}
ex5-5-3.c:
前回分割コンパイルの手順• 「 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 」の番号(アドレス)の値になります
325 2441 -523 39 812 -36650 1 2 3 4 5アドレス(箱番号)
値
「 a 」と名付けたa 39⇒&a 3⇒
‥‥
課題 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);
}
このファイル名は ex6-1.c として 下さい.
printf(" 2つの整数? "); scanf("%d %d",&a, &b);
のように書き替える
12
課題 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 つ以上示せ.
■ 以下の課題に対するプログラムを作り,実行例を 3 つ以上示せ.
13
■ 発展課題課題 6-5: 三角形の3辺の長さ a, b, c を与え,面積を求めるプロ グラム ( ex6-5.c ) を示せ.ただし,三角形の面積を与える 公式 (Heron の公式 ) は既知とする. Heron の公式 ここで,平方根の計算は 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