| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 565 人关注过本帖
标题:请教大师!如何用 scanf 正确输入数据?
只看楼主 加入收藏
宇宙规律
Rank: 3Rank: 3
等 级:论坛游侠
威 望:1
帖 子:232
专家分:128
注 册:2014-5-7
结帖率:97.06%
收藏
已结贴  问题点数:39 回复次数:3 
请教大师!如何用 scanf 正确输入数据?
用C语言求多条线段的交点坐标和交点个数,程序如下:
#include<stdio.h>
#include<stdlib.h>
int between(float u,float v,float w)
{
    float max,min;
    max=(v>w)?v:w;
    min=(v<w)?v:w;
    return ((u<=max&&u>=min)?1:0);
}
void main()
{
    int n,i,j,num;
    float x1[100],y1[100],x2[100],y2[100],a[100],b[100],c[100],jx,jy;
    while(scanf("%d",&n)&&n!=0)
    {
        num=0;
        for(i=0;i<n;++i)
        {
            scanf("%f%f%f%f",&x1[i],&y1[i],&x2[i],&y2[i]);
            if(x1[i]==x2[i])
            {
                a[i]=1;b[i]=0;c[i]=-x1[i];
            }
            else
            {
                a[i]=(y2[i]-y1[i])/(x1[i]-x2[i]);b[i]=1;
                c[i]=(x1[i]*y2[i]-x2[i]*y1[i])/(x2[i]-x1[i]);
            }
        }
        for(i=0;i<n;++i)
        {
            for(j=i+1;j<n;++j)
            {
                if(a[i]*b[j]-a[j]*b[i]!=0)
                {
                    jx=(b[i]*c[j]-b[j]*c[i])/(a[i]*b[j]-a[j]*b[i]);
                    jy=(c[i]*a[j]-c[j]*a[i])/(a[i]*b[j]-a[j]*b[i]);
                    if(between(jx,x1[i],x2[i])&&between(jx,x1[j],x2[j])&&between(jy,y1[i],y2[i])&&between(jy,y1[j],y2[j]))
                    printf("%f,%f\n",jx,jy);
                    num++;
                }
            }
        }
        printf("%d\n",num);
    }
    return 0;
}

请教大师!我输入2条线段的坐标,线段(0,0),(3,3),线段(1,2),(5,1):
2
0,1,0,2,3,5,3,1

得到错误计算结果:
-107374176.000000,-107374176.000000
1
Press any key to continue

怎么才能用scanf正确输入坐标?
搜索更多相关主题的帖子: between include return C语言 如何 
2014-07-20 12:52
宇宙规律
Rank: 3Rank: 3
等 级:论坛游侠
威 望:1
帖 子:232
专家分:128
注 册:2014-5-7
收藏
得分:0 
(一)问题2001年第10期擂台赛的问题是: 给定n条线段,请编一程序,给出所有的交点坐标。
(二)一般解法该问题的解决并不难: 遍历该组线段中的任意一对求出交点即可。具体两线段交点的求法为:(1)先对应两线段分别对它们所在的直线写出相应的两点式方程,即设一线段两端点坐标分别为(xi,yi)与(xj,yj),则对应直线方程为: (y-yi)/(x-xi)=(y-yj)/(x-xj);(2)求两直线交点坐标,即联合两直线方程得一个一元二次方程组,求解之;(3)如方程组有解,判断解是否在两线段的两端点之间或端点上。是则方程组之解即是两线段的交点;否则两线段无交点。当然,在求两线段交点前还可以用一些条件式加以过滤,如对两线段所对应矩形无相交部分的情况,可直接判断两线段无交点等等。
(三)编程实例参赛程序有许多采用了上述方法,这里选载一个比较典型的程序设计
/* 程序说明
程序中的几个变量:
*x1棗线段初始点横坐标*y1棗线段初始点纵坐标
*x2棗线段终止点横坐标*y2棗线段终止点纵坐标
*a棗线段所在直线解析式中x项系数*b棗线段所在直线解析式中y项系数
*c棗线段所在直线解析式中常数项jx棗两条线段所在直线交点横坐标
jy棗两条线段所在直线交点纵坐标程序结构:
读出变量, 分配内存。用解析几何中计算两直线交点的公式两两计算两条线段所在直线交点。
用函数between判断两条线段所在直线交点是否
在线段上,若是,则输出结果。*/
2014-07-20 13:00
funyh250
Rank: 10Rank: 10Rank: 10
等 级:贵宾
威 望:26
帖 子:290
专家分:1573
注 册:2013-12-25
收藏
得分:39 
图片附件: 游客没有浏览图片的权限,请 登录注册


[ 本帖最后由 funyh250 于 2014-7-20 17:18 编辑 ]

学习是大事   吃喝拉撒睡是小事   其他的那都不是事
2014-07-20 17:15
宇宙规律
Rank: 3Rank: 3
等 级:论坛游侠
威 望:1
帖 子:232
专家分:128
注 册:2014-5-7
收藏
得分:0 
funyh250大师有才!膜拜!

图片附件: 游客没有浏览图片的权限,请 登录注册
2014-07-21 13:07
快速回复:请教大师!如何用 scanf 正确输入数据?
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.014850 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved