| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1451 人关注过本帖
标题:这个程序怎么不能运行
只看楼主 加入收藏
zglieren303
Rank: 1
等 级:新手上路
帖 子:29
专家分:1
注 册:2008-11-6
收藏
得分:0 
回复 7# 的帖子
今天遇到高手了,总想问很多问题。帮我再看看另外一个问题:
    我的一个同学感叹如果有个程序能够解所有的方程就好了(一元任意次),有一天突然想写个程序试试。程序的一些思路如下:先输入你要解的方程的系数,然后依次输入各位系数从(高次到低次),然后开始解方程,输出结果。
 具体的一些操作是各位系数用用一个数组代替,由于解任意方程的故把数组的范围设得越大越好我设的10位(即可解不超过十次的方程)。当输入N后通过计算比较它与十的关系,让数组前面的几位为0。后几位系数,为输入的系数。解方程用的是二分法,但是二分法有给出一个区间,为了不漏根,把这个区间的长度设计为0.01。也是为了求到尽量多的跟,我让程序从-100扫描到100这个区间。应该在这样地毯式的搜索中大部分的根都可以解出来了.....具体程序如下:
#include<stdio.h>
#include<math.h>
void main()
{
 float x,x0,x1,x2,y0,y1,y,y2;
 float a[10];
 int i,m,n;
 printf("qing shuru fangcheng cishu:\n");
 scanf("%d",&n);
 m=10-n;
 for(i=0;i<m;i++) a[i]=0;printf("qing shuru ge xishu(yong kongge gekai):\n");
 for(i=m;i<=10;i++) scanf("%f\n",&a[i]);
 y=a[0]*x*x*x*x*x*x*x*x*x*x+a[1]*x*x*x*x*x*x*x*x*x+a[2]*x*x*x*x*x*x*x*x
 +a[3]*x*x*x*x*x*x*x+a[4]*x*x*x*x*x*x+a[5]*x*x*x*x*x
 +a[6]*x*x*x*x+a[7]*x*x*x+a[8]*x*x+a[9]*x+a[10];
 for(x1=-100,x2=-100+0.01;x1<=100;x1=x1+0.01,x2=x2+0.01)
 {
  x=x1;y1=y;x=x2,y2=y;y0=1;
  if(y1*y2<0)
  {
  while(fabs(y0)>0.0001)
  {x=(x1+x2)/2;
  y0=y;x0=x;
  if(y1*y0>0) {y1=y0;x1=x0;}
  else if(y1*y0==0)
  printf("%f\n",x0); else {y2=y0;x2=x0;}   }  }

  else if(y1*y2==0){if (y1==0) printf("%f\n") ;
  else printf("%f\n,x0");
  }  }
  getch();
  }
虽然这样计算机要做大量的计算,区间就有10000个还别说每个区间的逼近计算,但至少有点反应撒。上面的程序有几个警告说在X定义以前可能用到了它。哎呀.....没搞懂!!请大虾指教哈.....我用的是WIN TC!!!谢谢了
2008-11-07 20:36
zglieren303
Rank: 1
等 级:新手上路
帖 子:29
专家分:1
注 册:2008-11-6
收藏
得分:0 
回复 11# 的帖子
区间长度设计为0.1吧!这样可以少很多计算量
2008-11-07 20:39
广陵绝唱
Rank: 10Rank: 10Rank: 10
等 级:贵宾
威 望:29
帖 子:3607
专家分:1709
注 册:2008-2-15
收藏
得分:0 
我不是高手,同样也有问题
程序代码:
/*******************************************************************************

        用字符串写了如下代码,没有应用密码的算法,只是简单比较字符串,万望行家
    莫笑。

*******************************************************************************/
#include<stdio.h>
#include<string.h>
#define N 100
void input(char a[])
{
    int i;
    for(i=0;i<N&&a[i-1]!='\x0d';++i)
    {
        a[i]=getch();
        printf("*");
    }
    puts("");
}
int main(void)
{
    char a[N],b[N];
    while(1)
    {
        printf("请输入第一遍密码:\n");
        input(a);
        printf("请输入第二遍密码:\n");
        input(b);
        if(strcmp(a,b)==0)
            while(1)
            {
                printf("请再次输入密码进入系统:\n");
                input(a);
                if(strcmp(a,b)==0)
                {
                    printf("正确,请进入系统。\n");
                    return 0;
                 }
                 else printf("错误。请重新输入。\n");
             }
         else printf("对不起,您的输入错误,请重新输入:\n");
    }
}




----------------

    呵呵,我的问题就是:为什么a[i]=='\n'不能退出,而a[i]=='\x0d'却能退出呢?期盼高手解答,谢谢。

[[it] 本帖最后由 广陵绝唱 于 2008-11-7 22:38 编辑 [/it]]
2008-11-07 22:36
风居住的街道
Rank: 1
等 级:新手上路
帖 子:374
专家分:0
注 册:2008-10-24
收藏
得分:0 
0x0d是'\r', 0x0a才是'\n'
2008-11-08 16:14
风居住的街道
Rank: 1
等 级:新手上路
帖 子:374
专家分:0
注 册:2008-10-24
收藏
得分:0 
还有,广陵你没有在字符串后面加'\0',所以我运行有问题!
void input(char a[])
{
    int i;
    for (i = 0; i < N && (a[i] = getch()) != '\r'; ++i)
        printf("*");
    putchar('\n');
    a[i] = '\0';
}
我的实现。(注意,没完成退格等功能)。
2008-11-08 16:21
广陵绝唱
Rank: 10Rank: 10Rank: 10
等 级:贵宾
威 望:29
帖 子:3607
专家分:1709
注 册:2008-2-15
收藏
得分:0 
谢谢。请问退格键怎么表达?
2008-11-08 19:16
风居住的街道
Rank: 1
等 级:新手上路
帖 子:374
专家分:0
注 册:2008-10-24
收藏
得分:0 
'\b'
2008-11-08 19:26
广陵绝唱
Rank: 10Rank: 10Rank: 10
等 级:贵宾
威 望:29
帖 子:3607
专家分:1709
注 册:2008-2-15
收藏
得分:0 
if(a[i]=='\b')   
{
    i--;
    printf("\b");
}


是我所理解的这个意思吗?
2008-11-08 19:33
风居住的街道
Rank: 1
等 级:新手上路
帖 子:374
专家分:0
注 册:2008-10-24
收藏
得分:0 
最好printf("\b ");,注意那个空格。
不过,学Linux,输入密码压根连星号都不要显示,才最好。
2008-11-08 22:37
快速回复:这个程序怎么不能运行
数据加载中...
 
   



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

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