C语言程序设计习题参考答案!(第二版 杜友福) 联系客服

发布时间 : 星期日 文章C语言程序设计习题参考答案!(第二版 杜友福)更新完毕开始阅读34e34c727fd5360cba1adb43

{int m;

m=a>b?a:b; m=m>c?m:c; return m; }

void main() { int m,n,k;

printf(\ scanf(\

printf(\ printf(\}

3. 输入一个整数m,判断它能否被3整除。要求利用带参的宏实现。

#include

#define DIVIDEDBY3(m) (m)%3==0 void main() { int m;

printf(\ scanf(\ if(DIVIDEDBY3(m)) printf(\ else printf(\}

习题十 指针

一.填空题

1. 指针变量是把内存中另一个数据的 首地址 作为其值的变量。 2. 能够直接赋值给指针变量的整数是 0 。 3. 如果程序中已有定义:int k;

1) 定义一个指向变量k的指针变量p的语句是 int *p=&k; 。 2) 通过指针变量,将数值6赋值给k的语句是 *p=6; 。

3) 定义一个可以指向指针变量p的变量pp的语句是 int **pp; 。 4) 通过赋值语句将pp指向指针变量p的语句是 pp=&p; 。

5) 通过指向指针的变量pp,将k的值增加一倍的语句是 (**pp)*=2; 。 4. 当定义某函数时,有一个形参被说明成int *类型,那么可以与之结合的实参类型可以是 整型数组名 、

指向整型数据的指针值 等。 5. 以下程序的功能是:将无符号八进制数字构成的字符串转换为十进制整数。例如,输入的字符串为:556,则输出十进制整数366。请填空。 #include main( )

{ char *p,s[6]; int n; p=s; gets(p); n=*p-'0';

while( *(p++) != '\\0') n=n*8+*p-'0'; printf(\ }

29

二.选择题

1—10: BCADC AAABB 11-15: CBCDC

16. 以下count函数的功能是统计substr在母串str中出现的次数。 int count(char *str,char *substr) { int i,j,k,num=0;

for(i=0; ① ;i++)

{for( ② ,k=0;substr[k]==str[j];k++,j++) if(substr[ ③ ]==?\\0?) {num++;break;}

}

return num; }

① A) str[i]==substr[i] B) str[i]!=‘\\0’ C) str[i]==?\\0? D) str[i]>substr[i]

② A) j=i+1 B) j=i C) j=i+10 D) j=1 ③ A) k B) k++ C) k+1 D) ++k

17. 以下Delblank函数的功能是删除字符串s中的所有空格(包括Tab、回车符和换行符)。

void Delblank(char *s) { int i,t;

char c[80];

for(i=0,t=0; ① ;i++)

if(!isspace( ② ))c[t++]=s[i]; c[t]=?\\0?; strcpy(s,c); }

① A) s[i] B) !s[i] C) s[i]=?\\0? D) s[i]==?\\0? ② A) s+i B) *c[i] C) *(s+i)=?\\0? D) *(s+i)

18. 以下conj函数的功能是将两个字符串s和t连接起来。

char *conj(char *s,char *t) { char *p=s;

while(*s) ① ; while(*t)

{*s= ② ;s++;t++;} *s=?\\0?;

③ ; }

① A) s-- B) s++ C) s D) *s ② A) *t B) t C) t-- D) *t++ ③ A) return s B) return t C) return p D) return p-t

19. 下列程序的输出结果是 。

#include main()

{int **k,*a,b=100;a=&b; k=&a;printf(“%d\\n”,**k);}

A) 运行出错 B) 100 C) a的地址 D) b的地址 20. 下列程序的输出结果是 。 #include

30

fun(int *a,int *b)

{int *w;*a=*a+*a;*w=*a; *a=*b; *b=*w;} main()

{int x=9,y=5,*px=&x,*py=&y;fun(px,py);printf(“%d, %d\\n”,x,y);} A)出错 B) 18, 5 C) 5, 9 D) 5, 18

21. 若定义了以下函数: void f(……) {……

p=(double *)malloc(10*sizeof(double)); …… }

p是该函数的形参,要求通过p把动态分配存储单元的地址传回主调函数,则形参p的正确定义应当是 。

A) double *p B) float **p C) double **p D) float *p 三.编程题

1. 编写函数,对传递进来的两个整型量计算它们的和与积之后,通过参数返回。

#include

void compute(int m, int n, int *sum, int *p); void compute(int m, int n, int *sum, int *p) { *sum=m+n; *p=m*n; }

void main()

{ int x,y,sum,product;

printf(\ scanf(\

compute(x,y,&sum,&product);

printf(\}

2. 编写一个程序,将用户输入的字符串中的所有数字提取出来。

#include #include void main()

{ char string[81],digit[81]; char *ps; int i=0;

printf(\ gets(string); ps=string;

while(*ps!='\\0')

{if(*ps>='0' && *ps<='9') { digit[i]=*ps; i++; } ps++; }

digit[i]='\\0';

printf(\ digit=%s\\n\

31

}

3. 编写函数实现,计算字符串的串长。

#include #include

int StringLength(char *s); int StringLength(char *s) { int k;

for(k=0;*s++;k++); return k; }

void main()

{ char string[81];

printf(\ gets(string);

printf(\}

4. 编写函数实现,将一个字符串中的字母全部转换为大写。

#include #include char *Upper(char *s); char *Upper(char *s) { char *ps; ps=s; while(*ps)

{if(*ps>='a' && *ps<='z') *ps=*ps-32; ps++; }

return s; }

void main()

{ char string[81];

printf(\ gets(string);

printf(\

printf(\}

5. 编写函数实现,计算一个字符在一个字符串中出现的次数。

#include #include

int Occur(char *s, char c); int Occur(char *s, char c) { int k=0; while(*s) { if(*s==c) k++; s++; }

return k; }

void main()

32