演習00-0 “Hello\n” “World!\n”と 表示する関数を作り,main関数から呼び出せ.関数名はhoge,引数はなし,戻り値もなし(void)とせよ. つまり,void hoge(){ … }となる.
演習00-1 関数名がfugaで,引数がint a, int bで,戻り値がvoidで,printfで画面にaとbの和を表示する関数を作成せよ. そして,それをmain関数から呼び出せ. 呼び出しは2回行い,引数はそれぞれ 1と3,5と6とせよ.
演習00-2 関数名がpiyoで,引数がint aで,戻り値がvoidであり, aが正の数なら1からaまでの整数を表示し, aがゼロ以下なら”Error”と表示する関数を作成せよ. そして,それをmain関数から呼び出せ. 呼び出しは3回行い,引数はそれぞれ 5, -3, 6とせよ.
演習00-3 関数名がbarで,引数がint a, int bで,戻り値の型がint型であり,戻り値の値がaとbの和である関数を作成せよ. そして,それをmain関数から呼び出せ.引数に3と4を指定して呼び出し,関数の戻り値を画面に表示せよ.
演習01-0 "#[改行]", "##[改行]", "###[改行]", "####[改行]" と表示する関数を作り,main関数から呼び出せ.関数名は func(),引数はなし,戻り値はvoidとせよ.つまり void func(){...}となる.
演習01-1 引数がなく,戻り値の型がint,戻り値の値が3である関数three()を作成し,main()関数から呼び出せ. main()関数の中では,関数three()の戻り値を変数xに代入し,表示せよ. こんな感じ↓ int x; x = three(); printf("x=%d\n", x);
演習01-2 引数がint型2個で,戻り値がその和である関数を作成し,main()関数から呼び出せ. ヒント int add(int a, int b){ return ????; } void main(){ int x; x = add(2,3); printf("x=%d\n", x);
演習01-3 引数がint型3個で,戻り値がその和である関数を作成し,main()関数から呼び出せ.
演習01-4 "Hello,World!\n"と10回表示する関数を作成し,それをmainから呼び出せ. ヒント:関数の中にfor文を作成する. ヒント:"Hello,World!"と10回表示するには int i; for(i=0; i<10; i++){ printf("Hello,World!\n"); }
演習01-5 0から9までを表示する関数を作成し,それを呼び出せ. ヒント:関数の中にfor文を作成する. ヒント:0から9まで表示するには int i; for(i=0; i<10; i++){ printf("%d\n", i); }
演習01-6 1から10までの合計を計算して返す関数を作成し,それを呼び出せ. ヒント:関数の中にfor文を作成する. ヒント:1から10までの合計は, int i, sum; sum = 0; for(i=1; i<=10; i++){ sum = sum+i; }
演習02-0 nを引数として受け取り, を戻り値として返す関数sum1(int n) を作り,sum1(1), sum1(2), sum1(3) …sum1(10)を表示せよ.
演習02-1 nを入力し, を返す関数 sum2(int n)を作り, sum2(1),sum2(2),…,sum2(10)を表示せよ.
演習02-2 nを入力し, を返す関数sum3(int n)と, nを入力し, を求める関数sum4(int n), を作り, sum4(1),sum4(2),…sum4(10)を表示せよ.
演習02-3 nを入力し を返す関数func0(int n)を作り, func0(1),func0(2)…func0(10)を表示せよ. 先ほどのsum1()~sum4()を使用せよ.
演習02-0 ~ 02-3 の解答 n= 1, sum1(n)= 1, sum2(n)= 1, sum3(n)= 1, sum4(n)= 1, func0(n)= 14 n= 2, sum1(n)= 3, sum2(n)= 5, sum3(n)= 9, sum4(n)= 17, func0(n)= 96 n= 3, sum1(n)= 6, sum2(n)= 14, sum3(n)= 36, sum4(n)= 98, func0(n)= 390 n= 4, sum1(n)=10, sum2(n)= 30, sum3(n)= 100, sum4(n)= 354, func0(n)= 1178 n= 5, sum1(n)=15, sum2(n)= 55, sum3(n)= 225, sum4(n)= 979, func0(n)= 2928 n= 6, sum1(n)=21, sum2(n)= 91, sum3(n)= 441, sum4(n)= 2275, func0(n)= 6342 n= 7, sum1(n)=28, sum2(n)=140, sum3(n)= 784, sum4(n)= 4676, func0(n)=12404 n= 8, sum1(n)=36, sum2(n)=204, sum3(n)=1296, sum4(n)= 8772, func0(n)=22428 n= 9, sum1(n)=45, sum2(n)=285, sum3(n)=2025, sum4(n)=15333, func0(n)=38106 n=10, sum1(n)=55, sum2(n)=385, sum3(n)=3025, sum4(n)=25333, func0(n)=61556
演習3-0 引数yearがうるう年であるか否かを判別する関数int is_uruu(int year)を作成せよ. 戻り値は,うるう年なら1を返し,そうでなければ0を返す. 関数is_uruuをmain関数より呼び出せ. うるう年の条件は次スライドを参照
演習3-0 (con't) 4の倍数なら,うるう年である. ただし100の倍数は,うるう年でない. ただし400の倍数は,うるう年である. 例 2001→うるう年でない 2020→うるう年である 2100→うるう年でない 2000→うるう年である
演習3-1 y年m月が何日まであるかを求める関数 int maxday_of_month(int y, int m)を作成せよ. そして,main()関数より呼び出せ. if文を使って 列挙するだけでよい.つまり, もしmが1,3,5,7,8,10,12なら31, もしmが4,6,9,11なら30, もしmが2なら,yがうるう年なら29,でなければ 28 前問で作成したis_uruu(int year)を使ってよい。
演習3-2 西暦y年m月d日と西暦y年1月1日が,何日離れているか計算する関数 int days_from(int y, int m, int d) を作成せよ. 例:days_from(2112,1,1)は0 day_from(2112,1,2)は1 day_from(2112,3,4)は63 day_from(2112,9,3)は246
演習3-3 西暦y年m月d日と西暦1900年1月1日が,何日離れているか計算する関数を作成せよ. ただし,1900<=yとする. うるう年を考慮に入れよ. 例:2000年1月1日なら36524日,2001年12月31日なら37254日,2002年1月1日なら37255日となる.
演習3-4 西暦y年m月d日が,何曜日であるかを求める関数を作成せよ. ただし,1900<=yとする.うるう年を考慮に入れよ. 日曜日なら戻り値0,月曜日なら1,火曜日なら2,水曜日なら3,木曜日なら4,金曜日なら5,土曜日なら6. ただし,1900<=yとする.うるう年を考慮に入れよ. ヒント:1900年1月1日は,月曜日である. 1900年1月1日とy年m月d日が何日離れているか計算し,7で割ったあまりを求めれば良い.
演習3-5 西暦y年m月のカレンダーを表示するプログラムを作成せよ.下記のサンプルに従え. (表示をそろえるのは,かなり難しい) Su Mo Tu We Th Fr Sa 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
演習4-0 再帰により,n!(階乗)を求めるプログラムを作成せよ. 適切な引数を入れて,mainから呼び出せ. 関数内にprintf()を入れ,動作を追跡せよ. 例:関数の1行目に”関数が開始されました.引数は??です.”と表示するprintfを配置する
演習4-1 再帰により,nCr(組み合わせ)を求めるプログラムを作成せよ.
演習4-2 再帰により,フィボナッチ数列の第n項目を求めるプログラムを作成せよ. フィボナッチ数列:1,1,2,3,5,8,13,21,... 第n+2項目=第n項目+第n+1項目