C语言基础习题50例(三)11-15

CuterCorley
• 阅读 1347

C语言基础习题50例(三)11-15

你们看出神马了吗(*^_^*)

习题11

有一对兔子,从出生后第 3 个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少

实现思路: 从第1个月起,兔子对数分别为1、1、2、3、5、8、13、21...,显然是斐波拉契数列。

代码如下:

#include<stdio.h>

int main(){
    int i, f1 = 1, f2 = 1;
    for(i = 1; i < 21; i++){
        printf("%10d%10d", f1, f2);
        f1 += f2;
        f2 += f1;
        if(i % 2 == 0){
            printf("\n");
        }
    }

    return 0;
}

打印:

         1         1         2         3
         5         8        13        21
        34        55        89       144
       233       377       610       987
      1597      2584      4181      6765
     10946     17711     28657     46368
     75025    121393    196418    317811
    514229    832040   1346269   2178309
   3524578   5702887   9227465  14930352
  24157817  39088169  63245986 102334155

习题12

. 判断101-200之间有多少个素数,并输出所有素数。

实现思路: 可以用一个函数来判断一个数是否是素数,是则输出。

代码如下:

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

int main(){
    int isPrime(int n);
    int i, count = 0;
    for(i = 100; i < 201; i++){
        if(isPrime(i)){
            printf("%6d", i);
            count++;
            if(count % 5 == 0){
                printf("\n");
            }
        }        
    }

    return 0;
}

int isPrime(int n){
    int i, prime = 1;
    for(i = 2; i <= sqrt(n); i++){
        if(n % i == 0){
            prime = 0;
            break;
        }
    }
    return prime;
}

打印:

   101   103   107   109   113
   127   131   137   139   149
   151   157   163   167   173
   179   181   191   193   197
   199

习题13

打印出所有的水仙花数。 水仙花数是指一个三位数,其各位数字立方和等于该数本身。 例如: 153是一个水仙花数,因为 153=1^3^ + 5 ^3^ + 3^3^。

实现思路: 通过函数来判断一个数是否是水仙花数,并通过循环来判断所有的数。

代码如下:

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

int main(){
    int isNarci(int n);
    int i, count = 0;
    for(i = 100; i < 1000; i++){
        if(isNarci(i)){
            printf("%6d", i);
            count++;
            if(count % 5 == 0){
                printf("\n");
            }
        }        
    }

    return 0;
}

int isNarci(int n){
    int i, j, k, temp, narci = 0;
    i = n / 100;
    temp = n % 100;
    j = temp / 10;
    k = temp % 10;
    if(n == (pow(i, 3) + pow(j, 3) + pow(k, 3))){
        narci = 1;
    }
    return narci;
}

打印:

   153   370   371   407

练习14

将一个正整数分解质因数。 例如:输入90,打印出 90=2*3*3*5。

实现思路: 使用嵌套循环,逐步分解。

代码如下:

#include<stdio.h>

int main(){
    static int i, num;
    printf("Please input a integer:\n");
    scanf("%d", &num);
    printf("%d=", num);
    while(num){
        for(i = 2; i <= num; i++){
            if(num % i == 0){
                printf("%d", i);                
                num /= i;
                if(num != 1){
                    printf("*");
                }
                break;
            }
        }
        if(num == 1){
            break;
        }
    }

    return 0;
}

打印:

Please input a integer:
120
120=2*2*2*3*5

外层还可以使用for循环,如下:

#include <stdio.h>

int main(){
    int n,i;
    printf("Please input a integer:\n");
    scanf("%d",&n);
    printf("%d=",n);
    for(i=2; i <= n; i++){
        while(n % i == 0){
            printf("%d", i);
            n /= i;
            if(n!=1){
                printf("*");
            }
        }
    }    
    printf("\n");

    return 0;
}

习题15

利用条件运算符的嵌套来完成此题: 学习成绩 >=90分的同学用A表示, 60-89分之间的用B表示, 60分以下的用C表示。

实现思路: 条件判断嵌套实现。

代码如下:

#include <stdio.h>

int main(){
    int score, i;
    char level;
    printf("Please input your scoore:\n");
    scanf("%d", &score);
    level = (score >= 90) ? 'A' : (score >= 60 ? 'B' : 'C');
    printf("Your level is %c", level);

    return 0;
}

