c语言程序设计第五版习题答案解析 下载本文

完美WORD格式

swap2(&x,&y) ;

printf(\}

【提示】注意指针变量做函数参数时,改变形参的值就等同与改变了实参的值。 【解答】3,5 3,5 5,3

6.下列程序运行的结果为 。 long fib(int g) {

switch(g) {

Case 0: return 0; case 1:

case 2: return 1; }

return(fib(g-1)+fib(g-2)); }

main() {

long k; k=fib(7);

printf(\,k); }

【提示】注意函数递归调用的条件。 【解答】k=13 二.编程题

1.已知圆的半径为R,求它的面积。

#include /* 包含文件 */ #include /* 包含数学库函数 */ #define PI 3.14159 /* 宏定义 */ main( ) /* 主函数 */ {

float area(float); /* 函数area的原型 ,即函数说明 */ float r,s; /* 主函数中的局部变量定义 */ printf(“ 请输入半径: \\n”); scanf(“%f”,&r);

s=area(r); /* 调用area函数 */ printf(“圆的半径为:%f\\n”,r); printf(“圆的面积为:%f\\n”,s); }

float area(float a) /* 定义函数area */ { float d; d=PI*a*a;

专业整理 知识分享

完美WORD格式

return(d); /* 返回计算结果 */

}

【提示】本程序由主函数main()和自定义函数area()组成。程序的前2句是文件包含语句,即把输入、输出标准函数和数学函数的文件包含到本程序中。第3句是宏定义语句,即用标识符PI来代替数字3.14159。

运行:请输入半径: 1.1 ↙ 显示:圆的半径为:1.1

圆的面积为:3.801324

2.编写一个函数输出三个数中的最大值。

【提示】在main()函数中输入数据,调用求3个数最大值函数。 int max(int x,int y,int z) {

int t ;

if(x>=y) t=x ; else t=y; if(t

main() {

int x,y,z;

printf(\scanf(\

printf(\}

3.编写一个函数,将一个任意三位数n逆序输出。即若n=456,则输出654。

【提示】将一个三位数n分解为个位、十位和百位分别放入c,b,a中,然后逆序输出。 int rec(int x) {

int a,b,c ; a=x/100; b=x0/10; c=x;

return(c*100+b*10+a); }

main() {

int rec(int x); int y,z;

printf(\ scanf(\ z=rec(y);

printf(\}

专业整理 知识分享

完美WORD格式

4.编写比较两字符串是否相等的函数。

【提示】 按ASCII码值大小比较,将两个字符串自左至右逐个字符相比,直到出现不同的字符或遇到'\\0'为止。如果全部字符相同,则认为相等,如果出现不同的字符,则以第一个不同的字符的比较结果为准。比较结果由函数值带回。

参考代码:

#include int cmp( ); main( ) {

int resu;

char s1[100],s2[100];

printf(\gets(s1) ;

printf(\gets(s2);

resu=cmp(s1,s2);

printf(\与%s的比较结果是%d.\}

int cmp(s1,s2) char s1[ ],s2[ ]; {int i=0;

while((s1[i]==s2[i])&&(s1[i]!=0)&&(s2[i]!=0)) i++;

if(s1[i]==’\\0’&&s2[i]==’\\0’) return 0; else

return(s1[i]-s2[i]); }

5.编写求字符串长的函数。

【提示】字符串的长度不包括'\\0'在内。 参考代码:

#include main()

{int test(); int n;

char str[100]; gets(str); n=test(str);

printf(\}

int test(str) char str[]; {int n=0;

while(str[n]!=’\\0’)

专业整理 知识分享

完美WORD格式

n++;

return(n); }

6.编写一个函数判定一个数是否是素数,在主函数中调用该函数,输入一个整数,输出是否是素数的信息。

【分析与提示】由主函数任意输入一个整数m,将其值传递给子函数isprime(m)由子函数判断这个数是否为素数,是return(1),否则return(0)。

参考代码:

#include main() { int m;

printf(\scanf(\isprime (m); }

isprime(int n) {

int i,k; k=n/2;

for(i=2;i<=k;i++) if (n%i==0) break; if(i>=k+1)

printf(\

else printf(\}

7.用指针写一个删除字符串中空格的函数。

【提示】用指针p1指向待处理的字符串,用*p1从串头到串尾逐一走动,每走到一个字符判断其是否为空格,若不是空格,则将其保存到指针*p2中。

参考代码:

#include void dele(char *str) {

char *p1,*p2;

for(p1=p2=str;*p1!=’\\0’;p1++) if(*p1==’ ’) continue; else *p2++=*p1; *p2='\\0'; }

main( ) {

char str[100]; gets(str); dele(str); puts(str);

专业整理 知识分享

完美WORD格式

}

8.用指针写合并两个字符串的函数。

【分析与提示】先将字符串str1从串头到串尾逐一拷贝到字符串str3中,接着将字符串str2从串头到串尾逐一拷贝到字符串str3中。 参考代码:

#include

char unitestring(char *str1,char *str2,char *str3) /*合并函数*/ {

int i=0;

while((*str1)!=’\\0’) { *(str3+i)=*str1; i++; str1++; }

while((*str2)!=’\\0’) {*(str3+i)=*str2; i++; str2++; }

*(str3+i)=’\\0’; /*不能自动加入\\0*/ }

main( ) {

char p[50],q[50],r[100]; /*r为连接后的字符串*/ printf(\ gets(p); /*输入字符串*/

printf(\ gets(q); /*输入字符串*/ unitestring(p,q,r); puts(r); /*输出结果*/ }

9.输入15个正整数,放在a数组中,要求:奇数放在a数组前部,偶数放在a数组后部。再分别对奇数和偶数排序。

【分析与提示】在main函数中将数组中的奇数放在a数组前部,偶数放在a数组后部。在分别两次调用sort函数将奇数和偶数进行排序。

参考代码: void sort(); main() {

int a[15];

int i,j=14,n=0,t; for(i=0;i<15;i++) scanf(\i=0;

专业整理 知识分享