PAT乙級系列 第二題

2021-08-10 08:52:47 字數 1942 閱讀 3851

題目如下

第一步:輸入

因為n小於10的100次方,所以可以用長度為100的字元型陣列儲存。這裡仍然要討論結束符的問題。如果輸入長度為100,那麼編譯器會不會自動再陣列結尾插入乙個結束符?如果使用cin>>,是不會出現這種情況的。這裡做了乙個小嘗試。

#include

using

namespace

std;

int main()

}return (len);

}

什麼是null,為什麼在陣列中沒有賦值的位址上的值為null?

c++中定義null即為0.在陣列中,無論什麼型別的陣列,如果元素沒有被初始化,就會被設定為預設值『0』。int型將會初始化為0.char或者string型陣列將會初始化為「」(ascii碼為0)。所以,上述判定條件也可以寫成: if (a[i]!=0).

雖然這裡不涉及空指標問題,但是我也查了一點這方面的資料。空指標不會指向任何物件和函式。所以任何物件或者函式的位址均不為空。那麼空指標到底指向什麼地方呢?答案是,看系統而定。有的是指向位址為0的記憶體。有的是指向其他的位置。

參考資料:

初始化問題

空指標問題

2.2 求和

int getsum(const char (&a)[100])

return (sum);

}

這裡注意格式轉換就行

第三部 輸出

3.1 定義string陣列。

用含有10個元素的string陣列來儲存拼音資訊。之所以用const,是因為希望保護string內的元素,不允許修改。

const

string pinyin[10]=;

3.2 列印

這裡我思考了一段時間,如何保證從非零首位開始列印。我想的辦法是從高位開始遍歷,設定乙個標誌位,當標誌位為1時,才能夠列印。而只有出現非零值時,標誌位才會改變為1.還有就是如何將int型值的每一位依次取出。演算法如下

void output(const

string (&pinyin)[10], int sum)

; int flag=0;

for ( int i =3;i>0;i--)

if(flag==1)

if (i!=1 & flag==1)}}

綜合**:

#include

#include

#include"math.h"

using

namespace

std;

void getinput(char (&a) [100])

int getinputlen(const

char (&a)[100])

}return (len);

}int getsum(const

char (&a)[100])

return (sum);

}void output(const

string (&pinyin)[10], int sum)

; int flag=0;

for ( int i =3;i>0;i--)

if(flag==1)

if (i!=1 & flag==1)

}}int main()

; char input[100]=;

int sum=0;

getinput(input);

sum = getsum(input);

output(pinyin,sum);

return(0);

}

PAT乙級真題

include includeint main char zhuan 10 sprintf zhuan,d he for int i 1 0 i 1 includeint main else if grade to else if grade includebool search int a,int...

PAT乙級1006題感想

初學c 很多東西搞得雲裡霧裡。這題很簡單,但是做的很不好。題目如下 正整數a的 da 為1位整數 部分 定義為由a中所有da組成的新整數pa。例如 給定a 3862767,da 6,則a的 6部分 pa是66,因為a中有2個6。剛開始對string了解很不好,在做比較時,寫的很蠢。不管蠢不蠢,我搞清...

PAT乙級訓練題 1002

讀入乙個自然數n,計算其各位數字之和,用漢語拼音寫出和的每一位數字。輸入格式 每個測試輸入包含1個測試用例,即給出自然數n的值。這裡保證n小於10100。輸出格式 在一行內輸出n的各位數字之和的每一位,拼音數字間有1 空格,但一行中最後乙個拼音數字後沒有空格。輸入樣例 123456789098765...