(1)下列程序執(zhí)行后輸出的結(jié)果是___________。
int d=l:
fun(int p)
{ int d。5;
d+=p++;
printf("%d,",d);
}
main()
{ int a=3;
fun(a);
d+=a++:
printf("%d\n",d);
}
A)8,12
B)9,13
C)8,4
D)9,5
答案:C
評析:本題執(zhí)行過程如下:首先調(diào)用fun函數(shù),使得實參a的值3傳遞給形參p,得到局部變量d=8,打印出局部變量d的值8;返回主函數(shù)執(zhí)行"d+=a++",此處的d為全局變量,所以d=1+3=4(由于本題是值傳遞,所以在函數(shù)fun中對p值的改變并不能引起a的改變),故本題的輸出是8,4。
(2)已知下面的程序段,正確的判斷是_________。
#define A 3
#define B(A)((_A+1)'a)
int a=3:
……
X=3*(A+B(7));
A)程序錯誤,不允許嵌套定義
B)X=93
C)X=8l
D)程序錯誤,宏定義不允許有參數(shù)
答案:C
評析:本題的宏定義是合法的,宏定義展開為3*(3+((A+1)*a))=3*(3+((7+1)*3))=81。
(3)定義int*swap()指的是_______。
A)一個返回整型值的函數(shù)swap()
B)一個返回指向整型值指針的函數(shù)swap()
C)一個指向函數(shù)swap()的指針,函數(shù)返回一個整型值
D)以上說法均錯
答案:B
評析:一個函數(shù)可以帶回一個整型值、字符值、實型值等,但也可以帶回指針型數(shù)據(jù),即地址。本題的定義中,包括括號和?號,由于f)優(yōu)先級高于t。故它是一個返回整型指針的函數(shù)。
(4)以下程序段的輸出結(jié)果是__________。
main()
{ char s1[10],s2[10],s3[10];
scanf("%s",s1);gets(s2);gets(s3);
puts(s 1);puts(s2);puts(s3);
}
輸入數(shù)據(jù)如下: (此處代表回車符)
aaa
bbb
A)aaa
B)aaa
C)aaa\0bbb\0
D)aaabbb
bbb
bbb
答案:B
評析:scanf是標(biāo)準(zhǔn)輸入函數(shù),在輸入字符串a(chǎn)aa時,實際的內(nèi)容為"aaa","\0"是由系統(tǒng)自動加入的;gets的功能是從終端讀入一行字符,即一直讀到換行符為止,并由系統(tǒng)自動以"\0"代替換行符。
(5)下述函數(shù)功能是________。
Int fun(char*x)
{ char*y=x;
while(*y++);
return y-x-l;
}
A)求字符串的長度
B)求字符串存放的位置
C)比較兩個字符串的大小
D)將字符串x連接到字符串y后面
答案:A
評析:在函數(shù)體內(nèi)定義一字符型指針并指向形參,然后遍歷其中各字符直到NULL,最后返回字符串首尾地址的差值,即字符串的長度。
(6)以下程序的輸出結(jié)果是_________。
main()
{ char str[12]={'s','t','r','i','n',' g'};
printf("%d\n",strlen(str));
}
A)6
B)7
C)ll
D)12
答案:A
評析:在c語言中,字符串的長度是其首字符到NULL(不含)字符的總字符個數(shù)。本題定義字符數(shù)組str的同時,對第7個元素,由系統(tǒng)自動添加上"\0",故字符串的長度為6。
(7)請讀程序段:
char str[]="ABCD",*p=str;
printf("%d\n",*(p+4));
程序段的輸出結(jié)果是_________。
A)68
B)0
C)字符'D'的地址
D)不確定的值
答案:B
評析:在對字符數(shù)組賦字符串值時,系統(tǒng)會自動在字符串的末尾加上一個字符串結(jié)束標(biāo)志"\0",故指向字符數(shù)組的指針p的+(p+4)的值為"\0"。由于"\0"的編碼值就是0,所以本題輸出為0。
(8)若有定義:int a[4][10];,則以下選項中對數(shù)組元素a[i][j]引用錯誤的是________。
(0<=i<4,0<=j<10)
A)*(&a[O][O]+10*i+j)
B)*(a+i)+j
C)*(*(a+i)+j)
D)*(a[i]+j)
答案:B
評析:本題中選項B是錯誤的引用,*(a+i)+j只代表了a[i][i]的地址。
(9)設(shè)有以下語句:
char strl[]="string",str2[8],。str3,。str4="strin∥;
則__________不是對庫函數(shù)的正確調(diào)用。
A)strcpy(strl,"HELLOl");
B)strcpy(str2,"HELL02");
C)strcpy(str3,"HELL03");
D)strcpy(str4,"HELL04");
答案:C
評析:c語言中:sgcpy(stl,st2);,其兩個參數(shù)均為字符指針或字符數(shù)組,選項c中的目的串指針str3沒有指向具體有效的存儲單元,故是錯誤的調(diào)用。
(10)請讀程序:
#include
#include
main()
{ char*sl="AbCdEf",*s2="aB";
s1++;s2++;
printf("%d\n",strcmp(s 1,s2));
}
上面程序的輸出結(jié)果是___________。
A)正數(shù)
B)負(fù)數(shù)
C)零
D)不確定的值
答案:A
評析:函數(shù)strcmp的功能是比較字符串s1和s2,如果sl>s2,則返回個正數(shù);如果sls2,所以函數(shù)的值為正數(shù)。
(11)下面程序的輸出是_________。
char s[]="ABcD";
main()
{ char*p;
for(p=s;p printf("%s\n",p);
}
A)ABCD
B)A
C)D
D)ABCD
BCD B C ABC
CDC B AB
D D A A
答案:A
評析:在第一次執(zhí)行for循環(huán)時,字符數(shù)組的首地址賦給了指針變量p,使得指針變量p指向了s的首地址,輸出p所指向的字符串;第二次執(zhí)行for循環(huán)時,p值增加1,p指向了s的第二個元素輸出BCD;第三次輸出CD;第四次輸出D;直到p指向字符串的結(jié)束字符"\0",for循環(huán)終止執(zhí)行。
int d=l:
fun(int p)
{ int d。5;
d+=p++;
printf("%d,",d);
}
main()
{ int a=3;
fun(a);
d+=a++:
printf("%d\n",d);
}
A)8,12
B)9,13
C)8,4
D)9,5
答案:C
評析:本題執(zhí)行過程如下:首先調(diào)用fun函數(shù),使得實參a的值3傳遞給形參p,得到局部變量d=8,打印出局部變量d的值8;返回主函數(shù)執(zhí)行"d+=a++",此處的d為全局變量,所以d=1+3=4(由于本題是值傳遞,所以在函數(shù)fun中對p值的改變并不能引起a的改變),故本題的輸出是8,4。
(2)已知下面的程序段,正確的判斷是_________。
#define A 3
#define B(A)((_A+1)'a)
int a=3:
……
X=3*(A+B(7));
A)程序錯誤,不允許嵌套定義
B)X=93
C)X=8l
D)程序錯誤,宏定義不允許有參數(shù)
答案:C
評析:本題的宏定義是合法的,宏定義展開為3*(3+((A+1)*a))=3*(3+((7+1)*3))=81。
(3)定義int*swap()指的是_______。
A)一個返回整型值的函數(shù)swap()
B)一個返回指向整型值指針的函數(shù)swap()
C)一個指向函數(shù)swap()的指針,函數(shù)返回一個整型值
D)以上說法均錯
答案:B
評析:一個函數(shù)可以帶回一個整型值、字符值、實型值等,但也可以帶回指針型數(shù)據(jù),即地址。本題的定義中,包括括號和?號,由于f)優(yōu)先級高于t。故它是一個返回整型指針的函數(shù)。
(4)以下程序段的輸出結(jié)果是__________。
main()
{ char s1[10],s2[10],s3[10];
scanf("%s",s1);gets(s2);gets(s3);
puts(s 1);puts(s2);puts(s3);
}
輸入數(shù)據(jù)如下: (此處代表回車符)
aaa
bbb
A)aaa
B)aaa
C)aaa\0bbb\0
D)aaabbb
bbb
bbb
答案:B
評析:scanf是標(biāo)準(zhǔn)輸入函數(shù),在輸入字符串a(chǎn)aa時,實際的內(nèi)容為"aaa","\0"是由系統(tǒng)自動加入的;gets的功能是從終端讀入一行字符,即一直讀到換行符為止,并由系統(tǒng)自動以"\0"代替換行符。
(5)下述函數(shù)功能是________。
Int fun(char*x)
{ char*y=x;
while(*y++);
return y-x-l;
}
A)求字符串的長度
B)求字符串存放的位置
C)比較兩個字符串的大小
D)將字符串x連接到字符串y后面
答案:A
評析:在函數(shù)體內(nèi)定義一字符型指針并指向形參,然后遍歷其中各字符直到NULL,最后返回字符串首尾地址的差值,即字符串的長度。
(6)以下程序的輸出結(jié)果是_________。
main()
{ char str[12]={'s','t','r','i','n',' g'};
printf("%d\n",strlen(str));
}
A)6
B)7
C)ll
D)12
答案:A
評析:在c語言中,字符串的長度是其首字符到NULL(不含)字符的總字符個數(shù)。本題定義字符數(shù)組str的同時,對第7個元素,由系統(tǒng)自動添加上"\0",故字符串的長度為6。
(7)請讀程序段:
char str[]="ABCD",*p=str;
printf("%d\n",*(p+4));
程序段的輸出結(jié)果是_________。
A)68
B)0
C)字符'D'的地址
D)不確定的值
答案:B
評析:在對字符數(shù)組賦字符串值時,系統(tǒng)會自動在字符串的末尾加上一個字符串結(jié)束標(biāo)志"\0",故指向字符數(shù)組的指針p的+(p+4)的值為"\0"。由于"\0"的編碼值就是0,所以本題輸出為0。
(8)若有定義:int a[4][10];,則以下選項中對數(shù)組元素a[i][j]引用錯誤的是________。
(0<=i<4,0<=j<10)
A)*(&a[O][O]+10*i+j)
B)*(a+i)+j
C)*(*(a+i)+j)
D)*(a[i]+j)
答案:B
評析:本題中選項B是錯誤的引用,*(a+i)+j只代表了a[i][i]的地址。
(9)設(shè)有以下語句:
char strl[]="string",str2[8],。str3,。str4="strin∥;
則__________不是對庫函數(shù)的正確調(diào)用。
A)strcpy(strl,"HELLOl");
B)strcpy(str2,"HELL02");
C)strcpy(str3,"HELL03");
D)strcpy(str4,"HELL04");
答案:C
評析:c語言中:sgcpy(stl,st2);,其兩個參數(shù)均為字符指針或字符數(shù)組,選項c中的目的串指針str3沒有指向具體有效的存儲單元,故是錯誤的調(diào)用。
(10)請讀程序:
#include
#include
main()
{ char*sl="AbCdEf",*s2="aB";
s1++;s2++;
printf("%d\n",strcmp(s 1,s2));
}
上面程序的輸出結(jié)果是___________。
A)正數(shù)
B)負(fù)數(shù)
C)零
D)不確定的值
答案:A
評析:函數(shù)strcmp的功能是比較字符串s1和s2,如果sl>s2,則返回個正數(shù);如果sls2,所以函數(shù)的值為正數(shù)。
(11)下面程序的輸出是_________。
char s[]="ABcD";
main()
{ char*p;
for(p=s;p printf("%s\n",p);
}
A)ABCD
B)A
C)D
D)ABCD
BCD B C ABC
CDC B AB
D D A A
答案:A
評析:在第一次執(zhí)行for循環(huán)時,字符數(shù)組的首地址賦給了指針變量p,使得指針變量p指向了s的首地址,輸出p所指向的字符串;第二次執(zhí)行for循環(huán)時,p值增加1,p指向了s的第二個元素輸出BCD;第三次輸出CD;第四次輸出D;直到p指向字符串的結(jié)束字符"\0",for循環(huán)終止執(zhí)行。