c - 我正在尝试制作自定义 pow() 函数,但我的 for 循环不起作用 - C
问题描述
我正在尝试制作一个自定义 pow() 函数来比较实际 pow 函数的结果,但它不起作用。当基数为 1 时,它工作正常,但之后 MyPower 函数将返回 1 的任何第一次幂,所以它会说。
测试1.000000对1个电源
测试1.000000至2个电源
测试1.000000至3个电源
测试1.000000至4电源
2.000000 to 1 is 2.000000,结果为1.000000
2.0000 to 2 is 4.000000,结果IS 2.000000
2.000000 to 3 is 8 is 8.000000 is 8.000000 is 8.000000 is 8.000000 , 结果是 4.000000
2.000000 到 4 是 16.000000, 结果是 8.000000
并且对于所有其余的基数,它将继续减少一个指数值。我相信错误发生在 MyPower() 函数中,但我不确定。
#include <stdio.h>
#include <math.h>
double base, x;
int exponent, i, z;
double MyPower(double base, int exponent);
void DoTest(double base, int exponent);
double MyPower(double base, int exponent){
double x = 1;
for(z = 1; z < exponent; z++){
x *= base;
}
return x;
}
int main(void){
int i, j;
for(i = 1; i < 5; i++){
for(j = 1; j < 5; j++){
DoTest(i,j);
}
}
}
void DoTest(double base, int exponent){
double test1 = MyPower(base, exponent);
double pow_result = pow(base, exponent);
if(test1 == pow_result){
printf("Testing %f to the %d power\n", base, exponent);
}
else{
printf("%f to the %d is %f, result is %f\n", base, exponent, pow_result, test1);
}
}
解决方案
问题来自循环中的条件。
你给 z 的初始值和退出条件的组合使它比你想要做的迭代少一次:
for(z = 1; z < exponent; z++){
x *= base;
}
您需要将其更改为:
for(z = 0; z < exponent; z++){
或者:
for(z = 1; z <= exponent; z++){
调试程序时的一点建议
它可能看起来很过时,但尝试用笔和纸运行你的算法将帮助你发现这类错误。毫无疑问,随着您的经验越来越丰富,您将变得越来越熟练。欢迎来到 StackOverflow!
推荐阅读
- python - 在 Pandas 中将 Series 传递给 pd.PeriodIndex 会导致 TypeError: Incorrect dtype
- node.js - 使用nodejs从文件中检索属性?
- go - 由 grpc proto3 生成的 protobuff 中的蛇形案例样式
- python - OpenCV 函数在 Python 和 C++ 中不起作用
- c - 读取多个设备文件
- java - 将android真实设备连接到应用程序以执行GET请求
:8000 使用改造 - c# - Xamarin Android 列表中的 XML 反序列化错误
标有 [XmlAttribute] - sql - 有没有办法在 FROM 子句中使用多个源表而不在 SQL Server 中使用 JOIN?
- azure - 在发布管道中替换 ConnectionString 变量的正确格式是什么?
- python - Python中的JSON提取