第四周作业

  • 要求二

题目1、7-1 计算分段函数

1、实验代码

 1 #include<stdio.h>
 2 int main()
 3 {
 4     float x=0,result=0;
 5     scanf("%f",&x);
 6     if(x==0)result=0;
 7     else result=1.0f/x;
 8     printf("f(%.1f) = %.1f",x,result);
 9     return 0;
10 }

2、设计思路

(1)主思路

  • 第一步:定义两个浮点型变量x(函数自变量)、result(函数因变量);
  • 第二步:用scanf函数读入浮点数给x;
  • 第三步:使用if-else条件句对于题目函数分情况(即x是否为0)计算结果得到result;
  • 第四步:用printf函数按题目格式代入输出x和result即可。

注解:看到读入浮点数想到用float定义和scanf函数读入,且本题要注意x与result都保留一位小数以及按“f(x) = result”的格式输出。

(2)流程图

3、本题调试过程碰到问题及解决办法

在使用if-else条件句时if和else后都用括号限定了条件,如题目中函数的条件格式一样,编译出现错误。

解决办法就是去掉else后的括号及其内容,后经尝试,if后必须用小括号附带条件,且else不能,而将if和else后是否带条件反过来也是不行的。

 

题目2、7-2 A除以B

1、实验代码

 1 #include<stdio.h>
 2 int main()
 3 {
 4   int A=0,B=0;
 5   float C=0;
 6   scanf("%d %d",&A,&B);
 7   if(-100>A||A>100||-100>B||B>100)
printf("the input is error"); 8 else if(0<B){ C=(float)A/B; 9 printf("%d/%d=%.2f",A,B,C);} 10 else if(B==0)
printf("%d/%d=Error",A,B); 11 else { C=(float)A/B; 12 printf("%d/(%d)=%.2f",A,B,C);} 13 return 0; 14 }

 

2、设计思路

(1)主思路

  • 第一步:定义两个整数型变量A、B和浮点型变量C;
  • 第二步:用scanf函数读入整数给A、B;
  • 第三步:用if条件句先限定范围后用else if句式对B的不同情况进行不同方式计算及表达;
  • 第四步:用printf函数输出计算结果,即C=A/B。

注解:这道题的计算“C=(float)A/B”方式还没有学,但上次博客作业中有同学使用而且老师也作了说明,所以经过尝试我用此来将两个整数结果变成浮点数,还有要注意输出的商应保留小数点后2位。

(2)流程图

3、本题调试过程碰到问题及解决办法

没有考虑到计算时,整数转变为浮点数的处理,所以出现部分错误。

经过自己在编译器上的例题测试确定错误

 解决办法就是将原本的“C=A/B”计算改成了“C=(float)A/B”。

 

题目3、7-6 阶梯电价

1、实验代码

 1 #include<stdio.h>
 2 int main()
 3 {
 4     float e=0;
 5     scanf("%f",&e);
 6     if(e<0)printf("Invalid Value!");
 7     else if(e<=50)printf("cost = %.2f",0.53*e);
 8     else printf("cost = %.2f",0.53*50+0.58*(e-50));
 9     return 0;
10 }

2、设计思路

(1)主思路

  • 第一步:定义浮点型变量e(用电量);
  • 第二步:用scanf函数读入浮点数给e;
  • 第三步:用if条件句先判断e在范围之内后用else if句式对e的不同情况进行不同方式的计算;
  • 第四步:用printf函数输出结果即电费。

注解:看到读入浮点数想到用float定义和scanf函数读入,本题注意结果保留两位小数,以及电费为负时的输出表达。

(2)流程图

3、本题调试过程碰到问题及解决办法

犯了一个低级错误,粗心忘了else-if语句之间是有空格的,否则编译会出错。

解决办法就是打上空格,如图编译器的加粗字体其实也是在提示我们函数是否格式正确。

 

题目4、7-7 出租车计价

