精华内容
下载资源
问答
  • 从键盘读入实数

    千次阅读 2015-05-18 01:33:11
    编制一个从键盘读入实数的函数readreal(double *rp)。函数将读入的实数字符列换成实数后,利用指针参数rp,将实数存于指针所指向的变量*rp。解析: 函数在返回之前,将最后读入的结束实数字符列的字符...在输入实数

    编制一个从键盘读入实数的函数readreal(double *rp)。函数将读入的实数字符列换成实数后,利用指针参数rp,将实数存于指针所指向的变量*rp

    解析:
    函数在返回之前,将最后读入的结束实数字符列的字符返还给系统,以便随后读字符时能再次读入该字符。函数若能正常读入实数,函数返回整数1,如果函数在读入过程中,未遇到数字符之前,遇到不能构成数字的情况,函数返回-1,表示为读到实数。

    在输入实数时,在实数之前可以有一个数不定的空白类字符,组成实数的字符列有数的符号字符,实数的整数部分,小数点和实数的小数部分,其中,某些部分可以缺省。设实数字符列有以下几种可能形式:

    数符 整数部分
    数符 整数部分
    数符 整数部分.小数部分
    数符 .小数部分

    其中数符或为空,或为’+’,或为’-‘,分别代表不带符号,带正号,带负号。整数部分和小数部分至少要有一个数字符组成。

    上述实数形式说明,在实数转换过程中,同一字符在不同情况下会有不同的意义。为标记当前实数转换的不同情况,程序引入状态变量,有状态变量的不同值代表当前实数转换过程中的不同情况。

    共有以下多种不同的情况:正准备开始转换,转换了数的符号字符,正在转换实数的整数部分,正在转换实数的小数部分,发现输入错误,转换正常结束。设状态变量为0表示正准备开始转换,还未遇到任何与实数有关的字符;1表示已经遇到数的符号字符;2表示正在转换实数的整数部分,3表示在未遇到数字字符之前先遇到小数点;4表示在转换整数部分之后遇到小数点;5表示转换发现错误,6表示转换正常结束。

    读函数另外有两张表,一张是转换函数表,一张是状态表。函数反复读入字符,将字符分类,根据当前状态和当前字符类调用对应转换函数。

    下面是程序的实现部分:

    #include <stdio.h>
    #define ERR 5
    #define OK 6
    
    int status;
    double result,sig,scale;
    
    /*
     * 处理数的符号函数
     */
    int sign(int c){
        if(c = '-') /* 若为负号,取负 */
            sig=-sig;
    }
    
    /**
     * @brief integer 转换整数部分
     * @param c 要被转换的整数位
     * @return 返回成功与否
     */
    int integer(int c){
        result = result * 10.0 + c - '0';
    }
    
    /**
     * @brief decimal 转换小数部分
     * @param c 要被转换的小数位
     * @return  返回成功与否
     */
    int decimal(int c){
        result += (c -'0') * scale;
        scale /= 10;
    }
    
    /* 状态表 */
    /*
     * 0 - 正准备开始转换,还未遇到任何与实数有关的字符
     * 1 - 已遇数的符号字符
     * 2 - 正在转换实数的整数部分
     * 3 - 在未遇数字字符之前先遇到小数点
     * 4 - 在转换整数部分之后先遇到小数点
     * 5 - 表示转换发现错误
     * 6 - 转换正常结束
     */
    int statbl[][4]={
        {1,2,3,ERR},
        {ERR,2,3,ERR},
        {OK,2,4,OK},
        {ERR,4,ERR,ERR},
        {OK,4,OK,OK}
    };
    
    /* 转换函数表 */
    int (*funtbl[][4])() = {
        {sign,integer,NULL,NULL},
        {NULL,integer,NULL,NULL},
        {NULL,integer,NULL,NULL},
        {NULL,decimal,NULL,NULL},
        {NULL,decimal,NULL,NULL}
    };
    
    /**
     * @brief readreal 用于对输入的字符串转换成浮点数
     * @param dp 转换后的浮点数
     * @return 返回是否转换成功
     */
    int readreal(double *dp){
        int c,ckind;
        sig = 1.0;
        result = 0.0;
        scale = 0.1;
    
        while((c=getchar()) == ' ' || c == '\n' || c == '\t'); //跳过这些字符
    
        status = 0; //重置初始状态
        for(;;){
            /* 分类当前字符 */
            if(c == '+' || c== '-') ckind = 0; /* 数的符号字符 */
            else if(c >= '0' && c <= '9') ckind = 1; /* 数字符 */
            else if(c == '.') ckind = 2; /* 小数点 */
            else ckind = 3; /* 其他字符 */
    
            if(funtbl[status][ckind]){
                (*funtbl[status][ckind])(c); /* 执行相应的转换函数 */
            }
    
            status = statbl[status][ckind]; /* 设置新的状态 */
    
            if(status == ERR || status == OK) break; /*结束,出错或成功 */
    
            c=getchar();
        }
    
        ungetc(c,stdin); /* 归还数的结束符*/
        if(status == OK){
            *dp = result * sig;
            return 1;
        }
    
        return -1;
    }
    
    
    
    int main()
    {
        double x;
        printf("Please input real numbers:\n");
    
        while(readreal(&x) == 1)
            printf("The real number is : %f\n",x);
    
        return 0;
    }
    

    下面是我的程序的运行结果:

    这里写图片描述

    这个程序刚开始的时候,我的思路是,从第1个元素开始遍历,遍历过程中,在遇到”.”之前,类似于上面integer()函数的实现方式,当遇到点之后,就类似于上面decimal()函数的实现方式,但是看了作者的源码之后,发现需要学习一个做着的思路,思路敏捷,代码整洁,需要好好学习。

    展开全文
  • 从键盘输入任意实数x,求出其所对应的函数值。 z=(x-4)的平方根 (x>4) z=x的八次幂 (4>x>-4) z=4/(x*(x+1)) (-4>x>-10) z=|x|+20 (其他) 提示:x的八次幂请使用幂函数pow求得,平方根函数是sqrt。 #...

    从键盘上输入任意实数x,求出其所对应的函数值。
    z=(x-4)的平方根 (x>4)
    z=x的八次幂 (4>x>-4)
    z=4/(x*(x+1)) (-4>x>-10)
    z=|x|+20 (其他)
    提示:x的八次幂请使用幂函数pow求得,平方根函数是sqrt。

    #include <math.h>
    #include "stdio.h"
    void TestFunc();
    float y(float x)
    {  /**********Begin**********/
      float z;
      if(x>4) z=sqrt(x-4);
      else if(x>-4) z=pow(x,8);
      else if(x>-10) z=4/(x*(x+1));
      else z=fabs(x)+20;
      return(z);  
      /**********  End  **********
    }
    void main()
    {  float x;
      scanf("%f",&x);
      printf("y=%f\n",y(x));
      TestFunc();
    }
    
    
    展开全文
  •  /*从键盘输入一个实数*/   fy=sqrt(fx); /*计算平方根*/   printf("fy=%f",fy); /*输出结果*/  } // 这个程序有一点点不一样,我觉得还是挺有意思的。平方根就是根号。发现一个有意思 //的东西,输出...

    //顺序结构及流程 

    #include"math.h"                      /*编译数学库函数*/ 
    #include"stdio.h"                                            /*编译预处理命令*/ 
    void main()                           /*main函数*/ 
    {
        float fx,fy;                                                /*定义实型变量*/ 
        printf("Please input a float:");        /*输出提示信息*/ 
        scanf("%f",&fx);                                        /*从键盘输入一个实数*/ 
        fy=sqrt(fx);                                                /*计算平方根*/ 
        printf("fy=%f",fy);                                    /*输出结果*/ 
    }
    // 这个程序有一点点不一样,我觉得还是挺有意思的。平方根就是根号。发现一个有意思
    //的东西,输出结果那里前面我说了,加0.几就保留几位小数,我发现真的是这样,比如
    //0.10,0.99也都是可以的啊。 

    展开全文
  •  /*从键盘输入一个数*/   i1=fabs(i1); /*计算并赋值啊*/   printf("绝对值是%d",i1); /*输出结果*/  }  //因为之前是学过后面的,我觉得用多分枝的还是比较简单的,但是这又是违背了题意。 //网上搜索...

    //顺序结构及流程 
    #include"stdio.h"                                                /*编译预处理命令*/ 
    #include"math.h"                                                 /*编译数学库函数*/ 
    void main()                                                            /*main函数*/ 
    {
        int i1;                                                                /*定义整型变量*/ 
        printf("请输入一个实数:");                        /*输出提示信息*/ 
        scanf("%d",&i1);                                            /*从键盘输入一个数*/ 
        i1=fabs(i1);                                                    /*计算并赋值啊*/ 
        printf("绝对值是%d",i1);                             /*输出结果*/ 
    }    
    //因为之前是学过后面的,我觉得用多分枝的还是比较简单的,但是这又是违背了题意。
    //网上搜索了半天,发现也只有这些个方法,这个数学库函数前面也用到过,所以也不算
    //犯规 

    展开全文
  • package demo3; import java.util.Scanner; public class demo304 { public static void main(String[] args) { // TODO Auto-generated method stub double a,b,c,x1,x2,middle;... Scanner in=new Scanner...
  • #include&lt;stdio.h&gt; int main() { float x; printf(“请输入一个数:\n”);...x);...printf(“该实数绝对值是:%f\n”,x); else printf(“该实数绝对值是:%f\n”,-x); return 0; } ...
  • 今天看了某面试视频,要求他输出1到10的和,弄了半天都没弄出来(据他自己介绍有两年开发经验),我觉得我又行了(没嘲讽,只是感觉自己增加了学下去的信心): ... System.out.println("计算从x到y的和"); int sum=0;
  • #include<stdio.h>...#define FUN(x) x*2+x*2+x*2 int main() { int a,b,c; scanf("%d",&a); b=a+1;c=FUN(a); printf("%d\n",FUN(a)); printf("%d\n",FUN(b)); printf("%d\n",c*2); }
  • #include main() { int a; printf("输入一个实数"); scanf("%d",&a); a=sqrt(a*a); printf("%d\n",a); return 0; }
  • #include<stdio.h> int main() { int a; printf("input a:"); scanf("%d",&a); if(a>0) { a*=1; } else { a*=(-1); } printf("%d\n",
  • #define FUN(x) x*2+x*2+x*2 //补充宏定义内容 void main(void) { int a; scanf("%d", &a); printf("%d\n", FUN(a)); printf("%d\n", FUN((a + 1))); printf("%d\n", FUN((a) * 2)); }
  • #include main() { int a; printf("输入一个实数:"); scanf("%d",&a); a=sqrt(a*a); printf("%d\n",a); return 0; }学习心得: 1.学会用sqrt计算数的绝对值;
  • 输入一个实数:");  scanf("%d",&amp;a);  if(a&lt;0)  {  a = -a;  printf("%d\n",a);  }  else  {  printf("%d\n",a);  }  return 0;
  • 1.编程计算下面函数的值,其中x实数,由键盘输入。(9分) y={-1 x<=-5 {(x-1)^2 -5<x<10 {1/x x>=10 以下是本篇文章正文内容,欢迎朋友们进行指正,一起探讨,共同进步。——来自考研路上的lwj ...
  • #include #include using namespace std; int t; int main() {  int x;  cout  cin>>x;  if(x  {  t=0;  }  else if(x>=2&&x  {  t=1;  }  els
  • 刚开始学C语言 搞不太懂 作业提交程序一直不通过qiu'jie #include float average(float array[10]) { float sum=0.0,ag,y; int n; for(n=0;n;n++) { y=array[n]; sum+=y; ag=sum*1.0/10.0;...}
  • package demo3; import java.util.Scanner; public class demo303 { public static void main(String[] args) { ... //double x=in.nextDouble(); String s=in.nextLine(); double y=Double.
  • 功能:从键盘读取若干个实数,以-1结束 IDE:Intellij IDEA package testDemo; import java.util.Scanner; public class ReadKey { public static void main(String[] args){ double sum=0; int co...
  • #include main() { int n; scanf("%d",&n); if(n>0) { printf("%d\n",n); } else { n=n*(-1); printf("%d\n",n); } return 0; } 知识点:用if—el
  • #include main() { float i,x; scanf("%f",&i); x=sqrt(i*i); printf("%.2f\n",x);} 知识点 1。学会使用sqrt。 心得体会:sqrt之后的()一定不能忘记。
  • 例题:编写一个程序,从键盘输入X,Y,Z 3个数, 编写函数计算3个数的立方和并返回计算结果。 第一种方法: 代码如下: #include <stdio.h> int abc(int,int,int); int main() { int x,y,z,s; printf("请...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 5,673
精华内容 2,269
关键字:

从键盘输入实数x