分岐およびループ構造の継続的な習熟度

大から小までの3つの数値の出力

#include <stdio.h>
int main()
{
    int a, b, c;
    printf("请输入三个数:\n");
    scanf("%d%d%d", &a, &b, &c);
    if (a < b)
    {
        a = a ^ b;
        b = b ^ a;
        a = a ^ b;
    }
    if (a < c)
    {
        a = a ^ c;
        c = a ^ c;
        a = a ^ c;
    }
    if (b < c)
    {
        b = b ^ c;
        c = c ^ b;
        b = b ^ c;
    }

    printf("%d %d %d", a, b, c);
    return 0;
}

ブランチはif条件文を使用します。XORメソッドを使用して2つの数値の値を交換しました。「^」XOR、バイナリビットの2つの数値のXOR、同じものは0、差は1です。高度なループ構造を使用したデータのグループのサイズは、次のように配置されます。

#include <stdio.h>
int main()
{
    int a[10] = {0};
    int i = 0;
    int c = 0;
    int j = 0;
    printf("请输入10个数:\n");
    for (i = 0; i < 10; i++)
    {
        scanf("%d", &a[i]);
    }

    for (i = 0; i < 10; i++)
    {
        for (j = i+1; j < 10; j++)
        {
            if (a[i] < a[j])
            {
                c = a[i];
                a[i] = a[j];
                a[j] = c;
            }

        }

    }
    for (i = 0; i < 10; i++)
    {
        printf("%d  ", a[i]);
    }

    return 0;
}

ループステートメントを使用して配列を埋め、ループステートメントを使用してサイズを配置します(バブルメソッドとも呼ばれます)、3番目の値を使用して2つの数値の値を交換し、ループステートメントを使用して順次印刷します

1〜100以内に3の倍数を印刷する

#include <stdio.h>
int main()
{
    int i = 0;
    for (i = 0; i < 100; i++)
    {
        if (i % 3 == 0)
        {
            printf("%d ", i);
        }
    }
    return 0;
}

引き続きloopステートメントを使用して複数の数値を出力します。a%bはaをbで除算した後の残りを表し、残りは0(3の倍数)です。

2つの数値の最大の共通除数を見つける

#include <stdio.h>
int main()
{
    int n = 18;
    int m = 24;
    int r = 0;
    scanf("%d%d", &m, &n);
    while (r = m % n)
    {
        //r = m % n;
        m = n;
        n = r;
    }
    printf("%d\n", n);
    return 0;
}

除算:2つの数値の最大の共通除数を取得するには、除数と残差を使用して除算を繰り返します。残差が0の場合は、現在の除数を最大の共通除数とします。コードの「// r = m%n」の部分を最適化してループ状態にし、実行効率を向上させることができます。残りがゼロになると、while(0)の下のループは実行されなくなり、ロジックが確立されます。

1000年から2000年までの飛躍年を印刷する

#include <stdio.h>
int main()
{
    int year = 0;
    int count = 0;
    printf("1000到2000年间的闰年为:\n");
    for (year = 1000; year <= 2000; year++)
    {
        //if (year % 4 == 0 && year % 100 != 0)
        //{
        //  printf("%d ", year);
        //  count++;
        //}
        //else if (year % 400 == 0)
        //{
        //  printf("%d ", year);
        //  count++;
        //}
        if((year % 4 == 0 && year % 100 != 0) || (year % 400 == 0))
        {
            printf("%d ", year);
            count++;
        }
    }
    printf("\n%d\n", count);
    return 0;
}

飛躍年を判断する方法は、年を4で割り、100で割り切れない、または400で割り切れるというものです。コメントは、2つの判断文を分離し、この判断条件を1つの条件に統合し、ifに配置することです。文章の方がいいです。

100〜200のプライム番号

#include <stdio.h>  //1.试除法
#include <math.h>   //2.将试除的上限值改为sqrt(i)
int main()                 //3.将偶数去掉,再次减少计算量
{
    int i = 0;
    int j = 0;
    int k = 0;
    for (i = 101; i <= 200; i+=2)
    {
        for (j = 2; j <sqrt(i); j++)
        {
            if (i % j == 0)
            {
                break;
            }
        }
        if (j > sqrt(i))
        {
            k++;
            printf("%d ", i);
        }
    }
    printf("\n素数有%d个\n", k);
    return 0;
}

試行分割が使用されます。1回目は、内側のループの制限条件をsqrt()に変更して、算術の二乗根を見つけ、計算量を減らします。2番目の最適化は、外側のループの偶数をスキップして、計算を再度減らします。総額。

1 / 1-1 / 2 + 1 / 3-1 / 4 ... + 1 / 99-1 / 100を検索

#include <stdio.h>
int main()
{
    double n = 0, i = 0;
    double s1 = 0, s2 = 0;
    double s = 0;
    for (n = 1; n < 100; n += 2)
    {
        s1 = 1 / n + s1;
    }
    for (i = 2; i <= 100; i += 2)
    {
        s2 = s2 - 1 / i;
    }
    printf("%lf\n", s = s1 + s2);
    return 0;
}

この方法を最初に考えたのは、ポジティブとネガティブを分離することでした。定義する必要のある変数はたくさんあります。

#include <stdio.h>
int main()
{
    double n = 0;
    double s = 0;
    int flag = 1;
    for (n = 1; n <= 100; n++)
    {
        s =flag* 1 / n + s;
        flag = -flag;
    }

    printf("%lf\n", s );
    return 0;
}

フラグ変数を使用して毎回-1を乗算し、正と負を加算するサイクルを実現し、最終的に答えを取得します。

画面に乗算式の表を印刷します

