C言語のポインタを使って複数の数値から最大値を求める方法
ポインタ(pointer)とは、別の変数のメモリアドレスを格納するための変数です。ポインタを使うとNULL値を扱うことができ、参照渡し(pass by reference)を通じて変数にアクセスできます。また、変数を宣言する際に初期化は必須ではありません。
ポインタの基本構文は以下のとおりです。
ポインタ変数 = &別の変数;
具体例:
p = &a;
アルゴリズム
ポインタを使用して一連の数値の中から最大値を求めるためのアルゴリズムは、以下の手順に従います。
Step 1: 開始
Step 2: 整数型変数を宣言する
Step 3: ポインタ変数を宣言する
Step 4: コンソールから3つの数値を読み込む
Step 5: 各数値のアドレスをポインタ変数に代入する
Step 6: もし *p1 > *p2 ならば
もし *p1 > *p3 ならば
「p1が最大」と出力する
そうでなければ
「p2が最大」と出力する
Step 7: そうでなく *p2 > *p3 ならば
「p2が最大」と出力する
そうでなければ
「p3が最大」と出力する
Step 8: 終了プログラム
以下は、ポインタを使用して3つの数値の中から最大値を求めるC言語プログラムです。
#include <stdio.h>
int main(){
int num1, num2, num3;
int *p1, *p2, *p3;
printf("enter 1st no: ");
scanf("%d",&num1);
printf("enter 2nd no: ");
scanf("%d",&num2);
printf("enter 3rd no: ");
scanf("%d",&num3);
p1 = &num1;
p2 = &num2;
p3 = &num3;
if(*p1 > *p2){
if(*p1 > *p3){
printf("%d is largest ", *p1);
}else{
printf("%d is largest ", *p3);
}
}else{
if(*p2 > *p3){
printf("%d is largest ", *p2);
}else{
printf("%d is largest ", *p3);
}
}
return 0;
}実行結果
上記のプログラムを実行すると、次のような結果が得られます。
Run 1: enter 1st no: 35 enter 2nd no: 75 enter 3rd no: 12 75 is largest Run 2: enter 1st no: 53 enter 2nd no: 69 enter 3rd no: 11 69 is largest
このように、各変数のアドレスをポインタに代入し、間接参照演算子(*)を使って値を比較することで、ポインタ経由でも簡単に最大値を判定できます。
-
C++で文字列の部分文字列の総数を求める方法を解説
この記事では、与えられた文字列から作成できる空でない部分文字列の個数を求める方法について解説します。入力 : string = "moon" 出力 : 10 説明 : 部分文字列は m、o、o、n、mo、oo、on、moo、oon、moon の 10 個です。 入力 : string = "yellow" 出力 : 21解法のアプローチ文字列の長さを n とします。上の例からも分かるように、考えられるすべての部分文字列の個数を求めるには、長さ n、(n-1)、(n-2)、(n-3)、……2、1 の部分文字列の個数を順に加算していく必要があります。部分文
-
C++で列車の停車駅の組み合わせ数を求める方法
地点XとYの間にはn個の中間駅があるとします。ここで、「どの2つの停車駅も隣り合わない」という条件のもとで、s個の駅に停車する列車の配置方法が何通りあるかを求める問題を考えてみましょう。この記事では、停車駅の組み合わせ数を求めるためのアプローチを段階的に詳しく解説します。この問題は、本質的には組合せ論の問題であり、s個の停車駅の選び方の総数を求めることになります。 問題を解くアプローチ まず具体例として、中間駅が8個あり、そのうち3個の駅に停車させたい場合を考えてみます。 n = 8, s = 3 このとき、列車が停車できない駅は(n − s)、つまり5個残ることになります。 停車できない