プログラミング演習I http://www.ns.kogakuin.ac.jp/~ct13140/Prog.2010.

Slides:



Advertisements
Similar presentations
第 2 章 数値の入力と変数 scanf と変数をやります 第 2 章 数値の入力と変数 1. 以下のプログラムを実行してみよう  C 言語では文の最後に「 ; 」(セミコロン)が付きます 第 2 章 数値の入力と変数 2 #include int main() { int x; x = 3; printf("x.
Advertisements

プログラミング入門2 第4回 配列 for文 変数宣言 初期化
ファーストイヤー・セミナーⅡ 第8回 データの入力.
配列(2) 第10回[平成15年6月26日(木)]:PN03-10.ppt 今日の内容 1 素数を求める(教科書の例):復習
演習00-0 “Hello,world![改行]”を表示するプログラムを作成せよ. 1 1.
プログラミング論 I 行列の演算
プログラミング論 I 講義,テスト C言語復習
プログラミング演習I
プログラミング論 I 関数の再帰呼び出し
C言語 配列 2016年 吉田研究室.
問題 1 フィボナッチ数列 xn は次で定義される。
第6章 2重ループ&配列 2重ループと配列をやります.
問題 1 キーボードから入力した数の合計を計算するプログラムを 作成せよ。最初に、何個の数を入力するかその数を入力 するようにする。
プログラミング演習Ⅰ 課題2 10進数と2進数 2回目.
非線形方程式の近似解 (2分法,はさみうち法,Newton-Raphson法)
2008年6月12日 非線形方程式の近似解 Newton-Raphson法
関数 関数とスタック.
プログラミング演習I
精密工学科プログラミング基礎Ⅱ 第3回資料 今回の授業で習得してほしいこと: 2次元配列の使い方 (前回の1次元配列の復習もします.)
第7回 条件による繰り返し.
ちょっとした練習問題① 配列iroを['R', 'W', 'R', 'R', 'W' , 'W' , 'W']を宣言して、「W」のときの配列の番号をprintfで表示するようなプログラムを記述しなさい。
プログラミング2 関数
岩村雅一 知能情報工学演習I 第11回(後半第5回) 岩村雅一
プログラミング演習
繰り返し計算 while文, for文.
関数と配列とポインタ 1次元配列 2次元配列 配列を使って結果を返す 演習問題
第10回関数 Ⅱ (ローカル変数とスコープ).
Cプログラミング演習 第7回 メモリ内でのデータの配置.
プログラミング入門 電卓を作ろう・パートIV!!.
プログラミング2 関数の再帰呼び出し
高度プログラミング演習 (03).
第7回 条件による繰り返し.
復習 前回の関数のまとめ(1) 関数はmain()関数または他の関数から呼び出されて実行される.
復習 2次元配列 4列 j = 0 j = 1 j = 2 j = 3 i = 0 i = 1 i = 2 3行
岩村雅一 知能情報工学演習I 第11回(後半第5回) 岩村雅一
復習 一定回数を繰り返す反復処理の考え方 「ループ」と呼ぶ false i < 3 true i をループ変数あるいはカウンタと呼ぶ
疑似乱数, モンテカルロ法によるシミュレーション
演習0 func0, func1, func2を作成せよ. main()関数の中で,func0()を呼び出しを実行せよ.
演習07-0 “Hello\n” “World!\n”と
Cプログラミング演習資料.
C言語 はじめに 2016年 吉田研究室.
2007/6/12(通信コース)2007/6/13(情報コース) 住井
IF文 START もしも宝くじが当たったら 就職活動する 就職活動しない YES END NO.
プログラミングⅡ 第2回.
プログラミング入門2 第6回 関数 情報工学科 篠埜 功.
プログラミング入門2 第13回、14回 総合演習 情報工学科 篠埜 功.
~sumii/class/proenb2010/ml2/
11.1 標準ライブラリ関数 11.2 関数呼び出しのオーバーヘッド 11.3 大域変数 11.4 プロトタイプ宣言 11.5 関数引数
2006/6/27(通信コース)2006/7/5(情報コース) 住井
精密工学科プログラミング基礎 第7回資料 (11/27実施)
プログラミング入門2 第5回 配列 for文 変数宣言 初期化
2008年6月5日 非線形方程式の近似解 2分法,はさみうち法,Newton-Raphson法)
ループだよ!難しいよ! 第5章 while(ループ);.
cp-15. 疑似乱数とシミュレーション (C プログラミング演習,Visual Studio 2019 対応)
Cプログラミング演習 ニュートン法による方程式の求解.
演習00-0 “Hello\n” “World!\n”と
プログラミング演習I 数値計算における計算精度と誤差
プログラミング2 関数の再帰呼び出し
プログラミング入門2 第6回 関数 情報工学科 篠埜 功.
精密工学科プログラミング基礎Ⅱ 第2回資料 今回の授業で習得してほしいこと: 配列の使い方 (今回は1次元,次回は2次元をやります.)
論理回路(and,or,not)を作成. 回路を組み合わせ半/全加算器.
2008年7月11日 論理回路(and,or,not)を作成. 回路を組み合わせ半/全加算器.
プログラミング入門2 第5回 配列 変数宣言、初期化について
プログラミング入門2 第3回 条件分岐(2) 繰り返し文 篠埜 功.
printf・scanf・変数・四則演算
計算技術研究会 第5回 C言語勉強会 関数(function)を使う
分岐(If-Else, Else if, Switch) ループ(While, For, Do-while)
プログラミング演習I 補講用課題
第1章 文字の表示と計算 printfと演算子をやります 第1章 文字の表示と計算.
第1章 文字の表示と計算 printfと演算子をやります.
Presentation transcript:

プログラミング演習I http://www.ns.kogakuin.ac.jp/~ct13140/Prog.2010

プログラミング演習I 概要 プログラミング論Iの内容を実際にコンピュータで解く. プログラミング力を付ける アルゴリズムについて学ぶ 主に数学的問題を解く 使用する言語は C言語

プログラミング論Iと演習I 論Iで理論を学び,演習Iでそれを実践してみる. 両科目を併せて取ることをお勧めします.

教科書 新C言語入門 ビギナー編 林 晴比古 (著) 出版社: ソフトバンククリエイティブ

テスト プログラミング論I,II,プログラミング演習I,IIの試験は「紙媒体のものは全て持ち込み可」とします. C言語の教科書の購入を強く推奨します. 当然,授業,演習も教科書を持参し参照することを強く推奨します. 試験は筆記試験のみです. 詳細は,Webページ参照

無料C言語コンパイラ(IDE) Visual C++ 2008 Express Edition http://www.microsoft.com/japan/msdn/vstudio/express/

演習00-0 “Hello,world![改行]”を表示するプログラムを作成せよ.

演習00-1 “Hello,[改行]world![改行]”を表示するプログラムを作成せよ.

演習00-2 “Hello.[改行]”と10回表示するプログラムを作成せよ. 9

演習00-3 for文を用いて,0から19まで表示するプログラムを作成せよ. 表示は,printf("%d\n", i); により行える.

演習00-4 for文を用いて,56から74まで表示するプログラムを作成せよ. 11

演習00-5 右図のように10個の整数を表示するプログラムを作成せよ.必ずfor文を用いよ. 1 4 9 16 25 : 81 ヒント: これは,02,12,22,32,42…92である 1 4 9 16 25 : 81

演習00-6 for文を用いて, を計算し,結果を表示するプログラムを作成せよ. すなわち 1+2+3+…+9+10を求める. ヒント x=0; ←xが0になる x+=1; ←xが1増える.つまり,0から1に変わる. x+=2; ← xが2増える.つまり,1から3に変わる. x+=3; ← xが2増える.つまり,3から6に変わる. : 正解は55である.

演習00-7 for文を用いて, を計算し,結果を表示するプログラムを作成せよ. すなわち 14+24+34+…+94+104を求める. ヒント:正解は25333である.

演習01-0 for文を用いて,1000から1009までの10個の数字を表示するプログラムを作成せよ. 表示は,printf("%d\n", i);により行える. 実行結果 1000 1001 1002 1003 1004  : 1009 15 15

演習01-1 for文を用いて,13,23,33,…,93,103を出力するプログラムを作成せよ. 演習00-5と似ています. 16 1 8 27 64 125 216 343 512 729 1000 実行結果 16 16

演習01-2 for文を用いて, を計算し,結果を表示するプログラムを作成せよ. すなわち 1+2+3+…+19+20を求める. ヒント:正解は210である 17 17

演習01-3 for文を用いて,100+101+102+…+199を計算し,結果を表示するプログラムを作成せよ. ヒント:正解は14950である. 18 18

演習01-4 for文を用いて, を計算し,結果を表示するプログラムを作成せよ. すなわち 13+23+33+…+93+103を求める. 演習0-7とほとんど同じです. ヒント:答えは 3025 19 19

