c语言知识程序两数相除精确到小数点后k位

上传人:新*** 文档编号:101781953 上传时间:2019-09-29 格式:DOC 页数:9 大小:79KB
返回 下载 相关 举报
c语言知识程序两数相除精确到小数点后k位_第1页
第1页 / 共9页
c语言知识程序两数相除精确到小数点后k位_第2页
第2页 / 共9页
c语言知识程序两数相除精确到小数点后k位_第3页
第3页 / 共9页
c语言知识程序两数相除精确到小数点后k位_第4页
第4页 / 共9页
c语言知识程序两数相除精确到小数点后k位_第5页
第5页 / 共9页
点击查看更多>>
资源描述

《c语言知识程序两数相除精确到小数点后k位》由会员分享,可在线阅读,更多相关《c语言知识程序两数相除精确到小数点后k位(9页珍藏版)》请在金锄头文库上搜索。

1、-+题目: 输入两个整数m和n,及另一正整数k,计算m/n,结果精确到小数点后k位1、问题分析与方案设计。1.首先解决输入问题。题目要求输入三个整数m,n,k。所以定义input()函数,使输入的为正整数,如果是字母或者其他字符则会报错提示重新输入。具体方法:先采用字符串输入,限定每一个输入的字符都在09之间,保证输入的是数字,避免输入的是字母或者其他字符,然后再对字符串使用atoi函数,该函数为c语言自带的函数,其功能为:把字符串转换成整型数。2.关于m/n的计算问题。计算结果要求精确到k位,由于m与n是整形,所以m/n结果也是整形,而无法得到小数点后面的位数。所以这里有两种解决方案:讲m、

2、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

3、和小数点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(输入有误,请重新输

4、入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

5、*=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

6、、测试数据、测试结果、结果分析。测试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;

7、 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);/(全部输

8、完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;i

9、f(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分别为

10、:%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下一位的值,用于判断是否大于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); return 0;

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 高等教育 > 专业基础教材

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号