第五次做業---指針

1.本章學習總結(2分)

1.1 思惟導圖

1.2 本章學習體會及代碼量學習體會

1.2.1 學習體會

實際上仍是沒怎麼明白該怎麼用指針,指針的題集實際上都是用數組寫的,感受沒什麼區別又好像頗有區別,使人頭疼。感受進度好快,有點趕不上,題集刷得慢,概念不清晰,甚至連有的編譯錯誤都由於概念上的不清晰難以找出錯誤。整個寫題過程都充滿了不肯定,不自信,不明白。明明本身寫得沒有問題,但卻老以爲都是問題。特別難受。若是光是看的話,多多少少是能夠看明白的,本身寫就有一點點懸。

1.2.2 代碼累計

2.PTA總分(2分)

2.1截圖PTA中函數題目集的排名得分

2.2 個人總分:

110分

3.PTA實驗做業(1分)

3.1 PTA題目1

字符串的冒泡排序算法

3.1.1 算法分析

int i,j;
int N,K;
char s[110][20],temp[20];
scanf("%d %d",&N,&K);
i from 0 to N   scanf("%s",s[i]);
i from 0 to K
    j from 0 to N-i-1
      if(strcmp(s[j],s[j+1])>0)       //字符串比較
        strcpy(temp, s[j]);              //字符串複製
        strcpy(s[j], s[j+1]);
        strcpy(s[j+1], temp);
      end if
i from 0 to N     printf("%s\n",s[i]);

3.1.2 代碼截圖

3.1.4 PTA提交列表及說明


- 整個代碼就是對字符串函數運用理解不夠清晰,因此總是錯,原本總體是不會有什麼大問題,可是由於理解不清晰,因此有的時候直接進行比較或者=,就致使結果老是不對。數組

4.大做業(5分)

題目:實現小學四則運算。
在函數那章,咱們已經實現小學四則運算這份做業,如今要求你們把以前設計函數升級改造,原來的函數你們都是用全局變量實現不一樣函數參數傳遞,此次做業要求改地址傳遞,減小全局變量的使用。函數

題目要求:
題目有3個難度級別,分別爲:學習

第一級是1位數的一步加減乘除計算
第二級是2位數的2步加減運算
第三級是3位數的2步加減運算
改進內容:
1.構造字符數組存放算術表達式
無論哪一個級別的算式,請都生成一個字符數組存放。無論用戶選擇哪一個級別題目,都能在表達式生成函數中生成一個算術式子。具體函數接口
j=0;
exp[j]=rand()%9+1;
j++;
cr[0]=ch[rand()%4];
exp[j]=rand()%9+1;
j++;
printf("%d%c%d",exp[0],cr[0],exp[1]);
printf("=");
2.表達式是否合法(選作)
對於不合法或者超出該級別小學生學習範圍的表達式,視爲不合法,需重造一個。不合法表達式體現有除數爲0的表達式、1,2級別中出現不能整除的除法表達式或其餘不合法狀況設計

double calculate(int *exp,char *c,int n)
{
double answer=0;
int i;
answer=exp[0];
for(i=1;i<n;i++)
    switch(c[i-1])
  {
     case '+':answer+=(double)exp[i];
     break;
     case '-':answer-=(double)exp[i];
     break;
     case '*':answer*=(double)exp[i];
     break;
     case '/':if(exp[i]!=0) answer/=(double)exp[i];
    else  printf("ERROR\n");break;
  }

return answer;
}

3.表達式運算
根據字符表達式,能計算其結果。有能力同窗深刻研究表達式優先級。3d

這塊代碼能夠參考這題作法:指針

#include <stdio.h>
int main()
{ 
  int m=0, sum=0;
  char c, oldc='+';
  do {
    c = getchar();
    if( c<='9'&&c>='0' ) 
        m = 10*m + c - '0';//1
    else 
         {
          if( oldc == '+' )
           sum += m;
          else 
           sum -= m;
          m = 0;//2
          oldc = c;
         }
} while(c!='=');
printf("sum=%d", sum);
return;
}