演習01-5 for文を用いて, 1000+1 1000+1+2 1000+1+2+3 : 1000+1+2+3+4+…+9+10 実行結果 for文を用いて, 1000+1 1000+1+2 1000+1+2+3 : 1000+1+2+3+4+…+9+10 を出力するプログラムを作成せよ 次のスライドにヒントがあります. 1001 1003 1006 1010 1015 1021 1028 1036 1045 1055 20 20

演習01-5 ヒント x = 1000; ←これでxが1000になる x += 1; ←これでxが1000+1になる. 21 21

演習01-6 for文を用いて,1000から1019までの20個の数字の合計を表示するプログラムを作成せよ. 途中経過も表示せよ. 1000, 1000 1001, 2001 1002, 3003 1003, 4006 1004, 5010 1005, 6015 1006, 7021 1007, 8028 1008, 9036 1009, 10045 1010, 11055 1011, 12066 1012, 13078 1013, 14091 1014, 15105 1015, 16120 1016, 17136 1017, 18153 1018, 19171 1019, 20190 for文を用いて,1000から1019までの20個の数字の合計を表示するプログラムを作成せよ. つまり1000+1001+1002+…+1019を計算する. 途中経過も表示せよ. 22 実行結果 22

演習01-7 for文を用いて,500, 503, 506, 509,…, 527の10個の整数を表示するプログラムを作成せよ. 表示される数字は3ずつ増えている. 500 503 506 509 512 515 518 521 524 527 実行結果 23 23

演習01-8 for文を用いて,500.0, 500.3, 500.6, …, 502.7の10個の実数と,その合計を表示するプログラムを作成せよ. 表示される数字は0.3ずつ 増えている. 浮動小数点の表示は以下で可能 double d; printf("%lf\n", d); 500.000000 500.300000 500.600000 500.900000 501.200000 501.500000 501.800000 502.100000 502.400000 502.700000 合計=5013.500000 実行結果 24 24

演習01-9 for文を用いて,1000, 998, 996,…, 982の10個の整数を表示するプログラムを作成せよ. 表示される数字は2ずつ減っている. ヒント 1000 ← 1000 – 2*0 998 ← 1000 – 2*1 996 ← 1000 – 2*2 994 ← 1000 – 2*3 1000 998 996 994 992 990 988 986 984 982 実行結果 25 25

演習01-10 for文を用いて,1000, 998, 996,…, 982の10個の整数の和を求め表示するプログラムを作成せよ. 表示される数字は2ずつ減っている. ヒント 1000 ← 1000 – 2*0 998 ← 1000 – 2*1 996 ← 1000 – 2*2 994 ← 1000 – 2*3 9910 実行結果 26 26

演習01-11 for文を用いて,10の階乗を求め出力するプログラムを作成せよ. 1*2*3*…*9*10を求める. 27 3628800 実行結果 3628800 27 27

演習02-0 for文を用いて,0, 1, 2, 3,…, 9の10個の整数を表示するプログラムを作成せよ. 28 1 2 3 4 5 6 1 2 3 4 5 6 7 8 9 実行結果 28 28

演習02-1 for文を用いて,0+1+2+3+…+9の10個の整数の和を計算し表示するプログラムを作成せよ. 45 実行結果 29 29

演習02-2 2重のfor文を用いて,右下のように表示されるプログラムを作成せよ. ヒント:「0,1,2,3と表示」を3回繰り返す 30 1 1 2 3 実行結果 30 30

演習02-3 2重のfor文を用いて,右下のように表示されるプログラムを作成せよ. 31 1 1 1 2 1 3 1 4 2 1 2 2 2 3 2 4 3 1 3 2 3 3 3 4 実行結果 31 31

演習02-4 3重のfor文を用いて,右のように表示されるプログラムを作成せよ. 32 実行結果 0 0 0 0 0 1 0 0 2 0 1 1 0 1 2 0 2 0 0 2 1 0 2 2 1 0 0 1 0 1 1 0 2 1 1 0 1 1 1 1 1 2 1 2 0 1 2 1 1 2 2 2 0 0 2 0 1 2 0 2 2 1 0 2 1 1 2 1 2 2 2 0 2 2 1 2 2 2 演習02-4 3重のfor文を用いて,右のように表示されるプログラムを作成せよ. 実行結果 32 32

