4.1 單項(xiàng)選擇題
1.若有下列說(shuō)明,則數(shù)值為4的表達(dá)式是( )
int a[12]={ l,2,3,4,5,6,7,8,9,10,11,12 };
char c=’a’,d, g;
①a[g-c] ②a[4]
③a[’d’-’c’] ④a[’d’-c]
【解】數(shù)組元素的下標(biāo)自0開始順序編號(hào),值為4的元素是a[3]。所以只有下標(biāo)表達(dá)式的值為3的才是正確的。下標(biāo)表達(dá)式g-C中的的變量g和c的值是還未被設(shè)定的,其值不確定。a[4]的值為5,下標(biāo)為4是不對(duì)的?!痙’-’c’的值為1,a[l]的值是2,所以也是不對(duì)的。變量c的值為’a’ ,’d’-c=3,所以正確解答是④。
2.設(shè)有定義:"char s[12]={"string"};" 則printf("%d\n",strlen(s));的輸出是( )
① 6 ② 7
③11 ④ 12
【解】在C語(yǔ)言中,字符串是指在有效字符之后有字符率結(jié)束標(biāo)記符的字符列,并約定字符串的長(zhǎng)度是指字符率中有效字符個(gè)數(shù),不包括字符串的結(jié)束標(biāo)記符。存放于字符數(shù)組s中的字符串是“string”,該字符串的長(zhǎng)度為6,所以輸出該字符串的長(zhǎng)度應(yīng)是6。正確的解答是①。
3.下列語(yǔ)句中,正確的是( )
① char a[3][]={’abc",’1’}; ② char a[][3]={’abc’,’l’};
③char a[3][]={’a’,"1"}; ④char a[][3]={"a","1"};
【解】如定義數(shù)組時(shí)有初始化,其維的長(zhǎng)度可以省缺,由系統(tǒng)根據(jù)初始化時(shí)的初值個(gè)數(shù)確定,而其它維的長(zhǎng)度是不可以缺省的。對(duì)二維字符數(shù)組的初始化,可以按行用字符串對(duì)其初始化,也可以按二維數(shù)組元素的存儲(chǔ)順序逐一用字符對(duì)其元素初始化。在供選擇解答①和③中,有不是維的長(zhǎng)度被缺省,所以是錯(cuò)誤的。在供選擇解答①和②中,還將字符串常量寫作’abc’,這也是錯(cuò)誤的。只有④,用字符率按行給二維字符數(shù)組初始化,這才是正確的。正確構(gòu)解答是④。
4.合法的數(shù)組定義是( )
①int a[]={"string"} ②int a[5]={0,1,2,3,4,5};
③char a={"string"} ④char a[]={0,1,2,3,4,5};
【解】①錯(cuò)誤的原因是整數(shù)數(shù)組不可以用字符串對(duì)其初始化。②錯(cuò)誤的原因是,數(shù)組初始化時(shí),初始化指定的值的個(gè)數(shù)多于數(shù)組的元素個(gè)數(shù)。③錯(cuò)誤的原因是,能用字符串初始化的只;有字符指針變量,或字符數(shù)組。字符率不能對(duì)其它類型的變量初始化,包括字符變量。④是正確的,因?yàn)樽址麛?shù)組可以用小整數(shù)(作為字符的ASCII代碼值)對(duì)其元素初始化。
5.語(yǔ)句"printf("%d\n"strlen("ats\nol2\1\\"));"的輸出結(jié)果是( )
①11 ②10 ③ 9 ④ 8
【解】字符串中的字符可以是一般的普通字符,也可以是由反斜杠字符開頭的轉(zhuǎn)義字符。在字符串"abs\no12\11\\" 中,有三個(gè)轉(zhuǎn)義字符,它們是\n、\1、\\,所以該字符串的有效字符個(gè)數(shù)是9。所以正確的回答是③。
6.函數(shù)調(diào)用“strcat(strcpy(strl,str2),str3)”的功能是( )
①將字符串strl復(fù)制到字符串str2中后再連接到字符串str3之后
②將字符串strl連接到字符串str2中后再?gòu)?fù)制到字符率str3之后
③將字符串str2復(fù)制到字符串strl中后再將字符串str3連接到字符串strl之后
④將字符串str2連接到字符率strl之后再將字符串strl復(fù)制到字符串str3中
【解】函數(shù)調(diào)用strcat(s1,s2)是將s2字符串復(fù)制連接到s1字符串之后,使s1字符串變得更長(zhǎng)。函數(shù)調(diào)用strcpy(s1,s2)是將s2字符串復(fù)制到s1,使s1字符串的內(nèi)容與s2字符串的內(nèi)容相同。函數(shù)調(diào)用strcat(strcpy(strl,str2) ,str3) 是先執(zhí)行strcpy(strl,str2),然后再執(zhí)行strcat(strl,str3),所以其功能是將字符串str2復(fù)制到字符串strl中,然后再將字符串str3復(fù)制連接到字符串strl之后。正確的選擇是③。
7.設(shè)有如下定義,則正確的敘述為( )
char x[]={"abcdefg"};
char y[]={’a’,’b’,’c’,’d’,’e’,’f’,’g’};
①數(shù)組x和數(shù)組y等價(jià)②數(shù)組x和數(shù)組y長(zhǎng)度相同
③數(shù)組X的長(zhǎng)度大于數(shù)組y的長(zhǎng)度④數(shù)組X的長(zhǎng)度小于數(shù)組y的長(zhǎng)度
【解】不指定數(shù)組長(zhǎng)度的字符數(shù)組定義,其所需要的字節(jié)數(shù)可由初始化中給出的值的個(gè)數(shù)確定。字符數(shù)組可以用字符串初始化,也可用字符逐個(gè)給字符數(shù)組的元素初始化。但用字符初始化時(shí),盡管給出了字符串中的全部字符,還是不會(huì)自動(dòng)有字符率結(jié)束字符。但字符串初始化自動(dòng)會(huì)含有字符串的結(jié)束標(biāo)記符,字符串初始化所需要的字節(jié)個(gè)數(shù)會(huì)比用同樣多的字符初始化多1個(gè)字節(jié)。所以只有③才是正確的。
4.2 填充題
1.根據(jù)變量定義“static int b[5], a[][3]={1,2,3,4,5,6};”,b[4]=_____,a[1][2]
【解】系統(tǒng)規(guī)定,靜態(tài)變量定義時(shí),若末初始化,系統(tǒng)自動(dòng)給定二進(jìn)制代碼全0的值。所以態(tài)數(shù)組b的元素全為0,當(dāng)然包括b[4]也為幾靜態(tài)數(shù)組a是二維數(shù)組,每行有三個(gè)元素,在初始化中結(jié)出了六個(gè)初值,所以數(shù)組a有2行。由于數(shù)組的元素按行順序存儲(chǔ),并按行順序初始化。前三個(gè)值是第一行,后三個(gè)值是第二行。a[1][2]是第二行的第三列元素,也是 a的最后一個(gè)元素,所以其值是6。
2.設(shè)有定義語(yǔ)句“static int a[3][4]={{1},{2},{3}};”則a[l][l]值為_,a[2][1]的值為_。
【解】給二維數(shù)組初始化時(shí),可按行給出初值,并且每行可以只給前面部分的元素給出初值。系統(tǒng)規(guī)定,對(duì)哪些未給出初值的部分元素,系統(tǒng)自動(dòng)置二進(jìn)制代碼全0的值。由于定義語(yǔ)句只給a[0][0]給定初值l、a[l][0]給定初值2、a[2][0]給定初值3。這樣,其它元素都為0值。所以,a[1][1]= 0,a[2][1]= 0。
3.若在程序中用到“putchar( )”函數(shù)時(shí),應(yīng)在程序開頭寫上包含命令__(dá)___,若在程序中用到“strlen( )”函數(shù)時(shí),應(yīng)在程序開頭寫上包含命令______。
【解】putchar()是系統(tǒng)提供的頭文件stdio.h中定義的宏,所以程序要使用它,必須寫上包含命令:#include。函數(shù)strlen()是系統(tǒng)提供的字符串處理函數(shù)之一,字符串處理函數(shù)的函數(shù)原型說(shuō)明和它們用到的有關(guān)常量、數(shù)據(jù)結(jié)構(gòu)等,在系統(tǒng)提供的頭文件tring.h中定義,所以使用該函數(shù)的程序應(yīng)在程序開頭寫上包含命令并include。
4.下面程序的功能是輸出數(shù)組s中元素的下標(biāo),請(qǐng)?zhí)羁铡?BR> main()
{int k, p ;
int s[]={1,-9,7,2,-10,3};
for(p=0, k=p;p<6; p++)
if(s[p]>s[k])____________
printf("%d\n" ,k);
}
【解】為要尋找數(shù)組中的元素的下標(biāo),需先預(yù)設(shè)1個(gè)臨時(shí)元素的下標(biāo),并順序逐一考察數(shù)組的元素,當(dāng)發(fā)現(xiàn)當(dāng)前元素比臨時(shí)元素更大時(shí),就用當(dāng)前元素的下標(biāo)更新臨時(shí)元素下標(biāo)。直至考察了數(shù)組的全部元素后,這臨時(shí)元素下標(biāo)就是數(shù)組的元素下標(biāo)。通常預(yù)設(shè)的元素下標(biāo)是數(shù)組的首元素下標(biāo),考察是從首元素開始順序向后繼元素考察。程序中,存儲(chǔ)臨時(shí)元素下標(biāo)的變量是k,變量p控制順序考察的循環(huán)控制變量。當(dāng)發(fā)現(xiàn)當(dāng)前元素s[p]比臨時(shí)元素s[k]更大時(shí),應(yīng)該用p更新k。所以在空框處應(yīng)填入代碼“k=p;”。
5.下面程序的功能是將一個(gè)字符串str的內(nèi)容顛倒過(guò)來(lái),請(qǐng)?zhí)羁铡?BR> # include
main()
{int i, j,_____________;
char str[]={"1234567"};
for(i=0,j=strlen(str); i { k=str[i]; str[i]=str[j]; str[j]=k; }
printf("%s\n", str);
}
【解】顛倒一個(gè)字符串中的字符,就是首尾對(duì)應(yīng)的元素兩兩交換。簡(jiǎn)單地可用兩個(gè)游標(biāo)變量i和j, j是前端元素的下標(biāo), j是后端元素的下標(biāo), 交換以這兩個(gè)變量值為下標(biāo)的元素str[i]和 str[j]。開始時(shí),i的值為 0,j的值為字符率未元素的不標(biāo)(字符串長(zhǎng)度減1)。每次交換后,i增 1,j減1。繼續(xù)交換的條件是str[i]還位于str[j]的前面,
1.若有下列說(shuō)明,則數(shù)值為4的表達(dá)式是( )
int a[12]={ l,2,3,4,5,6,7,8,9,10,11,12 };
char c=’a’,d, g;
①a[g-c] ②a[4]
③a[’d’-’c’] ④a[’d’-c]
【解】數(shù)組元素的下標(biāo)自0開始順序編號(hào),值為4的元素是a[3]。所以只有下標(biāo)表達(dá)式的值為3的才是正確的。下標(biāo)表達(dá)式g-C中的的變量g和c的值是還未被設(shè)定的,其值不確定。a[4]的值為5,下標(biāo)為4是不對(duì)的?!痙’-’c’的值為1,a[l]的值是2,所以也是不對(duì)的。變量c的值為’a’ ,’d’-c=3,所以正確解答是④。
2.設(shè)有定義:"char s[12]={"string"};" 則printf("%d\n",strlen(s));的輸出是( )
① 6 ② 7
③11 ④ 12
【解】在C語(yǔ)言中,字符串是指在有效字符之后有字符率結(jié)束標(biāo)記符的字符列,并約定字符串的長(zhǎng)度是指字符率中有效字符個(gè)數(shù),不包括字符串的結(jié)束標(biāo)記符。存放于字符數(shù)組s中的字符串是“string”,該字符串的長(zhǎng)度為6,所以輸出該字符串的長(zhǎng)度應(yīng)是6。正確的解答是①。
3.下列語(yǔ)句中,正確的是( )
① char a[3][]={’abc",’1’}; ② char a[][3]={’abc’,’l’};
③char a[3][]={’a’,"1"}; ④char a[][3]={"a","1"};
【解】如定義數(shù)組時(shí)有初始化,其維的長(zhǎng)度可以省缺,由系統(tǒng)根據(jù)初始化時(shí)的初值個(gè)數(shù)確定,而其它維的長(zhǎng)度是不可以缺省的。對(duì)二維字符數(shù)組的初始化,可以按行用字符串對(duì)其初始化,也可以按二維數(shù)組元素的存儲(chǔ)順序逐一用字符對(duì)其元素初始化。在供選擇解答①和③中,有不是維的長(zhǎng)度被缺省,所以是錯(cuò)誤的。在供選擇解答①和②中,還將字符串常量寫作’abc’,這也是錯(cuò)誤的。只有④,用字符率按行給二維字符數(shù)組初始化,這才是正確的。正確構(gòu)解答是④。
4.合法的數(shù)組定義是( )
①int a[]={"string"} ②int a[5]={0,1,2,3,4,5};
③char a={"string"} ④char a[]={0,1,2,3,4,5};
【解】①錯(cuò)誤的原因是整數(shù)數(shù)組不可以用字符串對(duì)其初始化。②錯(cuò)誤的原因是,數(shù)組初始化時(shí),初始化指定的值的個(gè)數(shù)多于數(shù)組的元素個(gè)數(shù)。③錯(cuò)誤的原因是,能用字符串初始化的只;有字符指針變量,或字符數(shù)組。字符率不能對(duì)其它類型的變量初始化,包括字符變量。④是正確的,因?yàn)樽址麛?shù)組可以用小整數(shù)(作為字符的ASCII代碼值)對(duì)其元素初始化。
5.語(yǔ)句"printf("%d\n"strlen("ats\nol2\1\\"));"的輸出結(jié)果是( )
①11 ②10 ③ 9 ④ 8
【解】字符串中的字符可以是一般的普通字符,也可以是由反斜杠字符開頭的轉(zhuǎn)義字符。在字符串"abs\no12\11\\" 中,有三個(gè)轉(zhuǎn)義字符,它們是\n、\1、\\,所以該字符串的有效字符個(gè)數(shù)是9。所以正確的回答是③。
6.函數(shù)調(diào)用“strcat(strcpy(strl,str2),str3)”的功能是( )
①將字符串strl復(fù)制到字符串str2中后再連接到字符串str3之后
②將字符串strl連接到字符串str2中后再?gòu)?fù)制到字符率str3之后
③將字符串str2復(fù)制到字符串strl中后再將字符串str3連接到字符串strl之后
④將字符串str2連接到字符率strl之后再將字符串strl復(fù)制到字符串str3中
【解】函數(shù)調(diào)用strcat(s1,s2)是將s2字符串復(fù)制連接到s1字符串之后,使s1字符串變得更長(zhǎng)。函數(shù)調(diào)用strcpy(s1,s2)是將s2字符串復(fù)制到s1,使s1字符串的內(nèi)容與s2字符串的內(nèi)容相同。函數(shù)調(diào)用strcat(strcpy(strl,str2) ,str3) 是先執(zhí)行strcpy(strl,str2),然后再執(zhí)行strcat(strl,str3),所以其功能是將字符串str2復(fù)制到字符串strl中,然后再將字符串str3復(fù)制連接到字符串strl之后。正確的選擇是③。
7.設(shè)有如下定義,則正確的敘述為( )
char x[]={"abcdefg"};
char y[]={’a’,’b’,’c’,’d’,’e’,’f’,’g’};
①數(shù)組x和數(shù)組y等價(jià)②數(shù)組x和數(shù)組y長(zhǎng)度相同
③數(shù)組X的長(zhǎng)度大于數(shù)組y的長(zhǎng)度④數(shù)組X的長(zhǎng)度小于數(shù)組y的長(zhǎng)度
【解】不指定數(shù)組長(zhǎng)度的字符數(shù)組定義,其所需要的字節(jié)數(shù)可由初始化中給出的值的個(gè)數(shù)確定。字符數(shù)組可以用字符串初始化,也可用字符逐個(gè)給字符數(shù)組的元素初始化。但用字符初始化時(shí),盡管給出了字符串中的全部字符,還是不會(huì)自動(dòng)有字符率結(jié)束字符。但字符串初始化自動(dòng)會(huì)含有字符串的結(jié)束標(biāo)記符,字符串初始化所需要的字節(jié)個(gè)數(shù)會(huì)比用同樣多的字符初始化多1個(gè)字節(jié)。所以只有③才是正確的。
4.2 填充題
1.根據(jù)變量定義“static int b[5], a[][3]={1,2,3,4,5,6};”,b[4]=_____,a[1][2]
【解】系統(tǒng)規(guī)定,靜態(tài)變量定義時(shí),若末初始化,系統(tǒng)自動(dòng)給定二進(jìn)制代碼全0的值。所以態(tài)數(shù)組b的元素全為0,當(dāng)然包括b[4]也為幾靜態(tài)數(shù)組a是二維數(shù)組,每行有三個(gè)元素,在初始化中結(jié)出了六個(gè)初值,所以數(shù)組a有2行。由于數(shù)組的元素按行順序存儲(chǔ),并按行順序初始化。前三個(gè)值是第一行,后三個(gè)值是第二行。a[1][2]是第二行的第三列元素,也是 a的最后一個(gè)元素,所以其值是6。
2.設(shè)有定義語(yǔ)句“static int a[3][4]={{1},{2},{3}};”則a[l][l]值為_,a[2][1]的值為_。
【解】給二維數(shù)組初始化時(shí),可按行給出初值,并且每行可以只給前面部分的元素給出初值。系統(tǒng)規(guī)定,對(duì)哪些未給出初值的部分元素,系統(tǒng)自動(dòng)置二進(jìn)制代碼全0的值。由于定義語(yǔ)句只給a[0][0]給定初值l、a[l][0]給定初值2、a[2][0]給定初值3。這樣,其它元素都為0值。所以,a[1][1]= 0,a[2][1]= 0。
3.若在程序中用到“putchar( )”函數(shù)時(shí),應(yīng)在程序開頭寫上包含命令__(dá)___,若在程序中用到“strlen( )”函數(shù)時(shí),應(yīng)在程序開頭寫上包含命令______。
【解】putchar()是系統(tǒng)提供的頭文件stdio.h中定義的宏,所以程序要使用它,必須寫上包含命令:#include。函數(shù)strlen()是系統(tǒng)提供的字符串處理函數(shù)之一,字符串處理函數(shù)的函數(shù)原型說(shuō)明和它們用到的有關(guān)常量、數(shù)據(jù)結(jié)構(gòu)等,在系統(tǒng)提供的頭文件tring.h中定義,所以使用該函數(shù)的程序應(yīng)在程序開頭寫上包含命令并include。
4.下面程序的功能是輸出數(shù)組s中元素的下標(biāo),請(qǐng)?zhí)羁铡?BR> main()
{int k, p ;
int s[]={1,-9,7,2,-10,3};
for(p=0, k=p;p<6; p++)
if(s[p]>s[k])____________
printf("%d\n" ,k);
}
【解】為要尋找數(shù)組中的元素的下標(biāo),需先預(yù)設(shè)1個(gè)臨時(shí)元素的下標(biāo),并順序逐一考察數(shù)組的元素,當(dāng)發(fā)現(xiàn)當(dāng)前元素比臨時(shí)元素更大時(shí),就用當(dāng)前元素的下標(biāo)更新臨時(shí)元素下標(biāo)。直至考察了數(shù)組的全部元素后,這臨時(shí)元素下標(biāo)就是數(shù)組的元素下標(biāo)。通常預(yù)設(shè)的元素下標(biāo)是數(shù)組的首元素下標(biāo),考察是從首元素開始順序向后繼元素考察。程序中,存儲(chǔ)臨時(shí)元素下標(biāo)的變量是k,變量p控制順序考察的循環(huán)控制變量。當(dāng)發(fā)現(xiàn)當(dāng)前元素s[p]比臨時(shí)元素s[k]更大時(shí),應(yīng)該用p更新k。所以在空框處應(yīng)填入代碼“k=p;”。
5.下面程序的功能是將一個(gè)字符串str的內(nèi)容顛倒過(guò)來(lái),請(qǐng)?zhí)羁铡?BR> # include
main()
{int i, j,_____________;
char str[]={"1234567"};
for(i=0,j=strlen(str); i { k=str[i]; str[i]=str[j]; str[j]=k; }
printf("%s\n", str);
}
【解】顛倒一個(gè)字符串中的字符,就是首尾對(duì)應(yīng)的元素兩兩交換。簡(jiǎn)單地可用兩個(gè)游標(biāo)變量i和j, j是前端元素的下標(biāo), j是后端元素的下標(biāo), 交換以這兩個(gè)變量值為下標(biāo)的元素str[i]和 str[j]。開始時(shí),i的值為 0,j的值為字符率未元素的不標(biāo)(字符串長(zhǎng)度減1)。每次交換后,i增 1,j減1。繼續(xù)交換的條件是str[i]還位于str[j]的前面,