第6回 制御構造1 繰り返し (while 文)

  • 本日覚えること
★Linux
(1) > リダイレクト (画面出力をファイルに記録)
(2) catコマンド (ファイルの内容を画面にだすコマンド)
★C言語
(3) while ループ (繰り返しの文)
  • 前回までの復習
(1)int 整数 printf("%d\n");
(2)double 浮動小数点数 printf("%lf\n")
(3)出力の順番は並び方


例:
test6_0.c

#include<stdio.h>
int main(){
double a=1.2; int b=3; double c=3.0;
printf("a=%lf,c=%lf,b=%d",a,c,b);

retrun 0;
}

移動(cd使う)
コンパイル

gcc test6_0.c -o test6_0.out

実行

./test6_0.out

出力:

a=1.2 c=3.0 b=3

  • 今日の行うこと
-Linux: コマンド ファイルへの出力(リダイレクト>) と ファイルの内容の確認
-C言語:ループ文
-算数:平方根,ルート
  • 本日は,まずLinuxの勉強,次に,C言語をやります。
  • まずLinuxの勉強から
  • Linuxでファイル書き出しとその出力

Linuxのファイルへの書き出しとその出力を勉強します。

    • 画面の結果へのファイルへの書き出しは「リダイレクト」とよばれる機能を使います。

画面の結果(例)

pwd

以下の例のように現在のどこのフォルダ(ディレクトリ)にいるかが画面に出力される.

/kutikomi/Adj/sikousakugo #なにが表示されるかは人によって変わる

次に以下のようにうつとファイルtmp.txtに出力を記録できる。

pwd > tmp.txt

いまwindowsのメモ帳等で、tmp.txtをみてみると、
2つ上で画面に表示されていた内容が表示されていることがわかる.

まとめると,

リダイレクト > :
[コマンド > ファイル名] で コマンドの出力結果をファイル名を与えたファイルに出力できる。
上記のものをリダイレクトという.

次に、linux上で上記のファイルを表示する方法.

cat tmp.txt

ファイルの内容が表示される.

  • 他の例 ($は打たない)

例1)ディレクトリのファイル一覧をtest2.txtに保存

$ls
$ls > test2.txt
$cat test2.txt

例2)これまでのコマンド履歴を保存
historyはこれまでのコマンドの履歴を出力するコマンド

$history
$history > test3.txt
$cat test3.txt

プログラムの基本は、繰り返しと分岐。

#include <stdio.h>
int main(){
  int i;
  i=1;
  while(i<=5){
    printf("i=%d \n",i);
    i=i+1;
  }
 printf("おわり\n");
  return 0;

}

コンパイル
実行
出力

i=1
i=2
i=3
i=4
i=5
おわり

解説:
繰り返しはwhile文を使う。
(他はfor文がある)

while(条件){
  繰り返しの内容
}

条件をみたすときに{...}で囲まれた内容を繰り返す.


上の例だと
条件:

i>=5 (iが5より小さければくりかえす)
繰り返しの内容:
 //iの内容を表示する
printf("i=%d \n",i);
//iに1をたしてiに再び代入する
i=i+1;

コンピュータがやっていることを書くと,

★前処理
//最初にiを宣言
int i;

  • >iを宣言

i=1

  • >iに1を代入

★繰り返しループ突入
while(i<=5)で条件判定
i<=5 か? i=1なので5より小さい OK、{..}中を実行しよう.
//{..}内の実行へ
printf("i=%d",\n);

  • > "i=1"と表示

i=i+1

  • >iは1なので,i+1を計算すると2, それを再びiに代入する

//{..}内がおわったので条件判定へ


while(i<=5)で条件判定
i<=5 か? i=2なので5より小さい OK,{..}中を実行しよう.
printf("i=%d",\n);

  • > "i=2"と表示

i=i+1

  • >iは2なので,i+1を計算すると3, それを再びiに代入する


while(i<=5)で条件判定
i<=5 か? i=3なので5より小さい OK,{..}中を実行しよう.
printf("i=%d",\n);

  • > "i=3"と表示

i=i+1

  • >iは1なので,i+3を計算すると4, それを再びiに代入する


while(i<=5)で条件判定
i<=5 か? i=4なので5より小さい OK,{..}中を実行しよう.
printf("i=%d",\n);

  • > "i=4"と表示

i=i+1

  • >iは1なので,i+4を計算すると5, それを再びiに代入する

