欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 健康 > 美食 > C语言实验 函数一

C语言实验 函数一

2025/8/15 23:39:43 来源:https://blog.csdn.net/2201_75297369/article/details/144459785  浏览:    关键词:C语言实验 函数一

时间:2024.12.14

6-1 弹球距离

double dist (double h,double p)
{double sum = h,height;height = h*p;while(height>=TOL){sum += height * 2;        //上行下行都算,所以是两倍的距离。height *=p;}return sum;
}

6-2 使用函数输出一个整数的逆序数

错误代码:运行超时 

int reverse( int number ){int re=0,l;l=number;while(l!=0){re+=l%10;l=number/10;}
return re;
}
  1. 问题分析

    • 原代码中的问题在于循环条件和计算逆序数的逻辑有误。在原代码中,while循环的条件是l!=0,但是在循环体内部,l的值没有正确更新。每次循环时,l都被重新赋值为number/10,而不是l/10,这导致循环可能无法正确结束,从而导致运行超时。
    • 另外,计算逆序数的逻辑也不正确。原代码中re += l % 10只是将l的最后一位加到re上,并没有实现逆序的效果。

正确代码 

   int reverse(int number) {int re = 0;while (number!= 0) {re = re * 10 + number % 10;number /= 10;}return re;}
  • 在改正后的代码中,while循环的条件是number!= 0,并且在循环体内部,number的值正确地更新为number/10(这里使用/=运算符简化了代码)。
  • 计算逆序数的逻辑是re = re * 10+number % 10,这会将number的最后一位取出来并添加到re的最后一位,通过每次循环将re乘以 10 来实现逆序的效果。

6-3 使用函数求最大公约数

代码一

int gcd( int x, int y ){int re,min,i,max;min=x>y?y:x;max=x>y?x:y;for(i=min;i>1;i--){if(max%i==0&&min%i==0){re=i;break;}}if(x==1&&y==1){re=1;}return re;
}

 代码一思路分析

  • 原代码的思路是先找到xy中的较小值min和较大值max,然后从min开始递减循环,找到第一个能同时整除maxmin的数,即为最大公约数。如果xy都为 1,则直接返回 1。
  • 存在的问题是循环从min递减到 1,可能会进行较多不必要的计算。

代码二(

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词