演習02-5 3重のfor文を用いて,右のように表示されるプログラムを作成せよ. 33 実行結果 0 0 0 1 0 0 0 0 1 1 0 1 0 0 2 1 0 2 0 0 3 1 0 3 0 1 0 1 1 0 0 1 1 1 1 1 0 1 2 1 1 2 0 1 3 1 1 3 0 2 0 1 2 0 0 2 1 1 2 1 0 2 2 1 2 2 0 2 3 1 2 3 3重のfor文を用いて,右のように表示されるプログラムを作成せよ. 実行結果 33 33

演習02-6 次のプログラムを作成せよ. for文を用いて0から19までの20個の整数を表示する. ただし,次ページのルールに従え.

演習02-6 (con't) その数字が3の倍数であるが,5の倍数でない場合は,数字の後に"?"を付ける. その数字が5の倍数であるが,3の倍数でない場合は,数字の後に"!"を付ける. その数字が3の倍数であり かつ 5の倍数である場合は,数字の後に"#"を付ける. その数字が3の倍数でなく かつ 5の倍数でない場合は,数字のみを表示し何もつけない. 次スライドに実行結果,ヒントがある

演習02-6 (con't) 演習02-6の実行結果. ヒント 世界のナベアツ (に似ている) xが3の倍数であるか否かの調査は 0# 1 2 3? 4 5! 6? 7 8 9? 10! 11 12? 13 14 15# 16 17 18? 19 演習02-6の実行結果. ヒント 世界のナベアツ (に似ている) xが3の倍数であるか否かの調査は if( x % 3 == 0 ) で行える.

演習03-0 f (x) = x3 - 18x2 + x - 18 とする. f (0), f (1), f (2) ,…, f (20) を表示せよ

演習03-1 f (x) = x3 - 18x2 + x - 18 とする. 方程式 f (x)=0 は,[0,20]の間に整数解が1個存在する.それを求めよ. 2分法などではなく, f (0)=0か?, f (1)=0か? …と x=20まで繰り返す. ヒント:解は x = 18 である.

演習03-2 f (x) = x3 - 18x2 + x - 18 とする. f (0), f (1)…f (20)の中で最も小さいものと,そのときの x を求めよ. ヒント:f (12)が最小

演習03-3 0.1x3+x-16 =0 の解は [0,8]に存在する. 解が x = 4 に着目し, 解が[0,4]にあるのか,[4,8]にあるのかを調査し, その結果を表示するプログラムを作成. 区間最小値をmin, 最大値をmaxに格納. ヒント : min=0, max=8 で開始し, min=4, max=8 で終了するはず.

演習03-4 演習4-3の処理を1回行うと, min と max が [0,8] → [4,8] と更新される. 同じ処理を2回 [4,8] → [4,6] となる. この処理を for文を 用いて10回行う プログラムを作成せよ.  次スライドにヒント 実行結果の例 ans : from 0.00000000 to 8.00000000 ans : from 4.00000000 to 8.00000000 ans : from 4.00000000 to 6.00000000 ans : from 4.00000000 to 5.00000000 ans : from 4.50000000 to 5.00000000 ans : from 4.75000000 to 5.00000000 ans : from 4.75000000 to 4.87500000 ans : from 4.81250000 to 4.87500000 ans : from 4.81250000 to 4.84375000 ans : from 4.81250000 to 4.82812500 ans : from 4.81250000 to 4.82031250

ヒント 浮動小数点の変数を,細かい桁まで表示するのは, double d = 1.23456789012345; printf("%20.15lf\n", d); で可能. 上記は,「全体で20文字,小数点以下15文字」を表示する.ただし,「全体」には符号(±)や小数点も含まれる.

演習3-5 2文法プログラムの作成 0.1x3+x-16 =0 の近似解を2分法を用いて求め,近似解を表示するプログラムを作成せよ. 解の精度は,誤差が10–5未満とする. ただし,下記は既知として使ってよい. ・ 解は[0,8]の区間に存在する. ・ 0.1x3+x-16は単調増加関数である.

ヒント (い) 初期区間を [ 0, 8] とする. 区間が十分に小さいか検証. 小さいなら繰り返し終了. 小さくないなら以下を行う. 区間が大きい 限り, 繰り返し 区間が十分に小さいか検証. 小さいなら繰り返し終了. 小さくないなら以下を行う. 区間の中間値を計算. 解が中間値より小さい/大きいを検証. 小さい→解は[最小値,中間値]にある. 大きい→解は[中間値,最大値]にある. 繰り返しの先頭に戻る. 解を表示する.

ヒント (ろ) double func(double x){ return 0.1*x*x*x + x - 16; } void main(){ 変数の宣言; while( 区間が十分に狭いか否か? ){ 区間の中間値を求める. 解が中間値より小さい/大きいかを調べて,区間を短くする. 解を表示する.

ヒント (は) while( 0.00001 < 区間の長さ){ 中間値を計算; if( f (中間値)が負である ){ /* 解は [mid,max] にある */ 区間を更新. } else { /* 解は [min,mid] にある */ }

演習03-6 0.1x3+x-50 = 0 の近似解をはさみうち法を用いて求め,近似解を表示するプログラムを作成せよ. 解の精度は不問(適切に…). ただし,下記は既知として使ってよい. ・ 解は[0,8]の区間に存在する. ・ 0.1x3+x-50は単調増加関数である.

ヒント1 2点( a , f (a) )と( b , f (b) ) を通る近似直線は この近似直線のx切片は

演習03-7 0.1x3+x-5 = 0 の近似解をNewton-Raphson法を用いて求め,近似解を表示するプログラムを作成せよ. 解の精度は不問(適切に…). ただし,下記は既知として使ってよい. ・ 解は[0,8]の区間に存在する. ・ 0.1x3+x-5は単調増加関数である.

演習03-8 同一の方程式(たとえば,0.1x3+x-5 = 0)の解を2分法,はさみうち法,Newton-Raphson法を用いて求め,収束までの試行回数を比較せよ. 収束の途中経過を表示するとわかりやすい.

演習04-0 # 画面に,右図の様に #記号が10個縦に表示されるプログラムを作成せよ.

#################### 演習04-1 画面に,下図の様に #記号が20個横に表示されるプログラムを作成せよ. ただし, printf("####################"); の様なプログラムではなく, for文で20回繰り返すプログラムにせよ. ####################

#################### 演習04-2 画面に,下図の様に #記号が横20×縦10に表示されるプログラムを作成せよ. ####################

演習04-3 画面に,下図の様に表示されるプログラムを作成せよ. 0123456789

演習04-4 画面に,下図の様に表示されるプログラムを作成せよ. 0000000000 1111111111 2222222222 3333333333 4444444444 5555555555 6666666666 7777777777 8888888888 9999999999

演習04-5 画面に,下図の様に表示されるプログラムを作成せよ. # ## ### #### ##### ###### ####### ######## ######### ##########

演習04-6 画面に,下図の様に表示されるプログラムを作成せよ. ########## ######### ######## #######

演習04-7 画面に,下図の様に表示されるプログラムを作成せよ. ヒント:左に空白を表示 してから,#を表示. # ## ### #### ##### ###### ####### ######## ######### ##########

演習04-8 1 22 333 4444 55555 画面に,右図の様に表示される プログラムを作成せよ.

演習04-9 # ## ### #### ##### 画面に,右図の様に表示される プログラムを作成せよ.

演習04-10 画面に,右図の様に表示される プログラムを作成せよ. # # # ## ## ## ### ### ### # # # ## ## ## ### ### ### #### #### #### ###############

演習05-0 2次元のfor文を組んで表示する. 右のように表示されるプログラムを作成せよ. 一桁目が 0~3の4通り, 0,0 1,0 2,0 3,0 0,1 1,1 2,1 3,1 0,2 1,2 2,2 3,2 0,3 1,3 2,3 3,3 0,4 1,4 2,4 3,4 2次元のfor文を組んで表示する. 右のように表示されるプログラムを作成せよ. 一桁目が 0~3の4通り, 二桁目が 0~4の5通り, よって,4*5=20通り表示

演習05-1 double a[5][3]; a[0][0] = 0.0; a[0][1] = 1.0; a[0][2] = 2.0; 当然 2段のfor loop を使います. 次のスライドに続く.

演習05-1 (con't) 実行結果は右のようにせよ. 注意:Web上の手助けを 使用して良い. 手助けの内容を コピー&ペーストすれば良い. double型は printf(“%lf”, d) で表示可能. a[0][0] = 0.000000 a[0][1] = 1.000000 a[0][2] = 2.000000 a[1][0] = 3.000000 a[1][1] = 4.000000 a[1][2] = 5.000000 a[2][0] = 6.000000 a[2][1] = 7.000000 a[2][2] = 8.000000 a[3][0] = 9.000000 a[3][1] = 10.000000 a[3][2] = 11.000000 a[4][0] = 12.000000 a[4][1] = 13.000000 a[4][2] = 14.000000

演習05-2 double a[5][3]; double b[5][3]; double c[5][3]; a[0][0] = 0.0; a[0][1] = 1.0; a[0][2] = 2.0; a[1][0] = 3.0; a[1][1] = 4.0; a[1][2] = 5.0; : b[4][0] =27.0; b[4][1] =28.0; b[4][2] =29.0; として, 5行3列の行列 a と,5行3列の行列b の加算結果を, c に代入する. そして,c を全て表示. c[i][j] = a[i][j] + b[i][j] をfor文で組めればOK 注意: Web上の手助けを使用して良い. 手助けの内容をコピー&ペーストすれば良い.

演習05-3 double a[5][3]; a[0][0] = 0.0; a[0][1] = 1.0; a[0][2] = 2.0; : として, a[0][0]~a[4][2] の15個の合計を計算して,表示する. 注意: Web上の手助けを使用して良い. 手助けの内容をコピー&ペーストすれば良い. ヒント:答えは, 105.0 である.

演習06-0 下記の1行3列の行列Aと,3行1列の行列Bの積を求めよ. for文を用いても用いなくてもよい. 答えは1行1列の行列で,要素は 53.18 となる. Web Page上の手助けを用いよ. 67 67

演習06-1 1行10列の行列Aと,10行1列の行列Bの積を求めよ.for文を用いよ. 答えは1行1列の行列で,要素は 964.374585 となる. WebPage上の手助けを用いよ. 68 68

演習06-2 下記の行列Aと行列Bの掛け算を計算するプログラムを作成せよ.for文は用いない. 結果は2行2列の行列.これをC[2][2]で表し,c[0][0], c[0][1], c[1][0], c[1][1]を求めることになる. この課題はとばしても良い WebPage上の手助けを用いよ. 69 69

演習06-3 課題-2の行列Aと行列Bの掛け算を計算するプログラムを作成せよ.for文を用いる. 結果は2行2列の行列.これをc[2][2]で表し,c[0][0], c[0][1], c[1][0], c[1][1]を求めることになる. WebPage上の手助けを用いよ. 70 70

演習06-3 ヒント 71 71

演習06-4 5行8列の行列Aと,8行3列の行列Bの掛け算を行うプログラムを作成せよ. ヒント WebPage上の手助けを用いよ. 答えは, 72 72

演習07 演習07は欠番です.

演習08-0 "#[改行]", "##[改行]", "###[改行]", "####[改行]" と表示する関数を作り,main関数から呼び出せ.関数名は func(),引数はなし,戻り値はvoidとせよ.つまり void func(){...}となる.

演習08-1 引数がなく,戻り値の型がint,戻り値の値が3である関数three()を作成し,main()関数から呼び出せ. main()関数の中では,関数three()の戻り値を変数xに代入し,表示せよ. こんな感じ↓ int x; x = three(); printf("x=%d\n", x);

演習08-2 引数がint型2個で,戻り値がその和である関数を作成し,main()関数から呼び出せ. ヒント int add(int a, int b){ return ????; } void main(){ int x; x = add(2,3); printf("x=%d\n", x);

演習08-3 引数がint型3個で,戻り値がその和である関数を作成し,main()関数から呼び出せ.

演習08-4 main()関数よりfunc0()を呼び出し, func0()の中でfunc1を呼び出し, func0の中では"func0A"と表示し,func1を呼び出し,"func0B"と表示せよ. func1の中では"func1A"と表示し,func2を呼び出し,"func1B"と表示せよ. func2の中では"func2"と表示しせよ.

演習08-5 "Hello,World!\n"と10回表示する関数を作成し,それをmainから呼び出せ. ヒント:関数の中にfor文を作成する. ヒント:"Hello,World!"と10回表示するには int i; for(i=0; i<10; i++){ printf("Hello,World!\n"); }

演習08-6 0から9までを表示する関数を作成し,それを呼び出せ. ヒント:関数の中にfor文を作成する. ヒント:0から9まで表示するには int i; for(i=0; i<10; i++){ printf("%d\n", i); }

演習08-7 1から10までの合計を計算して返す関数を作成し,それを呼び出せ. ヒント:関数の中にfor文を作成する. ヒント:1から10までの合計は, int i, sum; sum = 0; for(i=1; i<=10; i++){ sum = sum+i; }

演習08-8 再帰により,n!(階乗)を求めるプログラムを作成せよ. 適切な引数を入れて,mainから呼び出せ. 関数内にprintf()を入れ,動作を追跡せよ.

演習08-9 再帰により,nCr(組み合わせ)を求めるプログラムを作成せよ.

演習08-10 再帰により,フィボナッチ数列の第n項目を求めるプログラムを作成せよ. フィボナッチ数列:1,1,2,3,5,8,13,21,... 第n+2項目=第n項目+第n+1項目

演習09-0 nを入力し, を求める関数sum1(int n) を作り,sum1(1), sum1(2), sum1(3) …sum1(10)を表示せよ.

演習09-1 nを入力し, を求める関数 sum2(int n)を作り, sum2(1),sum2(2),…,sum2(10)を表示せよ.

演習09-2 nを入力し, を求める関数sum3(int n)と, nを入力し, を求める関数sum4(int n), を作り, sum4(1),sum4(2),…sum4(10)を表示せよ.

演習09-3 nを入力し を求める関数func0(int n)を作り, func0(1),func0(2)…func0(10)を表示せよ. 先ほどのsum1()~sum4()を使用せよ.

演習09-0 ~ 09-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

演習10-0 下記のように表示するプログラムを作成せよ. 2段に入れ子になったfor文を使うこと. (横に8列,縦に3行) ########

演習10-1 下記のように表示するプログラムを作成せよ. 2段に入れ子になったfor文を使うこと. # ## ### #### #####

演習10-2 下記のように表示するプログラムを作成せよ. 2段に入れ子になったfor文を使うこと. ***** #**** ##*** ###** ####* #####

演習10-3 下記のように表示するプログラムを作成せよ. 2段に入れ子になったfor文を使うこと. .......... ....##.... ...####... ..######.. .########. ##########

演習10-4 下記のように表示するプログラムを作成せよ. 2段に入れ子になったfor文を使うこと. 1 12 123 1234 12345

演習10-5 下記のように表示するプログラムを作成せよ. 2段に入れ子になったfor文を使うこと. ....11.... ...2222... ..333333.. .44444444. 5555555555

演習10-6 下記のように表示するプログラムを作成せよ. 2段に入れ子になったfor文を使うこと. ....1 ...12 ..123 .1234 12345

演習10-7 下記のように表示するプログラムを作成せよ. 2段に入れ子になったfor文を使うこと. ....# ...#. ..#.. .#... #....

演習10-8 下記のように表示するプログラムを作成せよ. 2段に入れ子になったfor文を使うこと. ....1 ...21 ..321 .4321 54321

演習11-0 引数yearがうるう年であるか否かを判別する関数int is_uruu(int year)を作成せよ. 戻り値は,うるう年なら1を返し,そうでなければ0を返す. 関数is_uruuをmain関数より呼び出せ. うるう年の条件は次スライドを参照

演習11-0 (con't) 4の倍数なら,うるう年である. ただし100の倍数は,うるう年でない. ただし400の倍数は,うるう年である.

演習11-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なら31, もしmが2なら,yがうるう年なら29,でなければ 28

演習11-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

演習11-3 西暦y年m月d日と西暦1900年1月1日が,何日離れているか計算する関数を作成せよ. ただし,1900<=yとする. うるう年を考慮に入れよ. 例:2000年1月1日なら36524日,2001年12月31日なら37254日,2002年1月1日なら37255日となる.

演習11-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で割ったあまりを求めれば良い.

演習11-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

演習12 以下の12-0から12-5を作成せよ. 使用するデータはWeb上の手助けを用いよ.

演習12-? で使用するデータ

演習12-0 int x[20] と int y[20] がある. x[20] と y[20] の全て(40個)を printf で表示せよ. x[0]~x[19] と y[0]~y[19] の値はWeb上の手助けを参照せよ. 実行結果は,次スライド参照

演習12-0の実行結果 x[0] = 49 x[1] = 92 x[2] = 67 x[3] = 69 x[4] = 25 y[0] = 31 y[1] = 93 y[2] = 59 y[3] = 69 y[4] = 24 y[5] = 77 y[6] = 22 y[7] = 75 y[8] = 75 y[9] = 26 y[10] = 57 y[11] = 46 y[12] = 54 y[13] = 48 y[14] = 53 y[15] = 60 y[16] = 70 y[17] = 90 y[18] = 39 y[19] = 14

演習12-1 x[20] と y[20]の平均を求め, printf で表示せよ. 平均が整数になるとは限らないことに注意せよ. 実行結果は以下の通りになるはずである. X平均=58.000000 Y平均=54.100000

演習12-2 x[0]とx[]の平均の差がx[0]の偏差である. x[0]~x[19]の偏差,y[0]~y[19]の偏差を表示せよ. ここでの"差"とは引き算結果のことであり,負の数にもなることに注意せよ. x[0]>xの平均 ならば,偏差は正. x[0]<xの平均 ならば,偏差は負. 実行結果は,次スライド参照

演習12-2の実行結果 x[0]の偏差=-9.000000 x[1]の偏差=34.000000 x[2]の偏差=9.000000 y[0]の偏差=-23.100000 y[1]の偏差=38.900000 y[2]の偏差=4.900000 y[3]の偏差=14.900000 y[4]の偏差=-30.100000 y[5]の偏差=22.900000 y[6]の偏差=-32.100000 y[7]の偏差=20.900000 y[8]の偏差=20.900000 y[9]の偏差=-28.100000 y[10]の偏差=2.900000 y[11]の偏差=-8.100000 y[12]の偏差=-0.100000 y[13]の偏差=-6.100000 y[14]の偏差=-1.100000 y[15]の偏差=5.900000 y[16]の偏差=15.900000 y[17]の偏差=35.900000 y[18]の偏差=-15.100000 y[19]の偏差=-40.100000

演習12-3 x[20] と y[20]の共分散を求め, 表示せよ. 結果は,以下のようになるはずである. 共分散=415.900000

演習12-4 x[20]の分散と標準偏差を求め,表示せよ.同様にy[20]の分散と標準偏差も表示せよ 結果は,以下のようになるはずである. X分散=434.700000 X標準偏差=20.849460 Y分散=497.090000 Y標準偏差=22.295515 ヒント:xの平方根を求めるには #include <math.h> をmainよりも前に書く. y = sqrt(x) で,yにxの平方根が入る.

演習12-5 x[20] と y[20]の相関係数を求め, 表示せよ. 結果は,以下のようになるはずである. 相関係数=0.894698

演習13-0 1個の真偽値(char型とする)を受け取り,そのnotを返す関数を作り,not(0),not(1)を表示. 1 1 入力 x 出力 z 1 x z 1 not

演習13-1 2個の真偽値を受け取り,それらのorを返す関数を作り,or(0,0)~or(1,1)を表示. 1 1 1 1 1 1 1 ヒント:「a==3またはb==4」は if(a==3 || b==4 ){ .. } 入力 x 入力 y 出力 z 「Shift」キーを押しながら, 「¥」キーを押す. 1 1 x 1 1 z y 1 1 1 or

演習13-2 2個の真偽値を受け取り,それらのandを返す関数を作り,and(0,0)~and(1,1)を表示. 1 1 1 1 1 ヒント:「a==3かつb==4」は if(a==3 && b==4 ){ .. } 入力 x 入力 y 出力 z 1 x 1 z y 1 1 1 and

演習13-3 半加算器は,以下の様な回路になる. 2個の真偽値(A,B)を受け取りCを返す関数ha_c(char a, char b)を作成せよ. ただし,前に作成したnot,or,andを組み合わせて作成せよ A or and S not and C B

演習13-4 半加算器は,以下の様な回路になる. 2個の真偽値(A,B)を受け取りSを返す関数ha_s(char a, char b)を作成せよ. ただし,前に作成したnot,or,andを組み合わせて作成せよ A or and S not and C B

演習13-5 全加算器は,以下の様な回路になる. 3個の真偽値(A,B,Ci)を受け取りCoを返す関数fa_c(char a, char b, char ci)を作成せよ. ただし,前に作成した関数を組み合わせて作成せよ Half Adder S C X Half Adder S C A S B Z Ci or Co Y

演習13-6 全加算器は,以下の様な回路になる. 3個の真偽値(A,B,Ci)を受け取りSを返す関数fa_s(char a, char b, char ci)を作成せよ. ただし,前に作成した関数を組み合わせて作成せよ Half Adder S C X Half Adder S C A S B Z Ci or Co Y

演習13-7 下記の回路を作る.A?,B?を入力.S?を表示. A0 B0 A1 B1 A2 B2 A3 B3 Z Y X S0 S1 S2 FA S C FA C S Z FA C S Y C S HA X S0 S1 S2 S3 S4