トピックス:関数, 関数呼び出し, 引数, プログラミング, c
C プログラミング入門 (スライド資料とプログラム例)(Visual Studio 2019 を使用)(全15回)
https://www.kkaneko.jp/pro/adp/index.html
金子邦彦研究室ホームページ
https://www.kkaneko.jp/index.html
プログラム実行順
①
②
③
⑦
④
⑤
#include <stdio.h>
#pragma warning(disable:4996)
void bar( int len )
{
int i;
for (i=0; i<len; i++) {
printf("*");
}
printf("n");
return;
}
int main()
{
int len;
printf( "len=" );
scanf( "%d", &len );
bar( len );
return 0;
}
bar関数
main関数
⑥
関数呼び出し
戻り
main 関数の先頭行
がプログラムの始まり
main 関数内の return
がプログラムの終わり
10
プログラム実行順
bar( len );
main 関数
int main()
if( i < len )
printf( "*" );
i++;
No
Yes
printf("n");
return;
bar 関数
void bar( int len )
関数
呼び出し
戻り
printf( "len=" );
scanf( "%d", &len );
return 0;
i = 0;
11
データの流れ
bar 関数
void bar( int len )
main 関数
int main()
bar(len);
関数呼び出し
return;
戻り
型 仮引数
① len の値を,
bar 関数に渡す
②整数を受け取って,
「len」という名前で使う
③main 関数には,
何も返さない 17
データの流れ
len 5
sum 関数
void bar( int len )
main 関数
int main()
bar(len);
関数呼び出し
return;
戻り
型 仮引数
① len の値を,
bar 関数に渡す ②整数を受け取って,
「len」という名前で使う
③main 関数には,
何も返さない
len 5
main 関数内で宣言された len
len 5
仮引数で宣言された len
こちらは使われない
値がコピーされる
main 関数内で宣言された len
と,仮引数で宣言された len は
別のもの
18
関数呼び出しの流れ
main 関数
int main()
n = num_of_day(y, m);
関数呼び出し
戻り
num_of_day 関数
int num_of_day( int y, int m )
return num_days[m-1];
return 29; うるう年のとき
うるう年
でないとき
24
#include <stdio.h>
#pragma warning(disable:4996)
int num_of_day( int y, int m)
{
int num_days[] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
if ( ( m == 2 ) && (((y % 400) == 0) || (((y % 100) != 0) && ((y %4) == 0)))){
return 29;
}
else {
return num_days[m-1];
}
}
int main()
{
int y;
int m;
int n;
printf( "y=" );
scanf( "%d", &y );
printf( "m=" );
scanf( "%d", &m );
n = num_of_day(y, m);
printf( "number of days(%d) = %dn", m, n );
return 0;
}
プログラム実行順
①
②
③
④
⑤
⑥
⑥
⑦
⑧
⑨ 25
プログラム実行順
n = num_of_day(y, m);
main 関数
int main()
if( ・・・ )
return 29;
No
Yes
return num_days[m-
1];
num_of_day 関数
int num_of_day( int y, int m)
関数
呼び出し
戻り
26
データの流れ
① y と m の値を,
num_of_day 関数に渡す ②整数を2つを受け取って,
「y」 と 「m」という名前で使う
③main 関数に,num_days[m-1]
の値を返す
main 関数
int main()
n = num_of_day(y, m);
関数呼び出し
戻り
num_of_day 関数
int num_of_day( int y, int m )
return num_days[m-1];
return 29; うるう年のとき
うるう年
でないとき
③main 関数に,29 を返す
型 仮引数
27
データの流れ
① y と m の値を,
num_of_day 関数に渡す ②整数を2つを受け取って,
「y」 と 「m」という名前で使う
③main 関数に,num_days[m-1]
の値を返す
main 関数
int main()
n = num_of_day(y, m);
関数呼び出し
戻り
num_of_day 関数
int num_of_day( int y, int m )
return num_days[m-1];
return 29; うるう年のとき
うるう年
でないとき
③main 関数に,29 を返す
型 仮引数
y 2001
値がコピーされる
m 11
y 2001
m 11
y 2001
m 11
28
月初めの曜日
#include <stdio.h>
#pragma warning(disable:4996)
int zeller( int y, int m, int d )
{
if ( ( m == 1 ) || ( m == 2 ) ) {
y = y - 1;
m = m + 12;
}
return (y + (y/4) - (y/100) + (y/400) + ((13 * m + 8 ) / 5) + d) % 7;
}
int first_day( int y, int m )
{
return zeller( y, m, 1 );
}
int main()
{
int y;
int m;
int f;
printf( "y=" );
scanf( "%d", &y );
printf( "m=" );
scanf( "%d", &m );
f = first_day(y, m);
printf( "first days(%d, %d) = %dn", y, m, f);
return 0;
}
40