17
ココココココココココ ココココココココココココココC ココ(3) ココココココココココ 1. コココ () コココココココ 2.

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

Embed Size (px)

DESCRIPTION

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

Citation preview

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

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

コンピュータープログラミング( C 言語)(3)

1.関数と分割コンパイル(復習)

2.キーボード入力

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

「関数と分割コンパイル」の復習

「関数」:データ処理の「ひとまとまり」「 f(a,b) 」は、データ a,b に対する、決まった

処理(計算や文字出力等)を表す見通しのよさ、定型処理の繰り返し

「分割コンパイル」:巨大なプログラムを複数のファイルに分けて、個々でコンパイル編集、変更、分担開発が容易コンパイル時間の短縮

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

分割コンパイルの手順• 「 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 」

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

前回課題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 」というソースファイルを作り、これを改造して和、差を計算するプログラムを作れ

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

前回課題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() 」は、このファイル内で使う

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

前回課題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:

Page 7: コンピュータ基礎実験  第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

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

キーボードからの入力コンピューターは、「キーボード」や

「マウス」、「タブレット」などからデータを入力することができます

例えば、「四則計算プログラム」でもキーボードから好きな数を入力して計算できると便利ですね

C 言語では、「データの入力」も、「関数」(入出力関数)を利用して実現可能です

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

キーボード入力関数「 scanf() 」

変数型宣言 int a;

のあとに scanf(“%d”, &a);

とすると,キーボードから入力した整数の値がa に入力される.

9

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

• 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

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

アドレス修飾演算子「 & 」(発展)「 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⇒

‥‥

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

課題 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

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

課題 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

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

■ 発展課題課題 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

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

算術関数三角関数や指数関数など、数学で使う関数はワー

プロやウエブブラウザなどの、よく使われる普通のソフトではめったに使われません

算術関数を使いたい時には、その旨宣言する必要があります「 prinf() 」を使いたいときには「 #include <stdio.h> 」「 sin() 」を使いたいときには「 #include <math.h> 」

リンクのとき、算術関数を含むオブジェクトファイル(既に用意されている)をリンクする必要があります

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

算術関数のリンク算術関数の例

sin(), cos(), asin(), exp(), sqrt(), pow() WEB⇒ 検索算術関数のオブジェクトファイルをリンクす

る場合には「 -lm 」のオプションをつける $ cc -lm hoge.c ( 単一ソース)

「 hoge.c 」は sin() 」を含む単一ソース  $ cc -lm hoge1.o hoge2.o (分割コンパイル)

分割コンパイルの場合の最後のリンク時既に準備されている「オブジェクトファイル」

を「ライブラリ」と呼びます

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

実習結果のレポート• 3つのソースファイル「 ex6-2.c 」、

「 ex6-3.c 」、「 ex6-4.c 」を添付ファイルにしてメールを送ってください。

• 宛先: [email protected]• 件名:コンピューター基礎実験6• 本文:感想および一言

17