ImageVerifierCode 换一换
格式:DOCX , 页数:25 ,大小:34.76KB ,
资源ID:3800894      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/3800894.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(C程序设计谭浩强第三版 函数参考答案.docx)为本站会员(b****4)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

C程序设计谭浩强第三版 函数参考答案.docx

1、C程序设计谭浩强第三版 函数参考答案C语言程序设计(第三版)谭浩强第8章 函数参考答案【知识要点】 C语言的基本组成单位函数。 C是由一个且仅有一个主函数( main)和若干个子函数组成.子函数可有可无。 一个C语言源程序执行,从主函数开始,以主函数结束。语言称为函数式语言,即用户可根据解决问题的算法编成一个相对独立的函数模块,然后采用调用的方法来使用函数。采用了函数模块式的结构的特点:程序的层次结构清晰,便于程序的编写、阅读和调试。语言提供了极为丰富的库函数,使用这些库函数时,在源程序的头部使用文件包含命令。如:数学函数 #include 字符函数 #include 字符串函数 #inclu

2、de 输入输出函数 #include 动态存储分配函数 #include #include 清屏函数 #include 日期和时间函数 #include 函数可以嵌套调用,而不可嵌套定义。函数的值: 函数的值的数据类型由函数定义时所决定的。调用函数时可有返回值和无返回值两种。有返回值的函数在函数体内必有一条或多条 return 语句,无返回值的函数定义为void类型,且在函数体无return 语句。函数调用时参数的传递:主调函数和被调函数之间数据传递有两种,数值传递和地址传递。【习题参考答案】8.1写两个函数,分别求两个整数的最大公约数和最小公倍数,用主函数调用这两个函数,并输出结果,两个整数

3、由键盘输入。【解析】用碾转相除法求最大公约数。最小公倍数两个整数之积/最大公约数。#include int gcf(int x,int y) /*求两整数的最大公约数*/int t,r; if (xy) t=x;x=y;y=t; while (r=x%y)!=0) x=y; y=r; return y;int lcm(int x,int y,int h) /*求两整数的最小公倍数*/ return(x*y/h);void main ( ) int a,b,df,sc; /* df:所求的最大公约数,sc:所求的最小公倍数*/ printf(Input a,bn); scanf(“%d%d”,&

4、a,&b); df=gcf(a,b); printf(“G.C.F=%dn”,df); sc=lcm(a,b,df); printf(“L.C.M=%dn”,sc);8.2 求方程ax2+bx+c=0的根,用3个函数分别求当b2-4ac大于0,等于0和小于0时的根,并输出结果。从主函数输入a,b,c的值。# include void real_root(float a,float b,float disc) /*求方程的两个不相同的实根*/float x1,x2; x1=(-b+sqrt(disc)/(2*a); x2=(-b-sqrt(disc)/(2*a); printf(x1=%5.2f

5、tx2=%5.2fn,x1,x2);void equal_root(float a,float b) /*求方程的两个相同的实根*/ float x1,x2; x1=x2=(-b)/(2*a); printf(x1=%5.2ftx2=%5.2fn,x1,x2);void imaginary_root(float a,float b,float disc) /*求方程的两个不相同的虚根*/ float p,q; p=-b/(2*a); q=sqrt(disc)/(2*a); printf(x1=%5.2f+%5.2fitx2=%5.2f-%5.2fin,p,q,p,q);void main (

6、) float a,b,c,disc; printf(nInput a,b,c:n); scanf(%f%f%f,&a,&b,&c); disc=b*b-4*a*c; if (disc0) real_root(a,b,disc); else if (disc=0) equal_root(a,b); else imaginary_root(a,b,disc);8.3写一个判素数的函数,在主函数输入一个整数,输出是否素数的信息。【解析】:素数(质数):只能被1和该整数本身整除的数为素数。换句话说,只有两个正因数(1和自己)的自然数即为素数。#include int prime(int n) int

