习题参考答案《C语言程序设计》第七版董汉丽 712页.docx

上传人:b****4 文档编号:11871337 上传时间:2023-04-06 格式:DOCX 页数:20 大小:21.18KB
下载 相关 举报
习题参考答案《C语言程序设计》第七版董汉丽 712页.docx_第1页
第1页 / 共20页
习题参考答案《C语言程序设计》第七版董汉丽 712页.docx_第2页
第2页 / 共20页
习题参考答案《C语言程序设计》第七版董汉丽 712页.docx_第3页
第3页 / 共20页
习题参考答案《C语言程序设计》第七版董汉丽 712页.docx_第4页
第4页 / 共20页
习题参考答案《C语言程序设计》第七版董汉丽 712页.docx_第5页
第5页 / 共20页
点击查看更多>>
下载资源
资源描述

习题参考答案《C语言程序设计》第七版董汉丽 712页.docx

《习题参考答案《C语言程序设计》第七版董汉丽 712页.docx》由会员分享,可在线阅读,更多相关《习题参考答案《C语言程序设计》第七版董汉丽 712页.docx(20页珍藏版)》请在冰豆网上搜索。

习题参考答案《C语言程序设计》第七版董汉丽 712页.docx

习题参考答案《C语言程序设计》第七版董汉丽712页

一、简答题

1.模块化程序设计思想和划分模块的基本原则是什么?

【解答】模块化程序设计思想是把一个大的程序按功能进行分解,由于分解后的各模块较小,因此容易实现,也容易调试。

划分模块的基本原则是:

各模块都要易于理解,功能尽量单一,模块间的联系尽量少。

满足这些要求的模块具有以下优点:

(1)模块间的接口关系简单,这种程序可读性和可理解性较强。

(2)需要修改某一功能时,只涉及到一个模块,不会影响到其它模块。

(3)脱离程序的上、下文也能单独验证一个模块的正确性。

(4)扩充或建立新系统时,可充分利用已有的模块。

2.一个C语言程序由几个函数组成?

【解答】一个C语言程序由一个或多个函数组成,其中必须有一个名为main的主函数。

主函数调用其它函数,其它函数可以互相调用。

3.函数调用的规则是什么?

【解答】在一个函数中调用另一个函数必须具备的条件是:

被调用的函数必须是已经存在的函数(库函数或用户自己定义的函数)。

调用库函数时,通常在文件开头用#include命令将调用有关库函数时所需用的信息“包含”到本文件中来。

如:

标准输入输出库函数用#include,数学库函数用#include

调用自定义函数,而且该函数与调用它的函数在同一个文件中,应在主调函数中对被调函数作声明(说明函数类型、参数类型及个数),以便编译系统对函数调用进行语法检查。

4.函数的“形参”和“实参”的概念是什么?

【解答】在定义函数时,函数名后面的括号中的变量称为“形式参数”,简称“形参”。

在调用函数时,主调函数名后面括号中的参数(也可以是一个表达式)称为“实际参数”,简称“实参”。

5.调用函数中,有几种方法可以返回1个或多个值?

【解答】函数调用中可以利用return语句返回一个值。

可以利用参数传递,全局变量得到多个返回值。

6.在函数调用中,用指针变量作为函数的参数进行传递,好处在哪里?

【解答】在函数调用中,用指针变量作为函数的参数,可以改变实参指针变量所指变量的值。

二、运行程序写结果

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

fun(intx,inty,intz)

{z=x*x+y*y;}

main()

{inta=31;

fun(5,2,a);

printf("%d",a);

}

【解答】31

2.以下程序运行后的输出结果是。

 f(intb[],intm,intn)