while(i<=5)で条件判定
i<=5 か? i=5なので5より小さい OK,{..}中を実行しよう.
printf("i=%d",\n);

  • > "i=5"と表示

i=i+1

  • >iは1なので,i+5を計算すると6, それを再びiに代入する


while(i<=5)で条件判定
i<=5 か? i=6なので5より大きい、条件を満たさない ,{..}の中を実行しない.


★括弧の後を実行
printf("おわり\n")

  • >"おわり"と表示
  • 問題1

1から100まで表示するプログラム

答え

#include <stdio.h>
int main(){
  int i;
  i=1;
  while(i<=100){
    printf("i=%d \n",i);
    i=i+1;
  }
 printf("おわり\n");
  return 0;

}
  • 問題2

1から100まで表示する3つ刻みに表示するプログラム
1,4,7,10,13,...みたいな感じ。。

答え

#include <stdio.h>
int main(){
  int i;
  i=1;
  while(i<=100){
    printf("i=%d \n",i);
    i=i+3;
  }
 printf("おわり\n");
  return 0;

}
  • 1から100までの平方根の表をつくって,ファイルに記録する.

test6_2.c

#include <stdio.h>
#include <math.h>

int main(){
  int i;
  i=1;
  while(i<=100){
    printf("iの平方根は %lf \n",i,sqrt(i));
    i=i+1;
  }
 printf("おわり\n");
  return 0;

}

コンパイル

gcc test6_2.c -o test6_2.out

実行

./test6_2.out

出力

1の平方根は2
2の平方根は1.414
3の平方根は1.7320
4の平方根は2.000
5の平方根は2.2362
..

ファイルへ記録

./test6_2.out > heihoukon.txt

ファイルの内容の確認

cat heihoukon.txt

解説
#include

  • >数学用のプログラム的なものをここにいれこむ。
  • >数学の関数を使うときに使う.

printf("i=%d 平方根 %lf \n",i,sqrt(i));

  • >sqrt(i) sqrt(値) 値の平方根を求める.

square(平方) root(根) -> sqrt

平方根って?
sqrt(N)は2回かける(2乗すると)とNになる数
例えば,sqrt(4)=2 なぜならば,2*2=4
例えば,sqrt(9)=3 なぜならば,3*3=9
例えば,sqrt(25)=5 なぜならば,5*5=25
例えば,sqrt(2)=1.414213..(無限に続く) なぜならば,1.4142*1.4142=2.0000
例えば,sqrt(3)=1.732058..(無限に続く) なぜならば,1.7320*1.7320=3.0000
http://denwade.jugem.jp/?eid=160 参照

  • 問題3 (来週)

1から10までの和を求める。
上の具体例のように機械の動きをおってみる

#include <stdio.h>
int main(){
  int i;
  int sum;
  i=1;
  sum=0;
  while(i<=10){
    printf("i=%d \n",i);
    i=i+1;
    sum=sum+i;
  }
 printf("%d\n",sum);
  return 0;

}


C氏メモ

[2014/07/14 20:03:08] 
移動方法→lsでのぼってsygdriveを探す
 cdでprogramフォルダまで移動
  cygdrive→c→User→xxx→My*→program

整数の表示→%d
少数の表示→%lf

(補足)小数点にはfloutとdobbleがある
 dobbleは表せる表示が倍
 容量を節約したい場合はfloutを使用(今はあんまり関係ない)

【リダイレクト】
コマンド > ****.txt
 →表示したデータを指定ファイルに出力
  例.pwd > test.txt
     ls > test2.txt

【キャンセル】
ctl + C

【データの出力】
gcc 入力ファイル -o 出力ファイル

【データの実行】
./ファイル名

【While】
{}の中を繰り返す(条件から外れるまで)

・indentの仕方(while)
・iの平方根の間違え

B氏メモ

[2014/07/14 20:06:04

小数点を表すもの
flout 浮動 メモリ節約したい人はflout
double floutよりも多くケタを表せる。精度もいい。

pwd > test.txt
今書いてある情報をtest.txtに書き込みなさい というコマンド→リダイレクト

history > test.txt
今までのコマンドの履歴をtest.txtに書き込みなさい

cat test4.txt
test4.txtに書いてある情報を出力しなさい

誤ったコマンドを打った際、止めたいときCtrl+C がキャンセル


#include <stdio.h>
標準入出力の関数(stdio.h)の内容を書き出しなさい というコマンド

#include <math.h>
<math.h>の内容を書き出しなさい(数学系のコマンドを使うときに使う)

スペースではなくタブで