【C言語 まとめ】〜久々にC言語を書く人のための備忘録〜

はじめまして、ますみです！

[![自己紹介.png](https://www.umi-mori.jp/wp-content/uploads/2023/02/introduction_banner_2-2048x533.png)](https://bit.ly/banner_intro_masumi_creator_qiita)


#>>利用方法

**<font color="red">C言語を学ぶための記事ではなく</font>**、細かい説明を省略し、
久々にC言語を触る人が**<font color="green">コードを思い出したり、検索するための記事</font>**にしました。

1. 【機能から調べる】 → Qiitaの右側の目次から探してください
2. 【コードから調べる】 → `Command + F` / `Ctrl + F`で検索してください

# 1. 基本コード
###・変数の型
|コード|変数|
|:---:|:---:|
|void|型なし|
|char|文字型|
|int|整数|
|float|(単精度)浮動小数点|
|double|(倍精度)浮動小数点|
|struct|構造体型|
|union|共用体型|
|enum|列挙型|

###・演算子
|コード|演算|
|:---:|:---:|
|+|足し算|
|-|引き算|
|*|掛け算|
|/|割り算|
|%|あまり|
|&&|かつ|
|ll|または|
|!|ではない|
|==|等しい|
|>|大なり|
|<|小なり|
|>=|以上|
|<=|以下|
|!=|等しくない|

###・配列
`c:array.c
int A[3] = {0,1,2};
`

###・入力
`c:input.c
//scanf()
int a;
scanf("%d", &a);

//getchar() - int型なことに注意
int c;
c = getchar();

//gets() - 廃止
`

###・出力
`c:output.c
//printf()
int a = 0;
printf("%d", a);

//putchar()
int c = 'a';
putchar(c);
`

###・条件分岐
`c:conditon.c
//if文、else文
if(x<0){
  printf("lower than 0.");
}else if(x<5){
  printf("between 0 and 5");
}else{
  printf("bigger than 5");
}

//switch文
switch(c){
  case '+':
    printf("a+b=%d", a+b);
    break;

  case '-':
    printf("a-b=%d", a-b);
    break;

  default:
    printf("other");
    break;
}
`

###・繰り返し
`c:repeat.c
//for文
for(i=0;i<10;i++){
  total = total+i;
}

//while文
while(i<10){
  total = total+i;
  i++;
}

//do-while文
do{
  total = total+i;
  i++;
}while(i<10);
`

###・break文 / continue文 / goto文
`c:outNest.c
//break文
while(1){
  if(x<0){
    break;
  }
  x--;
}
return 0;

//continue文
while(1){
  if(x<0){
    return 0;
  }else{
    x--;
    continue;
  }
}

//goto文
while(1){
  if(x<0){
    goto labelOut;
  }
  x--;
}
labelOut: return 0;
`


# 2. 構造体
`c:structure.c
struct date{
  int year;
  int month;
  int day;
}

struct date today;
today.year = 2018;
today.month = 7;
today.day = 20;

printf("%d / %d / %d", today.year, today.month, today.day);
`


# 3. 関数
`c:function.c
//sum関数の宣言
int sum(int a, int b);

//main関数
int main(void){
  int x = 3;
  int y = 5;
  printf("%d", sum(x,y));

  return 0;
}

//sum関数の定義
int sum(int a, int b){
  return a+b;
}
`

###・数学関数 / 数学定数
`#include<math.h>`をはじめに宣言（インクルード）します。

#### - 数学関数
|コード|関数|
|:---:|:---:|
|sin()|正弦|
|cos()|余弦|
|tan()|正接|
|pow(x,y)|べき乗 ( $x^y$ )|
|fabs()|絶対値|
|sqrt()|平方根|
|cbrt()|立方根|
|exp()|指数関数|
|log()|自然対数|
|log10()|底が10の対数|

#### - 数学定数
|コード|関数|
|:---:|:---:|
|M_e|自然対数の底e / ネイピア数|
|M_PI|円周率π|
|M_SQRT2|$\sqrt{2}$|
|M_LN2|$\ln 2$|


# 4. 標準入出力
`#include<stdio.h>`をはじめに宣言（インクルード）します。
標準入出力をするための雛形は次の通りです。

```c:hinaFile.c
#include<stdio.h>

int main(void){
  FILE *fp;

  fp = fopen("data.txt", "r");
  //ファイルの処理
  fclose();

  return 0;
}
```

### ・ファイルの読み出し - fgetc() / fscanf()

```c:readFile.c
#include<stdio.h>

int main(void){
  FILE *fp;
  int c, num;

  fp = fopen("data.txt", "r");

  //fgetc()
  c = fgetc(fp);

  //fscanf()
  fscanf(fp, "%d", &num);

  fclose();
  return 0;
}
```

### ・ファイルの書き出し - fputc() / fprintf()

```c:writeFile.c
#include<stdio.h>

int main(void){
  FILE *fp;
  int c = 'A';

  fp = fopen("data.txt", "w");

  //fputc()
  fputc(c,fp);

  //fprintf()
  fprintf(fp, "\nMy name is %s", "umi_mori");

  fclose();
  return 0;
}
```

# 5. マクロ処理
`c:macro.c
#define PI 3.14

# 最後に
最後まで読んでくださり、ありがとうございました！
いかがだったでしょうか？

この記事を通して、少しでもあなたの学びに役立てば幸いです！

:::note info
【仕事の相談はこちら】
お仕事の相談のある方は、下記のフォームよりお気軽にご相談ください。

[問い合わせフォームはこちら](https://forms.gle/G5g1SJ7BBZw7oXYA7)

もしもメールでの問い合わせの方がよろしければ、下記のメールアドレスへご連絡ください。

info*galirage.com（*を@に変えてご送付ください）

🎁 「生成AI活用の無料相談券」もしくは「生成AIの社内ガイドライン（無料PDF）」を『公式LINE』で配布中 🎁
『生成AIを業務に活用したいけど、どうしたらいいかわからない』といった声を多くいただきます。

Galirageでは公式LINEにて、チャットやオンライン会議で「完全個別の生成AI活用無料相談会」を実施しております！
（期間限定で実施しているため、ご興味ある方はお早めに以下のLINE公式アカウントをご登録ください^^）
https://lin.ee/rvz6lMN

※ 予告なく、キャンペーンを終了する可能性がございますが、ご了承ください。

【業務内容】
具体的には、以下のお仕事を中心に受け付けております！（[詳しくはこちら](https://galirage.notion.site/Galirage-AI-c2f3945fafb0433d8d2fd03e56927fd8)）
1. 受託開発（例：生成AIを使った社内システムの開発）
2. コンサルティング（例：技術戦略のアドバイス）
3. 講演（例：社内研修、イベント登壇）

※ 特に「生成AIを使ったシステム開発のご依頼」が多く、ご好評いただいております。

【これまでの相談事例】
以下のようなご相談が多くあります。

🔑 機密情報を漏洩させないための、生成AIのシステム構築をお願いしたい。
🤖 自社データを用いたFAQチャットボットの作り方を知りたい。
💡 ChatGPTを、自分たちの事業にどのように活かせるか、アドバイスやアイデアが欲しい。
:::
# おまけ
エンジニアの仲間（データサイエンティストも含む）を増やしたいため、公式LINEを始めました🎉

「**一緒に仕事をしてくれる方**」「**友だちとして仲良くしてくれる方**」は、友だち追加をしていただけますと嬉しいです！（仲良くなった人たちを集めて、「ボードゲーム会」や「ハッカソン」や「もくもく会」もやりたいなと考えています😆）

とはいえ、みなさんにもメリットがないと申し訳ないので、特典を用意しました！

友だち追加後に、アンケートに回答してくれた方へ「**エンジニア図鑑（職種20選）**」のPDFをお送りします◎

https://lin.ee/hFUN4TL

[![](https://www.umi-mori.jp/wp-content/uploads/2023/10/line_banner_v2.png)](https://lin.ee/hFUN4TL)