博客
关于我
练习2-17 生成3的乘方表 (15 分)
阅读量:627 次
发布时间:2019-03-14

本文共 1541 字,大约阅读时间需要 5 分钟。

生成3的乘方表

输入一个非负整数n,生成一张3的乘方表,输出3^0到3^n的值。可调用幂函数计算3的乘方。

输入格式:

输入在一行中给出一个非负整数n。

输出格式:

按照幂的递增顺序输出n+1行,每行格式为“pow(3,i) = 3的i次幂的值”。

输入样例:

3

输出样例:

pow(3,0) = 1

pow(3,1) = 3
pow(3,2) = 9
pow(3,3) = 27

使用步骤:

  • 牧口:视频教程:《程序员的自我修炼》——学习C语言

  • 硬件设备:兼容的编程计算机

    将问题分解成几个部分,每个部分都有测试。

  • 问题分析:

    • 读取用户输入n
    • 从0到n循环计算3的各次幂
    • 输出结果遵循指定格式
    1. 计算每个步骤的测试用例:
    2. 4.1 读取输入的函数测试用例:

      • 输入n=0,输出pow(3,0)=1
      • 输入n=1,输出pow(3,0)=1 和 pow(3,1)=3

      4.2 异常处理:

      • 使用安全函数进行输入验证
      • 应对n为负数的情况(但题目保证n非负)?
      1. 创新点:
      2. 一个简单的优化:存储结果并一次性输出或者按需输出更高效。

        1. 需要注意的事项:
          • 确保pow(3,i)结果正确,考虑整数范围问题。
          • 调用库函数,避免不必要的计算。

          方案:

        2. 创建数组存储结果
        3. 表现循环计算的次数,比如用size_t i=0;
        4. 多次调试测试程序,确保每个i对应的pow值正确。
        5. 测试日志:

          测试1:

          n=0

          程序循环一次i=0
          输出正确,无问题

          测试2:

          n=1

          程序循环两次,i=0和i=1
          结果正确

          测试3:

          n=3

          程序循环四次,结果与参考输出一致,正确

          测试4:

          n=5

          计算的各个幂是否正确?
          检查3^0=1,3^1=3,3^2=9,3^3=27,3^4=81,3^5=243
          结果正确,无误差。

          项代码:

          步骤:

        6. 确定必须用到的头文件:#include <stdio.h> 和 #include <math.h>

        7. 编写函数:

        8. int main()

          {
          int n, i;
          int power;
          scanf("%d", &n);
          for (i=0; i <= n; i++)
          {
          power = pow(3, i);
          printf("pow(3,%d) = %d\n", i, power);
          }
          return 0;
          }

          注意:因为pow返回double类型,需转换为整数(如果需要整数结果)。

          可能的问题:

        9. pow返回double,是否需要舍去小数部分?但题目中的结果都是整数,因此应为好。

        10. 为什么不对了?

        11. 可在代码中将power转换为long long类型:

          long long power = pow(3, i);

          或者使用确定性 CAST:double d = pow(3,i); long long l = d;

          1. 编译源文件:
          2. 将上述代码保存为power_table.c,并使用编译器编译:

            gcc -o power_table power_table.c

            或者其他编译器

            Testing:

            输入n=2,编译程序,然后检查输出。

            应得到三行:pow(3,0)=1, pow(3,1)=3, pow(3,2)=9.

            优化思考:

            是否可以预先计算所有幂值并存储在数组,然后处理输出?

            比如:

            int main()

            {
            int n, i;
            int powers[n+1]; // 假设n为已知的最大值
            for (i=0;n+1;i++)
            powers[i] = pow(3, i);
            for (i=0; i <=n; i++)
            printf("pow(3,%d) = %d\n", i, powers[i]);
            }

            这样可以减少计算次数,但如果n很大,可能会占用更多内存。对于本问题,这种优化并不是必要的。

    转载地址:http://hjgoz.baihongyu.com/

    你可能感兴趣的文章
    Gym 102770 B-Bin Packing Problem 2020浙江省省赛 (线段树 + set)
    查看>>
    centOS7.6安装nginx
    查看>>
    [python复习6]正则表达式
    查看>>
    Flask操作SQLAlchemy
    查看>>
    JavaScript和Java重要的相异点
    查看>>
    网络对抗技术-Exp2-后门原理与实践 20181314
    查看>>
    能解决数据可视化大屏需求的3款可视化工具
    查看>>
    java 使用SimpleDateFormat类,把2018-03-04转换为2018年03月04日。
    查看>>
    java定义方法判断字符串是否对称- 例如:“abcba“、“上海自来水来自海上“均为对称字符串。
    查看>>
    问题:JSON有哪些格式类型呢?
    查看>>
    BUUCTF 每日打卡 2021-4-5
    查看>>
    Mysql事务的个人理解
    查看>>
    欢迎来到小迪博客
    查看>>
    STM32F103ZET6单片机开发学习路径
    查看>>
    STM32F103ZET6---复位
    查看>>
    STM32驱动0.96寸oled液晶屏
    查看>>
    【Altium Designer21】工作栏中文解析
    查看>>
    [87]用secureCRT连接虚拟机中的Ubuntu系统,出现“远程主机拒绝连接”错误
    查看>>
    [206]如何解决python升级后yum报错
    查看>>
    Shell脚本防DNS攻击检测并删除肉机IP
    查看>>