Top >C言語 練習問題集

9. 関数を作る

練習問題 9 - 1

整数の 2 乗を計算する関数を作成しなさい1つの int 型引数を取り、結果を戻り値として返すこと

また、関数の動作を検証できるようにプログラムを作成しなさい


int pow2( int n )
{
    return ( n * n );
}

void main( void )
{
    printf( "3の2乗=%d\n", pow2( 3 ) );
}

練習問題 9 - 2

2つの整数の平均を計算する関数を作成しなさい2つの int 型引数を取り、結果を戻り値として返すこと

また、関数の動作を検証できるようにプログラムを作成しなさい


int average( int x, int y )
{
    return ( ( x + y ) / 2 );
}

void main( void )
{
    printf( "4と8の平均=%d\n", average( 4, 8 ) );
}

練習問題 9 - 3

2つの整数の大きい方を選ぶ関数を作成しなさい2つの int 型引数を取り、大きい方の数値を戻り値として返すこと

また、int 型の変数 x、y、z にそれぞれ数値を入力し、作成した関数を使用して最も大きい数値を表示するプログラムを作成しなさい


int MaxValue( int n1, int n2 )
{
    if( n1 > n2 )
        return n1;
    else
        return n2;
}

void main()
{
    int x, y, z;

    scanf( "%d", &x );
    scanf( "%d", &y );
    scanf( "%d", &z );

    printf( "\n%d", MaxValue( x, MaxValue( y, z ) ) );
}

練習問題 9 - 4

サイズを示す数値を引数とし、何等かの文字で例のような三角形を表示する関数を作成しなさい

その関数を使用してサイズ 3、4、5 の3つの三角形を表示するプログラムを作成しなさい


void DrawTriangle( int size )
{
    int i, j;

    for( i = 0 ; i < size ; i++ )
    {
        for( j = 0 ; j <= i ; j++ )
            printf( "$" );

        printf("\n");
    }
}

void main( void )
{
    DrawTriangle( 3 );
    printf("\n");
    DrawTriangle( 4 );
    printf("\n");
    DrawTriangle( 5 );
}

 

以下は、関数を再帰的に使用した例

void DrawTriangle( int size )
{
    int i;

    if( size > 1 )
        DrawTriangle( size - 1 );

    for( i = 0 ; i < size ; i++ )
        printf( "$" );

    printf("\n");
}

練習問題 9 - 5

サイズを示す数値と、表示する文字を引数とし、三角形を表示する関数を作成しなさい

その関数を使用して、サイズと文字の異なる3つの三角形を表示しなさい


void DrawTriangle2( int size, char ch )
{
    int i, j;

    for( i = 0 ; i < size ; i++ )
    {
        for( j = 0 ; j <= i ; j++ )
            printf( "%c", ch );

        printf("\n");
    }
}

void main( void )
{
    DrawTriangle2( 3, '%' );
    printf("\n");
    DrawTriangle2( 5, '#' );
    printf("\n");
    DrawTriangle2( 7, '@' );
}

練習問題 9 - 6

九九のひとつの段を表示する関数を作成しなさい何の段( 1 ~ 9 )であるかを引数とします

その関数を使用して、九九表を作成しなさい


void KukuColumn( int num )
{
    int i;

    for( i = 1 ; i <= 9 ; i++ )
        printf( "%2d ", num * i );

    printf("\n");
}

void main( void )
{
    int i;

    for( i = 1 ; i <= 9 ; i++ )
        KukuColumn( i );
}

練習問題 9 - 7

1文字を引数として、その文字がアルファベット小文字であれば大文字に変換して返す関数を作成しなさい(小文字でなければそのままを返す)

その関数を使用して、入力された文字列を大文字に変換して表示しなさい


char ToUpper( char ch )
{
    if'a' <= ch && ch <= 'z' )
        return ch - ( 'a' - 'A' );
    else
        return ch;
}

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

    scanf( "%s", str );

    for( i = 0 ; str[i] ; i++ )
        str[i] = ToUpper( str[i] );

    printf( "%s\n", str );
}

練習問題 9 - 8

ある数が素数かどうかを判定する関数を作成しなさい

この関数を使用して 10000 以上 10100 未満の素数をすべて表示するプログラムを作成しなさい


int IsPrimeNumber( int num )
{
    int i;

    if( num <= 3 )
        return 1;

    for( i = 2 ; i <= ( num / 2 ) ; i++ )
    {
        if( ( num % i ) == 0 )
            return 0;
    }

    return 1;
}

void main( void )
{
    int n;

    for( n = 10000 ; n < 10100 ; n++ )
    {
        if( IsPrimeNumber( n ) )
            printf( "%d ", n );
    }
}

練習問題 9 - 9

2つの int 型変数の値を交換する関数を作成しなさい引数に int 型へのポインタ変数を2つ取り、値を交換します

この関数を使用して、10 個の整数を入力し小さい順に並べ替えて表示するプログラムを作成しなさい


void swap( int* p1, int* p2 )
{
    int t = *p1;

    *p1 = *p2;
    *p2 = t;
}

void main()
{
    int values[10];
    int i, j;

    for( i = 0 ; i < 10 ; i++ )
        scanf( "%d", &values[i] );

    for( i = 0 ; i < 10 ; i++ )
    {
        for( j = i + 1 ; j < 10 ; j++ )
        {
            if( values[i] > values[j] )
                swap( values + i, values + j );
        }
    }

    for( i = 0 ; i < 10 ; i++ )
        printf( "%d ", values[i] );
}

練習問題 9 - 10

int 型整数の配列を小さい順に並べ替える関数を作成しなさい引数に int 型へのポインタ変数と配列の要素数を取ります

この関数を使用して、10 個の整数を入力し小さい順に並べ替えて表示するプログラムを作成しなさい


void swap( int* p1, int* p2 )
{
    int t = *p1;

    *p1 = *p2;
    *p2 = t;
}

void sort( int* array, int count )
{
    int i, j;

    for( i = 0 ; i < count ; i++ )
    {
        for( j = i + 1 ; j < count ; j++ )
        {
            if( array[i] > array[j] )
                swap( array + i, array + j );
        }
    }
}

void main()
{
    int values[10];
    int i;

    for( i = 0 ; i < 10 ; i++ )
        scanf( "%d", &values[i] );

    sort( values, 10 );

    for( i = 0 ; i < 10 ; i++ )
        printf( "%d ", values[i] );
}

練習問題 9 - 11

関数を再帰的に呼び出すことによって、フィボナッチ数列の n 番目の項を計算する関数を作成しなさい

最初の2つの項、0 番目を 0、1 番目を 1 とします

この関数を使用して、11 番目から 20 番目までの項を表示するプログラムを作成しなさい


int fibonacci( int n )
{
    if( n == 0 )
        return 0;
    else if( n == 1 )
        return 1;
    else
        return fibonacci( n - 2 ) + fibonacci( n - 1 );
}

void main()
{
    int n;

    for( n = 11 ; n <= 20 ; n++ )
        printf( "%d ", fibonacci( n ) );
}
PAPER BOWL
NEZEN