C博客作業--指針


一、PTA實驗作業

題目1:輸出月份英文名

1. 本題PTA提交列表

2. 設計思路

3.代碼截圖

4.本題調試過程碰到問題及PTA提交列表情況說明。

選擇這一題是因為這道題的通過率較低。為什么會這樣定義呢“char *month[]”,當時只是隨便嘗試一下輸入十二個月份,沒想到可以,於是上網查找一下,這種用法叫指針數組,數組中的每一個都是指針,具體介紹我將寫在總結中。

題目2:字符串串動變化

1. 本題PTA提交列表

2. 設計思路

Begin

定義整型變量max,i,j;定義字符型變量temp;
max賦值為0;
for i=1 自增到 *(p+i)為0
    if *(p+max)小於*(p+i)
        那么max賦值為i;
temp賦值為*(p+max);
for j=max to j=1
    *(p+j)賦為*(p+j-1);
*p賦值為temp;

End

3.代碼截圖

4.本題調試過程碰到問題及PTA提交列表情況說明。

一開始讓j=i開始復制,導致錯誤,應該從max開始移動,后把i改成max

題目3:求子串在母串中最后一次出現的地址

1. 本題PTA提交列表

2. 設計思路

Begin

定義整型變量i,k,p,count;

for i=0 自增直到s[i]為0
    if s[i]等於t[0]
    then { k賦值為i;
             count賦值為1;
             for p=1 自增直到t[p]為0
                 if s[i+p]不等於t[p]
                 then { count 自減;
                    break;} }
if count不等於0 then 返回 (s+k);
else 返回 NULL;

End

3.代碼截圖

4.本題調試過程碰到問題及PTA提交列表情況說明。

這是原來的部分代碼

但是這樣不能保存子串最后一次出現在s字符串中的首地址,而且不能做到在s字符串中多次判斷子串是否存在,於是添加了k來保存i,當s[i]==t[0]時count=1,如果后面的字符串與子串不同,則令count自減,這里其實用flag也可以,最后如果count為0,則說明s字符串中不存在子串。

二、截圖本周題目集的PTA最后排名。

三、閱讀代碼

判斷合法字符

題目

代碼

這篇是夢冰的代碼。當時我怎么寫也不對,夢冰利用自定義函數來做,代碼看起來更加整齊簡潔,判斷是否是合法字符,先判斷首字符是否符合條件,如果符合再進入循環判斷是否全部符合,思路簡單清晰。

輸出GPLT

題目

代碼


原本以為這道題很難,但是其實只要數出GPLT的個數然后按順序輸出就可以了,簡單有效的方法!

四、本周學習總結

1.自己總結本周學習內容。

結構

結構是C語言中一種新的構造數據類型,能把有內在聯系的不同類型的數據匯聚成一個整體,使它們相互關聯。同時,結構又是一個變量的集合,可以按照對基本數據類型的操作方法單獨使用其成員的變量。

(1)結構類型定義的一般形式:

struct 結構名{
    類型名 結構成員名1;
    類型名 結構成員名2;
    ...
    類型名 結構成員名n;
};

(2)關鍵字struct和它后面的結構名一起組成一個新的數據類型名。C語言中把結構的定義看做一條語句,所以結構的定義以分號結束。

(3)在結構定義成員時所用的數據類型也可以是結構類型,例如:

struct address{
    char city[10];
    int code;
    int zip;
};
struct nest_student{
    char name[10];
    struct address addr;
    int computer,english,math;
    double average;
};

(4)注意:在定義嵌套的結構類型時,必須先定義成員的結構類型,再定義主結構類型。

(5)無類型名定義變量的方式:

struct {
    類型名 結構成員名1;
    類型名 結構成員名2;
    ...
    類型名 結構成員名n;
} 結構變量名表;

需要注意的是,由於沒有給出結構名,在此定義語句后面無法再定義這個類型的其他變量,除非把定義過程再寫一遍。

(6)一個結構類型變量所占的內存空間是其各個成員所占內存空間之和,可以直接用sizeof計算,如 sizeof(struct student),sizeof的運算對象可以是結構類型名,也可以是結構變量名,計算結果以字節為單位。

(7)如果兩個結構變量具有相同的類型,則允許將一個結構變量的值直接賦給另一個結構變量,如 s1=s2 。

(8)結構成員操作符為“.”

(9)使用結構指針時,假如指針p=&s1,要用p訪問的結構成員進行賦值,則 (p).num=100,另,注意“.”的優先級高於“*”的優先級;還可以用->進行訪問,如 p->num=100。

(10)結構指針作為函數參數,如:

自定義函數 int update_score(struct student *p,int n,int course)
調用語句    pos=update_score(students,n,num)   /*students為結構數組名*/

指針數組與數組指針

  • 數組指針是指向數組地址的指針,其本質為指針
  • 指針數組是數組元素為指針的數組(例如 int *p[3],定義了p[0],p[1],p[2]三個指針),其本質為數組。
  • 指針數組可以作為函數的參量使用,使用方式與普通數組類似。
  • 指針函數與二維數組的對比
    • 二維數組:如char string_1[10][10]只要定義了一個二維數組,無論賦不賦值,系統都會給它分配相應空間,而且該空間一定是連續的。其每個元素表示一個字符。可以通過指定下標對其元素進行修改。
    • 指針數組:如char *str_B[5] 系統至少會分配5個連續的空間用來存儲5個元素,表示str_B是一個5個元素的數組,每個元素是一個指向字符型數據的一個指針。
    • 如這樣定義:
char a[3][8]={"gain","much","strong"};
char *n[3]={"gain","much","strong"};
那么系統給數組a分配了3×8的空間,而給n分配的空間則取決於具體字符串的長度。此外,系統分配給a的空間是連續的,而給n分配的空間則不一定連續。

由此可見,相比於比二維字符數組,指針數組有明顯的優點:一是指針數組中每個元素所指的字符串不必限制在相同的字符長度;二是訪問指針數組中的一個元素是用指針間接進行的,效率比下標方式要高。 但是二維字符數組卻可以通過下標很方便的修改某一元素的值,而指針數組卻無法這么做。

(參考自百度百科)

2.羅列本周一些錯題。

課堂派5.

應該選D. A中的“p++”也是地址,與p的用法相同。

課堂派2.

不能直接對*(p+2)全部賦值,改正:

*(p+2).num=102030;
*(p+2).name[80]="數據結構";
*(p+2).price=40;


免責聲明!

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



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