航空宇宙
航空宇宙
航空宇宙
航空宇宙プログラミング
プログラミング
プログラミング
プログラミング1
1
1
1
○授業の内容(予定) 内容 1 10/03 EasyIDEC の使い方 2 10/10 標準出力 printf 3 10/17 定数と変数の型 4 10/24 演算子 5 10/31 標準入力 scanf 6 11/07 まとめと課題プログラムの作成1 7 11/14 条件によって処理を変える if 8 11/21 9 11/28 処理を繰り返す for 10 12/05 11 12/12 まとめと課題プログラムの作成2 12 12/19 処理を繰り返す while 13 1/09 関数とポインタ 14 1/16 アルゴリズム 15 1/30 まとめと課題プログラムの作成3 16 2/06 期末試験(筆記) ○出席登録 3列目より前 ○教科書 「新訂 新C言語入門 ~スーパービギナー編~」 SBP ○成績評価 期末試験(筆記)45 点,レポート+課題 40 点,出席点 15 点 〇課題,レポートのプログラムファイル提出先 [email protected] ○その他 「EasyIDEC」を USB メモリーにコピーすると,ほとんどのパソコンで使うことが できます。いろいろなプログラムを自分で動かすことが上達の近道です。
ギリシャ数字の雑学 ギリシャ数字の雑学 ギリシャ数字の雑学 ギリシャ数字の雑学 1 mono モノ モノレール,モノクロ 2 di ジ(バイ) ジエチルアルコール,ジレンマ バイナリ(2 進),バイサイクル 3 tri トリ トリオ,トライアングル,トライアスロン トリプル,TNT 4 tetra テトラ テトラパック,テトラポット 5 penta ペンタ ペンタゴン(五角形),ペンタックス 6 hexa ヘキサ ヘキサゴン(六角形) 7 hepta ヘプタ 8 octa オクタ オクターブ,オクトパス,オクタル(8 進) 9 nona ノナ 10 deca デカ(デシ) デシマル(10 進),デシリットル 16 HexaDeca ヘキサデカ ヘキサデシマル(16 進) プログラミングの基本 プログラミングの基本 プログラミングの基本 プログラミングの基本 ▽次のプログラムは正しく動くが・・・・意味があるか? main() { int a,b; a = 10; b = 2*a; } プログラムは
入力
入力
入力
入力
• キーボード(標準入力)
• ファイル
処理
処理
処理
処理
• 定数,変数
• アルゴリズム
出力
出力
出力
出力
• ディスプレイ(標準出力)
• ファイル → プリンタ
・計算結果の表示がない ・決まった計算しかできないC言語プログラミング C言語プログラミング C言語プログラミング
C言語プログラミング環境の環境の環境の環境の使い方使い方使い方使い方【【【【 EasyIDECEasyIDECEasyIDEC EasyIDEC 】】】】
準備:「EasyIDEC」フォルダと「Cマニュアル」フォルダを USB にコピーする IDEC (Integrated Development Environment C)
実行ファイル プロジェクト(プログラム) のデータが保存されるフォルダ 1.EasyIDEC を起動する 自動的に前回終了時のプログラム画面が表示されるので,プロジェクト に移動する。 (1) 新しいプログラムを作る場合 ファイル → 新規プロジェクト→プロジェクト名を入力する。 自動的に プログラム に移動してプログラムが表示される(内容はいつも同じ)。 (2) プログラムを修正する場合 修正する プロジェクト名 をダブルクリック → プログラム に移動する。 この部分がプログラム! この部分がプログラム!この部分がプログラム! この部分がプログラム!
2.プログラムを実行する プログラム実行 をクリックする。 プログラムにエラーがあると自動的に コンパイルエラー に移動する。 『 『『 『自分で間違いを探して修正する自分で間違いを探して修正する』自分で間違いを探して修正する自分で間違いを探して修正する』』』 ここの繰り返しここの繰り返しの繰り返しの繰り返しがプログラミングです!がプログラミングです!がプログラミングです!がプログラミングです! 3.プログラムを印刷する 「project」フォルダにある「プロジェクト名」フォルダを開き, main.c を メモ帳で開いて印刷する。PC 教室は「右クリック→編集」 4.プログラムを削除する 「project」フォルダにある「プロジェクト名」フォルダを削除する。 5.マニュアル 「苦しんで覚えるC言語」のマニュアルは「Cマニュアル」フォルダにあります。 プログラムの プログラムの プログラムの プログラムの提出方法提出方法提出方法提出方法 プログラムファイル( main.c )をメールに添付して提出する。 1行目にコメントでレポート番号,学籍番号,氏名を入れる。 <プログラムサンプル> /* レポート〇〇 学籍番号 氏名 */ #include <stdio.h> int main(void) { プログラム
本格的な開発環境はこちら 本格的な開発環境はこちら 本格的な開発環境はこちら 本格的な開発環境はこちら【【【【 PCPCPCPC----X X X 】X 】】】 PC PCPC PC----XXXX がインストールされている教室(がインストールされている教室(がインストールされている教室(PCがインストールされている教室(PCPCPC----11,11,,PC,PCPC-PC---2222)で利用できます)で利用できます)で利用できます)で利用できます ▽UNIX エミュレータの起動 [プログラム]→[FUJITSU PC-X V20L22]→[Solaris ログイン画面] ユーザー,パスワードを入力してログイン ▽初めて使う時だけ端末エミュレータ内で入力 cp /work/public/sample/.cshrc $HOME cp /work/public/sample/.Xdefaults $HOME ▽プログラム作成 テキストエディタを起動してプログラムを入力 t e x t e d i t & 保存するファイル名は「myprogram.c」 ※半角英数字(日本語は×) ▽コンパイル(プログラムを機械語に翻訳して実行ファイルを作る) fcc –o myprogram myprogram.c
▽プログラムの実行 myprogram
1章~3章 メモ 2~3 ページ 歴史 1972 年 ベル研究所 UNIX 開発 特徴 コンパクト=移植しやすい 現在のプログラミング C++,Java の基礎 細かな処理=速い できること →4 ページ表 必要なもの →5 ページ表 パソコン,OS(Windows,iOS,Linux),エディタ(メモ帳),コンパイラ 10~15 ページ 機械語=パソコンが理解できる言語 信号処理→ビット→2 進数 高級言語(人間が分かりやすい言語)→機械語に変換(コンパイルする) C 言語の構成要素 →17 ページ表 でてくる用語 →19~21 ページ 24~32 ページ プログラムの作り方 ・文法に従ってプログラムを書く ソースファイル エディタ ・機械語に翻訳→リンク 実行ファイル コンパイラ エラーが出たらソースファイルを修正してコンパイルする ・プログラムを動かす=実行する ・正しく動いているか確認する デバッグ(虫取り) C プログラミングの基本 →36~38 ページ
定数と変数の型
定数と変数の型
定数と変数の型
定数と変数の型(数値)
(数値)
(数値)
(数値)
○定数の型 整数 10 進数 10 15 -20 8 進数 010 先頭に 0 を付ける(正の数) 16 進数 0x10 先頭に 0x を付ける(正の数) 2 進数 0b10 先頭に 0b を付ける(正の数) 実数 10.0 15.0 -20.0 ○変数の型 プログラムでの定義 プログラム内の記述 値の表示 整数 int a; a = 10; a = 010; a = 0x10; a = 0b10; printf("値は%d",a); printf("値は%o",a); printf("値は%x",a); 2 進数表示はなし 実数 float x; double x; x = -10.0; printf("値は%f",x); ○整数型の数値の表示 int yen; yen = 1000; printf(“%d\n”, yen ); printf(“財布の中に%d 円ある\n”, yen );
printf(“財布の中に%d 円ある。2 倍すると%d 円になる\n”, yen , 2*yen ); ○実数型の数値の表示 int r; double pai,c; r = 10; pai = 3.14; c = 2.0 * pai * r; printf( “半径%d の円の円周は%f である\n”, r , c ); 〇数値の表示桁数の指定 %4d 20 4 %6d 20 6 %04d 0 0 20 4 %06d 0 0 0 0 20 6 %6.1f 20. 0 6 1 %8.2f 20. 00 8 2
○配列変数(数値) 配列変数は繰り返し処理と組み合わせて使う 1 月~12 月の日数を計算で使いたい(2 月は 28 日とする)。 int m1,m2,・・・,m12; m1=31; m2=28; ・・・ m12=31; 100 個のデータのとき・・・大変。そこで配列変数として int m[12]; m[0]=31; ← 0 から始まる m[1]=28; ・・・ m[11]=31; 31 28 31 ・・・ 30 31 m[0] m[1] m[2] ・・・ m[10] m[11] ○配列変数の使い方 int m[12] = { 31, 28,・・・, 31 }; printf( “4 月は%d 日ある\n”, m[3] ); printf( “8 月と 9 月の夏休みは%d 日ある\n”, m[7]+m[8] ); printf( “2 月と 3 月の春休みは%d 日ある\n”, ); printf( “1 年は%d 日ある\n”, );
これを1行にまとめると int m[12] = { 31, 28,・・・, 31 };
算術演算子
算術演算子
算術演算子
算術演算子
a の値の変化 一般的な書き方 C 言語特有の書き方 1 増やす(インクリメント) a = a + 1 a += 1 a++ ++a 2 増やす a = a + 2 a += 2 n 増やす a = a + n a += n 1 減らす(デクリメント) a = a - 1 a -= 1 a-- --a 2 減らす a = a - 2 a -= 2 n 減らす a = a - n a -= n 2 倍にする a = a * 2 a *= 2 n 倍にする a = a * n a *= n 2 で割る a = a / 2 a /= 2 n で割る a = a / n a /= n
標準入力関数(キーボードから入力する)
標準入力関数(キーボードから入力する)
標準入力関数(キーボードから入力する)
標準入力関数(キーボードから入力する)
scanf()
scanf()
scanf()
scanf()
○整数の入力 int r; double pai,c,s; pai = 3.14; scanf(“%d”, &r ); c = 2.0 * pai * r; s = pai * r * r; printf(“半径%d の円の円周は%f 面積は%f である\n”, r , c , s ); ○実数の入力 float a; double b;
printf(“a=”); scanf(“%f”, &a ); printf(“b=”); scanf(“%lf”, &b );
printf(“a=%f b=%f \n a+b=%f\n”, a , b ,a+b );
a(整数)+b(実数)は実数として扱われる これでは何を入力するのかわかりにくいので普通は printf( “半径を入力 ”); scanf(“%d”, &r );
○ポインタ プログラムで定義した変数は「変数の値」と「その値が保存されているメモリ上の場所」 があり,後者を「ポインタ」という。この2種類を使い分けることができるのがC言語の 特徴であり,逆に難しいと言われる理由の1つになっている。他の言語は実際にはポイン タで処理されるが,プログラミングでは意識しない仕様になっている。 変数に関する情報 定義 名前 int a; int a[10]; 型 配列 ポインタ メモリ上の保存先(番地) 値 a = 5 定義 値 ポインタ int a double a a &a int a[10]
double a[10] a[0]・・・a[9]
&a[0]・・・&a[9] ※ &a[0] = a
メモリ
【参考資料1】 s 秒を h 時間 m 分 s 秒で表す <プログラムサンプル> int s,h,m; s=7300; h=s/3600; → h=2 1時間は 60×60=3600 秒 s=s%3600; → s=100 s から h 時間の秒数をひいた残りを s m=s/60; → m=1 1分は 60 秒 s=s%60; → s=40 s から m 分の秒数をひいた残りを s printf("%d 時間%d 分%d 秒\n",h,m,s); 答えは 2 時間 1 分 40 秒 【参考資料2】 sin90 の近似値を求める° 3 5 7 9 3 5 7 9 1 1 1 1 3 5 7 9 1 1 1 1 1 1 1 1 3 6 5 120 7 5040 9 362880 のマクローリン展開 ( はラジアン ) とおくと sin sin ! ! ! ! , , , ! ! ! ! sin x x x x x x x x a b c d x x ax bx cx dx = − + − + = − = − = = = − = − = = = + + + + C * * * * * * * * sin ( ) ( ( )) ( ( ( ))) ( ( ( ( )))) x x x x x x x x x x x x ax bx cx dx x ax bx cx dx x x a bx cx dx x x a x b cx dx x x a x b x c dx = + + + + = + + + + = + + + + = + + + + = + + + + 9 3 5 7 9 2 4 6 8 2 2 4 6 2 2 2 4 2 2 2 2 1 1 1 1 ⋯ 言語にはベキ乗の演算子は無いので, を普通に書くと で,このような計算は次のようにするとよい 2 1 とすると sin ( ( ( ( )))) y=x x =x +y a+y b+y c+dy
・変数はすべて double とする。 ・変数名に sin,cos はなるべく使わない方がよい。 ・プログラムの中で使う定数は必ず小数点をつける。 . d x = π π= 3 1416 180 ラジアン <プログラムサンプル> double deg,pai,x,y,val,a,b,c,d; /* x,y を求める */ deg=90.0; pai= x= y= /* 係数 abcd を求める */ a= b= c= d= /* sin の計算 */ val= printf("SIN=%f\n",val); 答えは SIN=1.000004 ※計算誤差がでる
定数と変数の型
定数と変数の型
定数と変数の型
定数と変数の型(文字)
(文字)
(文字)
(文字)
○定数の型 1バイト文字 'A' 'a' 65 ☓☓☓☓ 'あ' 文字列 "kikuchi" "きくち" ○変数の型 定義 プログラム内の記述 文字の表示 1バイト 文字 char x int x x = 'A'; x = 65; printf("文字は%c",x); printf("文字は%d",x); 文字列 char y[バイト数] strcpy(y,"kikuchi"); strcpy(y,"きくち"); ☓ ☓ ☓ ☓ y = "kikuchi"; printf("文字列は%s",y); ○1バイト文字の表示 %c(%d) char moji; moji = 'A'; printf( "文字は%c である\n" , moji ); printf( "コードは%d である\n" , moji ); ○文字列の表示(文字の配列)%s char str[10]; strcpy(str,"kikuchi"); printf( "文字列は%s である\n" , str ); printf( "4文字目は%c である\n" , str[3] ); printf( "バイト数は%d である\n" , strlen(str) ); str[0] [1] [2] [3] [4] [5] [6] [7] [8] [9] k i k u c h i \0 き く ち \0 ・添え字は 0 から始まる。 ・文字列データの最後に\0(NULL,ヌル,ナル)が自動的に入る。 従って,配列の大きさは「バイト数+1」以上が必要。 ・\0 より後ろにあるデータは無視される。 これを1行にまとめると char str[10] = { "kikuchi" }; これを1行にまとめると
○文字を操作する標準関数 1バイト文字の入出力( 繰り返し処理と組み合わせて使う場合が多い) 入力: moji = getchar() 出力: putchar(moji) ・・・ 一般的には printf を使う 文字列の入出力 入力: printf("文字を入力"); gets(str) 出力: puts(str) ・・・ 一般的には printf を使う 文字列の操作 コピーする: strcpy(str, "kikuchi") バイト数を求める: byt = strlen("kikuchi") ・文字列のプログラムをキーボードから入力するように変更せよ。 ・文字列のプログラムで日本語を入力すると結果がおかしい部分がある。なぜか?
場合分け
場合分け
場合分け
場合分け1
1
1
1(条件分岐)
(条件分岐)
(条件分岐)
(条件分岐)
条件:2 つの値を比較する(((比較演算子(比較演算子比較演算子)比較演算子)) ) True=条件を満たす False=条件を満たさない 比較演算子 A=10,B=5 A=10,B=10 A == B A と B が等しい A != B A と B は等しくない A > B A は B より大きい A >= B A は B 以上 A < B A は B より小さい A <= B A は B 以下 ※ C言語では 条件 の演算結果が 0 のとき False,0 以外のとき True となる ①条件を満たすときに処理をする if( 条件 ) { True のときの処理 } <例> int a=10,b=5; if( a == b ) { printf(“1:a と b は等しい\n”); } ②条件によって2通りの処理をする if( 条件 ) { True のときの処理 } else { False のときの処理 } <例> if( a == b ) { printf(“2:a と b は等しい\n”); } else { printf(“2:a と b は等しくない\n”); } ※処理が 1 行のときは{ }は省略できる if( a == b ) printf(“a と b は等しい\n”);③複数の条件によって3通りの処理をする if( 条件1 ) { 条件1が True のときの処理 } else if( 条件2 ) { 条件2が True のときの処理 } else { 条件1,条件2どちらも False のときの処理 } <例> if( a > b ) { printf(“3:a が大きい\n”); } else if( a < b ) { printf(“3:b が大きい\n”); } else { printf(“3:a と b は等しい\n”); }
場合分け2
場合分け2
場合分け2
場合分け2(
(
(switch
(
switch
switch
switch 文
文
文)
文
)
)
)
int a; printf("a="); scanf("%d",&a); switch( a ) { case 1: printf("a は1\n"); break; case 2: printf("a は2\n"); break; case 3: printf("a は3\n"); break; default: printf("a は123以外\n"); } ※break がないとどうなるか
(参考)レポート6 Ⅱ
繰り返し
繰り返し
繰り返し
繰り返し処理
処理
処理
処理1
1
1
1(
(for
(
(
for
for 文)
for
文)
文)
文)
int i; ← i が制御用変数 ・・・・ for( 最初の i の値; i がいくらになるまで繰り返すか; i の変化量) { 繰り返す処理 } ・・・・ 繰り返しの基本 int i,n,s; ○10 回繰り返す
for( i=1; i<=10; i++) { printf("%d 回目\n",i); }
○n 回繰り返す
printf("何回繰り返しますか?"); scanf("%d",&n); for( i=1; i<=n; i++) {
printf("%d 回目\n",i); }
○1 から 10 までの整数の合計 s = 0;
for( i=1; i<=10; i++) { s = s + i;
}
printf("合計は%d\n",s);
※処理が 1 行のときは{ }は省略できる
for( i=1; i<=10; i++) printf("%d 回目\n",i); if( c >= 25 ) { 暑い } else if( c >= 10 ) { 快適 } else { 寒い } if( c < 10 ) { 寒い } else if( c < 25 ) { 快適 } else { 暑い }
○正の整数 n までの合計
printf("n="); scanf("%d",&n); s = 0;
for( i=1; i<=n; i++) { s = s + i; } printf("%d までの合計は%d\n",n ,s); ○n!の計算 printf("n="); scanf("%d",&n); s = 1; ←注意
for( i=1; i<=n; i++) { s = s * i; } printf("%d の階乗は%d\n",n ,s); 制御用変数 i の変化量を変える i の値を 2 増やす i=i+2 i+=2 i の値を 2 減らす i=i-2 i-=2 ○正の整数 n までの奇数の合計 printf("n="); scanf("%d",&n); s = 0;
for( i=1; i<=n; ?) { s = s + i;
}
(参考)レポート7 Ⅱ 1 0 x x a < のとき s= である。処理を追加せよ。 ① s を実数にする ② int x2; x2 = x の絶対値 ③ x 0 1x a < のとき s= とする ○配列の合計 double dt[5]={ 10, 15, 20, 25, 30 }; double s; int i; s = 0;
for( i=0; i<5; i++) { s = s + dt[i]; } printf("合計は%f\n",s); printf("平均は%f\n",?); 〇文字列の表示(教科書 85 ページ) 逆に表示するには? 10 15 20 25 30 dt[0] dt[1] dt[2] dt[3] dt[4] int i,a,x,s; printf("a="); scanf("%d",&a); printf("x="); scanf("%d",&x); s = 1;
for( i=1; i<=x; i++){ s=s*a; } printf("%d の%d 乗は%d\n",a,x,s); 電卓と同じ S S S S S S S S S S
S
= × = = × = = × = = × = = × ==
×
× × × × ×
⋯
初期値3 3 3 9 3 27 3 81 3 243
1
3
3 3 3 3
a= 3 x= -2 3 の-2 乗は 0.111111○ sinθの値を0°~360°,45°間隔で小数点以下第2位まで求める。 <プログラムサンプル> #include <stdio.h> #include <math.h> ←追加 数学関数を使う場合に必要 main(void) { int i; double pai,deg,rad; pai = 4.0 * atan(1.0); ← 1 4×tan ( )− 1 printf("角度\tsin\n"); ← \t:Tab for( 9 回繰り返す ) { deg = i を使って角(°)を求める rad = deg をラジアンに変換する printf("%4.0f\t%5.2f\n",deg,sin(rad)); } } 角度 sin 0 0.00 45 0.71 90 1.00 135 0.71 ・・・・ 315 -0.71 360 0.00
多重ループ ○九九の表 int i,j;
for( i=1; i<=9; i++) {
for( j=1; j<=9; j++) { ←i,j 別の制御用変数を使う printf("%d",i*j); } } ・数字がくっついてわからない → %d を変更 1 2 3 4 5 6 7 8 9 2 4 6 8 10 12 ・・・ ・1段ごとに改行を入れる → printf("\n")を追加 1 2 3 4 5 6 7 8 9 2 4 6 8 10 12 14 16 18 ・・・ ・表らしくする →考えてみよう | 1 2 3 4 5 6 7 8 9 ---+--- 1| 1 2 3 4 5 6 7 8 9 2| 2 4 6 8 10 12 14 16 18 3| 3 6 9 12 15 18 21 24 27 4| 4 8 12 16 20 24 28 32 36 5| 5 10 15 20 25 30 35 40 45 6| 6 12 18 24 30 36 42 48 54 7| 7 14 21 28 35 42 49 56 63 8| 8 16 24 32 40 48 56 64 72 9| 9 18 27 36 45 54 63 72 81
繰り返し
繰り返し
繰り返し
繰り返し処理
処理
処理
処理2
2
2
2(
(while
(
(
while
while 文
while
文
文,
文
,do
,
,
do~
do
do
~
~
~while
while 文
while
while
文
文
文)
)
)
)
繰り返す回数が最初に決まっていない時などに使われることが多い。 ① while 文 while( 条件 ) { True のときの処理 } 追加 i=1~9 j=1~9 printf(" | 1 2 3 4 5 6 7 8 9\n"); printf("--+---\n");
○1年の日数の合計 int m[12]={31,28,・・・,31}; int i,s; s = 0; i = 0; while( i<12 ) { s = s + m[i]; i++; } printf(“平年は%d 日である\n”,y); 〇2つの整数 a,b を入力し,while を使って商と余りを求める。 ヒント:a が b より大きいとき,a から b を引いた値を a とする。 同時に sho をインクリメントする。 int a,b,sho; printf("a="); scanf("%d",&a); printf("b="); scanf("%d",&b); sho = ・・・・ while( ・・・・ ) { ・・・・ } printf("商%d あまり%d\n",・・・・); ② do~while 文 最低1回は処理を行う do { True のときの処理 } while( 条件 ) ; ○入力した値の合計を求める。ただし,0を入力したら終了する。 s = 0; do { printf("n="); scanf("%d",&n); s += n; /* for を使うと */ s = 0;
for( i=0; i<12; i++ ) { s = s + m[i]; }
関数
関数
関数
関数
①標準ライブラリ関数(すでに用意されている関数) printf scanf sin など
使う関数によって #include <・・・> が必要 → 教科書 190:プリプロセッサ ②自分で作る まとまった処理や繰り返し行う処理を関数としてプログラムを作る。 関数名は予約語以外の名前であれば自由につけられる。 仕組み 1 2
(
,
,
)
y
=
f
x x
⋯
戻り値 関数名 引数 ・戻り値と引数は同じ型にする ・main 関数は最後に記述する ・変数名はそれぞれの関数で独立している(同じ変数名でもよい) double func(double x1, double x2){ double y; y = x1 + x2; return y; } int main(void) { double ans; ans = func( 1.0, 2.0 ); printf("ans=%f\n",ans); } ○入力した n までの合計を求める int main(void) { int i,s; printf("n="); scanf("%d",&n); s = 0;
for( i=1; i<=n; i++) s = s + i; printf("%d までの合計は%d\n",n,s); }
1 行にまとめると
→合計を求める処理を関数 sum にする int sum(int n)
{
int i,s; s = 0;
for( i=1; i<=n; i++) s = s + i; return s; } int main(void) { int n,s; printf("n="); scanf("%d",&n); s = sum(n); printf("%d までの合計は%d\n",n,s); } (参考)繰り返し int main(void) { int i,n; printf("n="); scanf("%d",&n); for( i=1; i<=n; i++) {
printf("%d までの合計は%d\n",i,sum(i)); }
アルゴリズム
アルゴリズム
アルゴリズム
アルゴリズム
①最大値 max を求める #include <stdio.h> #define DT_N 5 ← 教科書 190:プリプロセッサ int main(void) { int dt[DT_N]={ 10, 20, 15, 25, 5 }; int i,max; max = dt[0];
for( i=0; i<DT_N; i++) {
if( max < dt[i] ) max = dt[i]; }
printf("最大値は%d\n",max); }
②並べ替え(昇順)単純なソート #include <stdio.h> #define DT_N 5 int main(void) { int dt[DT_N]={ 10, 20, 5, 25, 15 }; int i,j,temp;
for( i=0; i<DT_N-1; i++) { for( j=i+1; j<DT_N; j++) { if( dt[i] > dt[j] ) { temp = dt[i]; dt[i] = dt[j]; dt[j] = temp; } } }
for( i=0; i<DT_N; i++) printf("%d ",dt[i]); printf("\n"); } i j dt[0] dt[1] dt[2] dt[3] dt[4] 0 1 10 20 5 25 15 [0]と[1]を比較 0 2 5 20 10 25 15 [0]と[2]を比較 → 交換 0 3 5 20 10 25 15 [0]と[3]を比較 0 4 5 20 10 25 15 [0]と[4]を比較 1 2 5 10 20 25 15 [1]と[2]を比較 → 交換 1 3 5 10 20 25 15 [1]と[3]を比較 1 4 5 10 20 25 15 [1]と[4]を比較 2 3 5 10 20 25 15 [2]と[3]を比較 2 4 5 10 15 25 20 [2]と[4]を比較 → 交換 3 4 5 10 15 20 25 [3]と[4]を比較 → 交換 回数が多い → ( ) N i N N i N − = − × = = = =