搜尋此網誌

2024年6月30日 星期日

用數字劃出三角形

 #include <stdio.h>


void draw_triangle_fun(unsigned int length, unsigned int width)
{
    unsigned int t_w, t_l;
    char space = ' ', ch;

    for (t_w = 0; t_w <= width; t_w++)
    {
        for (t_l = 0; t_l <= (length - t_w); t_l++)
        {
            ch = t_l + '0';
            printf("%c", ch);
        }
        printf("\n");
    }

    for (t_w = 0; t_w <= width; t_w++)
    {
        for (t_l = 0; t_l <= t_w; t_l++)
        {
            ch = t_l + '0';
            printf("%c", ch);
        }
        printf("\n");
    }

    for (t_w = 0; t_w <= width; t_w++)
    {
        for (t_l = 0; t_l <= length - t_w; t_l++)
        {
            printf("%c", space);
        }
        for (t_l = 0; t_l <= t_w; t_l++)
        {
            ch = t_l + '0';
            printf("%c", ch);
        }
        printf("\n");
    }

    for (t_w = 0; t_w <= width; t_w++)
    {
        for (t_l = 0; t_l <= t_w; t_l++)
        {
            printf("%c", space);
        }
        for (t_l = 0; t_l <= length - t_w; t_l++)
        {
            ch = t_l + '0';
            printf("%c", ch);
        }
        printf("\n");
    }
}

int main()
{
    unsigned int length, width;

    printf("\nPlease enter length/width(1 ~ 9):");
    scanf("%d", &width);
    if (width > 9)
        width = 9;
    length = width;

    printf("\n=============================================\n");
    draw_triangle_fun(length, width);
    printf("\n=============================================\n");

    return 0;
}

Please enter length/width(1 ~ 9):9 ============================================= 0123456789 012345678 01234567 0123456 012345 01234 0123 012 01 0 0 01 012 0123 01234 012345 0123456 01234567 012345678 0123456789 0 01 012 0123 01234 012345 0123456 01234567 012345678 0123456789 0123456789 012345678 01234567 0123456 012345 01234 0123 012 01 0 =============================================


數字排序 由大到小與由小到大 排列

#include <stdio.h>

#define MAX_NUM 10

int main()
{
    int i, j, tmp;
    int *members;
    int test_case0[MAX_NUM] = {13, -5, 0, 7, 79, 213, 5, 132, -53, 71};
    int test_case1[MAX_NUM] = {91, 65, -12, 78, -9, -312, 5, 132, -121, -9};
    printf("\n==================Original===================\n");
    members = test_case0;
    for (i = 0; i < MAX_NUM; i++)
    {
        printf("%d ", members[i]);
    }

    printf("\n========Arrange from large to small=========\n");
    //-------------------------------------
    members = test_case0;
    for (i = 0; i < MAX_NUM; i++)
    {
        for (j = i + 1; j < MAX_NUM; j++)
        {
            if (members[i] < members[j])
            {
                tmp = members[i];
                members[i] = members[j];
                members[j] = tmp;
            }
        }
    }
    //-------------------------------------

    for (i = 0; i < MAX_NUM; i++)
    {
        printf("%d", members[i]);
        if ((i + 1) < MAX_NUM)
            printf(" > ");
    }
    printf("\n==================Original===================\n");
    members = test_case1;
    for (i = 0; i < MAX_NUM; i++)
    {
        printf("%d ", members[i]);
    }
    printf("\n========Arrange from small to large=========\n");
    //-------------------------------------
    members = test_case1;
    for (i = 0; i < MAX_NUM; i++)
    {
        for (j = i + 1; j < MAX_NUM; j++)
        {
            if (members[i] > members[j])
            {
                tmp = members[i];
                members[i] = members[j];
                members[j] = tmp;
            }
        }
    }
    //-------------------------------------

    for (i = 0; i < MAX_NUM; i++)
    {
        printf("%d", members[i]);
        if ((i + 1) < MAX_NUM)
            printf(" < ");
    }
    printf("\n=============================================\n");

    return 0;
}

