当前位置:编程学习 > C/C++ >>

求C语言高手帮忙改下程序,关于科学计数法的

对于非常大或者非常小的数据,我们通常用科学记数法来表示。例如在科技文献和电脑中经常遇到的 2.3×106 (计算机中的科学记数法表示为:2.3E6),或者 9.18×10-5 (科学记树法表示:9.18E-5)这种类型的数据。 输入:用科学记数法表示的数据。即为符合C语言表示的科学记数法表示。 输出:该数据的双精度表示 说明: 1.输入数据的精度不高于小数点后50位。 2.输入数据时,在实数和幂之间有空格进行分隔,空格个数不定。 3.结果保留到小数点后8位,如不足8位用0补足,超过8位则截断,不进行四舍五入的处理。 友情提示:此题有点难啊!建议大家对问题要进行分析,分解为若干个小步骤,然后各个击破之。现在不要急于完成此题,待积累一定编程经验后再做。 编程思路:1.以字符方式一个一个读取输入数据,将尾数部分存入一个字符串,将指数部分转换为整数保存。尾数部分不要保存为实型数,因为尾数的小数部分可能很大,用实型数保存精度不够。 2.检查尾数字符串中是否有小数点,如果输入的尾数没有小数点,则在字符串中插入小数点。 3.根据给定的指数值移动小数点,可能有以下情况: (1)指数为正,右移小数点;在移动过程中已到字符串尾,则需要补0。 (2)指数为负,左移小数点;在移动过程中已到字符串首,则要将字符串整体右移一位,在字符串首补0。 4.找到现在小数点的位置,再向后数8个字符,如果后面数字字符的个数不够8个则补0,小数点后8个数字字符的后面是字符串结束标志。 5.输出字符串。 我自己做了两个,但都不完全对 第一个 #include<stdio.h> double fun(int n); int main() {char a;double x,t;int i,n; scanf("%lf",&x); getchar(); a=getchar(); scanf("%d",&n); t=x*fun(n); printf("%.8lf\n",t); } double fun(int n) {if(n==0) return 1.0; if(n>0) return 10.0*fun(n-1); if(n<0) return 0.1*fun(n+1); } 不对是因为用double类型x存储尾数,double型有效数字最多到15~16,而题目说明:输入数据的精度不高于小数点后50位,并提示:以字符方式一个一个读取输入数据,将尾数部分存入一个字符串,将指数部分转换为整数保存。尾数部分不要保存为实型数,因为尾数的小数部分可能很大,用实型数保存精度不够。 测试用例3的输入正是:1.23456789123456789123456789 第二个 #define N 100 #include"stdlib.h" #include"stdio.h" #include"math.h" main() {char a[N],b[N]; int i,j,f2,p,q=0; float f1=0.0; double c; int t=0; gets(a); for(i=0;i<=N;i++) if(a[i]=='e'||a[i]=='E') j=i; for(i=0;i<j;i++) b[i]=a[i];f1=atof(b); for(i=j+1;a[i];i++) b[q]=a[i];f2=atoi(b); c=f1*pow(10,f2); printf("%.8f\n",c); getch(); } 输入1.2345 e 3时输出1234.50005054 求帮助
追问:????
不懂
答案:第一个问题,你自定义函数的方法非常混乱,下面是我改的希望你仔细看看哪些地方动了位置,你的算法没错。

#include "stdio.h"
#include "conio.h"

float sub(float n);

void main()
{
 float n,m;
 scanf ("%f",&n);
 m = sub(n);
 printf ("sum=%f\n",m);
 getch();
}


float sub(float n)
{
 float i,s;
 s=0;
 for (i=1;i<=n;i++)
 {
  s=s+1/i;
 }
 return (s);
} 


至于你说的第二个问题。。。想不出办法来。。
你都弄到100的10次方的数量级了。。。大概只有求助于
高级的数据类型了。
不过有个想法,首先这个数量级的数肯定是科学计数法表示的。
他前面的因数你看看能不能在设定浮点数精度的基础上,对它
操作下,也许能得到你的答案。

比如 1.73212352132131231 e17 这个数,你想办法对
1.73212352132131231和17进行下操作。
其他:这个是求1 1/2 …… 1/n的一道题目,发现发现有点错误,请高手告诉我不过有个想法,首先这个数量级的数肯定是科学计数法表示的。他前面的因数你 不懂,还没学会

上一个:希望大虾米能帮忙将以下数学关系用c程序编程出来,就是已知以下关系,对 θ0~θ3,φ0~φ3, L0~L3进行..
下一个:急!!!懂c语言的各位帮我写写这道c语言题 谢谢了

CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,