首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >C语言经典例题100(6-10)

C语言经典例题100(6-10)

原创
作者头像
Anime_Bucket
发布2025-06-04 16:09:39
发布2025-06-04 16:09:39
1840
举报
文章被收录于专栏:C语言例题100题C语言例题100题

第六题:输出99乘法表

题目:输出 9*9 口诀。

思路: 使用循环嵌套来写这个代码,我们首先要让i=1的时候,做一遍1的乘法运算,也就是说我们的j<=i,所以我们第二个for循环就可以写成是让j也从1开始遍历,范围要小于等于i,以此递增。

代码语言:C
复制
/*
99乘法表
*/
#include"stdio.h"
int main()
{
    for(int i = 1;i<10;i++)
    {
        for(int j = 1 ; j <= i ; j++)
        {
            printf("%d * %d = %d ",i,j,i*j);
        }
        printf("\n");
    }
    return 0;
}

第七题:国际象棋棋盘

题目:要求输出国际象棋棋盘

思路: 首先我们要创建要给8*8的一个矩阵,再矩阵中,当行号 i 和列号 j 的和为偶数时,打印实心方块,当行号 i 和列号 j 的和为奇数时,打印空格

代码:

代码语言:C
复制
#include <stdio.h>

int main()
{
    int i,j;
    for(i=0;i<8;i++)
    {
        for(j=0;j<8;j++)
            if((i+j)%2==0)
                printf("%c%c",219,219);
            else printf("  ");
        printf("\n");
    }
    return 0;
}

第八题:打印楼梯,同时在楼梯上方打印两个笑脸。

题目:打印楼梯,同时在楼梯上方打印两个笑脸。

思路: 这个题目我们可以理解为实在输出一个*号楼梯。我们的外层循环用来控制循环的行数,内层循环用来控制每行的星号数量。

代码:

代码语言:C
复制
#include "stdio.h"
int main()
{
    printf("@@\n");
    for(int i = 1;i<11;i++)
    {
        for(int j = 1 ;j <= i;j++)
        {
            printf("* ");
        }
        printf("\n");
    }
    return 0;
}

第九题:鸡兔同笼

题目:古典问题(兔子生崽):有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少?(输出前40个月即可)

思路: 首先我们要让前两个月为1,然后我们再来分析一下繁殖规则:成年兔子(≥3个月)每月生1对小兔子,小兔子出生后第3个月开始繁殖,所有兔子都不死亡

这样的话,我们就可以做出一个表格出来

月份

成年兔

未成年兔

总数

说明

1

0

1

1

初始1对未成年兔

2

1

0

1

上月的未成年兔成熟

3

1

1

2

成年兔生1对小兔

4

1

1

3

原有成年兔继续生1对

5

2

2

5

第3个月出生的小兔成熟并开始繁殖

这样我们可以写一个伪代码出来:

代码语言:txt
复制
初始化前两个月 = 1
输出前两个月
for 月份从3到40:
    本月 = 上月 + 前月
    更新前月 = 上月
    更新上月 = 本月
    输出本月

代码:

代码语言:C
复制
#include <stdio.h>

int main() {
    // 初始化前两个月的兔子对数
    long long month1 = 1;  // 第1个月兔子对数
    long long month2 = 1;  // 第2个月兔子对数
    long long current;     // 当前月兔子对数
    
    printf("月份\t兔子对数\n");
    printf("1\t%lld\n", month1);
    printf("2\t%lld\n", month2);
    
    // 计算并输出第3到第40个月的兔子对数
    for (int month = 3; month <= 40; month++) {
        // 当前月兔子对数 = 上个月 + 上上个月
        current = month1 + month2;
        // 更新前两个月的值
        month1 = month2;
        month2 = current;
        printf("%d\t%lld\n", month, current);
    }
    return 0;
}

第十题:判断素数

题目:判断 101 到 200 之间的素数。

程序分析:判断素数的方法:用一个数分别去除 2 到 sqrt(这个数),如果能被整除,则表明此数不是素数,反之是素数。

思路: 判断素数,素数就是大于1且只能被1和自身整除的自然数。

伪代码:

代码语言:txt
复制
函数 isPrime(数字 num):
    如果 num <= 1:
        返回 false
    如果 num <= 3:
        返回 true
    如果 num 能被2整除 或 num 能被3整除:
        返回 false
    
    初始化 i = 5
    当 i * i <= num 时循环:
        如果 num 能被 i 整除 或 num 能被 (i + 2) 整除:
            返回 false
        i 增加 6
    
    返回 true

主函数 main():
    打印 "素数在 101 到 200 之间的列表:"
    
    对于 i 从 101 到 200:
        如果 isPrime(i) 为真:
            打印 i 和空格
    
    打印换行

代码:

代码语言:C
复制
// 题目:判断 101 到 200 之间的素数。
#include <stdio.h>
#include "stdbool.h"

bool isPrime(int num) {
    // 小于等于1的数不是素数
    if (num <= 1) return false;
    
    // 2和3是素数
    if (num <= 3) return true;
    
    // 排除能被2或3整除的数
    if (num % 2 == 0 || num % 3 == 0) return false;
    
    // 优化循环:从5开始,每次增加6
    for (int i = 5; i * i <= num; i += 6) {
        // 检查6k±1形式的因子
        if (num % i == 0 || num % (i + 2) == 0)
            return false;
    }
    
    return true;
}

int main() {
    printf("素数在 101 到 200 之间的列表:\n");
    
    // 遍历101到200的所有整数
    for (int i = 101; i <= 200; i++) {
        if (isPrime(i)) {
            printf("%d ", i); // 打印素数
        }
    }
    
    printf("\n"); // 打印换行
    return 0;
}

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 第六题:输出99乘法表
  • 第七题:国际象棋棋盘
  • 第八题:打印楼梯,同时在楼梯上方打印两个笑脸。
  • 第九题:鸡兔同笼
  • 第十题:判断素数
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档