9.
関数を作る:用例
関数を作る:用例
指定された数の階乗を計算する関数の例です。
#include <stdio.h>
int factorial( int n )
{
int f = 1;
while( n > 1 )
f *= n--;
return f;
}
main( )
{
int x;
scanf( "%d", &x );
printf( "%d の階乗は %d です\n", x, factorial( x ) );
}
- 関数factorialが階乗を計算する関数です。
- 階乗を計算する数を引数、計算結果を戻り値としています。
以下は、関数を再帰的に使用した例です。
int factorial( int n )
{
if( n > 0 )
return factorial( n - 1 ) * n;
else
return 1;
}
- 引数nが1より大きい場合には、n-1の階乗にnを掛けた結果を返します。
- nが1以下の場合には1を返します。
指定された幅と高さの四角形を表示します
#include <stdio.h>
void PrintRect( int width, int height )
{
int i, j;
for( i = 0 ; i < height ; i++ ){
for( j = 0 ; j < width ; j++ )
printf( "*" );
printf( "\n" );
}
}
main( )
{
int w, h;
printf( "幅は?\n" );
scanf( "%d", &w );
printf( "高さは?\n" );
scanf( "%d", &h );
PrintRect( w, h );
}
-
‘*’によって、指定された幅と高さの四角形を表示します。
- PrintRect関数は、幅と高さを引数としています。戻り値はありません。
以下は、関数を再帰的に使用した例です。
void PrintRect( int width, int height )
{
int i;
if( height < 1 )
return;
PrintRect( width, height - 1 );
for( i = 0 ; i < width ; i++ )
printf( "*" );
printf( "\n" );
}
- 高さが1小さい四角形を描いて、それに1行加えます。
2つの数値を小さい順に並べ替える関数です。
#include <stdio.h>
void sort2( int* pNum1, int* pNum2 )
{
if( *pNum1 > *pNum2 ){
int t = *pNum1;
*pNum1 = *pNum2;
*pNum2 = t;
}
}
void main( void )
{
int n1, n2;
scanf( "%d", &n1 );
scanf( "%d", &n2 );
sort2( &n1, &n2 );
printf( "%d, %d\n", n1, n2 );
}
2つの文字列を連結した、新しい文字列を作成する関数です。
#include <stdio.h>
int ConnectString( char* pDest, int nSize, char* pSrc1, char* pSrc2 )
{
int n = 0;
if( nSize > 0 ){
while( *pSrc1 && n < ( nSize - 1 ) )
pDest[n++] = *pSrc1++;
while( *pSrc2 && n < ( nSize - 1 ) )
pDest[n++] = *pSrc2++;
pDest[n] = 0;
}
return n;
}
void main( void )
{
char szDest[100];
char szSrc1[100];
char szSrc2[100];
scanf( "%s", szSrc1 );
scanf( "%s", szSrc2 );
ConnectString( szDest, 100, szSrc1, szSrc2 );
printf( "%s\n", szDest );
}
- pDest の要素数である nSize を引数にすることによって、連結した文字列の要素数が、pDest の要素数を超える場合に対応しています。
- ConnectString 関数は、連結した文字列の文字数を戻り値としていますが、呼び出し側では使用していません。
文字列が数字だけであるかどうかを調べる関数です。
#include <stdio.h>
int IsNumber( char pText[] )
{
int i;
for( i = 0 ; pText[i] ; i++ ){
if( pText[i] < '0' || '9' < pText[i] )
return 0;
}
return i;
}
void main( void )
{
char str[200];
scanf( "%s", str );
if( IsNumber( str ) )
printf( "数字です\n");
else
printf( "数字ではありません\n");
}
- 文字列を先頭から調べて、数字以外の文字が見つかったら 0 を返します。
- 調べる文字列が空(文字数 0)であった場合にも 0 を返します。文字列が 1 文字以上の数字である場合に 0 以外を返します。
- 引数の“char pText[] ”は“char* pText”としてもかまいません。