C言語よく使う関数

C言語

C言語でよく使う関数をまとめておきます

出力関係

printf関数

コード 表示
int x = 18;
printf("今日は%d日です。\n", x);
今日は18日です。
表示したい文字列の中に、変数を埋め込むことができます

表示したい文字列は、" " で囲む必要があります。
下記のような記述では、表示されなくなります

int x = 18;
printf('今日は%d日です。\n', x);


主な変換指定子
変換指定子 データ型 備考
%d int  
%ld long  
%lld long long  
%u unsigned int  
%lu unsigned long  
%llu unsigned long long  
%zu size_t sizeof関数が返却する型
%o int 8進数
%x int 16進数
%f float/double printfで使用(double型)
%lf double scanfで使用(double型)
%s char 文字列(空白を含まない)
%c char 文字(1文字)
%p ポインタ  
f, l は、大文字 (F, L) でもOK
printfの出力書式
printfの出力書記は下記4つのパーツから構成されています

A フラグ

B 最小フィールド幅

C 精度

D 変換指定子

% 0 9 .9 f
これらのパーツはデータ型(下記3つ)によって機能が異なります
  • 整数
  • 浮動小数点
  • 文字列
整数の場合
コード表示
printf("[%d]\n", 123);[123]
printf("[%.4d]\n", 123);[0123]
printf("[%4d]\n", 123);[ 123]
printf("[%04d]\n", 123);[0123]
printf("[%-4d]\n", 123);[123 ]
対象 名称 機能 省略した場合
0 フラグ(値がない桁を)0埋め(値がない桁を)空白埋め
フラグ右寄せ左寄せ
4最小フィールド幅表示する幅の桁数の下限を指定表示する幅の桁数の下限は1
.4精度表示する値の桁数の下限を指定(空白は0埋め)表示する値の桁数の下限は1
d変換指定子int型省略不可
不動点小数の場合
コード 表示
printf("[%f]\n", 123.13); [123.130000]
printf("[%.1f]\n", 123.13); [123.1]
printf("[%6.1f]\n", 123.13); [ 123.1]
対象 名称 機能 省略時
0 フラグ (値がない桁を)0埋め (値がない桁を)空白埋め
フラグ 左寄せ 右寄せ
6 最小フィールド幅 表示する桁数の下限を指定 表示する桁数の下限は 1
.1 精度 表示する小数点以下の桁数の下限を指定(値がない桁は0埋め) 表示する小数点以下の桁数の下限は 6
f 変換指定子 double型の浮動小数点を10進法で表示(printf使用時) 省略不可

※ 桁数:整数部の桁数 と 少数点の桁数 と 小数点以下の桁数 の合計(例:123.13 の 場合、桁数は 6)

文字列の場合
コード 表示
printf("[%s]\n", "Hello!"); [Hello!]
printf("[%8s]\n", "Hello!"); [ Hello!]
printf("[%-8s]\n", "Hello!"); [Hello! ]
printf("[%.2s]\n", "Hello!"); [He]
printf("[%8.2s]\n", "Hello!"); [ 0000 He]
対象 名称 機能 省略時
フラグ 左寄せ 右寄せ
8 最小フィールド幅 表示する幅の桁数の下限を指定 表示する幅の桁数の下限は 1
.2 精度 表示する値の桁数の上限を指定 表示する値の桁数の上限は 1
s 変換指定子 空白を含まないchar型の文字列 省略不可
char str[] = "ABC";
printf("%s\n", str);

文字列の場合、第2引数には、str([]なし)を記述します

str は、&str[0] のことで、1つ目の要素のポインタという意味です

puts関数

関数 コード
printf
printf("ABCD\n");
puts
puts("ABCD");
上記2つの表示は同じになります 文字を出力した上で、改行文字を出力します

書式指定を持たない
関数 コード 表示
printf
printf("%%");
%
puts
puts("%%");
%%

puts(“%%”); は、そのまま %% と表示されます

%dなどの変換指定子を埋め込むことはできません

表示したい文字列は、" " で囲む必要があります。

putchar関数

int a = 'A';
putchar(a);

単一文字を出力します

改行文字のみ出力する場合
関数 コード 記憶域
printf
printf("\n");
2バイト
putchar
putchar('\n');
1バイト

putcharを使うと、記憶域を節約し高速化が期待できます

入力関係

scanf関数

int n; scanf("%d",&n);

キーボードから変数に値を代入することができます

double型の変換指定子
関数 変換指定子
printf %f
scanf %lf

double型の変換指定子は、printf関数とscanf関数で異なります

char str[48];
scanf("%s", str);

%s の場合、第2引数には str ([]なし) を記述します

str は、&str[0] であり、最初の要素のポインタを意味ます

getchar関数

while((ch = getchar()) != EOF)
 count++;

getchar関数の動作

[1] キーボードから文字列を入力します(Ctrl + Z 押下で入力終了)
[2] キーボードから入力した文字列を1文字ずつ出力します

環境によっては、Ctrl + Z 押下後、Enter 押下で入力終了となります
文字列の最後は、EOFとなります

算術関係

sqrt関数

コード 表示
printf("%f\n", sqrt(25.5));
5.049752

平方根を求めます。

<math.h> をインクルードしておく必要があります
long double型の場合は、sqrtl関数を使います

文字列操作関係

toupper/tolower関数

int i = 0;
while (s[i])
 putchar(toupper(s[i++]));

文字列s内の英字を大文字で表示させることができます

小文字の場合は、tolowerを使用します
<ctype.h>をインクルードしておく必要があります

自分で宣言する関数

バブルソート

void bsort(int a[], int n){
for (int i = n; i > 0; i--)
 for (int j = 1; j < i; j++){
  if (a[j - 1] > a[j]){
   int temp = a[j - 1];
   a[j - 1] = a[j];
   a[j] = temp;
  } 
 }
}

要素n個の配列aの要素を昇順に並び替えます

1回目のループでは、a[0]~a[n-1]の最大値をa[n-1]に代入
2回目のループでは、a[0]~a[n-2]の最大値をa[n-2]に代入



このようにして要素の終端から値を代入します

n!

n! を求めるためのfactorial関数です

n!(nの階乗)とは、n × (n – 1) × ・・・ × 1

int factorial(int n){
if(n > 0)
 return n * factorial(n - 1);
else
 return 1;
}

factorial関数の中で、factorial関数を呼び出しています

factorial(3)
3 *
factorial(2)
2 *
factorial(1)
1 *
factorial(0)
1


最大公約数

int gcd(int x, int y){
if y == 0
 return x;
else
 return gcd(y, x % y);
}
x = 8, y = 22 の場合
x y x % y
8 22 8
22 8 6
8 6 2
6 2 0
2 0  

y == 0 になるまで

x = y          (代入)
y = x % y   (代入)

を繰り返します

y == 0 になったときの、x が最大公約数です

3個以上の値の最大個約数の求め方
int gcdary(const int a[], int n){
if (n == 1)
 return a[0];
else if (n == 2)
 return gcd(a[0], a[1]);
else
 return gcd(a[0], gcdary(&a[1], n - 1));
}

コメント

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