C语言简单算法之计算分段函数,A除以B,阶梯电价,出租车计价

1.题目一计算分段函数[1]

1.实验代码

#include<stdio.h>
int main()
{
  float x,y;
  scanf ("%f",&x);
  if (x!=0)
    y=1/x;
  else
     y=0;
   printf("f(%.1f) = %.1f\n",x,y);
  return 0;
}

2.设计思路

(1)第一步 先通读题目了解要打的代码的意思,y为分段函数,共有两部分,x,y均为浮点数

第二步 打出基本框架

第三步 用if-else区分y在x不同的范围内的数值

第四步 初始化定义变量浮点数x,y

第五步 运用if ,else分别定义x等于0及不等于0时y的数值

第六步 最后输出相关变量

(2)流程图(我觉得流程图一般都没有文字说明,看书上的例子除了不能用式子表示的都没有文字,作业中的例子也是如此。)

Java分段收费算法题_计算分段函数

3.本题遇到的困难及解决方法

遇到的困难:开始只定义了一个浮点数值,也没有给给出输出值的相关算法就直接输出了,编译时在细节上也出了问题,浮点%f打成了%d

Java分段收费算法题_计算分段函数_02


Java分段收费算法题_A除以B_03


Java分段收费算法题_Java分段收费算法题_04


解决方法:通过请教会的同学,理解每个步骤的意义,自己对比,反复琢磨

4.运行结果

Java分段收费算法题_阶梯电价_05


Java分段收费算法题_计算分段函数_06

2.题目二A除以B

1.实验代码

#include<stdio.h>
int main()
{
  int A,B;
  double C;
  scanf("%d %d", &A, &B);
  C = (double)A / B;
  if (B > 0)
    printf("%d/%d=%.2f",A,B,C);
  if (B < 0)
    printf("%d/(%d)=%.2f",A,B,C);
  if (B == 0)
    printf("%d/%d=Error",A,B);
  return 0;
  
}

2.设计思路

(1)第一步 理解题目 ,知道A/B需要输出三种情况 ,B>0,B<0及B=0

第二步 输出结果需保留两位小数,输入的A,B值均为整数,因此定义两个整数和一个浮点数A,B和C

第三步 打出基本框架

第四步 根据要求定义用if分别写出三种不同情况,输出数值C的算法

第五步 依次输出结果

(2)流程图

Java分段收费算法题_Java分段收费算法题_07

3.本题遇到的困难及解决方法

遇到的困难:先定义c的算法,后初始化了,初始化时忘记打&,浮点运用错误。定义c的算法时没打double

解决的方案:流程及编译问题通过自己的观察解决,定义c的算法时打double请教了同学,开始并不知道需要打

Java分段收费算法题_A除以B_08


Java分段收费算法题_A除以B_09


Java分段收费算法题_阶梯电价_10


Java分段收费算法题_计算分段函数_11


4.运行结果

Java分段收费算法题_Java分段收费算法题_12


Java分段收费算法题_A除以B_13


Java分段收费算法题_C语言_14

3.题目六阶梯电价

1.实验代码

#include<stdio.h>
int main()
{
  int a;
  float b;
  scanf("%d%.2f",&a,&b);
  if(a<=50&&a>0){
  b=0.53*a;
  printf("cost = %.2f",b);}
  else if(a>50){
  b=26.5+(a-50)*0.58;
  printf("cost = %.2f",b);}
  else 
  printf("Invalid Value!");
  return 0;
}

2.设计思路

(1)第一步 理解题目,阶梯电价分三种情况,需赋两个数值,用电量及应付费用

第二步 打出基本的框架

第三步 定义用电量为整数,应付费用为浮点数

第四步 根据要求,运用if -else依次定义在给定范围内所需缴纳的电费的算法

第五步 输出每步的结果,注意浮点数的输出

(2)流程图

Java分段收费算法题_Java分段收费算法题_15

3.本题遇到的困难及解决方法

本道题是我7道题中唯一一个一遍对的,在pta中显示正确,c++中编译也无错误,但是运行不出结果

Java分段收费算法题_阶梯电价_16


Java分段收费算法题_C语言_17

4.题目七出租车计价

1.实验代码

#include <stdio.h>
int main()
{
  int a;
  float b,c;
  scanf("%f %d",&b,&a);
  if(b<=3&&a<5)
  c=10;
  else if(b<=3&&a>=5)
  c=10+a/5*2;
  else if(b>3&&b<=10&&a<5)
  c=(b-3)*2+10;
  else if(b>3&&b<=10&&a>=5)
  c=(b-3)*2+10+a/5*2;
  else if(b>10&&a<5)
  c=24+(b-10)*3;
  else if(b>10&&a>=5)
  c=24+(b-10)*3+a/5*2;
  printf("%.0f",c);
  return 0;
}

2.设计思路

(1)第一步 阅读题目了解到计程车计费在没有停车或停车时间不超过五分钟有三种情况,加之路上有停车共有六种情况

第二步 需要定义三种变量,所行路程,停车时间,应费用定义整数a,浮点数b,c

第三步定义整数a行驶路程,浮点数b停车时间,c应付费用

第四步 运用if,else if定义出不同范围下所花的车费,给出计算车费的公式

第五步 整体输出c值

(2)流程图

Java分段收费算法题_C语言_18

3.遇到的困难及解决方法

遇到的困难:编译细节上出了点问题,对于数值的定义有些模糊,本来应该定义成浮点数,却定义成整数了,对题意的理解不透,在b c同时有条件限制时中间用了“,”,应该用“&”,我开始打的是依次输出,不如整体输出方便,也容易犯错,输出的浮点也写错。

解决的方法:自己在检查出一些错误后,让同学帮助检查,将所有的错误改正

Java分段收费算法题_计算分段函数_19


4.运行结果

Java分段收费算法题_Java分段收费算法题_20


Java分段收费算法题_A除以B_21


Java分段收费算法题_计算分段函数_22

【2】pta提交列表

Java分段收费算法题_阶梯电价_23


Java分段收费算法题_阶梯电价_24


Java分段收费算法题_阶梯电价_25


Java分段收费算法题_C语言_26

【3】git地址及截图

https://git.coding.net/sunna1/text.git

Java分段收费算法题_Java分段收费算法题_27


【4】总结、互评和学习进度

1.总结

(1)学习内容:本周主要学了算数运算顺序,%取余,float,double浮点数的运用,最主要学习了if-else的运用,在课上进行了大量的练习,本周的pta作业也以if-else为主

(2)遇到的困难:If-else的练习也不少了,大部分都大同小异,但在遇到新颖一点的题型时有的还是有些转不过来,在细节上的处理也不好,在编译时总会出现大大小小的错误,不够严谨。

(3)解决方案:天道酬勤吧,自己还是要勤加练习,要用心细心。最重要的是将每个步骤的意思弄懂,不会多查查,多看看。

2.点评作业

马雨欣:

孙美玲:

何宗彦:

3.表格及折线图

Java分段收费算法题_A除以B_28


Java分段收费算法题_C语言_29


ps:评论的同学多数都提到了解决的方法写的不详细,但我并未进行整改。是因为对有些概念性的东西不太能叫得准,理解的不够透彻,导致有些错误不知所因。每次打完代码只知道错了就该过来,并没有究其根本,这是非常不对的。在接下来的学习中我会避免此类事情,追根溯源,将知识掌握扎实。本周的作业想整改,可能还需要点时间。