028.从键盘读入实数

简介: 028.从键盘读入实数
#define ERR 5
#define OK 6
#include <stdio.h>
int status;
double result,sig,scale;
int sign(int c)/*处理数的符号函数*/
{
  if(c=='-')/*若为负号,置负数标记*/
    sig=-sig;
}
int integer(int c)/*转换整数部分,转换一位整数位*/
{
  result=result*10.0+c-'0';
}
int decimal(int c)/*转换小数部分,转换一位小数位*/
{
  result+=(c-'0')*scale;
  scale/=10.0;
}
/*状态表*/
int statbl[ ][4]={{   1,2,3,ERR},/*0*/
          {ERR,2,3,ERR},/*1*/
          {OK,2,4,OK},/*2*/
          {ERR,4,ERR,ERR},/*3*/
          {OK,4,OK,OK}};/*4*/
/*转换函数表*/
int(*funtbl[ ][4])( )={{sign,integer,NULL,NULL},
                  {NULL,integer,NULL,NULL},
                  {NULL,integer,NULL,NULL},   
                  {NULL,decimal,NULL,NULL},
                                    {NULL,decimal,NULL,NULL}};
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; /* 出错返回 */
}
main()
{
  double x;
  clrscr();
  printf("\nPlease input real numbers (use nonreal char to end input):\n");
  while(readreal(&x)==1)
    printf("The real number you input is: %f\n",x);
  printf("\nYou have inputted nonreal char.\n Press any key to quit...\n"); 
  getch();
}
相关文章
|
运维 搜索推荐 数据安全/隐私保护
什么是C端 什么是B端 这里告诉你
C端产品早已将运营专业化,并细化到各维度的运营了,比如运营的工种可以细分为“活动运营岗、用户运营岗、增长裂变岗、内容运营岗”等等。
17319 0
什么是C端 什么是B端 这里告诉你
|
27天前
|
监控 前端开发 Linux
Zabbix 7.4 新功能介绍
Zabbix 7.4重磅升级:主机向导简化配置,监控指标卡片直观展示,Map层级自由调整,无限嵌套发现打破限制,TLS加密保障通信安全,助力运维效率飞跃提升!
161 1
|
人工智能
巧妙构建歌词结构:写歌词的技巧和方法之关键,妙笔生词AI智能写歌词软件
在音乐世界里,歌词是灵魂的载体,构建其结构至关重要。优秀的歌词需有引人入胜的开头、条理清晰且富变化的主体,以及深刻难忘的结尾。《妙笔生词智能写歌词软件》提供多种功能,帮助创作者克服结构难题,激发灵感,助你写出打动人心的歌词,开启音乐创作的新篇章。
|
Web App开发 移动开发 UED
介绍一下HTML5的新技能:多媒体支持
介绍一下HTML5的新技能:多媒体支持
458 2
阿里巴巴开发规约之代码格式
    1.如果括大号内没内容那么不换行,     2.小括号变量不能与括号有空格     3.如果/对/同时/开关/做保留等字与括号之间必须加空格     4.
1617 0
|
分布式计算 Hadoop 大数据
一口气说完MR、Storm、Spark、SparkStreaming和Flink
一口气说完MR、Storm、Spark、SparkStreaming和Flink
|
1月前
|
分布式计算 并行计算 算法
《数据之美》:图结构的精妙世界与算法实践
图是表示多对多关系的非线性数据结构,由顶点和边组成,可建模社交网络、路径导航等复杂系统。核心算法包括BFS/DFS遍历、Dijkstra最短路径、Floyd-Warshall全源最短路径,以及Prim和Kruskal最小生成树算法,广泛应用于推荐系统、社交分析与路径规划。
|
9月前
|
人工智能 Java 开发者
豆包MarsCode “一键Apply”功能测评:编程效率革新利器
豆包MarsCode的“一键Apply”功能旨在提升开发者编程效率,通过AI自动生成和应用代码,简化重复操作、精准修复错误、助力新项目开发及快速生成注释。安装插件后,在VSCode中与AI对话生成代码并点击Apply按钮即可完成应用,过程流畅高效。适用于C++、Java、Python等多语言环境,极大节省开发时间,降低手动操作风险。无论是资深开发者还是新手,都能从中受益,显著提升编程体验。
686 9
|
10月前
|
机器学习/深度学习 人工智能 算法
《片上网络,如何让硬件加速系统通信“快人一步”》
片上网络(NoC)作为提升硬件加速系统通信效率的核心技术,正逐渐成为科技领域的焦点。它借鉴计算机网络概念,在芯片内构建复杂高效的通信网络,确保各组件间信息快速传递。NoC通过节点和链路组成,采用不同拓扑结构优化性能,如网状、环形等。高效路由算法、流量控制机制及拓扑结构优化是其关键技术,旨在解决带宽瓶颈、延迟等问题,推动人工智能和高性能计算发展。
291 14
|
10月前
|
人工智能 数据可视化 数据处理
从0到1只需“拖一拖”,开发时间按秒算——低代码到底有多牛
低代码平台正颠覆传统软件开发模式,通过可视化开发、模块化组件和自动化工具,将复杂开发过程大大简化。开发者只需“拖拽”组件并配置参数,即可快速构建应用,无需复杂编程。这不仅大幅缩短开发周期,从数月缩短至几天甚至几小时,还显著降低成本。低代码平台支持实时预览、自动代码生成和快速部署,提升开发效率与团队协作能力。其核心引擎(如SQL引擎、功能引擎等)不断升级,确保高效、灵活的开发体验,并通过模型驱动开发实现智能自动化。此外,低代码平台增强数据处理能力,支持跨数据库兼容性和实时流处理,满足复杂业务需求。AI技术的融合进一步优化开发体验,提供智能代码助手、故障排查等功能。