c语言两数相除等于小数多少,c语言知识程序两数相除精确到小数点后k位.doc

c8da8f5a7cda2d62dda9e5a200b168b9.gifc语言知识程序两数相除精确到小数点后k位.doc

-题目 输入两个整数m和n,及另一正整数k,计算m/n,结果精确到小数点后k位1、问题分析与方案设计。1.首先解决输入问题。题目要求输入三个整数m,n,k。所以定义()函数,使输入的为正整数,如果是字母或者其他字符则会报错提示重新输入。具体方法先采用字符串输入,限定每一个输入的字符都在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定义循环控制符i0输出m/n和小数点mmnm*10输出m/ni第k位四舍五入输出第k位是否继续结束ynyn流程图2、编程实现。1、输入函数()。int 1int m;int flag,i;//设定标识符flag,如果输入的不是09的数字则flag1,进入报错重输循环 char t100; //先采用字符串输入 限定输入的每一位都在09之间,保证输入的是数字、避免输入的是字母或者其他字符doflag0; fstdin;re getst;fori0;size_tistrlent;iifti0 ||ti9flag1;ifflagprintf输入有误,请重新输入mn;flag0; //这一步要重置flag为0,当做无误的再作判断goto re;whileflag;matoit;// atoi功能把字符串转换成整型数 return m;并且在2中用以下语句限定n不能输入为0.ifm0 printfn不能为0,请重新输入nn; goto re; //考虑到除数不能为02、功能实现 1)、输出整数部分和小数点。关键程序printf运算结果为d.,m/n; //d.将整数部分与小数部分分开处理 2)、输出小数部分。主要通过ik的循环不断输出小数点后的每一位。关键代码fori1;ik;i mmn; m*10; printfd,m/n;//到k-1位3)、四舍五入。若要第k位四舍五入,则需要定义f(k下一位的数值)。通过f与5的比较,用if语句控制进位与否。关键代码mmn;m*10;//最后一位k位四舍五入xm/n; //k位的值mmn;m*10;fm/n; //k下一位的值,用于判断是否大于5 iff5printfdn,x; else printfdn,x1;3、询问是否继续。实现多次执行程序。关键代码printf是否继续y/nn;fstdin;scanfc,whilecyfstdin;scanfc,ifcy goto repeat;else printf再见n;源程序3、测试数据、测试结果、结果分析。测试1测试数据m787422 n89999 k90测试结果结果分析分别输入m n k 如果输入的nadc11则会报错(因为输入的n不为正整数)要求重新输入。当输入完成,则会显示输入的m n k的值并得出运算结果。测试2测试数据m549741164 n5646877 k10测试结果结果分析最后询问是否继续,输入y或者n,若果非y或者n,则提示重新输入,输入y之后则再一次的输入m n k源代码includestdio.hincludestdio.hincludestring.hincludestdlib.h int 1int m;int flag,i;char t100; doflag0; fstdin;re getst;//全部输完n再作判断fori0;size_tistrlent;iifti0 ||ti9flag1;ifflagprintf输入有误,请重新输入mn;flag0; goto re;whileflag;matoit; return m;int 2int m;int flag,i;char t100; //先采用字符串输入 限定输入的每一位都在09之间,保证输入的是数字、避免输入的是字母或者其他字符doflag0; fstdin;re getst;//全部输完n再作判断fori0;size_tistrlent;iifti0 ||ti9flag1;ifflagprintf输入有误,请重新输入nn;flag0; goto re;whileflag;matoit;ifm0 printfn不能为0,请重新输入nn; goto re; //考虑到除数不能为0 return m;int 3int m;int flag,i;char t100; doflag0; fstdin;re getst;fori0;size_tistrlent;iifti0 ||ti9flag1;ifflagprintf输入有误,请重新输入kn;flag0; goto re;whileflag;matoit; return m;int main int m,n,k;int i,x,f;char c;repeat printfttt 欢迎使用n;printfttt 本程序功能如下n;printftt输入3个整数m n k实现m/n结果保留至小数点后k位n;printf请输入mn; m1; printf请输入nn; n2;printf请输入kn;k3;printf您所输入的m n k分别为d d dn,m,n,k;ifk0 printf运算结果为d,m/n; else printf运算结果为d.,m/n; //d.将整数部分与小数部分分开处理 fori1;ik;i mmn; m*10; printfd,m/n;//每次都输出余数值 保留到k-1位 mmn;m*10;//最后一位k位四舍五入 xm/n; //k位的值 mmn;m*10; fm/n; //k下一位的值,用于判断是否大于5 iff5printfdn,x; else printfdn,x1; printfn是否继续y/nn; fstdin; scanfc, whilecy fstdin; scanfc, ifcy goto repeat; else printf再见n; return 0;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值