一、计算机18秋_分支结构 7-10 出租车计价
本题要求根据某城市普通出租车收费标准编写程序进行车费计算。具体标准如下:
- 起步里程为3公里,起步费10元;
- 超起步里程后10公里内,每公里2元;
- 超过10公里以上的部分加收50%的回空补贴费,即每公里3元;
- 营运过程中,因路阻及乘客要求临时停车的,按每5分钟2元计收(不足5分钟则不收费)。
输入格式:
输入在一行中给出输入行驶里程(单位为公里,精确到小数点后1位)与等待时间(整数,单位为分钟),其间以空格分隔。
输出格式:
在一行中输出乘客应支付的车费(单位为元),结果四舍五入,保留到元。
1、实验代码:
1 #include<stdio.h> 2 int main() 3 { 4 int MIN; 5 double money1,KM,money2,money; 6 scanf("%lf%d",&KM,&MIN); 7 if(KM<=3){ 8 money1=10; 9 } 10 if(KM<=10&&KM>3){ 11 money1=10+(KM-3)*2; 12 } 13 if(KM>10){ 14 money1=24+(KM-10)*3; 15 } 16 if(MIN>=5){ 17 money2=(MIN/5)*2; 18 } 19 money=money1+money2; 20 printf("%.0f",money); 21 return 0; 22 }
2、设计思路:
(1)文字描述:
第一步:定义所需变量:营运路程KM,营运时间MIN,营运产生的总路费money;
第二步:将总路费分为路程产生的路费money1和时间产生的路费money2;
第三步:首先忽略时间,单算营运路程产生的路费money1,当路程<=3时,money1=10;当3<路程<=10时,money1=10+(KM-3)*2;当路程>10时,money1=24+(KM-10)*3;
第四步:其次忽略路程,单算营运时间产生的路费money2,当时间>=5时,money2=(MIN/5)*2;
第五步:将营运路程产生的路费money1与营运时间产生的路费money2相加,得到总路费money,并输出总路费money.
(2)流程图:
3.本题调试过程碰到问题及解决办法
(1)错误提示:
a、无法将路程产生的路费和时间产生的路费同时计算;
b、运算的条件出错,结果出现错误,如图:
(2)解决办法:
a、将两个不同条件下产生的路费分开,分为营运路程产生的路费money1和营运时间产生的路费money2,然后相加得到总路费;
b、将第二个if语句的条件改成KM>3&&KM<=10,如图:
二、计算机18秋_循环1 7-2 求给定精度的简单交错序列部分和
本题要求编写程序,计算序列部分和 1 - 1/4 + 1/7 - 1/10 + ... 直到最后一项的绝对值不大于给定精度eps。
输入格式:
输入在一行中给出一个正实数eps。
输出格式:
在一行中按照“sum = S”的格式输出部分和的值S,精确到小数点后六位。题目保证计算结果不超过双精度范围。
1、实验代码:
1 #include<stdio.h> 2 int main() 3 { 4 double i,m,f,eps,sum; 5 scanf("%lf",&eps); 6 sum=0,m=1,i=1; 7 do{ 8 f=1/m; 9 sum=sum+f*i; 10 i=-i; 11 m=m+3; 12 }while(f>eps); 13 printf("sum = %.6f\n",sum); 14 return 0; 15 }
2、设计思路:
(1)文字描述:
第一步:定义所需变量:输入量eps,分数f,符号i,总和sum(注意:需要定义双精度浮点型变量);
第二步:由于分子不变,分母变化有规律,可以将分数拆分成分母m和分子1;
第三步:运用do-while语句控制循环条件(使最后一项分数不大于输入量eps),每一次循环将分母m加三,将符号相反;
第四步:将循环得到的每一项相加,得到总和sum,并将sum输出.
(2)流程图:
3.本题调试过程碰到问题及解决办法
(1)错误提示:
a、没看清题目,将eps当成函数的一种了,如图:
b、将while控制的条件搞错了,如图:
(2)解决办法:
a、将eps看成一个变量,当成一个普通常数;
b、do-while语句中while后的括号中填写的是停止循环的条件,将while括号中的条件改成f>eps即可.
三、计算机18秋-循环2 7-3 求整数的位数及各位数字之和
对于给定的正整数N,求它的位数及其各位数字之和。
输入格式:
输入在一行中给出一个不超过10^9的正整数N。
输出格式:
在一行中输出N的位数及其各位数字之和,中间用一个空格隔开。
1、实验代码:
1 #include<stdio.h> 2 int main() 3 { 4 int n,i,j,sum; 5 sum=0; 6 j=1; 7 scanf("%d",&n); 8 do{ 9 i=n%10; 10 sum=sum+i; 11 if(n/10!=0){ 12 j=j+1; 13 } 14 n=n/10; 15 }while(n>0); 16 printf("%d %d",j,sum); 17 return 0; 18 }
2、文字描述:
第一步:定义所需变量:各位数字之和sum,位数j,输入量n,中间变量i;
第二步:先求出各位数字之和,运用do-while语句,利用取余的计算方法算出各位数字,再相加求出各位数之和;
第三步:接着求出输入量的位数,在do-while语句中嵌套if语句,利用输入量除以10不等于零(不等于零j便加一),并且输入量随着每一次循环输入量变化,算出位数;
第四步:将位数及个位数之和按照要求输出。
3、流程图:
3.本题调试过程碰到问题及解决办法
(1)错误提示:
a、对j的赋值出现错误,导致出现的结果出现错误,如图:
b、当输入的数字中出现零时,代码无法运行,如图:
(2)解决办法:
a、将j的赋值由0改为1(因为在输入值还未变时,原输入值还有一位数);
b、尝试将while语句改为do-while语句,如图:
结果依然出错,尝试将while语句控制的条件改为n>0,答案正确,如图:
四、总结和学习进度条
1、总结这几周所学内容、遇到的问题以及解决方法:
(1)所学内容:这几周主要学习了分支结构、循环结构以及函数,通过课堂的讲解以及课后的学习,对for语句、while语句、do-while语句、if语句、if-else语句有了更深的了解,学习了break语句以及continue语句,对C语言有了进一步的了解。
(2)遇到的问题:
a、对判断条件概念比较模糊,不能很好的判断所需的条件;
b、所学知识难度增加,并不能很好的理解知识点并且运用;
c、对函数的理解较差,对学过的知识不能很好的应用和理解。
(3)解决方法:
a、通过在网上进行搜索相关的知识点,进一步的理解知识点的应用;
b、反复思考,进一步的理解每个题目中隐含的条件,并且利用这些条件去解题;
c、通过观看中国大学MOOC中的网课以及教科书中的例子,加深对函数的理解。
2、点评:
a、李睿琪 https://www.cnblogs.com/123456lrq/p/10022901.html
b、杨仕奇 https://www.cnblogs.com/ysq1n/p/10022816.html
c、韩佳勒 https://www.cnblogs.com/hanjiale/p/10022892.html
3、这几周的代码行数和时间、博客字数和时间、涉及的知识点。
(1)表格:
(2)折线图: