- 1、本文档共9页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
题目:
输入两个整数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
开始
输入正整数m
输入正整数n
输入正整数k
ik
定义循环控制符i=0
输出m/n和小数点
m=m%n
m*=10
输出m/n
i++
第k位四舍五入
输出第k位
是否继续
结束
y
n
y
n
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)istrlen(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; } //考虑到除数不能为0
2、功能实现
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(f5)printf(%d\n,x);
else printf(%d\n,x+1);
3、询问是否继续。实现多次执行程序。关键代码:
printf(是否继续?y/n\n);
fflush(stdin);
scanf(%c,c);
while(c!=yc!=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的值并得出运算
您可能关注的文档
- (论语选读)《弟子问仁.ppt
- (西师大版)六年级语文上册课件 把耳朵叫醒 1.ppt
- (详细版)党的十八届三中全会精神(公报和决定解读)PPT课件-gai.ppt
- (译林版)四年级英语上册课件_unit5_our_new_home_story.ppt
- (语文S版)二年级语文上册课件 天鹅、大虾和梭鱼 3.ppt
- “国电山东公司十佳优秀员工”事迹材料doc - 中国国电山东电力有限公司.doc
- 《_揭开货币的神秘面纱.ppt
- 《Java程序设计》课程设计-日历记事本.doc
- 《电工与电子技术基础》第2章 正弦交流电路.ppt
- 《锅炉本体检修》(技师)题库.doc
- 2025年陕西青年职业学院单招职业适应性考试题库1套.docx
- 2025年随州职业技术学院单招职业倾向性考试题库必考题.docx
- 2025年陕西青年职业学院单招职业适应性考试题库1套.docx
- 2025年陕西青年职业学院单招职业适应性考试题库1套.docx
- 2025年陕西青年职业学院单招职业技能考试题库完美版.docx
- 2025年陕西青年职业学院单招职业技能考试题库审定版.docx
- 2025年陕西青年职业学院单招职业适应性考试题库一套.docx
- 2025年陕西青年职业学院单招职业倾向性考试题库及答案一套.docx
- 读书交流会发言稿.doc
- 2025年陕西铁路工程职业技术学院单招职业适应性考试题库审定版.docx
文档评论(0)