==================Original=================== 13 -5 0 7 79 213 5 132 -53 71 ========Arrange from large to small========= 213 > 132 > 79 > 71 > 13 > 7 > 5 > 0 > -5 > -53 ==================Original=================== 91 65 -12 78 -9 -312 5 132 -121 -9 ========Arrange from small to large========= -312 < -121 < -12 < -9 < -9 < 5 < 65 < 78 < 91 < 132 =============================================

開根號小數點後精度兩位數

#include <stdio.h>
unsigned int square_root_fun(unsigned int value, unsigned int *after_dec_point_ptr)
{
    unsigned int max_num, i, root;

    if (value <= 1)
    {
        if (after_dec_point_ptr != NULL)
            *after_dec_point_ptr = 0;
        return value;
    }

    value *= 10000; // Magnification 10000 times

    for (max_num = 31; max_num > 0; max_num--)
    {
        if (value & (1 << max_num))
            break;
    }

    root = 0;
    for (i = (max_num >> 1); i > 0; i--)
    {
        if (value >= ((root | (1 << i)) * (root | (1 << i))))
            root |= (1 << i);
    }
    if (i == 0)
    {
        if (value >= ((root | (1 << i)) * (root | (1 << i))))
            root |= (1 << i);
    }
    if (after_dec_point_ptr != NULL)
    {
        *after_dec_point_ptr = root % 100; // Restore magnification and Storage position after decimal point
    }
    root /= 100; // Restore magnification

    return root;
}
int main()
{
    unsigned int var_a, root, after_dec_point_ptr;
    printf("\nPlease input a value:");
    scanf("%d", &var_a);
    printf("\n=============================================\n");
    root = square_root_fun(var_a, &after_dec_point_ptr);
    printf("%d square root is %d.%d", var_a, root, after_dec_point_ptr);
    printf("\n=============================================\n");
    return 0;
}



Please input a value:123456
=============================================
123456 square root is 351.36
=============================================


Please input a value:2345
=============================================
2345 square root is 48.42
=============================================


Please input a value:1
=============================================
1 square root is 1.0
=============================================


Please input a value:0
=============================================
0 square root is 0.0
=============================================




2024年6月29日 星期六

用減法與位移做除法並取餘數

 #include <stdio.h>


unsigned int division_fun(unsigned int dividend, unsigned int divisor, unsigned int *remainder_ptr)
{
    unsigned int max_num, i, quotient;
    if ((dividend == 0) || (divisor == 0) || (dividend < divisor) || (remainder_ptr == NULL))
    {
        if ((dividend < divisor) && (remainder_ptr))
        {
            *remainder_ptr = dividend;
        }
        return 0;
    }

    for (max_num = 31; max_num > 0; max_num--)
    {
        if (dividend & (1 << max_num))
            break;
    }

    *remainder_ptr = dividend;
    quotient = 0;
    for (i = max_num; i > 0; i--)
    {
        if (*remainder_ptr >= (divisor << i))
        {
            *remainder_ptr -= (divisor << i);
            quotient |= (1 << i);
        }
    }

    if ((i == 0) && (*remainder_ptr >= (divisor << i)))
    {
        *remainder_ptr -= (divisor << i);
        quotient |= (1 << i);
    }

    return quotient;
}

int main()
{
    unsigned int var_a, var_b, quotient, remainder;

    printf("\nPlease input a and b values:");
    scanf("%d %d", &var_a, &var_b);

    printf("\n=============================================\n");
    quotient = division_fun(var_a, var_b, &remainder);
    printf("%d / %d = %d...%d", var_a, var_b, quotient, remainder);
    printf("\n=============================================\n");

    return 0;
}

Please input a and b values:123 3 ============================================= 123 / 3 = 41...0 =============================================

Please input a and b values:12345
132

=============================================
12345 / 132 = 93...69
=============================================

只用加法與位移做出乘法

 #include <stdio.h>


unsigned int multiplier_fun(unsigned int mulcand, unsigned int mul)
{
    unsigned int max_num, i, total;
    if ((mulcand == 0) || (mul == 0))
        return 0;

    for (max_num = 31; max_num > 0; max_num--)
    {
        if (mul & (1 << max_num))
            break;
    }

    total = 0;
    for (i = 0; i <= max_num; i++)
    {
        if (mul & (1 << i))
        {
            total += (mulcand << i);
        }
    }

    return total;
}

