C言語でよく使う関数をまとめておきます
出力関係
printf関数
コード | 表示 |
|
今日は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
A フラグ B 最小フィールド幅 C 精度 D 変換指定子 |
|
% 0 9 .9 f |
- 整数
- 浮動小数点
- 文字列
コード | 表示 |
---|---|
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([]なし)を記述します
puts関数
関数 | コード |
printf |
|
puts |
|
関数 | コード | 表示 |
printf |
|
% |
puts |
|
%% |
puts(“%%”); は、そのまま %% と表示されます
%dなどの変換指定子を埋め込むことはできません
" "
で囲む必要があります。putchar関数
int a = 'A';
putchar(a);
単一文字を出力します
関数 | コード | 記憶域 |
printf |
|
2バイト |
putchar |
|
1バイト |
putcharを使うと、記憶域を節約し高速化が期待できます
入力関係
scanf関数
int n;
scanf("%d",&n);
キーボードから変数に値を代入することができます
関数 | 変換指定子 |
printf | %f |
scanf | %lf |
double型の変換指定子は、printf関数とscanf関数で異なります
char str[48]; scanf("%s", str);
%s の場合、第2引数には str ([]なし) を記述します
getchar関数
while((ch = getchar()) != EOF)
count++;
getchar関数の動作
[1] キーボードから文字列を入力します(Ctrl + Z 押下で入力終了)[2] キーボードから入力した文字列を1文字ずつ出力します
算術関係
sqrt関数
コード | 表示 |
|
5.049752 |
平方根を求めます。
long double型の場合は、sqrtl関数を使います
文字列操作関係
toupper/tolower関数
int i = 0;
while (s[i])
putchar(toupper(s[i++]));
文字列s内の英字を大文字で表示させることができます
自分で宣言する関数
バブルソート
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関数を呼び出しています
最大公約数
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
が最大公約数です
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));
}
コメント