1、实验代码

 1 #include<stdio.h>
 2 int main()
 3 {
 4     float a=0,money=0;
 5     int b=0,c=0,sum=0;
 6     scanf("%f %d",&a,&b);
 7     if(a<0)printf("the input is error");
 8     else if(a<=3)money=10;
 9     else if(a<=10)money=10+2*(a-3);
10     else money=10+14+3*(a-10);
11     c=money;
12     if(0<=(money-c)&&(money-c)<0.5)money=c;
13     else money=c+1;
14     sum=money+b/5*2;
15     printf("%d",sum);
16     return 0;
17 }
 1 #include<stdio.h>
 2 int main()
 3 {
 4     float a=0,money=0,sum=0;
 5     int b=0;
 6     scanf("%f %d",&a,&b);
 7     if(a<0)printf("the input is error");
 8     else if(a<=3)money=10;
 9     else if(a<=10)money=10+2*(a-3);
10     else money=10+14+3*(a-10);
11     sum=money+b/5*2;
12     printf("%.0f",sum);
13     return 0;
14 }

2、设计思路

(1)主思路

  • 第一步:定义浮点型变量a(行驶里程),money(行驶中产生的费用)和整数型变量b(等待时间)、c(参与四舍五入)、sum(总车费);
  • 第二步:用scanf函数入读浮点数给a,整数给b;
  • 第三步:用第一个if条件句以a的值作为筛选条件进行多条件处理计算,得到相应的money值;
  • 第四步:用第二个if条件句判断money小数点范围进行四舍五入的处理;
  • 第五步:将各部分值相加得sum的值并用printf函数输出。

注解:这道题思路比较繁琐,主要在于如何完成四舍五入,我的想法就是用money减去整数部分得小数部分,然后判断是否可以进位,注意本题结果要求整数。

<修改后的第二组代码>主思路:

  • 第一步:定义浮点型变量a(行驶里程)、money(行驶中产生的费用)、sum(总车费)和整数型变量b(等待时间);
  • 第二步:用scanf函数入读浮点数给a,整数给b;
  • 第三步:用if条件句以a的值作为筛选条件进行多条件处理计算,得到相应的money值;
  • 第四步:将各部分值相加得sum的值并用printf函数输出。

注解:因为在开始修改定义了sum数据类型为浮点型,且一直为涉及数据类型转变,所以四舍五入问题被解决。

(2)流程图(为第二组代码对应)

3、本题调试过程碰到问题及解决办法

一开始没有做四舍五入的编程,所以出现部分错误提示

经过自己在编译器上的例题测试确定错误为四舍五入出了问题

解决办法就是在已有基础上又用了一个if条件句来判断小数点是否符合四舍五入,具体方法为在得到money的值后通过减去整数部分得到小数部分,再用if条件句判断该小数部分是否可以四舍五入,然后分情况是否给整数部分“+1”或不变。后来又做了一遍,修改了开始的定义直接为浮点型,最后不经过数据类型变化直接不保留小数点,四舍五入的问题解决。

 

  • 要求三

Git地址:https://git.coding.net/cyq1076926262/NO.4.git

 

  • 要求四

1、总结本周所学内容、遇到的问题

  • 课堂上:

①学习了数据类型及所占字节长度;

②学习了上周作业中关于浮点型数据的遗留问题(例:4.0是double型,4.0f是float型);

③学习了如何用sizeof函数确定数据长度;

④学习了关于字符型数据的基础知识;

⑤学习了switch语句。

  • 作业中:

①更加深入的理解了if else条件句和else-if句式的逻辑及使用;

②更加熟悉了字符型数据的使用;

③认识到通过构建流程图可以更加清晰地展现流程和思路。

  • 问题:

作业最后一道的四舍五入坑了一下,我一时间从代码上看不出哪里的运算出现了问题,慢慢回想可能是整数和浮点数转换出了问题,所以我把最后几行所有的涉及到的运算式全部一一提取出来到另一个只有scanf函数和printf函数的代码里,一个一个输入数据确定了原来是最后的sum出了问题;我当时的解决办法是在程序最后再加一个if条件句筛选money的小数点来进行四舍五入的,但后经思考,其实这道题输出结果为整数欺骗性地让我下意识的定义了整数型,其实完全可以定义浮点数并一直计算到最后再转变为整数的,这样也就完成了四舍五入同时也精简了代码结构。

2、点评作业

何宗彦http://www.cnblogs.com/hezongyan/

胡俊鲜http://www.cnblogs.com/123456hjx/

张乐http://www.cnblogs.com/1999-09-22/

3、学习进度条(10/21 12:00~10/29 8:00)

posted @ 2017-10-26 22:42  C6H6  阅读(377)  评论(16编辑  收藏  举报