美文网首页
C语言编程 菜鸟练习100题(31-40)

C语言编程 菜鸟练习100题(31-40)

作者: youcans | 来源:发表于2021-04-11 15:38 被阅读0次

    【练习31】判断质数

    0. 题目:
    判断质数
    1. 分析:
    质数(prime number),指大于 1的、且除 1 和本身以外没有其他因数的自然数。
    2. 程序:

    #include <stdio.h> 
    #include<math.h>
    int main()
    {
        int i, iNum, iFlag = 0;
     
        printf("输入一个正整数: ");
        scanf("%d",&iNum);
     
        for(i=2; i<=sqrt(iNum); i++)
        {
            if(iNum%i==0) // 能被其它数整除则不是质数 
            {
                iFlag=1;
                break;
            }
        }
     
        if (iFlag==0)
            printf("%d 是素数",iNum);
        else
            printf("%d 不是素数",iNum);
        
        return 0;
    }
    

    3. 输入输出:

    输入一个正整数: 123457
    123457 是素数


    【练习32】判断Armstrong数

    0. 题目:
    判断Armstrong数(阿姆斯壮数)
    1. 分析:
    Armstrong 数是指 n位数的各位数的 n次方之和等于该数。例如:153=13+53+3^3。
    练习使用函数调用。函数调用就是使用已经定义好的函数。创建 C 函数时,会定义函数做什么,然后通过调用函数来完成已定义的任务。
    2. 程序:

    #include <stdio.h>
    #include <math.h>
     
    int checkArmstrongNumber(int n); // 函数声明,名称、返回类型和参数
     
    int main()
    {
        int n, flag;
     
        printf("输入正整数: ");
        scanf("%d", &n);
     
        // 检测 Armstrong 数
        flag = checkArmstrongNumber(n);
        if (flag == 1)
            printf("%d 是 Armstrong 数。", n);
        else
            printf("%d 不是 Armstrong 数。",n);
        return 0;
    }
    
    int checkArmstrongNumber(int number)
    {
        int originalNumber, remainder, result = 0, n = 0, flag;
     
        originalNumber = number; 
        while (originalNumber != 0)  // 判断位数 
        {
            originalNumber /= 10;
            n++;
        }
     
        originalNumber = number; 
        while (originalNumber != 0)  
        {
            remainder = originalNumber%10;
            result += pow(remainder, n);
            originalNumber /= 10;
        }
     
        // 判断 Armstrong 数条件
        if(result == number)
            flag = 1;
        else
            flag = 0;
     
        return flag;
    }
    

    3. 输入输出:

    输入三位数: 370
    370 是 Armstrong 数。


    【练习33】求整数的所有因数

    0. 题目:
    求一个整数的所有因数
    1. 分析:
    如果整数 a 除以整数 b(b≠0) 的商正好是整数而没有余数, 就说 b 是 a 的因数。因数包括 1和自身。
    2. 程序:

    #include <stdio.h> 
    int main()
    {
        int iNum, i;
     
        printf("输入一个整数: ");
        scanf("%d",&iNum);
     
        printf("%d 的因数有: ", iNum);
        for(i=1; i <= iNum; i++)
        {
            if (iNum%i == 0)
            {
                printf("%d ",i);
            }
        }
     
        return 0;
    }
    

    3. 输入输出:

    输入一个整数: 60
    60 的因数有: 1 2 3 4 5 6 10 12 15 20 30 60


    【练习34】创建三角形图案

    0. 题目:
    创建三角形图案
    1. 分析:
    练习使用 for 循环结构。for 循环允许一个执行指定次数的循环控制结构。
    2. 程序:

    #include <stdio.h> 
    int main()
    {
        int i, j, k, rows, space;
     
        printf("输入行数: ");
        scanf("%d",&rows);
     
        // 打印 * 三角形 
        for(i=1; i<=rows; i++)
        {
            for(j=1; j<=i; j++)
            {
                printf("* ");
            }
            printf("\n");
        }
        
        // 打印 * 倒三角形    
        printf("\n\n");
        for(i=rows; i>=1; i--)
        {
            for(j=1; j<=i; j++)
            {
                printf("* ");
            }
            printf("\n");
        }
        
        // 打印 * 金字塔三角形 
        printf("\n\n");
        for(i=1; i<=rows; i++, k=0)
        {
            for(space=1; space<=rows-i; space++)
            {
                printf("  ");
            }
     
            while(k != 2*i-1)
            {
                printf("* ");
                k++;
            }
     
            printf("\n");
        }
        
        // 打印弗洛伊德三角形
        printf("\n\n");
        for(i=1,j=1;i<=rows;i++) 
        { 
            for(k=1;k<=i;k++,j++) 
                printf("%5d",j); 
            printf("\n"); 
        } 
        
        return 0;
    }
    

    3. 输入输出:

    输入行数: 6
    前 3 个图略
    弗洛伊德三角形的输出如下:
    1
    2 3
    4 5 6
    7 8 9 10
    11 12 13 14 15
    16 17 18 19 20 21


    【练习35】表格形式输出数据

    0. 题目:
    表格形式输出数据: 将 1~100 的数据以 10x10 矩阵格式输出。
    1. 分析:
    练习使用 for 循环结构。for 循环允许一个执行指定次数的循环控制结构。
    2. 程序:

    #include <stdio.h>
     
    int main() {
       int i, j, count;
     
       for(i = 1; i <= 10; i++) {
          for(j = i; j <=100; j += 10 )
             printf(" %3d", j);
           printf("\n");
       }
     
       return 0;
    }
    

    3. 输入输出:

    1  11  21  31  41  51  61  71  81  91
    2  12  22  32  42  52  62  72  82  92
    3  13  23  33  43  53  63  73  83  93
    4  14  24  34  44  54  64  74  84  94
    5  15  25  35  45  55  65  75  85  95
    6  16  26  36  46  56  66  76  86  96
    7  17  27  37  47  57  67  77  87  97
    8  18  28  38  48  58  68  78  88  98
    9  19  29  39  49  59  69  79  89  99
    10  20  30  40  50  60  70  80  90 100
    

    【练习36】实现简单的计算器

    0. 题目:
    实现简单的计算器
    1. 分析:
    实现加减乘除计算。
    2. 程序:

    # include <stdio.h>
    int main()
    { 
        char cOperator;
        float fNum1, fNum2;
     
        printf("输入操作符 (+, -, *, /): ");
        scanf("%c", &cOperator);
     
        printf("输入两个数字(逗号分隔): ");
        scanf("%f,%f",&fNum1, &fNum2);
     
        switch(cOperator)
        {
            case '+':
                printf("%.1f + %.1f = %.1f", fNum1, fNum2, fNum1 + fNum2);
                break;
            case '-':
                printf("%.1f - %.1f = %.1f", fNum1, fNum2, fNum1 - fNum2);
                break; 
            case '*':
                printf("%.1f * %.1f = %.1f", fNum1, fNum2, fNum1 * fNum2);
                break; 
            case '/':
                printf("%.1f / %.1f = %.1f", fNum1, fNum2, fNum1 / fNum2);
                break; 
            // operator doesn't match any case constant (+, -, *, /)
            default:
                printf("Error! operator is not correct");
        }
        
        return 0;
    }
    

    3. 输入输出:

    输入操作符 (+, -, *,/): /
    输入两个数字(逗号分隔): 1.2,2.0
    1.2 / 2.0 = 0.6
    

    【练习37】计算一个数是否可为两个素数之和

    0. 题目:
    计算一个数是否可为两个素数之和
    1. 分析:
    练习使用 for 循环结构。for 循环允许一个执行指定次数的循环控制结构。
    2. 程序:

    #include <stdio.h>
     
    int checkPrime(int n);
    int main()
    {
        int num, i, flag = 0;
     
        printf("输入正整数: ");
        scanf("%d", &num);
     
        for(i = 2; i <= num/2; ++i)
        {
            // 检测判断
            if (checkPrime(i) == 1)
            {
                if (checkPrime(num-i) == 1)
                {
                    printf("%d = %d + %d\n", num, i, num-i);
                    flag = 1;
                } 
            }
        }
     
        if (flag == 0)
            printf("%d 不能分解为两个素数。", num);
     
        return 0;
    }
     
    // 判断素数
    int checkPrime(int n)
    {
        int i, isPrime = 1;
     
        for(i = 2; i <= n/2; ++i)
        {
            if(n % i == 0)
            {
                isPrime = 0;
                break;
            }  
        }
     
        return isPrime;
    }
    

    3. 输入输出:

    输入正整数: 34
    34 = 3 + 31
    34 = 5 + 29
    34 = 11 + 23
    34 = 17 + 17


    【练习38】二进制转与十进制相互转换

    0. 题目:
    二进制转与十进制相互转换
    1. 分析:
    2. 程序:

    #include <stdio.h>
    #include <math.h>
     
    int convertBinaryToDecimal(long long nBinary);
    long long convertDecimalToBinary(int nDecimal);
    
     
    int main()
    {
        char cFlag; 
        int nDecimal;
        long long nBinary;
        
        printf("B:将二进制数转换为十进制\n");
        printf("D:将十进制数转换为二进制\n");
        printf("请输入 B 或 D:\n");
        scanf("%c", &cFlag);
    
        if (cFlag=='B' || cFlag=='b')
        {
            printf("输入一个二进制数: ");
            scanf("%lld", &nBinary);
            nDecimal = convertBinaryToDecimal(nBinary);
            printf("二进制数 %lld 转换为十进制为 %d", 
            nBinary, nDecimal);
        }
        else if (cFlag=='D' || cFlag=='d')
        {
            printf("输入一个十进制数(<1024): ");
            scanf("%d", &nDecimal);
            nBinary = convertDecimalToBinary(nDecimal);
            printf("十进制数 %d 转换为二进制位 %lld", nDecimal, nBinary);
        }
        else
        {
            printf("输入错误。");
        }   
        
        return 0;
    }
     
    int convertBinaryToDecimal(long long nBinary)
    {
        int decimalNumber = 0, i = 0, remainder;
        while (nBinary!=0)
        {
            remainder = nBinary%10;
            nBinary /= 10;
            decimalNumber += remainder*pow(2,i);
            ++i;
        }
        return decimalNumber;
    }
    
    long long convertDecimalToBinary(int nDecimal)
    {
        long long binaryNumber = 0;
        int remainder, i = 1, step = 1;
     
        while (nDecimal!=0)
        {
            remainder = nDecimal%2;
            printf("Step %d: %d/2, 余数 = %d, 商 = %d\n", step++, nDecimal, remainder, nDecimal/2);
            nDecimal /= 2;
            binaryNumber += remainder*i;
            i *= 10;
        }
        return binaryNumber;
    }
    

    3. 输入输出:

    B:将二进制数转换为十进制
    D:将十进制数转换为二进制
    请输入 B 或 D:
    B
    输入一个二进制数: 110110111
    二进制数 110110111 转换为十进制为 439
    D
    输入一个十进制数(<1024): 100
    Step 1: 100/2, 余数 = 0, 商 = 50
    Step 2: 50/2, 余数 = 0, 商 = 25
    Step 3: 25/2, 余数 = 1, 商 = 12
    Step 4: 12/2, 余数 = 0, 商 = 6
    Step 5: 6/2, 余数 = 0, 商 = 3
    Step 6: 3/2, 余数 = 1, 商 = 1
    Step 7: 1/2, 余数 = 1, 商 = 0
    十进制数 100 转换为二进制位 1100100


    【练习39】八进制与十进制相互转换

    0. 题目:
    八进制与十进制相互转换
    1. 分析:
    2. 程序:

    #include <stdio.h>
    #include <math.h>
     
    int convertDecimalToOctal(int decimalNumber);
    int main()
    {
        int decimalNumber;
     
        printf("输入一个十进制数: ");
        scanf("%d", &decimalNumber);
     
        printf("十进制数 %d 转换为八进制为 %d", decimalNumber, convertDecimalToOctal(decimalNumber));
     
        return 0;
    }
     
    int convertDecimalToOctal(int decimalNumber)
    {
        int octalNumber = 0, i = 1;
     
        while (decimalNumber != 0)
        {
            octalNumber += (decimalNumber % 8) * i;
            decimalNumber /= 8;
            i *= 10;
        }
     
        return octalNumber;
    }
    

    3. 输入输出:

    输入一个十进制数: 1024
    十进制数 1024 转换为十进制为 2000


    【练习40】八进制与二进制相互转换

    0. 题目:
    八进制与二进制相互转换。
    1. 分析:
    2. 程序:

    #include <stdio.h>
    #include <math.h>
     
    int convertBinarytoOctal(long long binaryNumber);
    int main()
    {
        long long binaryNumber;
     
        printf("输入一个二进制数: ");
        scanf("%lld", &binaryNumber);
     
        printf("二进制数 %lld 转换为八进制为 %d", binaryNumber, convertBinarytoOctal(binaryNumber));
     
        return 0;
    }
     
    int convertBinarytoOctal(long long binaryNumber)
    {
        int octalNumber = 0, decimalNumber = 0, i = 0;
     
        while(binaryNumber != 0)
        {
            decimalNumber += (binaryNumber%10) * pow(2,i);
            ++i;
            binaryNumber/=10;
        }
     
        i = 1;
     
        while (decimalNumber != 0)
        {
            octalNumber += (decimalNumber % 8) * i;
            decimalNumber /= 8;
            i *= 10;
        }
     
        return octalNumber;
    }
    

    3. 输入输出:

    输入一个二进制数: 10101100
    二进制数 10101100 转换为八进制为 254


    版权说明:
    题目和例程 源于 菜鸟教程,作者重新编写了程序、注释和算例,并增加了难点分析。

    相关文章

      网友评论

          本文标题:C语言编程 菜鸟练习100题(31-40)

          本文链接:https://www.haomeiwen.com/subject/ncexlltx.html