鱼C论坛

 找回密码
 立即注册
查看: 1143|回复: 13

[已解决]求平面两点间的最短距离

[复制链接]
发表于 2020-4-29 20:16:32 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
这里需要加#include<math.h>这个头文件嘛?
#define 那一行,是正确的写法嘛?
程序设计题:
数组元素x[i],y[i]表示平面上某点坐标,统计所有各点间最短距离,并将其值以格式"%.3f"输出
#include <stdio.h>
#define len(x1,y1,x2,y2) sqrt((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2))
int main() 
{
    int i,j;
    float c,minc; 
    float x[]={1.1,3.2,-2.5,5.67,3.42,-4.5,2.54,5.6,0.97,4.65}; 
    float y[]={-6,4.3,4.5,3.67,2.42,2.54,5.6,-0.97,4.65,-3.33}; 
    minc=len(x[0],y[0],x[1],y[1]);
    //从以下开始答题 return 0;
}
最佳答案
2020-4-29 22:15:02
#include<stdio.h>
#include<math.h>

int main()
{
    int i,j;
    float len;
    float c,minc;
    float x[]={1.1,3.2,-2.5,5.67,3.42,-4.5,2.54,5.6,0.97,4.65};
    float y[]={-6,4.3,4.5,3.67,2.42,2.54,5.6,-0.97,4.65,-3.33};
    
    minc = 0;
    for(i=0;i<10;i++)
    {
        for(j=0;j<10;j++)
        {
            len = sqrt((x[i] - x[j])*(x[i] - x[j]) + (y[i] - y[j])*(y[i] - y[j]));
            minc = len > minc ? len: minc;
        }
    }
    printf("最小值%.3f",minc);
    
    return 0;
} 
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-4-29 20:17:36 | 显示全部楼层
这里需要加#include<math.h>这个头文件嘛?
#define 那一行,是正确的写法嘛?
是的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-4-29 20:19:51 | 显示全部楼层
自己尝试写了一下,但运行错误【捂脸】
#include<stdio.h>
#include<math.h>
#define len(x1,y1,x2,y2) sqrt((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2)) 
int main()
{
    int i,j;
    float c,minc;
    float x[]={1.1,3.2,-2.5,5.67,3.42,-4.5,2.54,5.6,0.97,4.65};
    float y[]={-6,4.3,4.5,3.67,2.42,2.54,5.6,-0.97,4.65,-3.33};
    minc=len(x[0],y[0],x[1],y[1]);
    for(i=0;i<9;i++)
    {
            for(j=0;j<9;i++)
        {
                if(len(x[i],y[j],x[i+1],y[j+1])<minc)
                        minc=len(x[i],y[j],x[i+1],y[j+1]);
        }
}
        printf("%.3f",minc);
        return 0;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-4-29 22:14:26 | 显示全部楼层
首先是define的用法问题,不能像你那样用的,我摘了百度上的一小段,你理解一下,具体的可以查资料。

define在C语言中是一个宏定义的关键字,它的用法如下:
#define 常量名 值 该句使用在程序开头,整个程序中该常量在预编译的时候用后面的值作简单替换。
例如:在程序开始有这么一句 #define PRICE 30
在整个程序中,PRICE的值都是30.

另外,题目的理解问题,最小值应该不是两个相邻的元素进行距离运算吧!   随机的点我也没有搞清楚。下面的代码仅供参考,默认x和y的下标是一样的了。
define在C语言中是一个宏定义的关键字,它的用法如下:
#define 常量名 值 该句使用在程序开头,整个程序中该常量在预编译的时候用后面的值作简单替换。
例如:在程序开始有这么一句 #define PRICE 30
在整个程序中,PRICE的值都是30.

你的程序里还是有些小问题,可以对照我的代码看一下区别。纠错一下      如果题目意思是平面上随机的点,x和y下标可以任意取得话,那么就要对数组x和y的元素先进行绝对值大小排序了。这里我就先不写了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-4-29 22:15:02 | 显示全部楼层    本楼为最佳答案   
#include<stdio.h>
#include<math.h>

int main()
{
    int i,j;
    float len;
    float c,minc;
    float x[]={1.1,3.2,-2.5,5.67,3.42,-4.5,2.54,5.6,0.97,4.65};
    float y[]={-6,4.3,4.5,3.67,2.42,2.54,5.6,-0.97,4.65,-3.33};
    
    minc = 0;
    for(i=0;i<10;i++)
    {
        for(j=0;j<10;j++)
        {
            len = sqrt((x[i] - x[j])*(x[i] - x[j]) + (y[i] - y[j])*(y[i] - y[j]));
            minc = len > minc ? len: minc;
        }
    }
    printf("最小值%.3f",minc);
    
    return 0;
} 
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-4-30 00:21:32 | 显示全部楼层

啊啊太感谢了!!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-4-30 00:22:24 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-4-30 01:18:38 | 显示全部楼层
后来在网上翻到了参考答案,码在这里了
#include<stdio.h>
#include<math.h>
#define len(x1,y1,x2,y2) sqrt((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2))
int main()
{
        int i,j;
        float c,minc;
        float x[]={1.1,3.2,-2.5,5.67,3.42,-4.5,2.54,5.6,0.97,4.65};
        float y[]={-6,4.3,4.5,3.67,2.42,2.54,5.6,-0.97,4.65,-3.33};
        minc=len(x[0],y[0],x[1],y[1]);
        for(i=0;i<9;i++)
        {
                for(j=i+1;j<10;j++)
                {
                        if((c=len(x[i],y[i],x[j],y[j]))<minc)
                                minc=c;
                }
        }
        printf("%.3f",minc);
        return 0;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-4-30 07:37:43 | 显示全部楼层
Justin1 发表于 2020-4-29 22:14
首先是define的用法问题,不能像你那样用的,我摘了百度上的一小段,你理解一下,具体的可以查资料。

de ...

他用的是有参宏……没有问题的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-4-30 07:50:10 | 显示全部楼层
永恒的蓝色梦想 发表于 2020-4-30 07:37
他用的是有参宏……没有问题的

长知识了,目前学得也还不够
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-4-30 07:51:10 | 显示全部楼层
Marcccccy 发表于 2020-4-30 01:18
后来在网上翻到了参考答案,码在这里了

有点误人子弟了,哈哈哈。以后得说答案仅供参考了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-4-30 08:06:38 | 显示全部楼层
Marcccccy 发表于 2020-4-30 01:18
后来在网上翻到了参考答案,码在这里了


不好意思啊,昨天以为调试对了,就发了,结果我的程序有两个问题,第一个是j 应该 = i +1 ,我的程序运行可以有(x[1] - x[1])的平方了,第二个是最大最小值问题  ,昨天的求的是最大值。
修改后代码如下      
#include<stdio.h>
#include<math.h>

int main()
{
    int i,j;
    float len;
    float c,minc;
    float x[]={1.1,3.2,-2.5,5.67,3.42,-4.5,2.54,5.6,0.97,4.65};
    float y[]={-6,4.3,4.5,3.67,2.42,2.54,5.6,-0.97,4.65,-3.33};
    
    minc = sqrt((x[1] - x[0])*(x[1] - x[0]) + (y[1] - y[0])*(y[1] - y[0]));
    for(i=0;i<9;i++)
    {
        for(j=i+1;j<10;j++)
        {
            len = sqrt((x[i] - x[j])*(x[i] - x[j]) + (y[i] - y[j])*(y[i] - y[j]));
            minc = len < minc ? len: minc;
        }
    }
    printf("最小值%.3f",minc);
    
    return 0;
} 
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-5-4 12:26:34 | 显示全部楼层
Justin1 发表于 2020-4-30 08:06
不好意思啊,昨天以为调试对了,就发了,结果我的程序有两个问题,第一个是j 应该 = i +1 ,我的程序运 ...

好欸,谢谢啦!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-5-4 12:28:09 | 显示全部楼层
Justin1 发表于 2020-4-30 07:51
有点误人子弟了,哈哈哈。以后得说答案仅供参考了

欸参考答案也是仅供参考的嘛嘿嘿
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-1-14 01:10

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表