7、 flag=1,i; /*flag:标识变量*/ for (i=2;i=n/2 & flag=1;i+) if (n%i=0) flag=0; return flag ;void main ( ) int n; printf(nInput an integer:); scanf(%d,&n); if (prime(n) printf(n %d is a prime.,n); else printf(n %d is not a prime.,n); 【扩展】求100以内的所有的素数。#include int prime(int n) int flag=1,i; /*flag:标识变量*/ for

8、 (i=2;i=n/2 & flag=1;i+) if (n%i=0) flag=0; return flag ;void main ( ) int a100,i,j=0; for(i=2;i=100;i+) ai=i; for(i=2;i=100;i+) if (prime(ai) if(j+%5=0) printf(n); /*控制每行输出的个数,每行按5个输出*/ printf(%5d,ai); 8.4写一函数,使给定的一个二维数组(33)转置,即行列互换。# define N 3#define M 3#include void fun (int aNM,int bMN) int i,j

9、,t; for (i=0;iN;i+) for (j=0;jM;j+) bji=aij;void main ( ) int i,j,aNM,bMN; printf(Input %d * %d array:n,N,M); for (i=0;iN;i+) for (j=0;jN;j+) scanf(%d,&aij); printf(Original array : n); for (i=0;iN;i+) for (j=0;jN;j+) printf(%4d,aij); printf(n); fun(a,b);printf(Convert array:n); for (i=0;iN;i+) for

10、(j=0;jN;j+) printf(%4d,bij); printf(n);8.5写一函数,使输入的一个字符串按反序存放,在主函数中输入和输出字符串。【解析】字符串处理方法,一是字符数组,二是指针,编写函数时,采用地址传递。#include #include void inverse (char str ) char t; int i,j; for (i=0,j=strlen(str)-1;istrlen(str)/2;i+,j-) t=stri; stri=strj; strj=t; void main ( ) char str80; void inverse (char str ); p

11、rintf(“Input string:”); gets(str); inverse(str); puts(str);8.6写一函数,将两个字符串连接。【解析】:将串2连接在串1 的后面,形成一新串。新串末尾须加字符串结束标志。#include #include char connect(char str1 ,char str2 )int i,j; for (j=strlen(str1),i=0;str2i!=0;i+) str1i+j=str2i; str1i+j=0; /*新串末尾须加字符串结束标志0*/void main ( ) char s180,s280; printf(nInput

12、 string1:); gets(s1); printf(nInput string2:); gets(s2); connect(s1,s2); puts(s1);_ng is %sn”,s);8.7 写一个函数,将一个字符串中的元音字母复制到另一个字符串,然后输出。#include #include void string_copy(char str) int i,j=0; for(i=0;stri!=0;i+) if(stri=a|stri=e|stri=i|stri=o|stri=u) strj+=stri; strj=0; puts(str);void main ( ) char st

13、r80; int n; gets(str); string_copy(str);8.8写一函数,输入一个4位数字,要求输出这4个数字字符,但每两个数字之间有一个空格。如输入1990,应输出”1 9 9 0”。#include #include void change(int n,char str) /* 该函数的功能将数值转换为数字字符*/ int i; for(i=3;i=0;i-) stri=n%10+0; n/=10; str4=0;void insert(char str) /* 该函数的功能插入空格并输出该数字字符*/ int i; for (i=strlen(str);i0;i-)

14、 str2*i=stri; str2*i-1= ; puts(str);void main ( ) char str80; int n; printf(nInput number :); do /* 该循环控制输入的数为四位整数*/ scanf(%d,&n); while(n10000); change(n,str); insert(str);8.9编写一函数,有实参传来一个字符串,统计此字符串中字母,数字,空格和其它字符的个数,在主函数中输入字符串以及输出上述的结果。#include #include #include int letter,digit,space,others; /* 说明

