C言語

【C言語】int型の範囲の整数

C言語のint型は32ビット(4バイト)の符号付き整数を表現するために使用される。符号を考慮すると、int型は-2,147,483,648から2,147,483,647までの範囲の整数を表現できる
2,147,483,647 = 21億4748万3647
-2,147,483,648 = 21億4748万3647
2進数「00000000000000000000000000000000」(32桁)は10進数「0」である。
2進数「00000000000000000000000000000001」(32桁)は10進数「1」である。
~中略~
2進数「01111111111111111111111111111111」(32桁)は10進数「2,147,483,647」である。
2進数「10000000000000000000000000000000」(32桁)は10進数「-2,147,483,648」である。
2進数「10000000000000000000000000000001」(32桁)は10進数「-2,147,483,647」である。
2進数「10000000000000000000000000000002」(32桁)は10進数「-2,147,483,646」である。
~中略~
2進数「11111111111111111111111111111101」(32桁)は10進数「-3」である。
2進数「11111111111111111111111111111110」(32桁)は10進数「-2」である。
2進数「11111111111111111111111111111111」(32桁)は10進数「-1」である。

それと、int型は実装依存だからコンパイラでint型で表現できる数値が違う。
「Borland C++ 5.5.1 for Win32 Copyright (c) 1993, 2000 Borland」ではint型は-2,147,483,648から2,147,483,647までの範囲の整数を表現している。

続きを読む

【C言語】ユークリッドの互除法(基本情報技術者試験 平成31年度 春 午前 問7)

C言語でユークリッドの互除法で最大公約数を求めるプログラムを作る。
ユークリッドの互除法は英語では「Euclidean algorithm」と表記される。
最大公約数は英語では「G.C.D(Greatest Common Divisor)」あるいは、「G.C.M (Greatest Common Measure)」である。

環境
windows10(64bit)
Borland C++ 5.5.1 for Win32

次のコードをEuclidean.cとする。

続きを読む

【C言語】再帰関数を使用してフィボナッチ数列を第0項から第n項まで求める

再帰関数を使用してフィボナッチ数列を第0項から第n項まで求める。関数fibonacciに2より小さい値nを渡すとnを返し、2より大きい値だとfibonacci(n-1)+fibonacci(n-2)を返すと簡単にフィボナッチ数列を求めるプログラムを作成できる。任意の階乗を求めるプログラム と同じようなプログラムである。

続きを読む

【C言語】 再帰関数を使った最大値と最小値の求め方(データの数が2のべき乗限定)

データを配列に入れてbox=[1,2,3,・・・]として最大値を求めるプログラムを作成する。

1.データ数が1のとき、box[0]が最大値となる
2.データ数が2のとき、box[0]をグループ1としbox[1]をグループ2として、グループ1の最大値とグループ2の最大値を比較し
大きい方がデータの最大値となる。
3.データ数が4のとき box[0]~box[1]をグループ1としbox[2]~box[3]をグループ2としてグループ1の最大値とグループ2の最大値を比較し
大きい方がデータの最大値となる。
4.データ数が8のとき、box[0]~box[3]をグループ1としbox[4]~box[7]をグループ2としてグループ1の最大値とグループ2の最大値を比較し
大きい方がデータの最大値となる。
5.データ数が16のとき、box[0]~box[7]をグループ1としbox[8]~box[16]をグループ2としてグループ1の最大値とグループ2の最大値を比較し
大きい方がデータの最大値となる。
6.データ数が32のとき、box[0]~box[15]をグループ1としbox[16]~box[32]をグループ2としてグループ1の最大値とグループ2の最大値を比較し
大きい方がデータの最大値となる。

このようにn(データが2のべき乗)のときbox[[0]~box[(n/2)-1]をグループ1としbox[n/2]~box[n-1]をグループ2

としてグループ1の最大値とグループ2の最大値を比較し
大きい方がデータの最大値となる。

最小値も同様な考え方でできる。

続きを読む

【C言語】再帰関数を使った最大値と最小値の求め方(データの数が何個でもOK)

データを配列に入れてbox=[1,2,3,・・・n]として最小値を求めるプログラムを作成する。

1.データ数が1のとき、box[0]が最小値となる
2.データ数が2のとき、box[0]をグループ1としbox[1]をグループ2として、グループ1の最小値とグループ2の最小値を比較し小さい方がデータの最小値となる。
3.データ数が3のとき、box[0]をグループ1としbox[1]~box[2]をグループ2として、グループ1の最小値とグループ2の最小値を比較し
小さい方がデータの最小値となる。
4.データ数が4のとき、box[0]をグループ1としbox[1]~box[3]をグループ2として、グループ1の最小値とグループ2の最小値を比較し
小さい方がデータの最小値となる。
5.データ数が5のとき、box[0]をグループ1としbox[1]~box[4]をグループ2として、グループ1の最小値とグループ2の最小値を比較し
小さい方がデータの最小値となる。
6.データ数が6のとき、box[0]をグループ1としbox[1]~box[5]をグループ2として、グループ1の最小値とグループ2の最小値を比較し
小さい方がデータの最小値となる。

このように要素数がnの整数配列の最小値は、一番左の要素box[0]をグループ1として
box[1]~box[n-1]のグループ2としてグループ1の最小値とグループ2の最小値を比較し
小さい方がデータの最小値となる。これによってデータ数が何個でも最小値を求められる。

同様にすると最大値も求められる。

続きを読む