c语言程序 两数相除精确到小数点后k位.doc_第1页
c语言程序 两数相除精确到小数点后k位.doc_第2页
c语言程序 两数相除精确到小数点后k位.doc_第3页
c语言程序 两数相除精确到小数点后k位.doc_第4页
c语言程序 两数相除精确到小数点后k位.doc_第5页
已阅读5页,还剩4页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

题目: 输入两个整数m和n,及另一正整数k,计算m/n,结果精确到小数点后k位1、问题分析与方案设计。1.首先解决输入问题。题目要求输入三个整数m,n,k。所以定义input()函数,使输入的为正整数,如果是字母或者其他字符则会报错提示重新输入。具体方法:先采用字符串输入,限定每一个输入的字符都在09之间,保证输入的是数字,避免输入的是字母或者其他字符,然后再对字符串使用atoi函数,该函数为c语言自带的函数,其功能为:把字符串转换成整型数。2.关于m/n的计算问题。计算结果要求精确到k位,由于m与n是整形,所以m/n结果也是整形,而无法得到小数点后面的位数。所以这里有两种解决方案:讲m、n定义为double型 :将结果的整数部分与小数部分分别显示。由于第一种方案的局限性(无法精确到用户指定的k位),所以本程序采用第二种方案,3输出问题。首先在界面上把所输入的m n k全部显示出来以便用户查看,再输出运算结果。结果的输出考虑最后一位四舍五入的情况。4菜单与人性化设计。首先显示菜单,包括欢迎语,本程序的功能介绍以及用户的输入要求,让人一目了然。当处理完一个操作之后,提示用户是否继续,输入y继续,则再次输入m n k;若输入n则退出程序。5.另外考虑到除数不能为0,所以限定输入的n不能为0,若为0则报错重输。开始输入正整数m输入正整数n输入正整数kik定义循环控制符i=0输出m/n和小数点m=m%nm*=10输出m/ni+第k位四舍五入输出第k位是否继续结束ynyn流程图:2、编程实现。1、输入函数input()。int input1()int m;int flag,i;/设定标识符flag,如果输入的不是09的数字则flag=1,进入报错重输循环 char t100; /先采用字符串输入 限定输入的每一位都在09之间,保证输入的是数字、避免输入的是字母或者其他字符doflag=0; fflush(stdin);re: gets(t);for(i=0;(size_t)istrlen(t);i+)if(ti9)flag=1;if(flag)printf(输入有误,请重新输入m:n);flag=0; /(这一步要重置flag为0,当做无误的再作判断)goto re;while(flag);m=atoi(t);/ atoi功能:把字符串转换成整型数 return m;并且在input2中用以下语句限定n不能输入为0.if(m=0) printf(n不能为0,请重新输入nn); goto re; /考虑到除数不能为02、功能实现 1)、输出整数部分和小数点。关键程序:printf(运算结果为%d.,m/n); /%d.将整数部分与小数部分分开处理 2)、输出小数部分。主要通过ik的循环不断输出小数点后的每一位。关键代码:for(i=1;ik;i+) m=m%n; m*=10; printf(%d,m/n);/到k-1位3)、四舍五入。若要第k位四舍五入,则需要定义f(k下一位的数值)。通过f与5的比较,用if语句控制进位与否。关键代码:m=m%n;m*=10;/最后一位(k位)四舍五入x=m/n; /k位的值m=m%n;m*=10;f=m/n; /k下一位的值,用于判断是否大于5 if(f);fflush(stdin);scanf(%c,&c);while(c!=y&c!=n)printf(输入有误请选择y或者nn);fflush(stdin);scanf(%c,&c);if(c=y) goto repeat;else printf(再见n);源程序:3、测试数据、测试结果、结果分析。测试1:测试数据:m=787422 n=89999 k=90测试结果:结果分析:分别输入m n k 如果输入的n=adc11则会报错(因为输入的n不为正整数)要求重新输入。当输入完成,则会显示输入的m n k的值并得出运算结果。测试2:测试数据:m=549741164 n=5646877 k=10测试结果:结果分析:最后询问是否继续,输入y或者n,若果非y或者n,则提示重新输入,输入y之后则再一次的输入m n k源代码:#include#include#include#include int input1()int m;int flag,i;char t100; doflag=0; fflush(stdin);re: gets(t);/(全部输完n再作判断)for(i=0;(size_t)istrlen(t);i+)if(ti9)flag=1;if(flag)printf(输入有误,请重新输入m:n);flag=0; goto re;while(flag);m=atoi(t); return m;int input2()int m;int flag,i;char t100; /先采用字符串输入 限定输入的每一位都在09之间,保证输入的是数字、避免输入的是字母或者其他字符doflag=0; fflush(stdin);re: gets(t);/(全部输完n再作判断)for(i=0;(size_t)istrlen(t);i+)if(ti9)flag=1;if(flag)printf(输入有误,请重新输入n:n);flag=0; goto re;while(flag);m=atoi(t);if(m=0) printf(n不能为0,请重新输入nn); goto re; /考虑到除数不能为0 return m;int input3()int m;int flag,i;char t100; doflag=0; fflush(stdin);re: gets(t);for(i=0;(size_t)istrlen(t);i+)if(ti9)flag=1;if(flag)printf(输入有误,请重新输入k:n);flag=0; goto re;while(flag);m=atoi(t); return m;int main() int m,n,k;int i,x,f;char c;repeat: printf(ttt 欢迎使用!n);printf(ttt 本程序功能如下n);printf(tt输入3个整数m n k实现m/n结果保留至小数点后k位n);printf(请输入mn); m=input1(); printf(请输入nn); n=input2();printf(请输入kn);k=input3();printf(您所输入的m n k分别为:%d %d %dn,m,n,k);if(k=0) printf(运算结果为%d,m/n); else printf(运算结果为%d.,m/n); /%d.将整数部分与小数部分分开处理 for(i=1;ik;i+) m=m%n; m*=10; printf(%d,m/n);/每次都输出余数值 保留到k-1位 m=m%n;m*=10;/最后一位(k位)四舍五入 x=m/n; /k位的值 m=m%n;m*=10; f=m/n; /k下一位的值,用于判断是否大于

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论