15、定义为全局变量,全局变量不赋值时自动赋0值 */int count(char str )int i; for (i=0;stri!=0;i+) if (isalpha(stri) letter+; else if (isdigit(stri) digit+; else if (stri= ) space+; else others+;void main ( ) char str80; printf(nInput string:n); gets(str); printf(string:); puts(str); count(str); printf(letter:%d,digit:%d,spac

16、e:%d,others:%dn,letter,digit,space,others);8.10写一函数,输入一行字符,将此字符串中最长的单词输出。【解析】先确定单词是如何组成的。假若以空格、数字或其它字符作为单词的分隔。#include #include #include char string_long(char str) int i,j,k=1,flag=1,max=0,si=0,sj; for(i=0;stri!=0;i+) if(isalpha(stri) if(flag) j=i; flag=0; else k+; else if(maxk) max=k; si=j; /* si:记

17、长串的起始位置*/ sj=si+k; /* sj:记长串的结束位置*/ flag=1; k=1; strsj=0; puts(&strsi);void main ( ) int i; char string80; printf(Input one line character:n); gets (string); printf(nThe longest word is :); string_long(string); 8.11写一函数,用“起泡法”对输入的10个字符按由小到大的顺序排列。#define N 10#include #include void sort(char str) int

18、i,j; char t; for (j=0;jN-1;j+) for (i=0;istri+1) t=stri; stri=stri+1; stri+1=t; void main ( )char chN; int i,flag; for(i=0;i10;i+) scanf(%c,&chi); sort(ch); printf(string sorted:n); for (i=0;iN;i+) printf(%c,chi);8.12用牛顿迭代法求根。方程为,系数的值依次为1,2,3,4。求x在1附近的一个实根。求出根后由主函数输出。【解析】牛顿迭代公式: #include #include do

19、uble f(float a,float b,float c,float d,double x) return a*x*x*x+b*x*x+c*x+d; double f1(float a,float b,float c,double x) return 3*a*x*x+2*b*x+c; double root(float a,float b,float c,float d,double x) double x0; do x0=x; x=x0-f(a,b,c,d,x0)/f1(a,b,c,x0); while(fabs(x-x0)1e-5); return x;void main() floa

20、t a, b, c, d; double x; a=1;b=2;c=3;d=4; x=1; x=root(a,b,c,d,x); printf ( root:%lfn,x);8.13用递归方法求n阶勒让德多项式的值,递归公式为:#include stdio.hdouble P(double x, int n) if(n=0) return 1; if(n=1) return x; if(n1) return (2*n-1)*x-P(x,n-1)-(n-1)*P(x,n-2)/n;void main() double x; int n; double P(double x, int n); sc

21、anf(%lf%d,&x, &n); printf(%lf, P(x, n) ;8.14输入10个学生5门课的成绩,分别用函数实现下列功能:(1)计算每个学生的平均分;(2)计算每门课的平均分;(3)找出所有50个分数中的最高的分数所对应的学生和课程;(4)求出平均分方差;其中,为某一学生的平均分。解:函数input_stu的执行结果是给全程变量学生成绩数组score各元素输入初值。函数aver_stu的作用是计算每个学生的平均分,并将结果赋给全程变量数组a_stu中各元素。函数aver_cour的作用是计算每门课的平均成绩,计算结果存入全程变量数组a_cour。函数highest的返回值是最

22、高分,r,c是两个全局变量,分别代表最高分所在的行,列号。函数s_var的返回值是平均分的方差。程序如下:【程序一】#include #include # define N 10# define M 5float s_var(float a_stuN);void highest(int scoreNM); /* 函数原型声明 */void input_stu(int scoreNM); /* 函数原型声明 */void aver_stu(int scoreNM,float a_stuN); /* 函数原型声明 */void aver_cour(int scoreNM,float a_courM

23、); /* 函数原型声明 */void main() int score NM; float a_stu N,a_courM; /*各个学生平均分,各门课程平均分*/ int i,j; input_stu(score ); /* 函数调用,输入10个学生成绩 */ aver_stu(score,a_stu); /* 函数调用,计算10个学生平均成绩 */ aver_cour(score,a_cour); /* 函数调用,计算5门课平均成绩 */ printf(n NO. cour1 cour2 cour3 cour4 cour5 aver); for (i=0;iN;i+) printf(n

24、NO.%2d ,i+1); /* 输出学生序号 */ for (j=0;jM;j+) /* 输出某个学生各门课的成绩 */ printf(%8d,scoreij); printf(%8.2f,a_stui); /* 输出某个学生的平均成绩 */ printf(nAverage:); for (j=0;jM;j+) /* 输出每门课平均成绩 */ printf(%8.2f,a_courj); highest(score); /* 调用函数,求最高分和它属于哪个学生,哪门课 */ printf(nVariance:%8.2fn,s_var(a_stu); /* 调用函数,计算和输出方差 */ vo

25、id input_stu(int scoreNM) /* 输入10个学生成绩的函数 */ int i,j; for (i=0;iN;i+) printf(nInput score of student%2d:n,i+1); /* 学生号从1开始 */ for (j=0;jM;j+) scanf(%d,&scoreij); void aver_stu(int scoreNM,float a_stuN) /* 计算各个学生平均成绩的函数 */ int i,j; float s; for (i=0;iN;i+) s=0; for (j=0;jM;j+) s+=scoreij; a_stui=s/M;

26、 void aver_cour(int scoreNM,float a_courM) /* 计算各门课的平均成绩的函数 */ int i,j; float s; for (j=0;jM;j+) s=0; for (i=0;iN;i+) s+=scoreij; a_courj=s/N; void highest(int scoreNM) /* 求最高分和它属于哪个学生,哪门课的函数 */ int high; int i,j,row,column; high=score00; for (i=0;iN;i+) for (j=0;jhigh) high=scoreij; row=i+1; /* 数组行号i从0开始,学生号r从1开始,故row=i+1 */ column=j+1; /*数组列号j从0开始,学生号c从1开始,故column=j+1 */ printf(nHighest score is:%3d,NO.%2d student,course %2dn,high,row,column);float s_var(float a_stuN) /* 求方差的函数 */ int i,j; float sumx,sumxn; sumx=0

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

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