前学期のまとめ


第1回 イントロダクション、文字列および計算結果の画面表示
第2回 数値の定数および変数の画面表示、キーボード入力
第3回 文字の定数および変数、変数の使い方全般
第4回 条件制御文(if文)、算術関数の使い方
第5回 繰り返し制御文(for文) 、実数計算の誤差の蓄積,多重ループ
第6回 その他の制御文(switch文,while文 do while文 無限ループ)
第7回 1次元配列,統計計算(平均,標準偏差)


第1回 イントロダクション、文字列および計算結果の画面表示
プログラムの書き方:

 #include <stdio.h>
 int main(void){
   ‥‥
   ‥‥
 }

‥‥の部分にプログラムを書く。

プログラム中では,語の切れ目その他の許される所で,好きな数の空白,TAB,改行をいれて構わない。

使用可能な文字コード

アルファベット: A-Z a-z 
数字: 0-9
空白 
記号:  . _ < > ? + - * /; : { } ( ) [ ] ! " ' # % & \ = |
制御コード:  TAB  改行

を用いて書く。全角文字(日本語文字)は文字列以外に使ってはいけない。
特に,全角の空白を入れるとコンパイルエラーになるので注意する。

数式の書き方
 ○演算子の種類:
  使用可能な演算子: +-*/% 
   (べき乗演算子^は使えないことに注意)
 演算の優先順序
  ()で囲んだところが最も優先順位が高く、最初に実行される。
  *,/は+,-よりも、演算の優先順位が高い。
 
 例: 3.0*4.0/5.0+6.0 と 3.0*4.0/(5.0+6.0) は演算結果が異なる。
 
 ○実数型定数
 f形式(指数なし表示) : 12.34  2.0  2. 
 (小数点以下がない場合でも少数点を付けることに注意)
 e形式(指数つき表示) : 1.234e1  2.0e0  2e0  
  (1.234e1 は 1.234×101 を表す)
 ○整数型定数
 d形式 : 1234  2  3
 のように小数点のない定数は整数と判断する
 ○文字型定数
  1文字 : 'a'  ( 文字を ' と で囲む)
 文字列: "Hello World!!" ( 文字列を " と "で囲む)

■画面表示の仕方(基本的なprintf文)
○文字列の画面表示
   printf("Hello World!!\n");

○計算結果の画面表示

printf("Answer= %e\n",3.0*4.0/(5.0+6.0));
第2回 数値の定数および変数の画面出力、キーボード入力

printf()関数

printf()は書式出力の関数である。

printf("\na=%d b=%d",a,b);

の例で示すように,printf(”書式”,出力変数)の形をしていて,基本的には,””で囲まれた文字列がそのまま出力される。但し,\n 記号のように¥マークが付いた文字はエスケープ文字と呼ばれ,画面制御を行う特別な記号として扱われる(\n:改行復帰)。そのため,画面上には表示されない。また,% は,””の後に表記されている変数(上の例では,変数a,b)の値を,以下に示す各々の変数の型に応じて画面に表示できる書式に変換する際の約束を表している。

エスケープ文字の例: \n : 復帰改行, \t : 水平タブ,\v : 垂直タブ, \b : 1文字後退

%d: 整数(int型データ)の符号付き10進数表示
%f: 単精度実数(float型データ)の指数なし表示
%e : 単精度実数(float型データ)の指数つき表示
%hd:  2バイト整数(short型データ)の表示
%lf:  倍精度実数(double型データ)の指数なし表示
%le : 倍精度実数(double型データ)の指数つき表示
%f,%e は,printf関数では単精度実数型(float)と倍精度実数型(double)の両方に使える 。
一方,この後で説明する,scanf関数では,単精度実数型(float)の場合は,%f,%e,倍精度実数型(double)場合は %lf,%le を使う必要がある。
%c : 文字型データの1文字
%s : 文字列データ

scanf()関数

キーボードからの入力データを%‥に記した変換書式にしたがって、変数に代入する。 (変数名の先頭に&がつくことに注意する)
%‥の約束はprintf()の場合と同様である。
例:

scanf("%d", &a)

定数

変数はプログラムの中で値を変えることができるデータであるのに対して,定数は値が固定されているデータです。定数は,変数と同様の型をもっており,以下のように数値や文字を直接的に表現します。

定数の種類
文字........'z'
文字列......"abcde"
整数定数........120
実数定数........2.3e2

算術演算
C言語では,通常の数式と類似した約束で数式をあらわすことができます。そのための算術演算子に以下のものがあります。

算術演算子の種類
*    乗算   a*b   aにbをかける
/    除算   a/b   aをbでわる
+    加算   a+b   aにbを足す
-    減算   a-b   aからbを引く

変数名の規則
 使える文字, 英字(a-z,A-Z),アンダーバー( _ ),数字(0-9)の組み合わせ。ただし,先頭は英字。英字の大文字,小文字は区別される。名前の長さは,一般的に最初の31文字までは有効。
以下の予約語は使えない。

予約語

auto break case char const continue default do
double else enum extern float for goto if
int long register return short signed sizeof static
struct switch typedef uinion unsigned void volatile while

代入文
右辺の変数や定数、または、式の計算結果をを、左辺の変数に代入する。(左辺と右辺が等しいという意味ではないことに注意)

変数 = 定数;
変数 = 変数;
変数 = 式;

例: a=b+c;  c=1.3; 

第3回 文字の定数および変数、変数の使い方全般

変数を使うときの注意

1.宣言文で宣言する(宣言していない変数は使えない)。
2.変数の型に応じて、表現可能な範囲や有効桁数がある。
3.printf(),scanf()で変数の値を入出力する場合,変数の型の約束に合った書式(%d, %e)を用いる。


定数および変数の種類

定数の種類 宣言 printf書式
整数定数 short %hd
int %d
実数定数 float %f, %e
double %lf, %le
文字定数 char %c
文字列定数 charの配列 %s

■ データの型と表現可能な範囲

長さ 表現可能な範囲
char  1Byte 1文字のコード(=256種類の文字、アスキーコード)
short int 2Byte=16bit 0~(2^16-1) (=65,535 -32768~+32767の整数)
long int 4Byte=32bit 0~(2^32-1) (=4,294,967,294 -2147483648~+2147483647の整数
float 4Byte=32bit 仮数部(23ビット=8,388,608, 6~7桁)
指数部(8ビット=256, +38~-45乗), 符号1bit
double 8Byte=64bit 仮数部(52ビット=4.5036e15, 15~16桁)
指数部(11ビット=2046, +308~-324乗), 符号1bit

第4回 条件制御文(if文)、算術関数の使い方

if文
・構文

if(条件式){
複数の実行文1;
}else{
複数の実行文2;
}

・動作

条件式が成立する時:  文1を実行
条件式が不成立の時: 文2を実行


■条件式の種類

条件式    意 味  注 意
比較演算子    
 x==a   xがaに等しい? x=aと間違えない
 x!=a  xがaに等しくない?  
 x>a  xがaより大きい?  
 x<a  xがaより小さい?  
 x>=a  xがa以上?  
 x<=a  xがa以下?  
論理演算子    
(式1)&&(式2) (式1)と(式2)が同時に真?  
(式1)||(式2) (式1)と(式2)のどちらかが真?  
!(式1) (式1)が偽?  

■ 算術関数

C言語が用意している算術関数一覧
関数名 引数及び関数の型 機能
abs(i) int 整数iの絶対値を求める
acos(x) double 実数xの逆余弦を求める
asin(x) double 実数xの逆正弦を求める
atan(x) double 実数xの逆正接を求める
ceil(x) double 実数xの小数点以下を切り上げる
cos(x) double 実数xの余弦を求める
exp(x) double eのx乗を求める
fabs(x) double 実数xの絶対値を求める
floor(x) double 実数xの小数点以下を切り捨てる
fmod(x,y) double 実数xをyで割った剰余を求める
log(x) double 実数xの自然対数を求める
log10(x) double 実数xの常用対数を求める
pow(x,y) double 実数xのy乗を求める
sin(x) double 実数xの正弦を求める
sqrt(x) double 実数xの平方根を求める
tan(x) double 実数xの正接を求める


第5回 繰り返し制御文(for文) 、実数計算の誤差の蓄積,多重ループ

■ for文
・構文

for(式1; 式2; 式3){
文1;
文2;

}

・動作

式1: ループ処理の最初に実行する式(ループ変数に初期値を与える)
式2: ループ処理を繰り返すか否かを判断するための条件式。
    式の条件が成立していれば{ }の中の処理を繰り返す。
    成立していなければ処理を終了する。
式3: ループ処理の最後に実行する式(ループ変数を増減する式)。


例:整数型のループ変数iを用いて,iを1からnまで1ずづ増やしながら{ }の中の反復処理をn回繰り返すfor文

for(i=1; i<=n; i++){
文1;
文2;
‥‥
}
第6回 その他の制御文(switch文,while文 do while文 無限ループ)

■switch文
・構文

switch(変数){
case 定数1:
文1;
break;
case 定数2
文2;
break;
‥‥‥
default:
文3;
break;
}

・動作

変数の値が定数1の場合:文1を実行,定数2の場合: 文2を実行,それ以外の場合:文3を実行

■while文
・構文

while(条件式){
文1;
文2;
‥‥;
}

・動作

条件式を判断し,条件式が成立していれば{ }の中の文を実行


■do while文
・構文

do{
文1;
文2;
‥‥;
}while(条件式);

・動作

{ }の中の処理を実行した後、条件式を判断。
条件が成立している場合は、{ }内の処理をもう一度繰り返す。
条件が不成立の場合は、処理を終了する。

■無限ループ
・構文
◎while文による無限ループ

while(1){
文1;
文2;
‥‥
}

◎for文による無限ループ

for( ; ; ){
文1;
文2;
‥‥
}

◎do while文による無限ループ

do {
文1;
文2;
‥‥
}while(1);

・動作

{ }内の処理を無条件に繰り返す(CTLR+Cが押されるまで繰り返す)。
第7回  1次元配列,統計計算(平均,標準偏差)

1つの名称でくくることのできるデータの集まりがあるとします。配列はその変数の集まりであるデータ全体に1つの名前をつけて、データの集合を一まとめにして扱う手段を提供します。配列データの一つ一つ(配列要素)を区別するために、配列名とその要素番号を指定する使い方をします。例えば,配列名がaという名前の配列変数の一つ一つ(配列要素)は, 以下のようになります。

a[0], a[1], a[2]…… 

ここで、aは配列名,0,1,2は配列要素の番号
■1次元配列
・宣言の仕方
 データの型 配列名[要素の最大数];
 例: int a[100];

・参照の仕方
 配列名[要素番号]

例:
  読込み
   for(i=0;i<100;i++)
    scanf("%e",&a[i]);
 表示
 for(i=0;i<100;i++)
   printff("%e\n",a[i]);
 演算
 for(i=0;i<100;i++)
   a[i]=2*i-1;

■配列データの初期化
・宣言文の初期値として記述する
 データの型 配列名[要素の最大数]={ , で区切ったデータの並び};

例: int a[10]={40,85,90,63,15,53,78,45,93,68};