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

(9页)

'c语言知识程序两数相除精确到小数点后k位'
-+题目: 输入两个整数m和n,及另一正整数k,计算m/n,结果精确到小数点后k位1、问题分析与方案设计。1.首先解决输入问题。题目要求输入三个整数m,n,k。所以定义input()函数,使输入的为正整数,如果是字母或者其他字符则会报错提示重新输入。具体方法:先采用字符串输入,限定每一个输入的字符都在0~9之间,保证输入的是数字,避免输入的是字母或者其他字符,然后再对字符串使用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输入正整数ki<k定义循环控制符i=0输出m/n和小数点m=m%nm*=10输出m/ni++第k位四舍五入输出第k位是否继续结束ynyn流程图: 2、编程实现。1、输入函数input()。int input1(){ int m; int flag,i;//设定标识符flag,如果输入的不是0~9的数字则flag=1,进入报错重输循环 char t[100]; //先采用字符串输入 限定输入的每一位都在0~9之间,保证输入的是数字、避免输入的是字母或者其他字符 do{ flag=0; fflush(stdin);re: gets(t); for(i=0;(size_t)i<strlen(t);i++) { if(t[i]<'0' ||t[i]>'9') 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,请重新输入n\n>>"); goto re; } //考虑到除数不能为02、功能实现 1)、输出整数部分和小数点。关键程序:printf("运算结果为%d.",m/n); //%d.将整数部分与小数部分分开处理 2)、输出小数部分。主要通过i<k的循环不断输出小数点后的每一位。关键代码:for(i=1;i<k;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<5)printf("%d\n",x); else printf("%d\n",x+1);3、询问是否继续。实现多次执行程序。关键代码:printf("是否继续?y/n\n>>"); fflush(stdin); scanf("%c",&c); while(c!='y'&&c!='n') { printf("输入有误请选择y或者n\n>>"); 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<stdio.h>#include<stdio.h>#include<string.h>#include<stdlib.h> int input1(){ int m; int flag,i; char t[100]; do{ flag=0; fflush(stdin);re: gets(t);//(全部输完n再作判断) for(i=0;(size_t)i<strlen(t);i++) { if(t[i]<'0' ||t[i]>'9') 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 t[100]; //先采用字符串输入 限定输入的每一位都在0~9之间,保证输入的是数字、避免输入的是字母或者其他字符 do{ flag=0; fflush(
关 键 词:
语言 知识 程序 两数相 精确 小数点
 天天文库所有资源均是用户自行上传分享,仅供网友学习交流,未经上传用户书面授权,请勿作他用。
关于本文
本文标题:c语言知识程序两数相除精确到小数点后k位
链接地址: https://www.wenku365.com/p-43428469.html
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服点击这里,给天天文库发消息,QQ:1290478887 - 联系我们

本站为“文档C2C交易模式”,即用户上传的文档直接卖给(下载)用户,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有【成交的100%(原创)】。本站是网络服务平台方,若您的权利被侵害,侵权客服QQ:1290478887 欢迎举报。

1290478887@qq.com 2017-2027 https://www.wenku365.com 网站版权所有

粤ICP备19057495号 

收起
展开