本文共 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) = 3pow(3,2) = 9pow(3,3) = 27使用步骤:
牧口:视频教程:《程序员的自我修炼》——学习C语言
硬件设备:兼容的编程计算机
将问题分解成几个部分,每个部分都有测试。问题分析:
4.1 读取输入的函数测试用例:
4.2 异常处理:
一个简单的优化:存储结果并一次性输出或者按需输出更高效。
方案:
测试日志:
测试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结果正确,无误差。项代码:
步骤:
确定必须用到的头文件:#include <stdio.h> 和 #include <math.h>
编写函数:
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类型,需转换为整数(如果需要整数结果)。
可能的问题:
pow返回double,是否需要舍去小数部分?但题目中的结果都是整数,因此应为好。
为什么不对了?
可在代码中将power转换为long long类型:
long long power = pow(3, i);
或者使用确定性 CAST:double d = pow(3,i); long long l = d;
将上述代码保存为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/