#include <stdio.h>
int main()
{
    int i = 1, j = 1;
    int x = 0;
    for (i = 1; i <= 9; i++)
    {
        for (j = 1; j <= 9; j++)
        {
            x = i * j;
            printf("%d * %d = %d ", j, i, x);
            if (i <= j)
            {
                printf("\n");
                break;  //一开始使用的continue 导致无法正确跳出循环而只是跳过该次循环 
            }   
        }
    }
    return 0;
}

初めて長い間考えたとき、2層のループが必要だと思い、内側のループを制限する必要があると思いましたが、ループをスキップし続けるのではなく、ブレークを使用してループから飛び出すとは思っていませんでした。答えを終えてトイレに行くと、いきなり休憩を使うべきだと思い、掛け算と合算のリストを印刷し続けないことになりました。興味があれば、休憩を継続に置き換えるとはどういうことかわかります。以下は、教師によって与えられたコードです。

#include <stdio.h>
int main()
{
    int i = 1, j = 1;
    int x = 0;
    for (i = 1; i <= 9; i++)
    {
        for (j = 1; j <= i; j++)    //i代表行数,而每行的打印个数等于改行行数,所以内循环的上限为i
        {
            x = i * j;
            printf("%d*%d =%-2d ", j, i, x); //一点细节为 %数字d 数字表示左缩进(-)或者右缩进(+)位数由数字决定
        }
        printf("\n");
    }
    return 0;
}

数字ゲームだと思います!!

これは私が今日最も長い時間を費やしたコードです。理由の一部は、関数の使用に習熟していないことです。理由の一部は、このコードの論理関係を受け入れるのに時間がかかることです。ソースコードは次のとおりです。興味があれば、それで遊ぶことができます。試してみてください

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
void menu()
{
    printf("##############################################\n");
    printf("********* 1.play  *        *  0.exit *********\n");
    printf("##############################################\n");
}
void game()
{
    int g = 0;
    int ret = 0;
    ret = rand() % 100 + 1;
    while (1)
    {
        scanf("%d", &g);
        if (g > ret)
        {
            printf("大了\n");
        }
        else if (g < ret)
        {
            printf("小了\n");
        }
        else
        {
            printf("恭喜你 猜对了 \a \n");
            break;
        }

    }
}
int main()
{
    int input = 0;
    menu();
    srand((unsigned int)time(NULL));
    do
    {
        printf("请选择是否要开始游戏:1/0\n");
        scanf("%d", &input);
        switch (input)
        {
        case 1:
        {
            printf("请猜数字:\n");
            game();
            break;
        }
        case 0:
        {
            printf("退出游戏\n\a");
            break;
        }
        default:
        {
            printf("请输入0/1\n");
            break;
        }
        }
    } while (input);

    return 0;
}

コアは次のとおり
です
。1。PCがランダムな数値を生成します。2。3を推測
すると
、詳細が次のように継続的に再生されます
。判定。
2.関数を使用して、戻り値関数viodのない単純なメニューバーを作成します。
3.メイン関数ループの外側でランダムな数値を生成する関数rand()を記述します。ループの内側では、推測するたびに新しい数値が生成されます。必要なヘッダーファイルは<stdlib.h>です。
4.ランダム番号の生成では、srand関数を再定義する必要があります。そうしないと、毎回同じランダム番号のセットが生成されます。
5. srand関数には、randが毎回異なる開始点でランダム番号を生成できるように、ランダム番号も必要です。
6.したがって、タイムスタンプをsrand関数のパラメーターとして使用すると、変数タイプは(unsigned int)timeに強制されます。必要なヘッダーファイルは<time.h>です。
7.タイムスタンプ生成関数のパラメータタイプはポインタであり、NULLはヌルポインタです。特定のポインタは必要ないため、srandのタイムスタンプを生成するにはnullポインタを使用するだけで十分です。
8.そして、ゲーム機能は数を判断し、それが大きいか小さいかにかかわらず、対応するプロンプトを出すことができます。
9.まず、アーキテクチャを理解し、フレームワークを構築し、詳細を入力することです。私はプログラマーですが、この理解に問題はないと思います。

gotoステートメント

#include <stdio.h>
#include <stdlib.h> //system 的头文件 
#include <string.h> //strcmp 的头文件
int main()
{
    char input[20] = { 0 };
    //system() 用来执行系统命令的
    system("shutdown -s -t 60");
again:
    printf(" 电脑要关机了 请输入:我最帅 \n");
    scanf("%s", input);
    if (strcmp(input, "我最帅") == 0)
    {
        system("shutdown -a");
    }
    else
    {
        printf("\a");
        goto again;
    }

    return 0;
}

gotoステートメントの使用については常に議論の余地があります。実際、プログラムにgotoステートメントがなくても影響はなく、gotoステートメントを頻繁に使用するとロジックが混乱し、プログラマーが理解できなくなる可能性があります。
上記のシャットダウンプログラムは、gotoの最も便利な部分を反映して、複数のループからジャンプすることができます。コードにネストするループが複数ある場合は、最内層から直接ジャンプする必要があります。gotoステートメントの利便性を反映することができます。 Punctuation、gotoは、ステートメントの実行を続行するために再びその場所に直接ジャンプすることであり、breakは1つのレベルからのみジャンプできます。
system( "shutdown -s -t 60")はシステム関数であり、<stdlib.h>のヘッダーファイルが必要です。shutdown-sはシャットダウンを実行し、次の-t60は60秒後に実行され、shutdown-aはシャットダウンをキャンセルします。文字「\ a」はプロンプト音です。(もちろん私物を持っていて麻薬性[doge]です)
明日から機能が始まります

おすすめ

転載: blog.51cto.com/15078858/2591240