プログラミング基礎演習

鹿児島大学
プログラミング基礎演習
第3回
数値の計算
半田利弘
鹿児島大学 大学院理工学研究科 物理・宇宙専攻
理化学研究所
2進数、10進数、16進数
▶ 電気回路では2進数が扱いやすい
■
2n進数ならなんとかなる
▶ 人間は10進数がなじみがある
▶ 両者の妥協→16進数
■
■
コンピュータが譲ればよい(a~fを使わない)
10進数を1桁ずつ計算すればよい
▶ 16進数だと扱えるデータの種類が少なすぎ
▶ 1byte=8bit=16進数で2桁(256通り)
理化学研究所
デジタルデータ
▶ あらゆるデータを2進数で表す
■
どう対応するかは規約で決める
▶ 数値:桁数が限られているのをどうするか?
■
■
■
整数:有効数字無限大、値の範囲が狭い
浮動小数点数:有効数字あり、値の範囲が広い
ビットパターン:8進数、16進数
理化学研究所
デジタルデータ
▶ 同じビットパターンでも状況が違うと違う意味
▶ 例えば00100000=0x20
■
■
整数だと 32
文字なら「 」
▶ 例えば01100011=0x63
■
■
整数だと 100
文字なら「c 」
理化学研究所
プログラムを作る
▶ その前に、
■
フォルダーで整理しよう
▶ 本日の課題用フォルダー
■
■
■
■
■
例えば、eドライブにlesson2のフォルダーを作る
e: eドライブへ移動
cd \ ルートフォルダーへ移動
mkdir lesson2 フォルダーlesson2を作る
cd lesson2 フォルダーlesson2へ移動
理化学研究所
プログラムを作る
▶ 今日作ったものは、ここに保存しておこう
■
list1.c, list2.c, list3.cなど
▶ 先週のもの
■
■
■
フォルダーが異なるから残っている
先週用のフォルダーを作って移動しておこう
move 移動前のファイル名 移動後のファイル名
▶ 例えば
■
■
■
cd ..
mkdir lesson1
move list1.c lesson1\list1.c
理化学研究所
1つ作ってみよう
▶ 整数の計算結果を画面に表示させる
■
■
p.32 List2-1 (list2.c)
整数を画面に表示させる
#include <stdio.h>
int main(void)
{
printf("加算の結果は%dです。\n",3+2);
printf("減算の結果は%dです。\n",5-8);
printf("乗算の結果は%dです。\n",3*4);
printf("除算の結果は%dです。\n",7/3);
return(0);
}
理化学研究所
printfの意味
▶ printf(…);
■
■
■
指定に従って、文字を画面に書く“関数”
関数:何らかの機能を果たすもの
関数、機能 function
 print with format
▶ 括弧の中身=引数
■
コンマ「,」で区切る
▶ printf("加算の結果は%dです。\n",3+2);
■
この例では引数は2つ
理化学研究所
printfの引数
▶ ("加算の…%dです\n",3+2);
▶ 第1引数:どのように文字を書くかの指定
■
■
■
以下のいずれにも当てはまらない:そのまま書け
%d バイナリを対応する整数値で書け
\n 改行しろ
▶ 第2引数:%指定の対象となる変数
■
■
3+2
この結果を第1引数中の最初の%dで書け
理化学研究所
四則演算の記号
▶ 通常の数式とちょっとだけ違う
■
■
■
タイプライターで使っていた文字を転用したため
加算と減算は、通常と同じ +と乗算と除算は、*と/で代用
#include <stdio.h>
int main(void)
{ printf("加算の結果は%dです。\n",3+2);
printf("減算の結果は%dです。\n",5-8);
printf("乗算の結果は%dです。\n",3*4);
printf("除算の結果は%dです。\n",7/3);
return(0);
}
理化学研究所
整数演算
▶ まずは、整数だけの世界
▶ 除算の結果は切り捨て!
■
7/3は2.3333….ではなく、2
理化学研究所
計算の順番
▶ 通常の数式と同じ
■
■
()があれば、そちらが優先
それ以外は乗除優先
▶ 試してみよう
■
p.36 List2-2 (list2.c)
#include <stdio.h>
int main(void)
{
printf("%d\n",123+45*67-8/2);
return(0);
}
理化学研究所
printfの書式:引数を増やす
▶ %dをたくさん書くとどうなるか
■
■
■
%dの数だけ、引数を増やす
左から順に対応する
p.38 list2-3 (list3.c)
#include <stdio.h>
int main(void)
{
printf("%d+%d=%d\n",3,2,3+2);
return(0);
}
理化学研究所
printfの書式
▶ 文字%を書きたいときはどうする?
■
「%%」と書くと文字「%」の意味になる。
理化学研究所
printfの書式:桁揃え
▶ %9dと書いたら…
■
■
■
dの直前の数値だけ、表記桁数を確保する
確保した桁数に右詰で表示する
p.40 list2-4 (list4.c)
#include <stdio.h>
int main(void)
{ printf("価格一覧\n");
printf("%8d\n",100);
printf("%8d\n",120);
printf("%8d\n",35);
printf("%8d\n",4);
return(0); }
理化学研究所
printfの書式:桁揃え
▶ %8dの桁数には符号も含まれる
■
負数の時は実質1桁減る
▶ %-8d, %+8dなどと書くとどうなるか?
▶ 実は、もっといろいろ指定できる
■
■
最も詳しくは、教科書p.385参照
意味がわからなければやってみるのも一つの手
理化学研究所