大学でC言語を学び始めた者です。ポインタについてはまだ詳しい事は学んでいません。2のように1~13ではなく0~13の範囲で表示されてしまいます。以下が自分の書いたコードになります。}自分で見直してもなぜ実行結果に0が含まれてしまうのかわかりません。どこをどのように直せば1~13の範囲で表示されるのでしょうか。コンパイルはできているのですが、コードの中で単純化できたり、良くない書き方をしている箇所がありましたらご指摘お願いします。table[(int)(rand()/(1.0+RAND_MAX)*13)+1];で配列の範囲外の値を読み取ることがあり、未定義動作になります。そこの初期値がたまたま0だったのでしょう。ややこしいことに、乱数を直接交換する位置にするのではなく、ここで読み取った値を位置として使用しているので、このtable[13]の初期値がたまたま0という条件では最初の要素も交換の対象になったのですね。(int)(rand()/(1.0+RAND_MAX)*13);とすることで、交換対象として有効な位置が得られるでしょう。13というマジックナンバーをプログラム中で何度も書くのは良くないでしょう。インデントも整えるといいでしょう。13];でいいように思います。私の環境ではRAND_MAXは60000位の数だったと思いますので、もっと精度を上げたい場合は、ちょっと面倒ですがC++標準ライブラリのstd::randomを使ってもいいと思います。元のプログラムがちょっと変ですね。元のプログラムの10~18行目は、こっちのほうがすっきりしていると思います。