C言語よく使うコード

C言語

C言語でよく使うコードをまとめておきます

if文

if ()
 文1
else
 文2
if (a % 10)
 printf(“10の倍数ではないです。”);
else
 printf(“10の倍数です。”);

式には、( )が必要です

a % 10
1桁目の数値を取得する時にも使えます

横に並べて書くこともできます(改行なしでもOK)
if (式1) 文1
if (式2) 文2

下記のような場合、コードが読みやすくなります

min = a
if (b < min) min = b;
if (c < min) min = c;
ifelse の代わりに、?: を使うこともできます
? 文1 : 文2
diff = (n1 > n2) ? n1 – n2 : n2 – n1;
if (n1 > n2)
 diff = n1 – n2;
else
 diff = n2 – n1;

この場合は、式に、( )は不要です

else if の使い方
if (式1)
 文1
else if(式2)
 文2
else
 文3
if (a > 0)
 printf(“正”);
else if (a < 0)
 printf(“負”);
else
 printf(“0”);

else文の中に、入れ子となってif文が入っている状況です

switch文

switch (式) {
 case 値1 : 式1 break;
 case 値2 : 式2 break;
 default : 式3; break;
}
swtich (n % 2) {
 case 0 : puts(“偶数”); break;
 case 1 : puts(“奇数”); break;
 default : puts(“不正な値です”); break;
}

値 と 式 の間に、: が必要です

case と 式の間、式 と : の間に、半角スペースが必要です

各caseの文の後に、break; が必要です

caseがヒットしたところ ~ break; までの箇所が実行されます

どのcaseにもヒットしない場合、default : ~ break; までの箇所が実行されます

for文

for (int i = 0; i < 3; i++) {
printf(“%d\n”, i);
}
for (式1; 式2; 式3)

各仮引数の間は、; で区切る

(式1; 式; 式3) の後ろに、; を付けないように注意

下記のように記述すると 文 が実行されなくなります

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

この場合の
;
は何も実行しない文(空文 くうぶん)となります

文の直後で、式3が実行されます

ii (文の直後)
01
12
23

do文 / while文

do文

do {

} while (式);

文の後に、while を記述します

下記のような記述はできません
do while(式) {

};

while文

while (式){

};

+=など

sum = sum + no;
sum += no;

演算子の後に、= を記述します

下記のような記述はできません
max =+ no

sum に no を加える という処理をした後に、sum に代入するという処理をしています

break / continue

break

ループ文の中に記述すると、記述した箇所で、ループを抜けます

for (int i = 1; i <= 5; i++)
if i == 3 break;
printf(“%d\n”, i);

1
2
3

continue

ループ文の中に記述すると、記述した箇所で、ループの最初にジャンプします

for (int i = 1; i <= 5; i++)
if i == 3 continue;
printf(“%d\n”, i);

1
2
4
5

ループ文:for文、do文、while文の総称

配列

int a[5];

 

for (int i = 0; i < 5; i++)
a[i] = i;

for (int i = 0; i < 5; i++)
printf(“%d\n”, i);

a[0]
a[1]
a[2]
a[3]
a[4]

[ ] の数値は、要素数です。a[5] という要素はありません。

int a[5] = {1, 2, 3, 4, 5};

配列の初期化は、{ } を使用します

初期化の方法各要素の値備考
int a[5] = {1,2,3,4,5};{1,2,3,4,5}基本形
int a[] = {1,2,3,4,5};{1,2,3,4,5}要素数を省略できる
int a[5] = {1,3};{1,3,0,0,0}初期化しない要素の値は、0
int a[5] = {0};{0,0,0,0,0}全て0で初期化
int a[] = {[2] = 5, 9, [6] = 3, 1}{0,0,5,9,0,0,3,1}要素を指定することができる

マクロ

#define NUMBER 7

main関数の前に記述する

#define を記述する

; は不要

extern

#include

 

int point[5];

void print_pass(void);

int main(void){

extern int point[5];

}

void print_pass(void){

extern int point[5];

}

extern:ブロック外で宣言されている変数を使用します

関数の宣言

int min_of(const int a[], int n){
int min = a[0];
 for (int i = 1; i < n; i++)
  if (a[i] < min) min = a[i];
return min;
}

関数を宣言する時、極力、配列の仮引数に const を付けます
これにより、関数内で配列の書き換えが不可となります
そして、この関数を安心して呼び出すことができます

int mat_add(const int a[][3], const int b[][3], int c[][3], int n){
 for (int i = 0; i < n; i++)
  for (int j = 0; j < 3; j++)
   c[i][j] = a[i][j] + b[i][j];
return 0;
}

最も高い次元未満の要素数は、必ず定数となります

static

#include

 

int a;

int main(void){

static int b;
int c;

printf(“%d/n”, a); // 0
printf(“%d/n”, b”); // 0
printf(“%d/n”, c”); // 9999

}

static を付けて宣言した変数は、プログラム開始時に0に初期化される(main関数の外で宣言した変数も同様)

これらは静的記憶域期間といい、プログラム終了時に破棄されます

register

register int a = 0;

register を付けて変数を宣言すると、演算が高速になることが期待できます

この変数を、主記憶よりも(高速な)レジスタに格納したほうがよいと、コンパイラにヒントを与えます

enum

enum gender {Male, Female};

enum gender select_gender(void){
int tmp;
do {
    printf("0…男  1…女:");
    scanf("%d, &tmp");
} while (tmp < Male || tmp > Female);

return tmp;
}

void print_gender(enum gender gender){
  switch (gender){
  case Male: printf("男");  break;
  case Female: prinf("女"); break;
  }
}

enum gender your_gender;

your_gender = select_gender();

print_gender(your_gender);

return 0;

限られた選択肢の中から変数に代入させるときなどに使用します

Male, Female は、int型です(列挙定数といいます)

Male ・・・ 0
Female ・・ 1
というように、0 から順番に数字が割り当てられます

enum 列挙体タグ{列挙定数, 列挙定数}

このようにして列挙体を宣言します

enum gender という型を宣言しています

また、下記のように割り当てる数字を指定することもできます

enum month {January = 1, Feburary, March, April, May, June, July, August, September, October, November, December}

January ・・・ 1
February ・・・2

December ・・ 12

コメント

この記事が気に入ったら
いいね!しよう
最新情報をお届けします。
タイトルとURLをコピーしました