int main()
{
    unsigned int var_a, var_b;

    printf("\nPlease input a and b values:");
    scanf("%d %d", &var_a, &var_b);

    printf("\n=============================================\n");
    printf("%d x %d = %d", var_a, var_b, multiplier_fun(var_a, var_b));
    printf("\n=============================================\n");

    return 0;
}


Please input a and b values:9 19 ============================================= 9 x 19 = 171 =============================================


Please input a and b values:3 133

=============================================
3 x 133 = 399
=============================================


用*號字元劃出三角形

 #include <stdio.h>


void draw_triangle_fun(unsigned int length, unsigned int width)
{
    unsigned int t_w, t_l;
    char space = ' ', ch = '*';

    for (t_w = 0; t_w < width; t_w++)
    {
        for (t_l = t_w; t_l < length; t_l++)
        {
            printf("%c", ch);
        }
        printf("\n");
    }

    for (t_w = 0; t_w < width; t_w++)
    {
        for (t_l = length - t_w; t_l <= length; t_l++)
        {
            printf("%c", ch);
        }
        printf("\n");
    }

    for (t_w = 0; t_w < width; t_w++)
    {
        for (t_l = 0; t_l < length - t_w - 1; t_l++)
        {
            printf("%c", space);
        }
        for (t_l = length - t_w - 1; t_l < length; t_l++)
        {
            printf("%c", ch);
        }
        printf("\n");
    }

    for (t_w = 0; t_w < width; t_w++)
    {
        for (t_l = 0; t_l < t_w; t_l++)
        {
            printf("%c", space);
        }
        for (t_l = 0; t_l < length - t_w; t_l++)
        {
            printf("%c", ch);
        }
        printf("\n");
    }
}

int main()
{
    unsigned int length, width;

    printf("\nPlease enter length and width:");
    scanf("%d %d", &length, &width);

    printf("\n=============================================\n");
    draw_triangle_fun(length, width);
    printf("\n=============================================\n");

    return 0;
}

Please enter length and width:7 7 ============================================= ******* ****** ***** **** *** ** * * ** *** **** ***** ****** ******* * ** *** **** ***** ****** ******* ******* ****** ***** **** *** ** * =============================================

Please enter length and width:20 20

=============================================
********************
*******************
******************
*****************
****************
***************
**************
*************
************
***********
**********
*********
********
*******
******
*****
****
***
**
*
*
**
***
****
*****
******
*******
********
*********
**********
***********
************
*************
**************
***************
****************
*****************
******************
*******************
********************
                   *
                  **
                 ***
                ****
               *****
              ******
             *******
            ********
           *********
          **********
         ***********
        ************
       *************
      **************
     ***************
    ****************
   *****************
  ******************
 *******************
********************
********************
 *******************
  ******************
   *****************
    ****************
     ***************
      **************
       *************
        ************
         ***********
          **********
           *********
            ********
             *******
              ******
               *****
                ****
                 ***
                  **
                   *

=============================================

2024年6月28日 星期五

最小公因數函式遞迴方式

 #include <stdio.h>


unsigned int least_common_factor(unsigned int var_a, unsigned int var_b)
{
    unsigned int i, total;
    total = 1;
    if ((var_a > 1) && (var_b > 1))
    {
        for (i = 2; i <= ((var_a < var_b) ? var_a : var_b); i++)
        {
            if (((var_a % i) == 0) && ((var_b % i) == 0))
            {
                total *= least_common_factor(var_a / i, var_b / i) * i;
                break;
            }
        }
    }

    return total; // least common factor
}

int main()
{
    unsigned int var_a;
    unsigned int var_b;

    printf("\nPlease input two value:");
    scanf("%d %d", &var_a, &var_b);

    printf("\n=============================================\n");
    printf("a = %d, b = %d, and least_common_factor is %d", var_a, var_b, least_common_factor(var_a, var_b));
    printf(", and greatest common multiple is %d", var_a * var_b / least_common_factor(var_a, var_b));
    printf("\n=============================================\n");

    return 0;
}

Please input two value:25 35 ============================================= a = 25, b = 35, and least_common_factor is 5, and greatest common multiple is 175 =============================================

Please input two value:34 68

=============================================
a = 34, b = 68, and least_common_factor is 34, and greatest common multiple is 68
=============================================