一、计算机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)折线图:

 

 posted on 2018-11-27 20:51  VanR  阅读(1314)  评论(6编辑  收藏  举报