Cプログラミング
 Computer >> コンピューター >  >> プログラミング >> Cプログラミング

C言語で非平方数(完全平方数以外の数)を出力する方法

プログラムの概要

ある数の「平方」とは、その数にその数自身を掛け合わせた値のことです。

「平方数」または「完全平方数」とは、ある整数を二乗することで得られる整数を指します。

完全平方数は自然数を二乗した数であり、具体的には以下のような数になります。

1, 4, 9, 16, 25, 36, 49, 64, 81, 100

以下は、1から100までの各完全平方数とその平方根の一覧です。

√1 = 1 (12 = 1 であるため)
√4 = 2 (22 = 4 であるため)
√9 = 3 (32 = 9 であるため)
√16 = 4 (42 = 16 であるため)
√25 = 5 (52 = 25 であるため)
√36 = 6 (62 = 36 であるため)
√49 = 7 (72 = 49 であるため)
√64 = 8 (82 = 64 であるため)
√81 = 9 (92 = 81 であるため)
√100 = 10 (102 = 100 であるため)

一方、「非平方数(非完全平方数)」とは、ある整数を二乗しても決して得られない数、すなわち整数の平方として表すことができない数のことです。

以下のような数が非平方数に該当します。

2, 3, 5, 6, 7, 8, 10, 11, 12, 13, 14, 15, 17, 18, 19, 20, 21, 22, 23, 24, 26 など…

アルゴリズム

1からユーザーが指定した数までのすべての数を順番に調べる。
それぞれの数が完全平方数かどうかを判定する。
完全平方数でなければ、その数を非平方数として出力する。

サンプルコード

/* 非平方数を出力するプログラム */
#include <stdio.h>
#include <math.h>
int main() {
    int number,i,x;
    int times = 0;
    clrscr();
    printf("Print the Non Square Numbers till:");
    scanf("%d", &number);
    printf("The Non Squre Numbers are:");
    printf("\n");
    for(i = 1;times<number;i++,times++){
        x = sqrt(i);
        if(i!=x*x){
            printf("%d\t", i);
        }
    }
    getch();
    return 0;
}

コードのポイント

このプログラムでは、math.hヘッダーのsqrt()関数を使って各数の平方根を求め、その平方根を二乗した値が元の数と一致するかどうかで完全平方数かどうかを判定しています。一致しなければ、その数は非平方数であるため画面に出力されます。

なお、clrscr()getch()はTurbo Cなどの古い開発環境向けの関数です。GCCなどの現代のコンパイラで動作させる場合は、これらの呼び出しを削除するか、getch()getchar()に置き換えてください。

出力結果

たとえば「10」と入力した場合、1から順に判定が行われ、完全平方数を除いた非平方数のみが出力されます。

C言語で非平方数(完全平方数以外の数)を出力する方法

  1. C言語で自然数を列方向に出力するプログラムの作り方

    プログラムの概要 本記事では、C言語を使って自然数を列方向(縦方向)に並べたパターンを出力する方法を解説します。完成イメージは以下のとおりです。 1 2 6 3 7 10 4 8 11 13 5 9 12 14 15 一見複雑に見えるこの数列も、行と列の関係さえ理解できれば、シンプルなループ処理だけで実現できます。 アルゴリズムの考え方 変数 i は行番号、j は列番号を表し、ここでは5行分のパターンを作成します。 外側のループで各行(i = 1〜5)を順に処理する 内側のループに入る前に、k を i の値で初期化する 内側のループで各列(j = 1〜i)を処理する 現在の k の値を表示

  2. Cプログラムで行列を対角パターンに沿って数値出力する方法

    この課題は、n×nの行列を対角パターンで出力することです。 例えば n が 3 の場合、対角パターンに従って行列を出力すると、次のような配置になります。 そして、実際の出力結果は以下の通りです。 実行例 Input: 3 Output: 1 2 4 3 5 7 6 8 9 Input: 4 Output: 1 2 4 7 3 5 8 11 6 9 12 14 10 13 15 16 考え方 一見すると、「数値 n を受け取り n×n の行列を生成し、それを対角方向に走査しながら別の行列へ値を格納する」というアプローチが思い浮かびます