分支與循環語句的簡單應用(c語言)

打印倍數

int main()
{
    int x = 0;//倍數目標
    int y = 0;//倍數範圍
    int i = 1;
    scanf("%d %d", &x,&y);
    for (; x <= y; x = i * x)
    {
        printf("%d ", x);
        i++;
    };
    return 0;
}

三數排序

int main()
{
    int a;//最大值
    int b;//中間值
    int c;//最小值
    scanf("%d %d %d", &a, &b,&c);//隨機輸入數值(無序)
    if (a < b)
    {
        int tmp;
        tmp = a;
        a = b;
        b = tmp;
    }
    if (a < c)
    {
        int tmp;
        tmp = a;
        a = c;
        c = tmp;
    }
    if (b < c)
    {
        int tmp;
        tmp = b;
        b = c;
        c = tmp;
    }
    

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

求兩數間最大公約數(展轉相除法)

以除數和餘數反覆作除法運算,當餘數爲 0 時,取當前算式除數爲最大公約數。算法

{
    int a;//數字a
    int b;//數字b
    int ret;
    scanf("%d %d", &a, &b);
    while (ret=a % b)//a%b=0時跳出循環
    {
        a = b;
        b = ret;
    }
    printf("%d", b);
    return 0;
}

判斷某個範圍內各個天然數的個位或十位是否爲九

int main()
{
    int a;//判斷目標
    int b;//範圍
    int count=0;//計數
  scanf("%d %d",&a,&b);
    for (a = 1; a <= b; a++)
    {
        if (a % 10 == 9)
        {
            printf(" %d", a);
            count++;
        }
       //若使用else if會缺乏99(個位和十位都是9,必須重複計數)
        if (a / 10 == 9)
        {
            printf(" %d", a);
                count++;
        }
    };
        printf("\ncount=%d", count);
        return 0;
}

打印素數

素數是除一及其自己外無其餘公約數的天然數2。
判斷方法:編程

試除法(將小於指定數的天然數一一試除,皆沒法整除者爲素數)數組

int main()
    {
    int i = 0;
    int k = 0;//起始數
    int p = 0;//結束數
    int j = 0;
    int count = 0;//計數範圍內素數個數
    scanf("%d %d ",&k,&p)
    for (i = k; i <= p; i++)//給出範圍內各個數
    {
        //素數的判斷
        for (j = 2; j <= i - 1; j++)
        {
            if (i % j == 0)
                break;
        }
        if (j == i)
        {
           count++;
            printf("%d ", i);
        }
    }
    printf("\ncount=%d", count);
    return 0;
    }

優化:優化

{
    int i = 0;
    int k = 0;//起始數
    int p = 0;//結束數
    int count = 0;
    for (i = k; i <=p; i += 2)//跳過全部偶數,減小計算量。
    {
        int j = 0;
        //素數的判斷:沒法被2到指定數的開方數整除的天然數
        for (j = 2; j <= sqrt(i); j++)
        {
            if (i % j == 0)
                break;
        }
        if (j > sqrt(i))
        {
            count++;
            printf("%d ", i);
        }
    }
    printf("\ncount=%d", count);
    return 0;
}

求某個範圍的閏年

  • 非整百年份:能被4整除的是閏年。(如2004年就是閏年,2001年不是閏年)
  • 整百年份:能被400整除的是閏年。(如2000年是閏年,1900年不是閏年)
int main()
{
    int a;
    int b;
    int count = 0;
    scanf("%d %d", &a, &b);
    for (; a < b; a++)
    {
    if (((a % 4 == 0) && (a % 100 != 0)) || (a % 400 == 0))
        {
            printf("%d ", a);
            count++;
        }
    }
    printf("\ncount=%d", count);
    return 0;
}

計算階乘(計算數學上的n!)

int main()
{
    long x=0;//目標n
    int y=0;
    int ret = 1;
    scanf("%d/n", &x);
    for (y = 1; y <= x; y++)//給出計算所需值
    {
        ret = ret * y;//進行累乘
    };
    printf("%d\n", ret);
    return 0;
}

加大難度:計算階乘相加code

int main()
{
    long x = 1;
    int y = 0;
    int ret = 1;//累乘媒介
    int sum = 0;//相加結果
    int n = 0;//階乘範圍
    scanf("%d/n", &n);
    while(x<=n)
    {
        ret = 1;
        for (y = 1; y <= x; y++)
            {
                ret = ret * y;
            };
        sum += ret;
        x++;
    }
    printf("%d", sum);
    return 0;
}

打印1 / 2 + 1 / 3 - 1 / 4.... - 1 / 100結果

int main()
{
    int a = 1;
    int f = 1;
    double sum = 0;
    //因爲計算結果爲小數,只能使用浮點數
    double b = 0.0;
    for (b=1; b <= 100; b++)
    {
        sum +=( f * 1 / b);
        f = -f;//交替出現加號與減號
    }
    printf("%lf", sum);//浮點數對應%lf
    return 0;
}

二分查找

注:只能在有序數組中才能使用。排序

int main()
{
    int left = 0;//左下標
    int right = 0;//右下標
    int k = 0;//查找值
    int n = 0;//數組長度
    int z = 0;//中間值
    char arr[] = { 1,2,3,4,5,6,8,9 };//查找範圍
    scanf("%d", &k);
    right = n - 1;
    n = sizeof(arr) / sizeof(arr[0]);//計算數組大小
    while (left <= right)//易錯:等於號不可省略
    {
        z = (left + right) / 2;
        if (arr[z] < k)
        {
            left = z + 1;
        }
        else if (arr[z] > k)
        {
            right = z - 1;
        }
        else
        {
            printf("找到了,下標是%d", z);
            break;
        }

    }
    if (left > right)
        printf("找不到");
    return 0;
}

打印乘法口訣表

右下角數學

int main()
{
    int a;//行數
    int b;//列數
    for (a= 1; a <= 9; a++)
    {
        for (b = 1; b <= a; b++)
        {
        printf("%d*%d=%d\t", b, a, a * b);//\t一個製表符距離
        }
        printf("\n");
    }
    return 0;
}

正方形基礎

int main()
{
    int a;//行數
    int b;//列數
    for (a = 1; a <= 9; a++)
    {
        for (b = 1; b <=9; b++)
        {
           //%-2d爲向左對齊兩個字符
            printf(" %d*%d=%-2d", a, b, a * b);
        }
        printf("\n");
    }
    return 0;
}

總結

或許,以上只是常見的c語言編程題,但在這其中我領會了一些簡單算法的應用,直至懂得了分支與循環語句的基礎使用邏輯。相信我將會慢慢進步,在這條道路上。循環

相關文章
相關標籤/搜索