プログラミング基礎演習

鹿児島大学
プログラミング基礎演習
第7回
関数(1) 定義と引用
半田利弘
鹿児島大学 大学院理工学研究科 物理・宇宙専攻
理化学研究所
関数とは…
▶ 数学:与えた値から対応する1つの値を示す
■
例:sinq, log x, ex, f(x)
▶ 英語:関数=function=機能
▶ C言語ではどちらの意味も持つ
■
■
■
■
例: sin(x), log(x), exp(x)
例: toupper(cc), isalpha(cc)
例: printf("Hellow, world.\n"), putchar(cc)
例:getchar(), fgets(stdin,buffer,256)
理化学研究所
関数の自作
▶ 自分で好きな関数が作れる
▶ 繰り返し使う部分は関数にしたらよさそう
理化学研究所
割引価格表示プログラム
 List8-1(教科書p.182)
#include <stdio.h>
int main(void);
int main(void)
{
「割引価格を求める」
float xx,yy;
xx=10000.0;
yy=xx*0.7;
printf("通常価格%.0f円のところ",xx);
printf("今回は特別に%.0f円でご提供\n",yy);
return(0);
}
理化学研究所
割引価格表示プログラム
 List8-2(教科書p.183)
#include <stdio.h>
float calc(float xx);
int main(void);
float calc(float xx)
/* 割引価格を求める */
{
float yy;
yy=xx*0.7;
return(yy);
}
「割引価格を求める」
int main(void)
{
float xx,yy;
xx=10000.0;
yy=calc(xx);
printf("通常価格%.0f円のところ",xx);
printf("今回は特別に%.0f円でご提供\n",yy);
return(0);
}
理化学研究所
「割引価格を求める」
関数の要素
関数名とその型
 自作の関数calc
引数とその型宣言
float calc(float xx)
/* 割引価格を求める */
{
float yy;
yy=xx*0.7;
return(yy);
}
理化学研究所
戻り値の定義
関数の引用
▶ 自作関数の引用
int main(void)
関数の呼び出し
{
float xx,yy;
xx=10000.0;
yy=calc(xx);
printf("通常価格%.0f円のところ",xx);
printf("今回は特別に%.0f円でご提供\n",yy);
return(0);
}
戻り値の代入
理化学研究所
プログラムの階層構造化
▶ まとまった部分を1つの塊にする
■
内容を簡単に表現できれば、それが単位
▶ List8-1では
■
「割引価格を求める」がひとかたまり
▶ 関数の中身
■
何が起こっているのかは知らなくても使える
 例:printfが実際は何をしているのかの詳細
 例:三角関数の値の計算方法
理化学研究所
繰り返しがあれば関数に
 List8-3改(p.189)
#include <stdio.h>
void print_graph(int xx);
int main(void);
void print_graph(int xx)
/* 棒グラフを*で書く */
{
int ii;
for(ii=0;ii<xx;ii++) {
printf("*");
}
printf("\n");
return;
}
int main(void)
{
int xx;
xx=10;
print_graph(xx);
return(0);
}
理化学研究所
繰り返しがあれば関数に
 List8-3改2
#include <stdio.h>
void print_graph(int xx);
int main(void);
void print_graph(int xx)
/* 棒グラフを*で書く */
{
int ii;
for(ii=0;ii<xx;ii++) {
printf("*");
}
printf("\n");
return;
}
呼び出し時の引数には定数も可
int main(void)
{
int xx;
xx=10;
print_graph(xx);
print_graph(5);
return(0);
}
理化学研究所
関数のプロトタイプ宣言
▶ どんな関数を使うかひな形を示す
#include <stdio.h>
void print_graph(int xx);
int main(void);
void print_graph(int xx)
/* 棒グラフを*で書く */
{
int ii;
for(ii=0;ii<xx;ii++) {
printf("*");
}
printf("\n");
return;
}
ひな形を示す
理化学研究所
標準関数のプロトタイプ宣言
▶ それをやっているのが<stdio.h>
■
■
■
■
■
使う標準関数の種類ごとに異なるheaderファイル
入出力関連 stdio.h
それ以外の標準 stdlib.h
数学関連 math.h
など、他にもいろいろ。
▶ #include <ファイル名>
■
■
コンパイルをはじめる前に、
指定されたファイルの内容をここにコピー
理化学研究所