【プログラミング】Python使いのためのC言語:四則演算

  • URLをコピーしました!
目次

C言語

前回、C言語での文字と文字列、そしてそれらの定義の方法を学んでみました。

今回はC言語での四則演算を勉強していきましょう。

Pythonでの四則演算

比較のためにまずはPythonでの四則演算を見ていきます。

とりあえずこんな感じで文字列、整数、小数を2つずつ定義します。

str1 = 'str1'
str2 = 'str2'
num1 = 3
num2 = 5
float1 = 0.3
float2 = 0.5

それぞれ同じ型同士は足し算をすることができます。

print(str1 + str2)
print(num1 + num2)
print(float1 + float2)

実行結果
str1str2
8
0.8

文字列と整数、文字列と小数は足し算できません。

print(str1 + num1)

実行結果
TypeError                                 Traceback (most recent call last)
<ipython-input-22-cb0f63686ceb> in <module>
----> 1 print(str1 + num1)

TypeError: can only concatenate str (not "int") to str
print(str1 + float1)

実行結果
TypeError                                 Traceback (most recent call last)
<ipython-input-21-3a28f008ff6d> in <module>
----> 1 print(str1 + float1)

TypeError: can only concatenate str (not "float") to str

整数と小数を足し算した場合は、小数として結果が出力されます。

print(num1 + float1)

実行結果
3.3

整数と小数に関しては、足し算以外にも四則演算ができます。

print(num1 + num2)
print(num1 - num2)
print(num1 * num2)
print(num1 / num2)

実行結果
8
-2
15
0.6
print(float1 + float2)
print(float1 - float2)
print(float1 * float2)
print(float1 / float2)

実行結果
0.8
-0.2
0.15
0.6
print(num1 + float1)
print(num1 - float1)
print(num1 * float1)
print(num1 / float1)

実行結果
3.3
2.7
0.8999999999999999
10.0

C言語では同じことがどうできるか試していきますが、C言語でのデータ型は前に勉強した通りPythonよりも多いです。

全部試していくと大変なので、Pythonと同じく文字列(char型)、整数(int型)、小数(float型)の三つで試していきましょう。

C言語での文字列の足し算

文字列の足し算は整数、小数の足し算とはまた違うので、まずは文字列の足し算を試してきましょう。

ということでまずはPythonと同じく直接足し算ができるか試してみます。

#include <stdio.h>

int main(void)
{
    char str1[] = "str1";
    char str2[] = "str2";

    printf(str1 + str2);
}

実行結果
calculation1.c:8:17: error: invalid operands to binary expression ('char [5]' and 'char [5]')
    printf(str1 + str2);
           ~~~~ ^ ~~~~
1 error generated.

何とC言語では直接文字列同士の足し算はできないようです。

もちろん新しく文字列を定義し直してもだめです。

#include <stdio.h>

int main(void)
{
    char str1[] = "str1";
    char str2[] = "str2";

    char str3[] = str1 + str2;

    printf(str3);
}

実行結果
calculation2.c:8:24: error: invalid operands to binary expression ('char [5]' and 'char [5]')
    char str3[] = str1 + str2;
                  ~~~~ ^ ~~~~
calculation2.c:10:12: warning: format string is not a string literal (potentially insecure) [-Wformat-security]
    printf(str3);
           ^~~~
calculation2.c:10:12: note: treat the string as an argument to avoid this
    printf(str3);
           ^
           "%s", 
1 warning and 1 error generated.

ではどうするかというと、前に出てきた変換指定子を使って表示するようです。

#include <stdio.h>

int main(void)
{
    char str1[] = "str1";
    char str2[] = "str2";

    printf("%s%s", str1, str2);
}

実行結果
str1str2

初っ端から大きな違いになりましたが、とりあえず文字列は変換指定子を使って連続的に表示するということで、足し算はできないようです。

となると文字列と整数、文字列と小数の足し合わせも変換指定子を使って連続的に表示することはできますが、足し算はできないということになるので、今回はスキップします。

整数(int型)の四則演算

次に整数(int型)の四則演算を試してみます。

#include <stdio.h>

int main(void)
{
    int num1 = 3;
    int num2 = 5;

    printf("%d\n", num1 + num2);
    printf("%d\n", num1 - num2);
    printf("%d\n", num1 * num2);
    printf("%d\n", num1 / num2);
}

実行結果
8
-2
15
0

整数(int型)の四則演算に関しては普通に可能でした。

小数(float型)の四則演算

整数(int型)の四則演算ができるのなら少数も普通に可能だと考えられますのでやってみましょう。

#include <stdio.h>

int main(void)
{
    float float1 = 0.3;
    float float2 = 0.5;

    printf("%f\n", float1 + float2);
    printf("%f\n", float1 - float2);
    printf("%f\n", float1 * float2);
    printf("%f\n", float1 / float2);
}

実行結果
0.800000
-0.200000
0.150000
0.600000

小数(float型)の四則演算も問題なく出来ました。

C言語のfloat型では有効数字7桁なので、7桁全てが表示されていることは面白いなと思いました。

整数(int型)と小数(float型)の四則演算

次に整数(int型)と小数(float型)での四則演算を試してみましょう。

#include <stdio.h>

int main(void)
{
    int num1 = 3;
    float float1 = 0.3;

    printf("%f\n", num1 + float1);
    printf("%f\n", num1 - float1);
    printf("%f\n", num1 * float1);
    printf("%f\n", num1 / float1);
}

実行結果
3.300000
2.700000
0.900000
10.000000

整数(int型)と小数(float型)の四則演算も問題なくでき、桁数は小数(float型)に自動で合わせられることが分かりました。

このことから数字の四則演算に関してはそれほどPythonと変わらず、直接計算することができるようです。

違っているのは文字列の足し算で、C言語では足し算という形では文字列を結合させることができないようです。

printf関数で表示する場合は変換指定子を使って連続的に表示すればいいようですが、これでは文字列を結合したことにはなりません。

ということで次回は文字列の結合に関して勉強していきましょう。

ではでは今回はこんな感じで。

よかったらシェアしてね!
  • URLをコピーしました!

コメント

コメントする

目次