8. Basics of functions

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;
}

Last updated