第六周作业

【1】

题目7-1高速公路超速处罚

1.实验代码

#include <stdio.h>
 int main()
{
    int a,b;
    double x;
    scanf("%d %d",&a,&b);
    x=(double)(a-b)*100/(double)b;
    if(x<10)
        printf("OK");
    else if(x<50&&x>10)
        printf("Exceed %.0f%%. Ticket 200",x);
    else
        printf("Exceed %.0f%%. License Revoked",x);
    return 0;
}

2.设计思路
(1)阅读题目知道本题共分三种情况,车速小于限速的10%,车速大于限速的10%小于限速的50%,车速大于限速的50%。
(2)需要定义两个整数,车速和限速,和一个浮点数,超速的百分率。
(3)x定义的是百分数,所以输入公式时要带上double。
(4)%.0f%%解释:%.0f是输出控制格式,表示输出一个double型数据,小数部分长度为0,即只有整数部分。不足左面空格补齐,即右对齐。而%%则输出来就是%。(百度解释)我理解应该是题目要求输出x%,%%应该代表一种输出格式为了输出%。
3.流程图

4.遇到的困难及解决方法
遇到的困难:开始设计是我直接将百分率定义成x%,觉得能一步解决。也不知道浮点数计算需要打double,%输出要打双百分号。
第一次打出的结果如图,错的比较离谱(由于截图前没看见要截错误提示,这个错误又比较离谱就没再照打重新截图。)

解决的方法:比较简单粗暴,就是百度一下,对比自己和他的有什么差别,发现x%的定义完全错误,调整后在x的计算式上又出现了错误。(部分正确pta中没有错误提示,c++中能容此错误。)

由于忽略了x定义的是浮点数,式子前打了double应乘以100,将x的计算式改成x=(double)(a-b)*100/(double)b。类似x%输出要打双百分号这种不懂的再百度了解一下,具体意思详见设计思路(4)。
5.pta截图



编译错误的都是错误截图的第一张,部分内容有所改动,错误方向一致。
部分正确的都是错误截图的第二张,所犯的错误如解决方法中所说的。

题目7-2计算油费

1.实验代码

