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

第七章 指 针 ·13·

3. 以下程序的运行结果是(2)2 2 6 (1)1 2 6。

#include \stdio.h\ #include \string.h\

int *p; main() {

int x=1, y=2, z=3; p=&y;

fun(x+z, &y);

printf(\(1) %d %d %d\\n\, x, y, *p); }

fun( int x, int *y) {

int z=4; *p=*y+z;

x=*p-z;

printf(\(2) %d %d %d\\n\, x, *y, *p);

} 4. 下面程序段是把从终端读入的一行字符作为字符串放在字符数组中,然后输出。请填空。 #include \stdio.h\ #include \string.h\ main() {

int m;

char s[80], *t;

for (m=0; m<79; m++) {

s[m]=getchar();

if (s[m]=='\\n') break; }

s[m]= 【?\\0?】; t=【s】; while (*t)

putchar(*t++);

}

????5. 下面程序段的运行结果是EXAMLE。 char s[80], *t=\EXAMPLE\; t=strcpy(s, t); s[0]='e';

puts(t);

6. 函数sstrcmp()的功能是对两个字符串进行比较。当s所指字符串相等时,返回值为0;

当s所指字符串大于t所指字符串时,返回值大于0;当s所指字符串小于t所指字符串时,返回值小于0(功能等同于库函数strcmp())。请填空。

第七章 指 针 ·14·

#include \stdio.h\

int sstrcmp( char *s, char *t) {

while (*s && *t && *s==【*t】) {

s++;

t++; }

return 【*s-*t】;

}

7. 下面程序的运行结果是3 5。

void swap(int *a, int *b) {

int *t; t=a; a=b; b=t; }

main() {

int x=3, y=5, *p=&x, *q=&y; swap(p,q);

printf(\%d %d\\n\, *p, *q); }

????8. 以下程序的输出结果是_ e。

#include \stdio.h\

main() {

char *p=\abcdefgh\, *r; long *q; q=(long *) p; q++;

r=(char *) q;

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

}

9. 下面程序的功能是将字符串中的数字字符删除后输出。请填空。 #include \stdio.h\ #include \malloc.h\ void delnum( char *t)

{

int m, n;

for (m=0,n=0; t[m]!='\\0';m++)

if (t[m]<'0' 【||】t[m]>'9')

{ t[n]=t[m]; n++;}

第七章 指 针 ·15·

【t[n]=?\\0?】;

}

main()

{

char *s;

s=(char *) malloc (sizeof(char)); /*给s分配一个地址*/

printf(\\\n input the original string:\);

gets(s); delnum(s); puts(【s】);

}

10.下面程序的功能是比较两个字符串是否相等,若相等则返回1,否则返回0。请填空。 #include \stdio.h\ #include \string.h\

fun (char *s, char *t) {

int m=0;

while (*(s+m)==*(t+m) && 【*s!=?0?&&*t!=?0?】) m++; return (【*(s+m)==*(t+m)】);

}

11.下面程序用来计算一个英文句子中最长单词的长度(字母个数)max。假设该英文句子中只含有字母和空格,在空格之间连续的字母串称为单词,句子以'.'为结束。请填空。 #include \stdio.h\ main()

{

static char s[]={\ you make me happy when days are grey.\}, *t; int max=0, length=0; t=s;

while (*t!='.') {

while (((*t<='Z')&&(*t>='A'))||((*t<='z')&&(*t>='a')))

{

length++;

???? 【 t++】; }

if (max

t++; }

printf(\max=%d\, max);

} 12.下面程序是判断输入的字符串是否是“回文”,(顺读和倒读都一样的字符串称为“回文”,

如level)。请填空。

#include \stdio.h\

第七章 指 针 ·16·

#include \string.h\ main() {

char s[80], *t1, *t2; int m; gets(s); m=strlen(s); t1=s;

t2=【s+m-1】; while(t1

{ if (*t1!=*t2) break; else { t1++;

【t2--】;}

}

if (t1

}

13.当运行以下程序时,从键盘输入:apple↙

tample↙

???? 则下面程序的运行结果是__aptample______。

#include \stdio.h\

main() {

char s[80], *t;

t=s; gets(t);

while (*(++t)!='\\0') if (*t=='a') break; else { t++; gets(t); }

puts(t);

} 14.当运行以下程序时,从键盘输入6↙,则下面程序的运行结果是__????___97671___。

#include \stdio.h\

#include \string.h\ main()

{

char s[]=\97531\, c; c=getchar(); f(s,c); puts(s); }

f(char *t, char ch) {

while (*(t++)!='\\0');