2016年軟件水平考試軟件設計筆試考前練習

字號:

1.下面各語句中,能正確進行賦字符串操作的語句是( )
    ①char s[5] ={"ABCDE"};
    ②char s[5] ={’A’,’B’,’C’,’D’,’E’};
    ③ char *s;s="ABCDE";
    ④ char *s;scanf("%", s);
    6.若有以下定義,則不能表示a數(shù)組元素的表達式是()
    int a[10]={1,2,3,4,5,6,7,8,9,1o},*p=a;
    ①*p ?、?a[10] ?、?a ?、?a[p-a]
    【解】字符串最終存儲于字符數(shù)組中,存儲字符串的字符數(shù)組可以是程序主動引入的(定義或動態(tài)分配),也可以是字符串常量,由系統(tǒng)分配。其中字符數(shù)組用字符串初始化就是字符串存儲于由程序引入的字符數(shù)組的例子。給字符指針賦字符串則是系統(tǒng)自動分配字符率存儲空間的例子。給字符指針賦字符串并不是將一個長長的字符串存于字符指針變量中,而是將字符串常量存儲于常量區(qū),并將存儲這個字符串的首字節(jié)地址賦給指針變量,讓指針變量指向字符率常量的首字符。對于以字符串作為字符數(shù)組初值的情況,要求字符數(shù)組足夠的大,能存得下字符串常量。這里有一個特別的規(guī)定,若數(shù)組的大小少于存儲字符串有效字符的字節(jié)個數(shù),系統(tǒng)將報告錯誤;當字符數(shù)組的大小只能存儲字符串的有效字符,而不能存儲字符率結(jié)束標記符時,則存儲于字符數(shù)組中的內(nèi)容是字符序列,因沒有存儲字符率結(jié)束標記符,存儲的內(nèi)容就不是字符串。如代碼char a[5]="ABCDE"。另外,給字符數(shù)組元素逐一賦字符初值,并在字符初值中沒有字符串結(jié)束標記符,則存于字符數(shù)組中的內(nèi)容也不是字符率。如代碼 char s[5]={’A’,’B’,’C’,’D’,’E’}。特別要注意當字符指針還未指向某個字符數(shù)組的元素時,不可以通過字符指針輸入字符串。如代碼 char *s;scanf("%s",s)。若寫成char *str;scanf("%s",&str)更是錯誤的了。由于C語言規(guī)定數(shù)組不能相互賦值,所以只能將字符串常量賦給某字符指針。如代碼 char *s;s="ABCDE"是正確的。實際上,字符率"ABCDE" 被存儲于常量區(qū)中,向指針變量賦的是字符指針,讓s指向其中的字符’A’。所以解答是③。
    【解】上述代碼定義了有10個元素的整型數(shù)組。,和定義指針變量p,并讓p指向數(shù)組元素a[0]。所以代碼*p是引用 a[0]。由于數(shù)組a只有10個元素,最后一個元素是a[9],表達式a[10]是錯誤的。數(shù)組名a可以作為a的首元素的指針,表達式*a就是a[0] ,是對數(shù)組a的首元素a[0]的引用。指針p的值是a,表達式p-a。的值是0,所以a[p-a]就是a[0]。所以解答是②。