#include<stdio.h>
int main()
{
  double x;
  int a,b;
  char c;
  scanf("%d %d %c",&a,&b,&c);
  if(c == 'm'){
    if(b==90)
      x =a * 6.95 -a*6.95*0.05;
    if(b==93) 
      x =a * 7.44 -a*7.44*0.05;
    if(b==97)
      x =a * 7.93 -a*7.93*0.05;
    printf("%.2f\n",x);}
  else if(c =='e'){
    if(b==90)
      x =a * 6.95 -a*6.95*0.03;
   if(b==93) 
      x =a * 7.44 -a*7.44*0.03;
   if(b==97)  
      x =a * 7.93 -a*7.93*0.03;
  printf("%.2f\n",x);}
  return 0;

2.设计思路
(1)根据服务类型自助和协助可分两种情况,再根据油号自助与协助分别有三种情况,共计六种。
(2)需要将所付费用定义成浮点数,将加油量和汽油品种定义成整数,服务类型需要用字符定义。
(3)先用if-else区分两种服务类型,在利用if输出三种油号情况,所付费用等于加油量乘以每种油号所需的费用再减去优惠的部分。

3.流程图

4.遇到的困难及解决的方法
开始读题的时候,我首先想到的是用if else写,思路有误。(事先截的图,删没了,也没截错误提示,思路有问题,觉得没必要再打一遍相同的。)
只提示编译错误,我就以为大体的思路是正确的,但又找不出编译上的错误。后来看了有提交的同学的设计思路,发现自己理解题意有误。参照同学是用switch编译的。老师在课上有讲switch,做过些练习,但我的印象并不深刻,在概念上有些模糊。通过在百度上的查找大概知道了switch意思,具体的如(@)中所说的。理解之后我尝试着打了一遍,仍然显示答案错误。


经过错误提示后发现油量应该是整型函数,而我将其定义成了浮点型函数,导致输出答案错误,纠正后得到了正确答案。
但在我画流程图时发现我无法确定switch的流程图该如何画,百度的说法也不统一。最后我只能放弃已经写好的设计思路改用if-else编译。不过,理解题意后发现用if-else也很好编译。

在百度上了解的switch的大概意思:
(@)switch类似于if else 叫开关语句,根据条件判断,选择某些语句执行.
以一下这种方式输出:
switch(c)
  {
  case 'A':.....;break;
  case 'B'......;break;
  ..........
  }
5.pta截图


题目7-3比较大小

1.实验代码

#include<stdio.h>
int main()
{
  int a,b,c,t;
  scanf("%d %d %d",&a,&b,&c);
  if(a>b){
    t=a;
    a=b;
    b=t;}
  if(a>c){
    t=a;
    a=c;
    c=t;}
  if(b>c){
    t=b;
    b=c;
    c=t;}
  printf("%d->%d->%d",a,b,c);
  return 0;
}

2.设计思路
(1)题目要求比较三个数的大小,需要找一个变量做替换。
(2)三个数都是整数,用int定义a,b,c及一个替换量t。
(3)依次比较a,b,c的大小。a>b时,让t=a,a=b,b=t实现大小替换。a>c及b>c时也采用类似的方法进行替换。
(4)最后按照由大到小的顺序输出,按题目要求用->连接。
3.流程图

4.遇到的困难及解决方法
本题和老师在课上讲的是相同的,没有遇到什么困难,只是在打代码的时候有些疏忽忘记打scanf了。

5.pta截图

由于粗心忘记打scanf了,导致结果错误,以后会细心点。

题目7-4两个数的简单计算器

1.实验代码

#include <stdio.h>  
int main()  
{  
    int num1,num2;  
    char operate;  
    scanf("%d %c %d",&num1,&operate,&num2);  
    switch(operate){  
      
        case '+':  
             printf("%d",num1+num2);  
             break;  
        case '-':  
             printf("%d",num1-num2);  
             break;  
               
        case '*':  
             printf("%d",num1*num2);  
             break;  
               
        case '/':  
             printf("%d",num1/num2);  
             break;  
        case '%':  
             printf("%d",num1%num2);  
             break;  
        default:  
            printf("ERROR");  
    }  
      return 0;
}

2.设计思路
(1)本题要求用switch编译,有了第二题的经验本题就好打了很多。
(2)本题要求计算两个数的加减乘除的运算,有4种情况。加上取余和在输入非法符号输出“ERROR”的共6种情况。作用switch-case-break输出。
(3)两个数都是整数,用int定义成整型函数num1,num2。还要定义一个运算符号,用char定义成字符型函数operate。
(4)用switch的输出方式输出两个数加减乘除的运算方法,取余以及输入非法符号的结果。
3.流程图

4.遇到的困难及解决的方法
因为有了第二题的经验,本题就好编译很多。并没有像第一题和第二题一样出现思路上的错误。但有些小细节上还是出现了问题。开始并不知道switch后的括号内要打什么,以为是默认填c。后来在网上查找了一些switch的相关程序,发现定义的字符函数是什么,switch后的括号内就写什么。经过多次整改后才找到最致命的错误,才完成了本题。

5.pta截图

错误的问题如4中所说的是主要错误,还有就是一些书写上的纰漏,如产生中英文混打,结尾忘记打分号等。

【2】

git截图

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

【3】

个人总结
1.学习内容:本周继续了上周的if-else的学习,区分了if else和else if的区别。又学习了字符型函数,字符型函数要用char定义,字符常量是用单引号括起来的单个普通字符或转 义字符。还学习了交换变量的值,需要加一个的变量做替换,用来实行变量间的转换。在课上,老师也讲了switch语句。在看了课程总结后,我发现老师讲的十分细致,但我却 没什么印象。老师课件里讲的要比百度清晰的多,无论从switch输出方式还是流程图的设计都十分的准确易懂。通过这件事我总结出了两点经验。第一就是在做作业前先看看老 师发的总结。要是我在做作业前看了第二题就不会打的那么坎坷了,也会避免产生很多误区。第二就是上课一定要认真听,用心听。
2.收获:除了在学习内容中提到的学到的新知识,我觉得独立思考的能力有所提升,虽然有时候还要请教别人,但是不会像以前一样不会就问,现在有了一个思考的过程,实在不懂得再去问。
3.难点:完成此次作业遇到的最大的问题就是switch语句。我觉的这个地方有点难,但也可能是switch练习的没有if else多,不太熟练的原因。
4.不明白:现在学习内容都懂了,但在打代码时还是总出现问题,大大小小的问题。
5.建议\意见:老师之前让我们看过提问的艺术。我觉得回答问题也是一门艺术。对于简单的问题直接让自己解决或直接忽略不予回答,我觉得这种处理的方式并不可取。如何既能引导提问者自己思考出结果又不显得那么高冷,是个值得思考的问题。

【4】

评论作业
马宇欣:http://www.cnblogs.com/mayuxin/p/7792575.html
孙美玲:http://www.cnblogs.com/sunmeiling/p/7795932.html
孙佳钰:http://www.cnblogs.com/woshisun/p/7795878.html
表格与折线图
表格:

折线图:

posted @ 2017-11-07 10:05  builder2991  阅读(284)  评论(10编辑  收藏  举报