第9回:関数(4)


先週の演習のこたえ

(1) 変数 a と b の値を,入れ替える関数を作成せよ.
#include <stdio.h>

void swap(int *a, int *b)
{
    int ab;

    ab = *a;
    *a = *b;
    *b = ab;
}

void main()
{
    int a, b;

    printf("a="); scanf("%d", &a);
    printf("b="); scanf("%d", &b);

    printf("aの値とbの値を入れ替えます\n");

    swap(&a, &b);

    printf("a=%d\n", a);
    printf("b=%d\n", b);
}

(2) 配列の要素の和を求める関数を作成せよ.

#include <stdio.h>

int suma(int *a, int n)
{
    int i, wa=0;

    for(i=0; i<n; i++){
        wa += a[i];
    }

    return wa;
}

void main()
{
    int n=5;
    int a[]={1,2,3,4,5};

    printf("配列の要素%d個の和は,%d です\n", n, suma(a,n));

}

(3) ある文字列を入力したとき,文字数を数える関数を利用して,文字を逆に並べ替える関数を作成せよ.

文字数を数える関数:

#include <stdio.h>

int moji_nagasa(char *str)
{
    int i;

    for(i = 0; str[i] != 0x00; i++);

    return i;
}

void main()
{
    char str[128];
    int  i;

    printf("文字列を入力してください:");
    scanf("%s", str);
    printf("入力された文字列は,%sです.", str);
    printf("文字数は,%dです.", moji_nagasa(str));
}


演習

入力されたアルファベットの小文字の文字列をabc順に並べ替えるプログラムを,先週作成した関数を応用して作成せよ.

手順:

   文字数を数える関数を用いて,文字数を数える

   二つの文字を入れ替えるswapという関数を作る

   swap関数をもちいて,配列の並べ替えをするsortという関数を作る

(ヒント)関数の中から,すでに定義してある別の関数を呼び出して使うことができる.