斜率计算2
斜率计算2描述现在给出两个点的坐标要你求出斜率这个斜率需要用最简分数表示同时斜率不存在输出-1输入输入4个整数 x1,y1,x2,y2.分别是A,B两点的坐标。输出输出两点所确定直线的斜率不存在则输出-1.输入样例 12 1 0 0输出样例 11/2分析由题可知在斜率存在的前提下当斜率为整数时输出整数当斜率为小数时输出最简分数。因此我们先要使斜率存在很简单只需要X1X2就行了。在此条件下我们再去判断斜率是整数还是小数。我的想法是用浮点型变量kf和kd分别存储斜率值接着判断表达式是kf-kd)0、kf-kd)0、kf-kd)0。这个表达式因为kf是浮点型kd是整型所以计算机在计算的时候会发生自动类型转换即int-float。如果是kf-kd)0我们不但知道斜率是小数还可以知道斜率是正数kf-kd)0同理。接着找到分子|Y2-Y1|和分母|X2-X1|的最大公约数num再用分子和分母分别除以最大公约数在前面我们又知道斜率是正数还是负数如果是正数按照题目的格式输出如果是负数则在格式输出中增添负号就能输出最简分数了。注意只有正整数才能求出最大公约数所以这里要用绝对值求分子和分母。 如果kf-kd)0那么就可以知道斜率为整数直接输出就行了。以下是代码实现。#includestdio.h #includemath.h //编写函数求两个正整数的最大公约数 unsigned int Gcd(unsigned int M, unsigned int N) { //辗转相除法 unsigned int Rem; while (N 0) { Rem M % N; M N; N Rem; } return M; } int main() { int X1, Y1, X2, Y2; scanf(%d%d%d%d, X1, Y1, X2, Y2); int ret Gcd(abs(Y2 - Y1), abs(X2 - X1));//计算分子和分母的最大公约数 float kf (float)(Y2 - Y1) / (X2 - X1);//浮点型变量存储斜率值 int kd (Y2 - Y1) / (X2 - X1);//整型变量存储斜率值 if (X1 ! X2) { //判断斜率是整数还是小数 if (kf - kd 0) printf(-%d/%d, abs(Y2 - Y1) / ret, abs(X2 - X1) / ret); else if (kf - kd 0) printf(%d, kd); else printf(%d/%d, abs(Y2 - Y1) / ret, abs(X2 - X1) / ret); } else printf(-1); return 0; }
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2416025.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!