4.1.改造函數介紹

主要上述三個函數的改造說明code

1.函數1
僞代碼介紹函數思路blog

int a,b,c,i,t,m,j=0;
    char ch[4]={'+','-','*','/'},cr[3];
    int exp[100],right=0;
    double answer,response;
    if(implement==1)
           i from 0 to num
           j=0;
           exp[j]=rand()%9+1;
           j++;
           cr[0]=ch[rand()%4];
           exp[j]=rand()%9+1;
           j++;
           printf("%d%c%d",exp[0],cr[0],exp[1]);
               printf("=");
        answer=calculate(exp,cr,2);
        scanf("%lf",&response); 
        if(response==0&&answer!=0)  break;
        if(response!=answer)
            printf("不對噢  下一題繼續努力\n正確答案是 %.2lf\n",answer );
        if(response==answer)
            printf("恭喜你答對啦  繼續保持啊\n");
            right++;
        end if
    if(implement==2||implement==3)
        for(i=0;i<num;i++)
            j=0;
        if(implement==2)
            exp[j++]=rand()%90+10;
            cr[0]=ch[rand()%2];
            exp[j++]=rand()%90+10;
            cr[1]=ch[rand()%2];
            exp[j++]=rand()%90+10;
      else if(implement==3)
            exp[j++]=rand()%900+100;
            cr[0]=ch[rand()%2];
            exp[j++]=rand()%900+100;
            cr[1]=ch[rand()%2];
            exp[j++]=rand()%90+10;
        
        printf("%d%c%d%c%d",exp[0],cr[0],exp[1],cr[1],exp[2]);
        printf("=");
        answer=calculate(exp,cr,3);
        scanf("%lf",&response); 
        if(response==0&&answer!=0)  break;
        if(response!=answer)
            printf("不對噢  下一題繼續努力\n 正確答案是 %.2lf\n",answer);
        if(response==answer)
            printf("恭喜你答對啦  繼續保持啊\n");
            right++;
      end if
     doExercise( right,num);

截圖函數代碼。


排序

2.函數2
僞代碼介紹函數思路

double answer=0;
      int i;
      answer=exp[0];
      i from 1to n
         switch(c[i-1])
           case '+':answer+=(double)exp[i];
           break;
           case '-':answer-=(double)exp[i];
           break;
           case '*':answer*=(double)exp[i];
           break;
           case '/':if(exp[i]!=0) answer/=(double)exp[i];
           else  printf("ERROR\n");break;
    return answer

截圖函數代碼。

3.函數3
僞代碼介紹函數思路

double correctRate;
    printf("您一共作了%d道題,共作對%d道題",num,right);
    correctRate=(1.0*right)/num;
    printf("您的正確率是 %.2lf",correctRate)

截圖函數代碼。

4.3 與原有函數代碼比較

改造前的函數主要是按照三個等級來直接分類,比較直接且暴力,並且使用了大量的全局變量;改造後的就是按照等級,計算和判斷正確率來分類,而後就是一層套一層,其實好像也挺暴力的。可是,第一種就每一個函數其實作的事情都差很少,像是其實就在重複三件相同的事情,沒有起到函數應該有的效果。

4.4 改進大做業總結

  • 兩次代碼最直接的問題就是無從下手吧,不知道要怎麼作,頭禿。
  • 相比於第一次的代碼,這一次的函數運用比上一次的直接三個等級會麻煩一些,而後本身實際上沒怎麼完整的使用過函數,業務不熟練,總是有這裏那裏的小錯誤,致使代碼沒辦法運行。
  • 又由於用了數組,數組在函數的傳遞本身又不是很明確,總是搞不清楚。不過通過這回的大做業,仍是明確了不少。
相關文章
相關標籤/搜索