《2023年第5章函数习题与超详细解析答案.pdf》由会员分享,可在线阅读,更多相关《2023年第5章函数习题与超详细解析答案.pdf(22页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、精品资料 欢迎下载 第 5 章函数 习题及解答 一选择题。1.若已定义的函数有返回值,则以下关于该函数调用的叙述中错误的是 A)函数调用可以作为独立的语句存在 B)函数调用可以作为一个函数的实参 C)函数调用可以出现在表达式中 D)函数调用可以作为一个函数的形参 答案:D 解析:本题综合考查函数的调用方式。函数的形参和实参具有以下特点:形参变量只有在被调用时才分配内存单元,在调用结束时,即刻释放所分配的内存单元。因此,形参只有在函数内部有效。函数调用结束返回主调函数后则不能再使用该形参变量。实参可以是常量、变量、表达式、函数等,无论实参是何种类型的量,在进行函数调用时,它们都必须具有确定的值,
2、以便把这些值传送给形参。因此应预先用赋值,输入等办法使实参获得确定值。实参和形参在数量上,类型上,顺序上应严格一致,否则会发生“类型不匹配”的错误。函数调用中发生的数据传送是单向的。即只能把实参的值传送给形参,而不能把形参的值反向地传送给实参。因此在函数调用过程中,形参的值发生改变,而实参中的值不会变化。2.有以下程序 int fun(int x,int y)return(x+y);main()int a=2,b=5,c=8;printf(%d n,fun(int)fun(a+c,b),a-c);程序运行后的输出结果是 A)编译出错 B)9 C)21 D)9.0 答案:B 解析:本题考查函数的
3、综合知识。首先,我们可以利用强制转换类型转换运算符将一个表达式转换成所需类型。如:(double)a是将a转换成double 类型;(int)(x+y)是将x+y 的值转换成整型。本题可按部就班地逐步运算:fun(int)fun(a+c,b),a-c)fun(int)fun(10,5),2-8)精品资料 欢迎下载 fun(int)15.000000,-6)fun(15,-6)9 3.若有以下调用语句,则不正确的fun 函数的首部是 main()int a50,n;fun(n,&a 9);A)void fun(int m,int x)B)void fun(int s,int h41)C)void
4、 fun(int p,int*s)D)void fun(int n,int a)答案:D 解析:函数定义的一般形式为:类型说明符 函数名()类型说明 语句 根据 fun 函数的调用语句可知,fun 函数的第二个参数是一个地址值。4.以下说法正确的是 A)C语言程序总是从第一个的函数开始执行 B)在C语言程序中,要调用函数必须在main()函数中定义 C)C语言程序总是从main()函数开始执行 D)C语言程序中的 main()函数必须放在程序的开始部分 答案:C 解析:C 语言的程序是由主函数 main()开始运行,由主函数来调用其他函数,所以,选项 A)错误。C语言中定义的函数必须是并列的,
5、不能在一个函数中定义其他函数,选项 B)错。函数必须先定义后使用,在调用函数以前要定义函数,而 main()函数不必放在最前面,故选项 D)错。5.以下程序中函数sort 的功能是对a数组中的数据进行由大到小的排序 void sort(int a,int n)int i,j,t;for(i=0;in-1;i+)for(j=i+1;jn;j+)if(ai aj )t=a i;a i=aj;a j=t;作为一个函数的形参答案解析本题综合考查函数的调用方式函数的形参数后则不能再使用该形参变量实参可以是常量变量表达式函数等无论实上顺序上应严格一致否则会发生类型不匹配的错误函数调用中发生的数精品资料 欢
6、迎下载 main()int aa10=1,2,3,4,5,6,7,8,9,10,i;sort(&aa3,5);for(i=0;i10;i+)printf(%d,aa i );printf(n);程序运行后的输出结果是 A)1,2,3,4,5,6,7,8,9,10,B)10,9,8,7,6,5,4,3,2,1,C)1,2,3,8,7,6,5,4,9,10,D)1,2,10,9,8,7,6,5,4,3,答案:C 解析:C 语言中,实参变量和形参变量之间的数据传递是单向的“值传递”方式。指针变量作函数参也要遵循这一规则,调用函数不可能改变实参指针变量的值,但可以改变实参指针变量所指变量的值。6.在调
7、用函数时,如果实参是简单的变量,它与对应形参之间的数据传递方式是 A)地址传递 B)单向值传递 C)由实参传形参,再由形参传实参 D)传递方式由用户指定 答案:B 解析:如果实参是简单变量,它与对应形参之间的数据传递方式是由实参传给形参,而形参值的改变不能改变实参的值。7.以下叙述中正确的是 A)构成C程序的基本单位是函数 B)可以在一个函数中定义另一个函数 C)main()函数必须放在其他函数之前 D)所有被调用的函数一定要在调用之前进行定义 答案:A 解析:本题综合考查C语言的概念部分,关于C语言,我们应该了解以下必须要掌握的基础知识:C程序是由函数构成的。一个函数由两部分组成:函数的首部
8、和函数体。一个C程序总是从main函数开始执行的,而不论main函数的整个程序中的位置如何(main函数可以放在程序最开始,也可以放在程序最后,或写在一些函数之前,在另一些函数之后)。C 程序在书写上,表现形式比较自由,一行内可以写几个语句,一个语句可以分写在几行上。每个语句和数据定义的最后必须有一个分号。作为一个函数的形参答案解析本题综合考查函数的调用方式函数的形参数后则不能再使用该形参变量实参可以是常量变量表达式函数等无论实上顺序上应严格一致否则会发生类型不匹配的错误函数调用中发生的数精品资料 欢迎下载 8.若有函数内部说明:int a 3 4;则数组a中各元素 A)可在程序的运行阶段得到
9、初值0 B)可在程序的编译阶段得到初值0 C)不能得到确定的初值 D)可在程序的编译或运行阶段得到初值 0 答案:C 解析:我们可以把二维数组的常量表达式看做是矩阵或者表格的行数与列数,要注意每个元素有两个下标,第一个是方括号中的下标代表行号,称行下标;第二个是方括号中的下标代表列号。行下标和列下标总是从 0 开始的,二维数组在不赋初值时,不能得到确定。9.有以下函数 char fun(char*p)return p;该函数的返回值是 A)无确切的值 B)形参p中存放的地址值 C)一个临时存储单元的地址 D)形参 p 自身的地址值 答案:B 解析:本题考查函数返回值的知识。函数返回值是通过函数
10、中的return 语句获得,return 语句中的表达式的值就是所求函数的值。此表达式的值必须与函数首部所说明的类型一致。若类型不一致,则以函数值的类型为准,由系统进行转换。10.以下正确的说法是 A)定义函数时,形参的类型说明可以放在函数体内 B)return 后边的值不能为表达式 C)如果函数值的类型与返回值类型不一致,以函数值类型为准 D)如果形参与实参类型不一致,以实参类型为准 答案:C 解析:选项 A)中定义函数时,形参的类型说明应该放在形参表列内说明。老版本C 语言中,对形参类型的声明是放在函数定义的第 2 行,也就是不在第 1 行的括号内指定形参的类型,而在括号外单独指定。选项
11、B)中 return后面的值可以是一个表达式。选项 D)中实参与形参的类型应相同或赋值兼容。如果实参为整型而形参为实型,或者相反,则按不同类型数值的赋值规则进行转换,以形参类型为准。11.有以下程序 int f(int n)if(n=1)return 1;else return f(n-1)+1;main()int i,j=0;作为一个函数的形参答案解析本题综合考查函数的调用方式函数的形参数后则不能再使用该形参变量实参可以是常量变量表达式函数等无论实上顺序上应严格一致否则会发生类型不匹配的错误函数调用中发生的数精品资料 欢迎下载 for(i=1;i3;i+)j+=f(i);printf(%d
12、n,j);程序运行后的输出结果是 A)4 B)3 C)2 D)1 答案:B 解析:在main函数中,对f(1)和f(2)的值进行了累加。f(1)=1 f(2)=f(1)+1=2 最后,j 的值为 1+2=3 12.在C语言中,变量的隐含存储类别是 A)auto B)static C)extern D)无存储类别 答案:A 解析:auto变量:无 static声明的局部变量。用 auto 作存储类别的声明时,可以不写 auto,存储类别隐含确定为 auto(自动存储类别)。是动态存储方式。大多数变量是自动变量。用 static声明的局部变量是静态局部变量。函数调用结束后静态局部变量占据的内存存储
13、单元空间不释放,局部变量保留原值,下次调用时可以继续使用该值。用 extern声明外部变量,外部变量即全局变量,可以用 extern声明来改变全局变量的作用域,实际上,关键字“auto”可以省略,auto 不写则隐含确定为“自动存储类别”,它属于动态存储方式。13.若有以下程序#include void f(int n);main()void f(int n);f(5);void f(int n)printf(%d n,n);则以下叙述中不正确的是 A)若只在主函数中对函数f 进行说明,则只能在主函数中正确调用函数f B)若在主函数前对函数f 进行说明,则在主函数和其后的其他函数中都可以正确调
14、用函数f C)对于以上程序,编译时系统会提示出错信息:提示对f 函数重复说明 作为一个函数的形参答案解析本题综合考查函数的调用方式函数的形参数后则不能再使用该形参变量实参可以是常量变量表达式函数等无论实上顺序上应严格一致否则会发生类型不匹配的错误函数调用中发生的数精品资料 欢迎下载 D)函数 f 无返回值,所以可用 void 将其类型定义为无返回值型 答案:C 解析:C语言规定,一个函数中调用另一个函数(即被调用函数)需要具备的条件有:首先被调用的函数必须是已经存在的函数(是库函数或用户自己定义的函数)。如果使用库函数,一般还应该在本文件开头用#include 命令将函数调用有关库函数时所需要
15、到的信息“包含”到本文件中来。如果使用自定义函数,而且该函数与调用它的函数在同一个文件中,一般还应该在主调函数中对被调用的函数作声明,即向编译系统声明将要调用此函数,并将有关信息通知编译系统。在C语言中,可以使用函数原型进行声明,函数原型的一般形式为:函数类型 函数名(参数类型1,参数类型2)或函数类型 函数名(参数类型1 参数名1,参数类型2 参数名2)14.有如下程序 long fib(int n)if(n2)return(fib(n-1)+fib(n-2);else return(2);void main()printf(“%dn”,fib(3);该程序的输出结果是 A)2 B)4 C)
16、6 D)8 答案:B 15.有如下函数调用语句 func(rec1,rec2+rec3,(rec4,rec5);该函数调用语句中,含有的实参个数是 A)3 B)4 C)5 D)有语法错 答案:A 16.C语言允许函数值类型缺省定义,此时该函数隐含的类型是_。A)float型 B)int 型 C)long 型 D)double 型 答案:B 17.以下存储类型只有在使用时才为该类型变量分配内存的是_。A)auto 和 static B)auto和 register C)register和 static D)static和extern 答案:B 18.设有以下函数:fun(int x)作为一个函数
17、的形参答案解析本题综合考查函数的调用方式函数的形参数后则不能再使用该形参变量实参可以是常量变量表达式函数等无论实上顺序上应严格一致否则会发生类型不匹配的错误函数调用中发生的数精品资料 欢迎下载 int y=0;static int z=2;y+;z+;return(x+y+z);若在下面主程序中调用该函数,则输出结果是_。main()int x=3,k;for(k=1;k=3;k+)printf(%dn,fun(x);A)7 B)7 C)7 D)7 8 9 10 7 9 11 13 7 答案:A 19.运行下面程序:int ff(int n)static int f=1;f=f*n;retur
18、n f;main()int k;for(k=1;k0&an。请填空完善函数fun()的功能。例如:m=12,n=8时,运行结果应该是495.000000。#include#include float fun(int m,int n)int i;double p=1.0;for(i=1;i=m;i+)【3】;for(i=1;i=n;i+)【4】;for(i=1;i=m-n;i+)p=p/i;return p;main()clrscr();printf(p=%fn,fun(12,8);答案:【3】p=p*i 【4】p=p/i 解析:本题中,欲求 p 的值,需要先求 m,n,m-n的阶乘值,可用循环
19、语句实现。3.下面函数的功能是将一个字符串的内容颠倒过来,请填空。void fun(char str)int i,j,【5】;for(i=0,j=【6】;ij;i+,j-)k=stri;stri=strj;strj=k;答案:【5】k 【6】strlen(str)-1 4.下面函数是一个求阶乘的递归调用函数。请填空。int fun(int k)if(k=1)【7】;else return(【8】);答案:【7】return 1 【8】k*fun(k-1)作为一个函数的形参答案解析本题综合考查函数的调用方式函数的形参数后则不能再使用该形参变量实参可以是常量变量表达式函数等无论实上顺序上应严格一致
20、否则会发生类型不匹配的错误函数调用中发生的数精品资料 欢迎下载 5.下列给定程序中,函数fun()的功能是:通过某种方式实现两个变量值的交换,规定不允许增加语句和表达式。请填空完善函数fun()的功能。例如变量a初值为8,b初值为3,程序运行后a中的值为3,b中的值为8。试题程序:#include#include int fun(int*x,int y)【9】t;t=*x;*x=y;return(t);main()int a=3,b=8;printf(%d%dn,a,b);b=fun(【10】,b);printf(%d%dn,a,b);答案:【9】int 【10】&a【解析】填空1:根据题目的
21、意思,这里应该是声名一个新的变量t,由后面的赋值语句以及返回语句可以明白这个变量应该是整型的(因为函数的返回值类型是int)。填空2:根据题目的意思,此处是子函数的返回语句,由C语言的知识,每个语句的结尾都应该使用;。填空3:fun()函数的调用方式说明fun()函数的参数应当为指针类型,即应该把变量的地址作为参数传递(符号&是取地址操作)。四.阅读程序题。1.阅读下面程序,在程序执行后的结果为 阅读下面程序,则执行后的结果为#include stdio.h main()fun3(fun1(),fun2();fun1()int k=20;return k;fun2()int a=15;retu
22、rn a;fun3(int a,int b)int k;k=(a-b)*(a+b);printf(%dn,k);A)0 B)184 作为一个函数的形参答案解析本题综合考查函数的调用方式函数的形参数后则不能再使用该形参变量实参可以是常量变量表达式函数等无论实上顺序上应严格一致否则会发生类型不匹配的错误函数调用中发生的数精品资料 欢迎下载 C)175 D)编译不通过 答案:C 2.阅读下列程序,则运行结果为#include stdio.h fun()static int x=5;x+;return x;main()int i,x;for(i=0;i2)return(fun(n-1)+fun(n-2
23、);else return(2);main()printf(%ldn,fun(5);答案:10【命题目的】考查对于函数的递归的掌握情况。【解题要点】这是使用递归算法求著名的菲波拉奇数列,并要熟悉函数的递归方法的调用。【考点链接】递归的函数调用必须要有使递归结束的条件。4.阅读下面程序,则程序的执行结果为#include stdio.h main()int a=30,b=20,z;z=fun(a+b,a-b);作为一个函数的形参答案解析本题综合考查函数的调用方式函数的形参数后则不能再使用该形参变量实参可以是常量变量表达式函数等无论实上顺序上应严格一致否则会发生类型不匹配的错误函数调用中发生的数精
24、品资料 欢迎下载 printf(%d n,z);fun(int a,int b)int z;z=a/b;return z;答案:5【命题目的】考查对于函数的调用和返回值的掌握情况。【解题要点】函数调用的时候,函数名字必须与所调用的函数名完全一致,形参与实参类型要一致,在没有给出函数返回值类型的情况下,默认为整形,当返回值为整型的函数放到主函数后面时,可以不需要事先说明就调用这个函数。【考点链接】retrun既可以返回一个普通常量,也可以返回一个指针变量。5.阅读下面程序,则程序的执行结果为 main()int i=2,p;int j,k;j=i;k=+i;p=f(j,k);printf(%d,
25、p);int f(int a,int b)int c;if(ab)c=1;else if(a=b)c=0;else c=-1;return(c);答案:-1 解析:函数调用相当于f(2,3),程序运算应得结果为“-1”。五编写程序题。1.请编一个函数void fun(int ttMN,int ppN),tt 指向一个M 行N列的二维数组,求出二维数组每列中最大元素,并依次放入pp所指的一维数组中。二维数组中的数已在主函数中给出。【解析】本题中函数的功能是求出二维数组中每列的最大元素。首先,假设各列中的第一个元素最大,然后利用行标值的移动来依次取得各列中其他元素的值,并与假设的最大值进行比较,如
26、果遇到更大的,则把这个更大的元素看做当前该列中最大的元素,继续与该列中其他元素比较。作为一个函数的形参答案解析本题综合考查函数的调用方式函数的形参数后则不能再使用该形参变量实参可以是常量变量表达式函数等无论实上顺序上应严格一致否则会发生类型不匹配的错误函数调用中发生的数精品资料 欢迎下载#include#include#define M 3#define N 4 void fun(int ttMN,int ppN)int i,j,max;for(j=0;jN;j+)max=tt0j;/*假设各列中的第一个元素最大*/for(i=0;imax)/*如果各列中的其他元素比最大值还大,则将这个更大的
27、元素看做当前该列中最大的元素*/max=ttij;ppj=max;/*将各列的最大值依次放入pp数组中*/main()int tMN=68,32,54,12,14,24,88,58,42,22,44,56;int pN,i,j,k;clrscr();printf(The riginal data is:n);for(i=0;iM;i+)for(j=0;jN;j+)printf(%6d,tij);printf(n);fun(t,p);printf(nThe result is:n);for(k=0;kN;k+)printf(%4d,pk);printf(n);2.编程实现函数fun()的功能:根
28、据整型形参m,计算如下公式的值。y=1-1/(2 2)+1/(3 3)-1/(4 4)+(-1)(m+1)/(m m)例如:m 中的值为5,则应输出0.838611。作为一个函数的形参答案解析本题综合考查函数的调用方式函数的形参数后则不能再使用该形参变量实参可以是常量变量表达式函数等无论实上顺序上应严格一致否则会发生类型不匹配的错误函数调用中发生的数精品资料 欢迎下载#include#include double fun(int m)double y=1.0;double j=1.0;int i;for(i=2;iv)t=u;u=v;v=t;a=u;b=v;while(r=b%a)!=0)b=
29、a;a=r;return(a);int lcd(int u,int v,int h)return(u*v/h);main()int u,v,h,l;作为一个函数的形参答案解析本题综合考查函数的调用方式函数的形参数后则不能再使用该形参变量实参可以是常量变量表达式函数等无论实上顺序上应严格一致否则会发生类型不匹配的错误函数调用中发生的数精品资料 欢迎下载 scanf(%d,%d,&u,&v);h=hcf(u,v);printf(H.C.F=%dn,h);l=lcd(u,v,h);printf(L.C.D=%dn,l);4.写一个判断素数的函数,在主函数输入一个整数,输出是否是素数的信息。解:/*判
30、断整数是否为素数 */#include stdio.h int prime(int number)int flag=1,n;for(n=2;nnumber/2&flag=1;n+)if(number%n=0)flag=0;return(flag);main()int number;printf(请输入一个正整数:n);scanf(%d,&number);if(prime(number)printf(n%d 是素数。,number);else printf(n%d 不是素数。,number);5.写一函数,使输入的一个字符串按反序存放,在主函数中输入和输出字符串。解:/*字符串反序存放*/#in
31、clude#include void inverse(char str)char t;int i,j;for(i=0,j=strlen(str);istrlen(str)/2;i+,j-)t=stri;stri=strj-1;作为一个函数的形参答案解析本题综合考查函数的调用方式函数的形参数后则不能再使用该形参变量实参可以是常量变量表达式函数等无论实上顺序上应严格一致否则会发生类型不匹配的错误函数调用中发生的数精品资料 欢迎下载 strj-1=t;main()char str100;printf(输入字符串:n);scanf(%s,str);inverse(str);int k=strlen(s
32、tr);printf(转换后的字符串是:%sn,str);6.编写函数 fun,它的功能是:求出 ss 所指字符串中,指定字符的个数,并返回此值.例如:若输入字符串:123412132,输入字符为:1,则输出:3 参考答案:#include stdio.h#define M 81 int fun(char ss,char c)int i,n=0;for(i=0;ssi;i+)if(ssi=c)n+;return n;void main()char aM,ch;clrscr();printf(nPlease enter a string:);gets(a);printf(nPlease ente
33、r a char:);ch=getchar();printf(nThe number of the char is:%dn,fun(a,ch);7.输入一行字符,分别统计出其中英文字母、空格、数字和其它字符的个数。解:#include#include int main()作为一个函数的形参答案解析本题综合考查函数的调用方式函数的形参数后则不能再使用该形参变量实参可以是常量变量表达式函数等无论实上顺序上应严格一致否则会发生类型不匹配的错误函数调用中发生的数精品资料 欢迎下载 int i=0,x=0,y=0,z=0;char ch;printf(nnttt请输入一组字符.!n);do ch=get
34、char();if(ch=a&ch=A&ch=0)|(ch=9)/*注意.将 判断空格 与 判断数值 的判断代码 进行位置调换.结果会不准确*/+x;else /*既没有字母也没有数值.那就是其他字符咯.但这样.好像不太准确.*/+z;while(ch!=n);printf(字 符 为%d 数 字 为%d 空 格 为%d 其 他 字 符 为%d n,i,x-1,y,z);system(pause);8.编写函数 fun()实现功能:求出一个 2M整型二维数组中最大元素的值,并将此值返回调用函数。#define M 4#include fun(int a2M)int i,j,max=0;for(
35、i=0;i2;i+)for(j=0;jM;j+)if(maxaij)max=aij;return max;main()FILE*wf;作为一个函数的形参答案解析本题综合考查函数的调用方式函数的形参数后则不能再使用该形参变量实参可以是常量变量表达式函数等无论实上顺序上应严格一致否则会发生类型不匹配的错误函数调用中发生的数精品资料 欢迎下载 int arr2M=5,8,3,45,76,-4,12,82;printf(max=%dn,fun(arr);wf=fopen(out.dat,w);fprintf(wf,%d,fun(arr);fclose(wf);9.编写函数实现功能:按以下递归公式求函数
36、值。152)1()(nFunnFun 例如:当给n输入5时,函数值为240;当给n输入3时,函数值为60。解:试题程序:#include fun(int n)int c;if(n=1)c=15;else c=fun(n-1)*2;return(c);main()int n;printf(Enter n:);scanf(%d,&n);printf(The result:%dnn,fun(n);10.请编写函数fun(),它的功能是求Fibonacci 数列中小于t 的最大的一个数,结果由函数返回。其中Fibonacci 数列F(n)的定义为 F(0)0,F(1)1 F(n)=F(n-1)+F(n
37、-2)例如:t=1000时,函数值为987。【解析】根据所给数列定义不难发现,该数列最终的结果是由两个数列之和组成,所以可以在循环内部始终把c看成是前两项之和(即第n项),而a始终代表第n-2项,b始终代表第n-1项(通过不断地重新赋值来实现)。应注意,退出循环时得到的数c是大于指定比较的数的最小的数,而它的前一个数就是小于指定比较的数的最大的数。源程序:#include#include#include int fun(int t)int a=1,b=1,c=0,i;/*a 代表第n-2项,b代表第n-1项,c代表第n项*/作为一个函数的形参答案解析本题综合考查函数的调用方式函数的形参数后则不
38、能再使用该形参变量实参可以是常量变量表达式函数等无论实上顺序上应严格一致否则会发生类型不匹配的错误函数调用中发生的数精品资料 欢迎下载 /*如果求得的数c比指定比较的数小,则计算下一个Fibonacci 数,对a,b 重新置数*/do c=a+b;a=b;b=c;while(ct);/*如果求得的数c比指定比较的数大时,退出循环*/c=a;/*此时数c的前一个Fibonacci数为小于指定比较的数的最大的数*/return c;main()int n;clrscr();n=1000;printf(n=%d,f=%dn,n,fun(n);11.编程通过调用函数实现100到1000之间所有的水仙花
39、数的输出,所谓水仙花数是指一个3位数,其各位数字立方和等于该数本身.例如,153 是一水仙花数,因为153=1的立方+5的立方+3的立方.解:#include void shxs(void)int i,j,k,n;for(n=100;n1000;n+)i=n/100;j=n/10-i*10;k=n%10;if(n=i*i*i+j*j*j+k*k*k)printf(%d是水仙花数t,n);printf(n);void main()shxs();12.写一函数,连接两个字符串。解:#include#include 作为一个函数的形参答案解析本题综合考查函数的调用方式函数的形参数后则不能再使用该形参
40、变量实参可以是常量变量表达式函数等无论实上顺序上应严格一致否则会发生类型不匹配的错误函数调用中发生的数精品资料 欢迎下载 str_cat(char a,char b)int i=0,m,n;m=strlen(a)+1;n=strlen(b);for(i=0;in;i+)am+i=bi;for(i=0;im+n;i+)printf(%c,ai);printf(n);main()char a80,b40;printf(Please input a:n);gets(a);printf(Please input b:n);gets(b);str_cat(a,b);13.求方程ax2+bx+c=0的根,
41、用三个函数分别求当b2-4ac大于0、等于0和小于0时的根,并输出结果。从主函数输入a、b、c的值。解:#include#include void root(double a,double b,double c)double diata,x1,x2,firstp;if(a=0)printf(Input error);else diata=b*b-4*a*c;firstp=-2*a/b;if(fabs(diata)1e-6)x1=firstp+sqrt(diata)/(2*a*c);x2=firstp-sqrt(diata)/(2*a*c);printf(有两个不相等的根:x1=%.2f,x2=
42、%.2f,x1,x2);else x1=sqrt(-diata)/(2*a*b);printf(有两个复根:x1=%.2f+%.2fi,x2=%.2f-%.2fi,firstp,x1,firstp,x1);作为一个函数的形参答案解析本题综合考查函数的调用方式函数的形参数后则不能再使用该形参变量实参可以是常量变量表达式函数等无论实上顺序上应严格一致否则会发生类型不匹配的错误函数调用中发生的数精品资料 欢迎下载 void main(void)double a,b,c;puts(Please input a b c like 1.2 3 4);scanf(%f%f%f,&a,&b,&c);root(a,b,c);作为一个函数的形参答案解析本题综合考查函数的调用方式函数的形参数后则不能再使用该形参变量实参可以是常量变量表达式函数等无论实上顺序上应严格一致否则会发生类型不匹配的错误函数调用中发生的数