打印:

Please input your scoore:
65
Your level is B

除了条件运算符,还可以如下:

#include <stdio.h>

int main(){
    int score, i;
    char level;
    printf("Please input your scoore:\n");
    scanf("%d", &score);
    if(score >= 60){
        if(score >= 90){
            level = 'A';
        }
        else{
            level = 'B';
        }
    }
    else{
        level = 'C';
    }
    printf("Your level is %c", level);


    return 0;
}

本文原文首发来自博客专栏C语言实战,由本人转发至https://www.helloworld.net/p/0l4speSlMtdg,其他平台均属侵权,可点击https://blog.csdn.net/CUFEECR/article/details/106454371查看原文,也可点击https://blog.csdn.net/CUFEECR浏览更多优质原创内容。

点赞
收藏
评论区
推荐文章
blmius blmius
2年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
Wesley13 Wesley13
2年前
java.util.ConcurrentModificationException异常原因及解决方法
今天在做一个很简单的Java练习题的时候遇到这个问题。题目:一对兔子在出生第三个月的时候开始,每个月会生一对小兔子。当小兔子在它们第三个月的时候,同理。问:每个月的兔子总数。这是一个很简单的题,前6个月的兔子数量是,1,1,2,3,5,8.斐波拉契数列。按这个规律就可以得出结果。但是我是用创建对象的方法来做。代码:publiccla
Wesley13 Wesley13
2年前
java基础编程练习题
1、題目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少?123456711235813这就是斐波那契数列(Fibonaccisequence),又称黄金分割数列、因数学家列昂纳多·斐波那契(Le
Stella981 Stella981
2年前
Opencv中Mat矩阵相乘——点乘、dot、mul运算详解
Opencv中Mat矩阵相乘——点乘、dot、mul运算详解2016年09月02日00:00:36 \牧野(https://www.oschina.net/action/GoToLink?urlhttps%3A%2F%2Fme.csdn.net%2Fdcrmg) 阅读数:59593
Stella981 Stella981
2年前
C# Aspose.Cells导出xlsx格式Excel,打开文件报“Excel 已完成文件级验证和修复。此工作簿的某些部分可能已被修复或丢弃”
报错信息:最近打开下载的Excel,会报如下错误。(xls格式不受影响)!(https://oscimg.oschina.net/oscnet/2b6f0c8d7f97368d095d9f0c96bcb36d410.png)!(https://oscimg.oschina.net/oscnet/fe1a8000d00cec3c
Stella981 Stella981
2年前
KVM调整cpu和内存
一.修改kvm虚拟机的配置1、virsheditcentos7找到“memory”和“vcpu”标签,将<namecentos7</name<uuid2220a6d1a36a4fbb8523e078b3dfe795</uuid
Easter79 Easter79
2年前
Twitter的分布式自增ID算法snowflake (Java版)
概述分布式系统中,有一些需要使用全局唯一ID的场景,这种时候为了防止ID冲突可以使用36位的UUID,但是UUID有一些缺点,首先他相对比较长,另外UUID一般是无序的。有些时候我们希望能使用一种简单一些的ID,并且希望ID能够按照时间有序生成。而twitter的snowflake解决了这种需求,最初Twitter把存储系统从MySQL迁移
Stella981 Stella981
2年前
Github标星5300+,专门为程序员开发文档开源管理系统,我粉了
!(https://oscimg.oschina.net/oscnet/a11909a041dac65b1a36b2ae8b9bcc5c432.jpg)码农那点事儿关注我们,一起学习进步!(https://oscimg.oschina.net/oscnet/f4cce1b7389cb00baaab228e455da78d0
Wesley13 Wesley13
2年前
Java面试不得不知的程序(二)
【程序1】 题目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少?斐波那契数列:前面相邻两项之和,构成了后一项通项公式注:此时a11,a21,ana(n1)a(n2)(n3,n∈N\)通项公式的推导斐波那契数列:1、1
Stella981 Stella981
2年前
Nginx反向代理upstream模块介绍
!(https://oscimg.oschina.net/oscnet/1e67c46e359a4d6c8f36b590a372961f.gif)!(https://oscimg.oschina.net/oscnet/819eda5e7de54c23b54b04cfc00d3206.jpg)1.Nginx反