第六周作業


【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
表格與折線圖
表格:

折線圖:


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM