C語言博客05-指針

1.本章思考總結

1.1思惟導圖

1.2本章學習體會及代碼量

1.2.1學習體會

這一個多星期將近兩個星期的時間一直在學習指針,其實就跟老師說的同樣,從函數開始題會變得難一些,而後須要咱們思考的越多,而後是數組,最後就是指針。我算法

認爲指針的難度很大,我也不是很清楚具體的操做,只能硬着頭皮,看翁愷視頻,看學校c 語言的書去打代碼,此次pta的題集題雖然很少,但都頗有難度,每一道題都數組

須要我花不少的時間去寫。再有,我認爲,指針是一種方法,老師說這也是c語言的靈魂,與下學期要學的數據結構聯繫很大,因此我要用心學習,在這方面打好基礎數據結構

,爭取不拖之後學習的後腿。函數

1.2.2代碼累計

2.PTA總分

2.1得分與排名:

2.2個人總分:100分

3.PTA實驗做業

3.1PTA題目1

下列程序中,函數fun的功能是:在字符串str中找出ASCII碼值最大的字符,將該字符前的全部字符向後順序移動一個位置,而後將該字符放到第一個位置上。

3.1.1算法分析

定義void類型函數 fun

定義  int型變量 i,t;

定義 字符指針數組char max指向指針p;

    for  i=0到數組結束
                          依次判斷ASCII碼值最大的字符,使之變成max;

    for  i=t-1到i=0
                      p數組的第i+1個等於第i個
    
    p[0]=max;讓ASCII碼值最大的字符變成數組的第一個

3.1.2代碼截圖

3.1.3PTA提交列表及說明

Q1:編譯錯誤?學習

A1:我對於字符數組使用的還不是很熟練,在讓字符數組爲零這個方面的語法產生了錯誤。設計

Q2:答案錯誤?3d

A2:此次是循環中的循環條件,應該到t-1結束,下一個等於前一個。指針

4.1大做業

題目:實現小學四則運算。code

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

地址傳遞,減小全局變量的使用。

題目要求:

題目有3個難度級別,分別爲:
•第一級是1位數的一步加減乘除計算
•第二級是2位數的2步加減運算
•第三級是3位數的2步加減運算

4.1改造函數介紹

1.函數1

定義指針數組exp;

     輸入能產生隨機數字的函數

         定義靜態數組ch[2];

     定義number1,number1產生0-9的隨機數字,number2同理

     用一個函數itoa(number1, exp, 10)將 number1放進數組exp中;
                                                                                    //百度出來的強制類型轉換,將int類型數字轉換爲char型
     定義number3產生1-4的隨機數;

    用switch case,將1,2,3,4分別表示符號加減乘除

    用函數strcat(exp, ch),將number1和符號鏈接

    定義字符數組Num爲空數組,將number2存進去

        用函數strcat(exp, Num),將exp與number2鏈接

    用函數strcat(exp, "=")將與等號鏈接
        最後用puts輸出指針

2.函數2

定義int temp=0; 
    定義int Result=0;

        當(exp[0]<='9'&&exp[0]>='0' ) 即數字number1爲0-9時, 結果 Result =number1

                   if 
                                                (第一個運算符=='+')
                                                Result=number1+number2

                      else if
                                                (第一個運算符=='-')
                                                 Result=number1-number2

                     else if
                                                (第一個運算符=='*')
                                                Result=number1*number2

                    else
                                       Result=number1/number2
            
      返回結果   Result;

4.2與原有函數比較

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

我原有的函數是這種類型,當時只會定義變量,不會使用數組和指針,就一個勁兒的用switch case,將依次運算的結果加啊加,一次兩次還好,若是是屢次運算,代碼

會很長,雖然不繁瑣,可是重複的會不少,代碼看起來很不舒服,我用了數組和指針就不會。首先,長度會縮小,我只須要定義字符數組就好,不用一次次的加減運

算,其次,用數組的話,讓運算符號,即加減乘除的表示方便了不少。

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

改造前的函數2在上圖中,仍是那句話,改造前計算結果時,我要一次次的表示出來,不停的寫number1啊number2啊這些,改造後就不用,我只須要把整型數變成字符

型數,再用strcat這個函數將函數鏈接起來就好。可是我以爲不足的,也是我如今尚未想到辦法的就是運算次數的問題,一次兩次還好,要是運算次數多了,不停的定

義數組也是一個麻煩事,還要不停的把數組鏈接起來,也挺麻煩的。

4.3改進大做業總結

1.首先我遇到的麻煩是在函數1中,由於我當時定義的number1,number2這些都是整型數字,可是我想把他們放進一個字符型的數組裏,在這塊我不知道怎麼用強制類

型轉換,而後我一個舍友告訴我百度,因而我就查到了itoa這個函數,能夠將整形數字變成字符,在百度的同時呢,我還看到了不少能夠用來將整型變成浮點型或者將浮

點型變成字符型的這些函數,學到了很多知識,同時也讓我知道了,在遇到不懂得問題時,查百度不失爲一個好方法。

2.而後仍是在函數1中,第一開始個人鏈接有毛病,加減乘除運算符怎麼弄都沒法盡到數組裏,致使輸出的時候一直不對,後來詢問大佬,他說strcat傳進去的是地址,我

第一開始定義了一個野指針,當時很不理解,我就問他既然我定義了數組,指針的意義在哪裏,他說,對於數組指針可能沒意義,可是對於整型什麼的就有意義,大數

據傳指針能夠增長運行速度,聽得似懂非懂的我只能之後本身慢慢去摸索了。

3.在函數2中,我計算的結果老是不對,後來發現是運算符優先級的問題,我將字符型數字變成整型數字時,要減去「0」,但是我卻忘了加括號,這就致使運算出現了錯

誤,此次知道了,下次就不能再犯這種毛病了。

4.在此次修改大做業的過程當中,我發現了我以前代碼的許多問題,好比重複啊,函數較少啊,運算較麻煩等等,我知道大做業是一項大工程,本身不能老是犯懶,要儘可能

改正這些問題與毛病。

相關文章
相關標籤/搜索