C语言习题集合(指针) 下载本文

第七章 指 针 ·5·

D. strcmp4( char *s, char *t)

{ for( ;*s==*t;s++,t++)

if (!*s) return 0; return (*t-*s);

}

26.若有以下定义和语句:

int s[4][5], (*ps)[5];

ps=s;

则对s数组元素的正确引用形式是(C)。

A. ps+1 B. *(ps+3) C. ps[0][2] D. *(ps+1)+3 27.不合法的main函数命令行参数表示形式是:(B)。

A. main( int a, char *c[]) B. main(int argc, char *argv)

C. main( int arc, char **arv) D. main( int argv, char*argc[])

28.若有说明语句:char s[]=\it is a example.\, *t=\it is a example.\;则以下不正确的叙述

(D)。

A. s表示的是第一个字符i的地址,s+1表示的是第二个字符t的地址 B. t指向另外的字符串时,字符串的长度不受限制 C. t变量中存放的地址值可以改变 D. s中只能存放16个字符

29.若已定义char s[10];则在下面表达式中不表示s[1]地址的是(B)。

A. s+1 B. s++ C. &s[0]+1 D. &s[1] 30.下面程序段的运行结果是(A)。(注:└┘代表空格) #include \stdio.h\ main() { char s[6];

s=\abcd\;

printf(\\\\%s\\\\\n\, s);

}

A. \abcd\ B. \abcd└┘\ C. \\\abcd\\\ D. 编译出错 31.执行以下程序后,a的值为【C】, b的值为【C】。

#include

main()

{

int a, b, k=4, m=6, *p=&k, *q=&m; a=p==&m;

b=(-*p)/(*q)+7;

printf(\a=%d\\n\, a); printf(\b=%d\\n\, b);

}

【1】 A. -1 B. 1 C. 0 D. 4

【2】 A. 5 B. 6 C. 7 D. 10

32.下面程序的功能是将字符串s的所有字符传送到字符串t中,要求每传递三个字符后再

存放一个空格,例如字符串s为\abcdefg\,则字符串t为\abc def g\,请选择填空。 #include \stdio.h\

第七章 指 针 ·6·

#include \string.h\ main()

{

int j, k=0;

char s[60], t[100], *p;

p=s; gets(p);

while(*p)

{ for (j=1; j<=3 && *p; C) t[k]=*p;

if (A) { t[k]=' '; k++;} }

t[k]='\\0'; puts(t);

} 【1】 A. p++ B. p++,k++ C. p++, k++, j++ D. k++, j++

【2】 A. j==4 B. *p=='\\0' C. !*p D. j!=4 33.下面程序的功能是将八进制正整数字符串转换为十进制整数。请选择填空。

#include \stdio.h\ #include \string.h\ main() {

char *t, s[8]; int n; t=s;

gets(t); n=C;

while (【*t】!= '\\0') n=n*8+*t-'0';t++; printf(\%d\\n\, n);

}

【1】A. 0 B. *t C. *t-'0' D. *t+'0' 【2】A. *t B. *t++ C. *(++t) D. t

34.下面程序的功能是在字符串s中找出最大的字符并放在第一个位置上,并将该字符前的

原字符往后顺序移动,如:boy&girl变成ybo&girl。请选择填空。 #include \stdio.h\ #include \string.h\ main() {

char s[80], *t, max, *w; t=s; gets(t); max=*(t++); while (*t!='\\0') {

if (max<*t)

第七章 指 针 ·7·

{ max=*t; w=t; }

t++; } t=w;

while (【A】) {

*t=*(t-1);

【C】;} *t=max; puts(t);

}

【1】A. t>s B. t>=s C. *t>s[0] D. *t>=s[0] 【2】A. t++ B. s-- C. t-- D. w-- 35.以下程序的功能是删除字符串s中的所有空格(包括TAB符、回车符),请填空。 #include \stdio.h\ #include \string.h\ #include \ctype.h\ main()

{

char s[80]; gets(s); delspace(s); puts(s); }

delspace(char *t)

{

int m, n; char c[80];

for(m=0, n=0; 【A】; m++)

if (!isspace(【C】)) /*C语言提供的库函数,用以判断字符是否为空格*/

{

c[n]=t[m];

n++; }

c[n]='\\0'; strcpy(t, c);

}

【1】A. t[m] B. !t[m] C. t[m]='\\0' D. t[m]=='\\0'

【2】A. t+m B. *c[m] C. *(t+m) D. *(c+m) 36.下面程序的功能是统计字串sub在母串s中出现的次数。请选择填空。 #include \stdio.h\ #include \string.h\ main()

{

第七章 指 针 ·8·

char s[80], sub[80];

int n; gets(s); gets(sub);

printf(\%d\\n\, count(s,sub)); }

int count( char *p, char *q)

{

int m, n, k, num=0; for (m=0; p[m]; m++)

for (【B】, k=0; q[k]==p[n]; k++, n++) if(q[【C】]=='\\0') { num++; break;}

return (num);

}

【1】A. n=m+1 B. n=m C. n=0 D.【2】A. k B. k++ C. k+1 D.37.下列程序的输出结果是(C)。

#include \stdio.h\

main() {

int a[]={1,2,3,4,5,6,7,8,9,0}, *p; p=a;

printf(\%d\\n\, *p+9);

}

A. 0 B. 1 C. 10 D.38.以下程序的输出结果是(C)。

#include \stdio.h\

char cchar(char ch) {

if (ch>='A' && ch<='Z') ch=ch-'A'+'a'; return ch;

}

main() {

char s[]=\ABC+abc=defDEF\, *p=s; while(*p) {

*p=cchar(*p); p++; }

printf(\%s\\n\,s);

}

A. abc+ABC=DEFdef B. abcaABCDEFdef

n=1 ++k 9