8. 関数の基礎#
Source code#
関数の単純な使用例(1): 引数の3倍+4を返す関数
#include <stdio.h>
void opening(void)
{
printf("program start\n");
}
int main(void)
{
opening();
return 0;
}
関数の引数の使用例(2): Yah!を出力する関数
#include <stdio.h>
int func1(int x)
{
int y;
y = 3 * x + 4;
return y;
}
int main(void)
{
int y;
y = func1(2);
printf("y = %d\n", y);
return 0;
}
出席が10回以上ならo,10回未満ならxを出力する関数
#include <stdio.h>
void syusseki_hantei(int kaisu)
{
if (kaisu >= 10)
{
printf("o\n");
}
else
{
printf("x\n");
}
}
int main(void)
{
int i;
printf("How many times were you present?\n");
scanf("%d", &i);
syusseki_hantei(i);
return 0;
}
Nを与えると,1からNまでの和を求めて返す関数
#include <stdio.h>
int tashizan(int n)
{
int i, t = 0;
for (i = 1; i <= n; i++)
t += i;
return t;
}
int main(void)
{
int total, n;
printf("Input N=");
scanf("%d", &n);
total = tashizan(n);
printf("Total=%d\n", total);
return 0;
}
Problem#
問題1. 「Hello」と出力する関数(引数なし,戻り値なし)を作り,main()
関数内から2回呼び出せ.参考:p.124
問題2. 度単位の角度を引数として渡すと,ラジアン単位に換算した戻り値を返す関数(引数double型,戻り値double型)を作り,main()
関数でその関数を使え.(\(\pi/180\*deg=rad\))
問題3. 2つの整数を渡すと,大きい方の数値を戻り値として返す関数を作り,main()
関数でその関数を使え.
問題4. サイズを示す数値(整数)と,表示する文字を引数として渡すと,引数で指定した文字とサイズの三角形を表示する関数を作り,main()
関数でその関数を使え.
問題5. 下のプログラムでは,同じような計算が何度も出てくる.計算の部分を関数化し,それを用いてプログラム記述をシンプルにせよ. (この計算式は並列抵抗値を求める)
#include <stdio.h>
int main(void)
{
double r1=11, r2=51, ra=30, rb=27, Ra=300, Rb=100;
double r3, rc, Rc;
r3 = (r1*r2)/(r1+r2);
rc = (ra*rb)/(ra+rb);
Rc = (Ra*Rb)/(Ra+Rb);
printf("%.1f %.1f %.1f\n",r3,rc,Rc);
return 0;
}
Solutions#
問題1#
「Hello」と出力する関数(引数なし,戻り値なし)を作り,main()関数内から2回呼び出せ.参考:p.124
#include <stdio.h>
void func_hello(void);
int main(void)
{
func_hello();
func_hello();
return 0;
}
void func_hello(void)
{
printf("Hello\n");
}
問題2#
度単位の角度を引数として渡すと,ラジアン単位に換算した戻り値を返す関数(引数double型,戻り値double型)を作り,main()関数でその関数を使え.(\(\pi/180\*deg=rad\))
#include <stdio.h>
double deg2rad(double a);
int main(void)
{
double ang = 120;
printf("%f deg = %f rad\n", ang, deg2rad(ang));
return 0;
}
double deg2rad(double a)
{
double b;
b = a * 3.1416 / 180;
return b;
}
問題3#
2つの整数を渡すと,大きい方の数値を戻り値として返す関数を作り,main()関数でその関数を使え.
#include <stdio.h>
int max_value(int a, int b);
int main(void)
{
printf("%d\n",max_value(50,100));
return 0;
}
int max_value(int a, int b)
{
if(a > b) return a;
else return b;
}
問題4#
サイズを示す数値(整数)と,表示する文字を引数として渡すと,引数で指定した文字とサイズの三角形を表示する関数を作り,main()関数でその関数を使え.
#include <stdio.h>
void DrawTriangle(int size, char ch);
int main(void){
DrawTriangle(3,'%');
DrawTriangle(5,'&');
return 0;
}
void DrawTriangle(int size, char ch){
int i,j;
for(i=0;i<size;i++){
for(j=0;j<=i;j++) printf("%c",ch);
printf("\n");
}
}
問題5#
下のプログラムでは,同じような計算が何度も出てくる.計算の部分を関数化し,それを用いてプログラム記述をシンプルにせよ. (この計算式は並列抵抗値を求める)
#include <stdio.h>
double fn(double a, double b)
{
return (a*b)/(a+b);
}
int main(void)
{
double r1=11, r2=51, ra=30, rb=27, Ra=300, Rb=100;
double r3, rc, Rc;
r3 = fn(r1,r2);
rc = fn(ra,rb);
Rc = fn(Ra,Rb);
printf("%.1f %.1f %.1f\n",r3,rc,Rc);
return 0;
}