zoukankan      html  css  js  c++  java
  • PTA題目的處理(三)

    题目7-1 高速公路超速處罰

    1.實驗代碼

    #include <stdio.h>
    //#include <stdlib.h>
    int main()
    {
      int csp,lsp;
      double percent;
      scanf("%d %d",&csp,&lsp);
      if(csp<=lsp)
      {
        printf("OK
    ");
      }
      else
      {
        percent=((csp-lsp)*1.0f)/lsp;
        if(percent<0.1f)
        printf("OK
    ");
        else if(percent>=0.1f&&percent<0.5f)
        printf("Exceed %.0f%%. Ticket 200",percent*100.0f);
        else
        printf("Exceed %.0f%%. License Revoked",percent*100.0f);
      }
      //system("pause");
      return 0;
    }

    2.設計思路

    (1)算法
    第一步:輸入整數車速csp,整數限速lsp,小數超速百分比percent

    第二步:若車速<=限速,則輸出OK,否則下一步

    第三步:超速百分比=(車速=限速)/限速

    第四步:若超速百分比<10%,則輸出OK,否則下一步

    第五步:若10%<=超速百分比<50%,則輸出Exceed (超速百分比*100)%. Ticket 200,否則下一步

    第六步:輸出Exceed (超速百分比*100)%. License Revoked

    (2)流程图

    3.本題調試過程碰到的問題及解決辦法

     問題:計算超速百分比的時候沒有將後面的整型值轉化到浮點數,1.0f放的位置不對

    解決辦法:在差括號的位置*1.0f

    4.本題PTA提交列表

    部分正確:在輸出中少打了一個%,在C語言中輸出%是需要再多加一個%的

    計算超速百分比的時候沒有轉換類型,導致percent輸出的還是用浮點數表示的整數,不精確

    一、PTA作業

    题目7-2 計算油費

    1.實驗代碼

    #include <stdio.h>
    //#include <stdlib.h>
    int main()
    {
      int a,b;
      char c;
      double price,discount,cost;
      scanf("%d %d %c",&a,&b,&c);
      if(b==90)
      price=6.95;
      else if(b==93)
      price=7.44;
      else
      price=7.93;
      switch(c)
      {
        case'm':discount=0.05;break;
        case'e':discount=0.03;break;
      }
      cost=price*a*(1-discount);
      printf("%.2f",cost);
      //system("pause");
      return 0;
    }

    2.設計思路

    (1)算法
    第一步:輸入加油量整數a,汽油品種整數b,服務類型字符c

    第二步:若汽油品種為90,單價price為6.95元/升,跳到第五步,否則下一步

    第三步:若汽油品種為93,單價price為7.44元/升,跳到第五步,否則下一步

    第四步:若汽油品種為97,單價price為7.93元/升

    第五步:若服務類型為自助,折扣discount為5%,跳到第七步,否則下一步

    第六步:若服務類型為協助,折扣discount為3%

    第七步:總價=單價*加油量(1-折扣),輸出總價cost

    (2)流程图

    3.本題調試過程碰到問題及解決辦法

    問題:將數字當作字符使用switch,導致程序出錯

    解決辦法:數字部分

    4.本題PTA提交列表

    题目7-3 比較大小

    1.實驗代碼

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

    2.設計思路

    (1)算法
    第一步:輸入整數a,整數b,整數c
    第二步:當a>b,判斷b>c,若是輸出c<b<a,否則下一步

    第三步:若a>c,則輸出b<c<a,否則輸出b<a<c

    第四步:當a<b,判斷c>b,若是輸出a<b<c,否則下一步

    第五步:若a>c,輸出c<a<b,否則輸出a<c<b
    (2)流程图

    3.本題調試過程碰到問題及解決辦法

     無

    4.本題PTA提交列表

    編譯錯誤:少打了一個分號

    题目7-4 兩個數的簡單計算器

    1.實驗代碼

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

    2.設計思路

    (1)算法

    第一步:輸入整數num1,運算符號字符ch,整數num2
    第二步:當運算符號為+,浮點數結果result=num1+num2

    第三步:當運算符號為-,浮點數結果result=num1-num2

    第四步:當運算符號為*,浮點數結果resule=num1*num2

    第五步:當運算符號為/,判斷num2是否=0,若是則輸出Error,否則下一步

    第六步:result=num1/num2,輸出結果result

    第七步:當運算符號為%,判斷num2是否=0,若是則輸出Error,否則下一步

    第八步:result=num1 mod num2,輸出結果result

    第九步:除此以外輸入的運算符號都輸出Error
    (2)流程图

    3.本題調試過程碰到問題及解決辦法

     問題:沒考慮除法和取余的除數不能為0

    解決辦法:用if語句判斷

    4.本題PTA提交列表

    二、总结

    本週我學習了循環語句中的while,do..while,for語句,感覺學了循環語句,很多程序都可以很快的完成了,一般的數學計算沒有什麼打的問題,同時區分了一下while和do..while語句的區別,但是我總是忘記for語句中的第三個條件不能加分號,while和do..while要看情況選用,一般是寫代碼的時候會發現用哪個更合適,其中也沒有什麼不理解的,沒有什麼沒學會的。我覺得老師上課的時候能讓我們一起跟著寫代碼,這是鍛鍊了我們的實踐能力,進度一般都幹得上,沒什麼意見。

    三、学习进度条

    git地址:https://git.coding.net/MemoriesBook/123.git

    馮子旋的博客鏈接:http://www.cnblogs.com/fengzx/p/7801506.html

    董欣的博客鏈接:http://www.cnblogs.com/dx2017/p/7794801.html

    董雅潔的博客鏈接:http://www.cnblogs.com/exo123/p/7811906.html

    代碼行數 時間 博客字數 時間 涉及知識點
    0 11.3 0 0
    0 11.4 0 0
    0 11.5 0 0
    100 11.6 100 1 if,switch語句
    100 11.7 1000 1.5 if,switch語句
    100 11.8 1000 1 if,switch語句

  • 相关阅读:
    Codeforces 1355 D. Game With Array
    Codeforces 1355 C. Count Triangles
    Codeforces Round #641 (Div. 2)
    Codeforces 1345 D
    hdu6787(骰子+往回推的传输带问通过方案,dp)
    hdu6745(渐减1过程的最多互质对数,dp)
    D Points Construction Problem(思维构造,等周定理)
    Codeforces Round #658 (Div. 2)D(01背包)
    Codeforces Round #655 (Div. 2)E(矩阵范围dp)
    hdu4622([u,v]内有多少个子串)
  • 原文地址:https://www.cnblogs.com/lixiaojing/p/7798963.html
Copyright © 2011-2022 走看看