C語言博客05--指針

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

1.1 思惟導圖

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

1.2.1 學習體會

  • C語言的學習感受在難度上是一直在遞增的,此次學習的指針和地址的概念比較抽象,理解上也比較困難,感受並非很可以徹底領會,再加上近期的線性代數考試等一些考試的準備,對C語言的學習也有所放鬆,預習複習不夠及時,大量知識點須要在通過本身再從新閱讀,PTA寫得不是很及時,一個星期的量兩個星期完成,感到很慚愧。
  • 在上週的博客上也寫到要增長打代碼的時間,但願從這一週嚴格執行,遇上學習的進度。算法

    1.2.2 代碼累計

    2.PTA總分(2分)

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

2.2 個人總分:125

3.PTA實驗做業(1分)

3.1 PTA題目1

簡要介紹題目
求子串在母串中最後一次出現的地址 
給定程序中函數fun的功能是:求出在字符串中最後一次出現的子字符串的地址,經過函數值返回,在主函數中輸出今後地址開始的字符串;若未找到,則函數值爲            NULL。

3.1.1 算法分析

先循環母串找到與子串相同的第一個字符
for i=0 to *(s+i)!=‘\0'
找到第一個相同的字符
    if *(s+i)==*t then
先標記1,當找到一半有不一樣的狀況下標0 
      flag=1
      for j=0 to *(t+j)循環子串尋找是否有不一樣 
        if *(s+i+j)!=*(t+j)!='\0' then找到有不一樣的
             flag=0;
             break;
 經過檢驗沒被標0的代表與子串相同
      if flag==1 then
記錄位置
         position=i
判斷有否找到,並返回地址
  if(flag==1)
      return (s+position);
  else
      return NULL;

3.1.2 代碼截圖

題目代碼

函數express

3.1.4 PTA提交列表及說明


Q:爲何出現部分錯誤
A:再返回地址的時候沒有返回正確的地址,把傳入的地址返回了,而後檢查了很久前面的代碼。數組

4.1.改造函數介紹

1.函數1

產生表達式,分紅一級和二三級
if (*selectPtr)==1  then//一級 
    exp[0]=item[0]+'0' 數字
    exp[1]=sign[*p1] 加減
    exp[2]=item[1]+'0' 數字
    exp[3]='=' 等號
    exp[4]='\0' 終止
    puts(exp) 輸出
    memset(exp, '\0', sizeof(exp)) 防止下一次產生的表達式粘在一塊兒輸出
if (*selectPtr)==2||(*selectPtr)==3 then//二三級 
    for i=0 to 3
        if (*selectPtr)==2  then
            itoa(item[i],str1,10)整數化成字符,存入數組
            strcat(exp,str1)    
        end if
        if (*selectPtr)==3  then
            itoa(item[i],str2,10);
            strcat(exp,str2);
        end if
控制加減號和等號的輸出
        if i==0 then
            switch(*p2)
                case 0:strcat(exp,"+");break;
                case 1:strcat(exp,"-");break
        end if
        if i==1 then 
            switch(*p3)
                case 0:strcat(exp,"+");break;
                case 1:strcat(exp,"-");break;
        end if
    end for         
    strcat(exp,"=");//最後附上等號 
    puts(exp);
    memset(exp, '\0', sizeof(exp));//覆蓋掉前一個表達式
end if

截圖函數代碼。函數

2.函數2

count
以0爲加  以1爲減
分紅各類狀況進行計算
例如
if *p2==0&&*p3==0 then
return item[0]+item[1]+item[2]
end if

3.函數3

輸入題目的個數
循環排錯非法字符
while scanf( "%d", &quantity)==0
  printf("請不要輸入無關字符.\n")
  fflush(stdin);
end while
  for  i = 1 to i <=response 控制題目的個數
    產生隨機符號
      *p1=rand()%4;
      *p2=rand()%2;
      *p3=rand()%2;
      if  (*selectPtr)==1 then 1級
     產生10之內隨機數,生成表達式
         expression(&select,sign,item,&k,&x,&y);
         if response!=count1(&k,item) then
        no++; 
        error();
        printf("正確答案是%d\n", count1(&k,item));
          end if
          else
    yes++; 
        right()
      end else
    二三級同上
    end if
    end for
if i==quantity+1 then
printf("*你的得分是%d",yes*100/(no+yes) )
end if

4.2與原有函數代碼比較

改造前函數1和改造後的函數1學習

  • 改造前的函數1並非把數字化成字符行再輸出的,優勢是:直接隨機產生便輸出。缺點是:這樣的話對於後來的一些功能的實現可能會有障礙,因此化成字符型能夠保存再一個數組內要使用時會比較方便一點。

改造前函數2和改造後的函數2指針

  • 改造前的函數2,並無被單獨出來,它和產生表達式的函數合併在一塊兒。缺點是:致使每一次運算都要寫一遍代碼量很大。優勢好像沒有。

改造前函數3和改造後的函數3調試

  • 改造前的函數3,缺點:一個函數代碼量特別的,將近200行 ,讓人看着都以爲煩躁。優勢:多是多個功能合在一塊兒不用傳參吧。改造後,代碼量少了一些,思路讓人看着也比較清晰。

4.3 改進大做業總結

回顧兩次做業編寫過程,總結碰到問題及後續程序編寫注意事項。code

  • 首先,對於代碼量的問題進行總結,比上一次少了將近100行的代碼,由於上一次沒有構造運算的函數,使得每一次運算都要寫一遍,只是變量名不一樣,運行的方法是同樣的,當時對於函數運用比較不靈活,因此沒有注意到這一點。
  • 其次,對於碰到問題的解決的速度變快了,一塊兒找問題只會用簡單的調試,循環又特別多,每次找都要找好久,循環得眼花繚亂的,如今學會了分部分進行找錯,一部分一部分來,能夠慢慢縮小範圍。
相關文章
相關標籤/搜索