C语言必会100题(3)。(古典问题)兔子问题/判断101到200之间的素数/打印出所有的“水仙花数”/将一个正整数分解质因数/利用条件运算符的嵌套完成学习成绩的转换

特此鸣谢:鱼C_小甲鱼(B站up主)不二如是(鱼C论坛大佬)
题目来源:https://fishc.com.cn
注:这些题在网上都可以搜到,题下面的代码大多是流传下来的答案(我重新排了一下版,增加了可读性),部分是本人经过深思熟虑后编写的。

11,(古典问题)兔子问题

1.题目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少?
2.程序源代码:

  1. 第一种解:
#include <stdio.h>

int main()
{
    int i;
    int count = 3;
    int month;
    long int a[10];
    a[0] = 2;
    a[1] = 2;

    printf("第1个月:2只\n");
    printf("第2个月:2只\n");
    for(i = 2; i < 10; i++)
    {
        a[i] = a[i - 1] + a[i - 2];
        printf("第%d个月:%ld只\n", count, a[i]);
        count++;
    }

    printf("\n");
    printf("请输入您想查询的月数的兔子的总数:");
    scanf("%d", &month);
    if(month == 1 || month == 2)
    {
        printf("这个月的兔子的总数为:2只");
    }
    else
    {
        printf("这个月的兔子的总数为:%ld\n", a[month - 1]);
    }

    return 0;
}

  1. 第二种解:
#include <stdio.h>

int main()
{
    long f1 = 1, f2 = 1;
    int i;

    for(i = 1; i <= 20; i++)
    {
        printf("%12ld %12ld", f1, f2);
        if(i % 2 == 0)
        {
            printf("\n"); //控制输出,(f1,f2每次同时输出,所以在控制台是每行4个)每行四个
        }

        f1 = f1 + f2; //前两个月加起来赋值给第三个月
        f2 = f1 + f2; //前两个月加起来赋值给第三个月
    }

    return 0;
}

12,判断101到200之间的素数

1.题目:判断101-200之间有多少个素数,并输出所有素数。
2.程序源代码:

#include <stdio.h>
#include <math.h>

int main()
{
    int i, j;
    int certain = 1;
    int count = 0;
    printf("101到200之间的素数有:\n");

    for(i = 101; i <= 200; i++)
    {
        for(j = 2; j <= sqrt(i + 1); j++)
        {
            if(i % j == 0)//不是素数
            {
                certain = 0;
                break;
            }
        }

        if(certain)//如果是素数
        {
            printf("%d ", i);
            count++;
            if(count % 4 == 0)
            {
                printf("\n");
            }
        }
        certain = 1;
    }

    printf("\n");
    printf("共有%d个素数!\n", count);

    return 0;
}

13,打印出所有的“水仙花数”

1.题目:打印出所有的“水仙花数”,所谓“水仙花数”是指一个三位数,其各位数字立方和等于该数本身。例如:153是一个“水仙花数”,因为153 = 1的三次方+5的三次方+3的三次方。
2.程序源代码:

  1. 第一种解:
#include <stdio.h>
#include <math.h>

int main()
{
    int i;
    int x, y, z;

    printf("水仙花树有:\n");
    for(i = 100; i < 1000; i++)
    {
        x = i % 10;
        y = i / 10 % 10;
        z = i / 100;
        if(pow(x, 3) + pow(y, 3) + pow(z, 3) == i)
        {
            printf("%d ", i);
        }
    }
    return 0;
}

  1. 第二种解:
#include <stdio.h>

int main()
{
    int i, j, k, n;
    printf("'water flower'number is:");
    
    for(n = 100; n < 1000; n++)
    { 
        i = n / 100;//分解出百位
        j = n / 10 % 10;//分解出十位
        k = n % 10;//分解出个位
        if(i * 100 + j * 10 + k == i * i * i + j * j * j + k * k * k)
        {
            printf("%-5d", n);
        }
    }
    
    return 0;
}

14,将一个正整数分解质因数

1.题目:将一个正整数分解质因数。例如:输入90, 打印出90 = 2 * 3 * 3 * 5。
2.程序分析:让用户输入n,对n进行分解质因数,应先找到一个最小的质数k,然后按照下述步骤完成:
(1) 如果n > k,但n能被k整除,则应打印出k的值,并用n除以k的商,作为新的正整数n。
(2) 如果n不能被k整除,则用k+1作为k的值,重复执行第一步。
(3) 如果这个质数k恰好等于n,则说明分解质因数的过程已经结束,打印出即可。
3.程序源代码:

  1. 第一种解:
#include <stdio.h>
#include <math.h>

int main()
{
    int certain = 1;
    int n;
    int k = 2;
    int num;

    printf("请输入一个正整数,我们会将其分解:\n");
    while(certain)
    {
        scanf("%d", &n);
        if(n <= 0)
        {
            printf("输入错误,请重新输入!\n");
        }
        else
        {
            certain = 0;
        }
    }

    certain = 1;
    num = n;
    
    if(n <= 2)
    {
        printf("他的分解质因数是%d\n", n);
    }
    else
    {
        printf("%d = ", num);
        while(certain)
        {
            if(n == k)
            {
                certain = 0;
            }
            if(n % k == 0)
            {
                if(n == k)
                {
                    printf("%d", k);
                }
                else
                {
                    printf("%d * ", k);
                    n = n / k;
                }
            }
            else
            {
                k++;
            }
        }

    }
    return 0;
}

  1. 第二种解:
#include <stdio.h>

int main()
{
    int n, i;

    printf("please input a number:\n");
    scanf("%d", &n);
    printf("%d = ", n);

    for(i = 2; i <= n; i++)
    {
        while(n != i)
        {
            if(n % i == 0)
            {
                printf("%d * ", i);
                n = n / i;
            }
            else
            {
                break;
            }

        }
    }

    printf("%d ", n);

}

15,利用条件运算符的嵌套完成学习成绩的转换

1.题目:利用条件运算符的嵌套来完成此题:学习成绩>=90分的同学用A表示,60-89分之间的用B表示,60分以下的用C表示。
2.要求:(a>b)?a:b这是条件运算符的基本例子。
3.程序源代码:

  1. 第一种解:
#include <stdio.h>

int main()
{
    int result;
    
    printf("请输入学生的成绩,我们将会对成绩分等级:\n");
    scanf("%d", &result);

    printf("%d分成绩的等级为:", result);
    (result >= 90) ? printf("A") : ( (result >= 60) ? printf("B") : printf("C") ) ;
    
    return 0;
}

  1. 第二种解:
#include <stdio.h>

int main()
{
    int score;
    char grade;
    
    printf("please input a score\n");
    scanf("%d", &score);
    
    grade = score >= 90 ? 'A' : (score >= 60 ? 'B' : 'C');
    printf("%d belongs to %c", score, grade);
    
    return 0;
}

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值