{inti,s=0;

for(i=m;i

returns;

}

main()

{intx,a[]={1,2,3,4,5,6,7,8,9};

x=f(a,3,7);

printf("%d\n",x);

}

【解答】10

3.下列程序运行的运行结果是。

#include

voidfun(char*c,intd)

{

*c=*c+1;d=d+1;

printf("%c,%c,",*c,d);

}

main()

{

charb='a',a='A';

fun(&b,a);printf("%c,%c\n",b,a);

}

【解答】b,B,b,A

4.下列程序运行的运行结果是。

voidswap(int*a,int*b)

{int*t;

t=a;a=b;b=t;

}

main()

{

intx=3,y=5,*p=&x,*q=&y;

swap(p,q);

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

}

【解答】35

5.下列程序运行的结果为。

main()

{inta[5]={5,10,-7,3,7},i,j,t;

sort(a);

for(i=0;i<=4;i++)

printf("%3d",a[i]);

}

sort(inta[])

{inti,j,t;

for(i=0;i<4;i++)

for(j=0;j<4-i;j++)

if(a[j]>a[j+1])

{t=a[j];a[j]=a[j+1];a[j+1]=t;}

}

【分析与提示】该程序的功能是将5个数由小到大进行排序。

【解答】-735710

6.下列程序运行的结果为。

voidswap1(intx,inty)

{intt;

t=x;x=y;y=t;

return;

}

voidswap2(int*x,int*y)

{intt;

t=*x;*x=*y;*y=t;

return;

}

main()

{intx=3,y=5;

printf("%d,%d\n",x,y);

swap1(x,y);

printf("%d,%d\n",x,y);

swap2(&x,&y) ;

printf("%d,%d\n",x,y);

}

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

【解答】3,5

3,5

5,3

7.下列程序运行的结果为。

#include

longfib(intg)

switch(g)

Case0:

return0;

case1:

case2:

return1;

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

main()

{

longk;

k=fib(7);

printf("k=%ld\n",k);

【分析与提示】注意函数递归调用的条件。

【解答】k=13

8.以下程序运行后的输出结果是。

intf(intn)

{

if(n==1)return1;

elsereturnf(n-1)+1;

}

main()

{

inti,j=0;

for(i=1;i<3;i++)

j+=f(i);

printf("%d\n",j);

}

【解答】3

9.下列程序运行的结果为。

intx1=30,x2=40;

main()

{

intx3=10,x4=20;

swap(x3,x4);

swap(x2,x1);

printf("%d,%d,%d,%d\n",x3,x4,x1,x2);

}

swap(intx,inty)

{x1=x;x=y;y=x1;}

【提示】本题考查全局变量的作用范围。

【解答】10,20,40,40

10.下列程序运行的结果为。

#include

voidnum()

{

externintx,y;

inta=15,b=10;

x=a-b;y=a+b;

}

intx,y;

main()

{

inta=7,b=5;

x=a+b;y=a-b;

num();

printf("%d,%d\n",x,y);

}

【分析与提示】用extern进行外部变量说明。

【解答】5,25

三.编程题

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

#include/*包含文件*/

#include/*包含数学库函数*/

#definePI3.14159/*宏定义*/

main()/*主函数*/

{

floatarea(float);/*函数area的原型,即函数说明*/

floatr,s;/*主函数中的局部变量定义*/

printf(“请输入半径:

\n”);

scanf(“%f”,&r);

s=area(r);/*调用area函数*/

printf(“圆的半径为:

%f\n”,r);

printf(“圆的面积为:

%f\n”,s);

}

floatarea(floata)/*定义函数area*/

{floatd;

d=PI*a*a;

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

}

【分析与提示】本程序由主函数main()和自定义函数area()组成。

程序的前2句是文件包含语句。

第3句是宏定义语句,即用标识符PI来代替数字3.14159。

运行:

请输入半径:

1.1↙

显示:

圆的半径为:

1.1

圆的面积为:

3.801324

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

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

intmax(intx,inty,intz)

{

intt;

if(x>=y)t=x;

elset=y;

if(t

return(t);

}

main()

{

intx,y,z;

printf("input3numbers:

");

scanf("%d%d%d",&x,&y,&z);

printf("max=%d\n",max(x,y,z));

}

3.已知某门课程10个学生的成绩,编程序求出平均成绩,用函数实现求平均成绩。

【解答】参考代码:

#include"stdio.h"

floatfun(floata[],intn)

{

inti;

floatave,s=0;

for(i=0;i

s+=a[i];

ave=s/n;

returnave;

}

voidmain()

{

floata[10],ave;

inti;

printf("请输入10个学生的成绩:

");

for(i=0;i<10;i++)

scanf("%f",&a[i]);

ave=fun(a,10);

printf("平均成绩为:

%5.2f\n",ave);

}

4.编写一个函数,将一个任意三位数n逆序输出。

即若n=456,则输出654。

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

intrec(intx)

{

inta,b,c;

a=x/100;

b=x%100/10;

c=x%10;

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

}

main()

{

intrec(intx);

inty,z;

printf("inputanumber(100-999):

");

scanf("%d",&y);

z=rec(y);

printf("thechangednumberis:

%d\n",z);

}

5.已知e=1+1/1!

+1/2!

+1/3!

+…+1/n!

,试用公式求e的近似值,要求累加所有不小于10-6的项值。

用函数fun完成求任何数的阶乘。

【解答】参考代码:

#include"stdio.h"

doublefun(doublen)

{

doubles=1;

inti;

for(i=1;i<=n;i++)

s*=i;

returns;

}

voidmain()

{

doublee=1,t=1,i=1;

while(t>10e-6)

{

t=1.0/fun(i);

e+=t;

i++;

}

printf("%lf\n",e);

}

6.编写函数fun(),该函数的功能是:

将两个两位的正整数a,b合并形成一个整数放在c中。

合并的方式是:

将a数的十位和个位数依次放在c数的十位和千位上,b数的十位和个位数依次放在c数的百位和个位上。

例如,当a=45,b=12时,调用到该函数后,c=5142。

【解答】参考代码:

#include"stdio.h"

intfun(inta,intb)

{

intc,a1,a2,b1,b2;

a1=a/10;

a2=a%10;

b1=b/10;

b2=b%10;

c=a2*1000+b1*100+a1*10+b2;

returnc;

}

voidmain()

{

inta,b,c;

printf("请输入两个两位数:

\n");

scanf("%d%d",&a,&b);

c=fun(a,b);

printf("%d\n",c);

}

7.输入10个数,把最小数与第一个数交换,把最大数与最后数交换。

【解答】参考代码:

#include"stdio.h"

voidmain()

{

inta[10],min,max,i,index1,index2;

printf("请输入10个数:

");

for(i=0;i<10;i++)

scanf("%d",&a[i]);

min=max=a[0];

index1=index2=0;

for(i=1;i<10;i++)

{

if(a[i]>max)

{

max=a[i];

index1=i;

}

if(a[i]

{

min=a[i];

index2=i;

}

}

if(index2!

=0)

{

a[index2]=a[0];

a[0]=min;

}

if(index1!

=9)

{

a[index1]=a[9];

a[9]=max;

}

for(i=0;i<10;i++)

printf("%6d",a[i]);

printf("\n");

}

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

【提示】字符串的长度不包括'\0'在内。

参考代码:

#include

main()

{inttest();

intn;

charstr[100];

gets(str);

n=test(str);

printf("thenumbersis:

%d\n",n);

}

inttest(str)

charstr[];

{intn=0;

while(str[n]!

=’\0’)

n++;

return(n);

}

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

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

参考代码:

#include

main()

{intm;

printf("Pleaseinputadatam=:

");

scanf("%d",&m);

isprime(m);

}

isprime(intn)

{

inti,k;

k=n/2;

for(i=2;i<=k;i++)

if(n%i==0)break;

if(i>=k+1)

printf("Thisisaprimenumber");

elseprintf("Thisisnotaprimenumber");

}

10.编写用指针删除字符串中空格的函数。

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

参考代码:

#include

voiddele(char*str)

{

char*p1,*p2;

for(p1=p2=str;*p1!

=’\0’;p1++)

if(*p1==’’)continue;

else*p2++=*p1;

*p2='\0';

}

main()

{

charstr[100];

gets(str);

dele(str);

puts(str);

}

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

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

参考代码:

#include

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

{

inti=0;

while((*str1)!

=’\0’)

{*(str3+i)=*str1;

i++;

str1++;

}

while((*str2)!

=’\0’)

{*(str3+i)=*str2;

i++;

str2++;

}

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

}

main()

{

charp[50],q[50],r[100];/*r为连接后的字符串*/

printf("Pleaseenterthefirststring:

\n");

gets(p);/*输入字符串*/

printf("Pleaseenterthesecondstring:

\n");

gets(q);/*输入字符串*/

unitestring(p,q,r);

puts(r);/*输出结果*/

}

12.编写一个程序完成“菜单”功能。

提供三种选择途径:

(1)求水仙花数(narcissusnumber),找出100至999之间的所有水仙花数。

(2)求出素数(primenumber),找出2至n之间的所有素数。

(3)求Faibonacci数列前n项的值。

#include“math.h”

main()

{intm,xz;

voidnarcissus();

voidprime();

voidfaibonacci();

clrscr();

m=0;

while(m==0)

{printf(“\n\n”);

printf(“1findnarcissusnumber\n”);

printf(“2findprimenumber\n”);

printf(“3findFaibonaccinumber\n”);

printf(“othernumberexit!

\n”);

printf(“inputnumberplease!

\n”);

scanf(“%d”,&xz);

switch(xz)

{case1:

narcissus();break;

case2:

prime();break;

case3:

faibonacci();break;

default:

m=1;

}m=1;

}

}

voidnarcissus()

{intk,a,b,c,d;

for(k=100;k<1000;k++)

{a=k/100;

b=k%100/10;

c=k%10;

d=a*a*a+b*b*b+c*c*c;

if(d==k)printf(“%5d\n”,k);

}

}

voidprime()

{inti,j,k,n,m=0;

printf(“inputnplease!

\n”);

scanf(“%d”,&n);

for(i=2;i

{j=sqrt(i);

for(k=2;k<=j;k++)if(i%k==0)break;

if(k>j)

{m++;

printf(“%6d”,i);

if(m%10==0)printf(“\n”);

}

}

}

voidfaibonacci()

{longf1,f2;

intk,n;

printf(“intnplease!

\n”);

scanf(“%d”,&n);

f1=1;f2=1;

for(k=1;k<=n/2;k++)

{printf(“%8d%8d”,f1,f2);

if(k%20)printf(“\n”);

f1=f1+f2;

f2=f1+f2;

}

}

【分析与提示】程序共有4个函数,其中主函数提供了主菜单,允许选择三种情况之一,否则就退出。

通过开关语句switch进行选择。

为了不断的提供菜单,用while来永远循环。

一开始给变量m赋值为0,m=0就继续循环,一旦选择了不存在的情况,则将m置1,循环就结束。

 

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 小学教育 > 其它课程

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1