当前位置: 首页 新闻详细

C语言中怎么判断一个数是否含有小数点?!C语言任意小数化分数

专业小程序设计开发——助力新电商新零售

电话+V:159999-78052,欢迎咨询怎么判断一个数是否为小数c语言程序,[小程序设计与开发],[小程序投流与推广],[小程序后台搭建],[小程序整套源码打包],[为个体及小微企业助力],[电商新零售模式],[小程序运营推广及维护]

一、C语言中怎么判断一个数是否含有小数点?!

如果是数值的话,那么将原始的数值减去取整后的数值如果大于0就表示有小数if((n-(int)n)>0)return=true;如果是字符串的话,有两种方法,一种是将字符串转换为数值后用上面说的方法判断,另一种是逐字判断是否包含字符小数点“.”

二、“a是一个带小数的的正数,b是一个带小数的负数”用c语言怎么描述

这个问题可以分成两部分,如何描述一个数是带小数的,和如何描述一个数的正负。

一,描述正负。

可以直接用判断语句,利用数学性质,与0比较。

if(a>0)代表该数为正数。

if(b<0)代表该数为负数。

二、判断是否有小数。

在C语言中把float类型强制转换为int型,会只保留整数部分的值。利用这一点,可以通过表达式

a-(int)a来得到浮点数a的小数部分值,然后与0比较即可判断小数部分是否存在。

if(a-(int)a

!=

0)

从理论上看一切正确,但实际应用时有时会出错,是因为浮点数有精度限制,所存的值并不是精确值而是近似值。所以一般来说,当差值小于一个精度时,就认为该值为0了。对于float一般设定精度为1E-6。

所以判断表达式可以写作:

if(fabs(a-(int)a)

>

1E-6)

三、综上,题目中要求的表达式就可以写作:

if((fabs(a-(int)a)

>

1E-6

a>0)

(fabs(b-(int)b)

>

1E-6

C语言任意小数化分数

原创2021-06-19 15:18·滴水穿石hgn

一、特点:

  • 增加了功能:可以把带小数(大于1的小数)化为分数。
  • 简化了输入:把按字符串分段输入,改成了按单字符连续输入。
  • 节省了内存:取掉了字符串数组和整数数组,只用变量名存储小数的各部分。
  • 优化了转化:把输入的一个个单字符直接转化成整数,顺带累计了位数。避免了死机:防止只输入整数时不停地读入。

    二、方法:

    一)先把纯小数化为分数:

  • 纯有限小数化为分数:分子由小数部分组成;分母由一个1后面加上0组成,其中0的个数等于小数部分的位数。例如:0.125=125/1000=1/8;0.04=4/100=1/25。
  • 2.纯无限循环小数化为分数:分子由一个循环节组成;分母全由9组成,9的个数等于一个循环节的位数。例1:0.090909……,记作:0.'09'=9/99=1/11;例2:0.'123'=123/999=41/33

    3.混无限循环小数化为分数:分子=全部小数部分-不循环部分;分母由9和0组成:其中9的个数等于一个循环节的位数,0的个数等于小数点后不循环部分的位数。例如:0.1'6'=(16-1)/90=15/90=1/6;0.08'3'=(83-8)/900=75/900/=1/12.

    二)再把整数部分看成分母是1的分数,与前面化成的分数通分后相加。

    例:2.0'01'=2/1+0.0'01'=1980/990+1/990=1981/990.

    三、用C语言编程实现:

    //小数化分数(z.b'x',其中z为整数部分,b为不循环部分,x为循环节,例如1.04166666……记为1.041'6')

    #include<stdio.h>

    #include<math.h>

    intmain()

    {intgys(int,int);//求最大公约数函数原型

    charc;//单字符c

    inti=0,p,fz,fm=0;//循环变量i,最大公约数p,分子fz,分母fm

    intz=0,b=0,lb=0,x=0,lx=-1;//整数部分z;不循环部分b,其位数lb;循环部分x,去位数lx

    printf("请连续输入整个小数(例如:2.08'3'):");//注:单引号'必须在英文状态下输入

    while((c=getchar())>='0'){z=z*10+c-48;}//反复读入整数部分z并求值

    if(c==46)//有小数部分时(因小数点.码值为46):

    {while((c=getchar())>='0'){b=b*10+c-48;lb++;}//反复读入不循环部分b并求值,累计位数lb

    if(c==39)//有循环部分时(因为单引号'的码值为39):

    {while((c=getchar())>='0'){x=x*10+c-48;lx++;}//反复读入循环部分x并求值,累计位数lx

    }

    if(lx==-1){x=0;lx=1;}//无循环部分时

    {for(i=lx;i>=0;i--)fm+=9*pow(10,i);//求分母中的99…9

    fm*=pow(10,lb);//分母fm后补上lb个0

    lx++;

    fz=b*pow(10,lx)+x;//总分子fz=不循环部分b后补上循环部分x

    fz-=b;//新分子fz=总分子fz-不循环部分b

    fz+=(z*fm);//整数部分通分后加入分子

    p=gys(fz,fm);//求分子fz和分母fm的最大公约数p

    fz/=p;fm/=p;//约分化简

    }

    }

    else{fz=z;fm=1;}//只输入整数时

    printf("=%d/%d",fz,fm);//输出

    }

    //求最大公约数函数:

    intgys(intx,inty)//x,y为形参

    {intr=1;

    while(r!=0)//辗转相除:

    {r=x%y;

    x=y;y=r;

    }

    return(x);//返回最大公约数x

    }

    【WINDRISES MINIPROGRAM PROMOTION】尊享直接对接老板

    电话+V: 159999-78052

    专注于小程序推广配套流程服务方案。为企业及个人客户提供了高性价比的运营方案,解决小微企业和个体拓展客户的问题

    怎么判断一个数是否为小数c语言程序
    发布人:fgtianzhao 发布时间:2024-10-31