第6章--函数--参考答案
- 格式:doc
- 大小:48.50 KB
- 文档页数:6
c语言《程序设计基础》课后习题参考答案与解析《程序设计基础》习题参考答案与部分解析第1章 C 语言概述一、填空a) C源程序的基本单位是函数。
b) 一个C程序中至少应包括一个 main函数。
c) 在C语言中,输出操作是有库函数 printf( )函数完成。
二、单选题1、A2、C3、B解析:第1题答案:A 。
因为一个C程序总是从main函数开始执行的,而不论main函数在程序中的位置。
且到main函数结束。
第2题答案:C 。
因为 main函数没有限制必须位于程序的最前面。
C程序书写自由,一行内可写几个语句。
在对一个C 程序进行编译的过程中,无法检查注释当中的拼写错误。
不过C语言本身并没有输入输出语句,输入输出是由函数完成的。
第3题答案:B。
因为一个C语言程序是由若干个函数组成的。
但至少包含一个main 函数,且main函数的位置不限。
三、编程题1、编写一个输出“Welcome to C!”信息的小程序。
解:程序如下#include “stdio.h”main( ){1printf(“Welcome to C!”) ;}2、已知三角形的三边长分别为3,4,5,试用海轮公式编程求其面积。
海伦公式为:S?= ,其中s= (a+b+s)/2 ;解:程序如下#include “math.h”#include “stdio.h”main( ){int a , b , c ; /* a ,b,c 3个整型变量表示三角形的3条边。
*/float s ,s1 ; /* s1作为面积变量,s 作为中间变量是都应该是实形*/a=3 ; b= 4; c=5 ;s= (a+b+c)/2.0 ;s1= sqrt(s*(s-a)*(s-b)*(s-c)); /* sqrt函数完成开平方根功能。
*/printf(“area=%f\n”,s1);}2第2章程序设计基础知识一、单选题1、C2、A3、C4、A5、C6、C7、D8、C9、D 10、A 11、D 12、A 13、C 14、C 15、B A 16、B 17 D解析:1. 答案:C。
思考与练习 6-11. 回答下列问题:① 定积分作为积分和的极限,能否表示为()∑=∞→∆nk kkn xf 1lim ξ?答:不能.因为n →∞并不能推出0T →.② 积分和()∑=∆nk k k x f 1ξ的值与哪些因素有关?定积分()⎰badx x f 的值与哪些因素有关?答:()∑=∆nk k k x f 1ξ与函数,区间和区间的分割和取的点有关。
()⎰badx x f 只与函数和区间有关.③ 将区间[]b a ,n 等分,[].,,2,1,,,1n k x x n ab x k k k k =∈-=∆-ξ,积分和()∑=∆nk k k x f 1ξ是否为定值?答:不是.因为和()∑=∆nk kkxf 1ξ还与k ξ的取法有关.④ 在定积分的定义给出之前,如下说法是否合理?为什么?“曲边梯形()x f y ≤≤0”,[]b a x ,∈的面积不大于矩形[]b a x M y ,,0∈≤≤的面积,其中[](){}x f M b a x ,max ∈=.答: 不合理.因为在定积分定义给出之前,曲边梯形的面积没有定义,当然也就不能与矩形的面积比较大小.⑤ 0→T 是什么意思?当0→T 时,积分和()∑=∆nk kkxf 1ξ的极限是J 是什么意思?答:}{max 1i ni x T ∆=≤≤,0→T 表示对区间分割后最大的区间的长度都趋于0.设f 是定义在],[b a 上的一个有界函数,J 是一个确定的实数.若对任给的正数ε,总存在某一正数δ,使得对],[b a 的任何分割T ,以及在其上任意选取的点集}{i ξ,只要δ<T ,就有εξ<-∆∑=ni iiJ xf 1)(,则称函数f 在区间],[b a 上可积或黎曼可积;数J 称为f 在],[b a 上的定积分或黎曼积分,记作()baJ f x dx =⎰.2. 按定积分定义证明:⎰-=baa b k kdx )(.证明:0ε∀>,对[,]a b 作任意分割T ,并在其上任意选取点集{}i ξ,因为111(),[,],()()n n ni i i i i i i f x k x a b f x k x k x k b a ξ===≡∈∆=∆=∆=-∑∑∑,对任意的0ε>,任意取定0δ>,当T δ<时,有()1()()()0niii f x k b a k b a k b a ξε=∆--=---=<∑,所以函数()f x k =在[,]a b 上可积,且()bakdx k b a =-⎰3. 通过对积分区间作等分分割,并取适当的点集}{i ξ,把定积分看作是对应的积分和的 极限,来计算下列定积分:①⎰13dx x ; ②⎰<<bab a x dx)0(2, 提示:()i i i i i i i i x x x x x x x x 111112212-=-+∆---; ()i i i i i i i i x x x x x x x x 1111212121-=-+∆----. 解 ①将[0,1]n 等分,分点为,0,1,2,,1k n =-.在区间1,k k n n -⎡⎤⎢⎥⎣⎦上取k n 作为k ξ 而 313011l i m nn k k x d x n n →∞=⎛⎫=⋅ ⎪⎝⎭∑⎰3411l i m n n k k n →∞==∑224111lim (1)44n n n n →∞=⋅+=.②取i ξ=后211110111111()nn i i i i i i n x x x x x x a b -==-⎛⎫⎛⎫-=-=-=-⎪⎝⎭∑∑ 将[,]a b n 等分,分点为()ka b a n+-,0,1,2,,k n =.在区间1[,]k k x x -作为k ξ则212111lim ()n b k k a n k dxx x x a b -→∞=⎛⎫=-=-∑⎰ 4. 已知一质量不均匀分布的棒的线密度x =ρ,长为l ,试求该棒的质量.解:所求质量为:22l xdx M l==⎰思考与练习 6-21. 计算下列积分:①⎰+10)32(dx x ; ②⎰+10211dx x ; ③⎰22e e x dx ; ④⎰--102dx e e xx ; ⑤⎰-3211πdx x; ⑥⎰⎪⎪⎭⎫⎝⎛+942123dx x x ; ⑦()⎰+π0sin 2cos dx x x . ⑧⎰1dx a x; ⑨⎰22sin πxdx ; ⑩ ⎰+21211dx x.解①()()112(23)313004x dx x x +=+=+-+=⎰;②4arctan 111102π==+⎰x dx x ; ③()()22222ln 2ln ln 2212e e e e dx x e e x==-=-=⎰;④()()111001001111()122222x x x x e e dx e e e e e e e e -----=+=+-+=+-⎰;⑤3arcsin arcsin 1130302πππ==-⎰x dx x;⑥()93131319222222449944301020dx x x ⎡⎤⎛⎫⎛⎫⎛⎫+=+=+-+=-=⎢⎥ ⎪ ⎪ ⎪⎢⎥⎝⎭⎝⎭⎝⎭⎣⎦⎰; ⑦()()()00cos 2sin (sin 2cos )sin 2cos sin02cos04x x dx x x ππππ+=-=---=⎡⎤⎣⎦⎰; ⑧aa a a dx a x xln 1ln 1010-==⎰;⑨()22011sin 2cos2cos cos0122xdx x πππ⎛⎫=-=--= ⎪⎝⎭⎰;⑩()2211ln ln(2ln(1x =+=+-+=⎰。
6-1 设发送的二进制信息为1011001,试分别画出OOK 、2FSK 、2PSK 及2DPSK 信号的波形示意图,并总结其时间波形上各有什么特点。
解 OOK 、2FSK 、2PSK 及2DPSK 信号的波形示意图如图6-18所示。
tttt图6-18 信号波形图6-2 设某OOK 系统的码元传输速率为1000B ,载波信号为A cos(4π×106t )。
(1)每个码元中包含多少个载波周期? (2)求OOK 信号的第一零点带宽。
解:(1) 由题意知66410210()2c f Hz ππ⨯==⨯1000()B R B =故每个码元包含2000个载波周期。
(2) OOK 信号的第一零点带宽为222000()B sB R Hz T === 6-3 设某2FSK 传输系统的码元速率为1000B ,已调信号的载频分别为1000Hz 和2000Hz 。
发送数字信息为1011010B 。
(1)试画出一种2FSK 信号调制器原理框图,并画出2FSK 信号的时域波形图; (2)试讨论这时的2FSK 信号应选择怎样的解调解调器? (3)试画出2FSK 信号的功率谱密度示意图。
解:(1) 2FSK 信号可以采用模拟调频的方式产生,也可以采用数字键控的方式产生。
数字键控方式的调制器原理框图如图6-19所示。
图6-19键控法产生2FSK 信号的原理图由题意知,码元传输速率R B =1000B ,若设“1”码对应的载波频率为f 1=1000Hz ,“0”码对应的载波频率为f 1=2000Hz ,则在2FSK 信号的时间波形中,每个“1”码元时间内共有1个周期的载波,每个“0”码元时间内有2个周期的载波。
2FSK 信号的时间波形如图6-20所示。
【注:实际中键控法的波形一般不连续。
】t2FSK图6-20 2FSK 信号的时间波形(2) 由于2FSK 信号的频谱有较大的重叠,若采用非相干解调是上下支路有较大串扰,使解调性能下降。
一次函数的应用——动点问题一、单选题1.在平面直角坐标系中,已知一次函数y=﹣34x+6与x,y轴分别交于A,B两点,点C (0,n)是y轴上一点,把坐标平面沿直线AC折叠,点B刚好落在x轴上,则点C的坐标是()A. (0,3)B. (0,43) C. (0,83) D. (0,73)【答案】C【解析】【解答】解:过C作CD⊥AB于D,如图,对于直线y=﹣34x+6,当x=0,得y=6;当y=0,x=8,∴A(8,0),B(0,6),即OA=8,OB=6,∴AB=10,又∵坐标平面沿直线AC折叠,使点B刚好落在x轴上,∴AC平分∠OAB,∴CD=CO=n,则BC=6﹣n,∴DA=OA=8,∴DB=10﹣8=2,在Rt△BCD中,DC2+BD2=BC2,∴n2+22=(6﹣n)2,解得n= 83,∴点C的坐标为(0,83).故答案为:C.2.如图,函数y=mx﹣4m(m是常数,且m≠0)的图象分别交x轴、y轴于点M,N,线段MN上两点A,B(点B在点A的右侧),作AA1⊥x轴,BB1⊥x轴,且垂足分别为A1,B1,若OA1+OB1>4,则△OA1A的面积S1与△OB1B的面积S2的大小关系是()A. S1>S2B. S1=S2C. S1<S2D. 不确定的【答案】A【解析】【解答】解:由题意可得,m<0,设A(a,ma﹣4m),B(b,mb﹣4m),a<b,∵S1= 12a×(ma﹣4m),S2= 12b(mb﹣4m)∴S1﹣S2= 12(ma2﹣mb2)﹣124m(a﹣b)=(a﹣b){ 12m(a+b)﹣124m}.又∵OA1+OB1>4,∴12m(a+b)﹣124m= 12m(a+b﹣4)<0,∴S1﹣S2>0,故选A.3.如图,正方形ABCD的边长为4,P为正方形边上一动点,沿A→D→C→B→A 的路径匀速移动,设P点经过的路径长为x,△APD的面积是y,则下列图象能大致反映y与x的函数关系的是()A. B.C. D.【答案】B【解析】【解答】解:①当点P由点A向点D运动时,y的值为0;②当点P在DC上运动时,y随着x的增大而增大;③当点p 在CB 上运动时,y=AB•AD ,y 不变; ④当点P 在BA 上运动时,y 随x 的增大而减小. 故选B .二、填空题4.如图,直线y=﹣ 12 x+3与坐标轴分别交于点A 、B ,与直线y=x 交于点C ,线段OA 上的点Q 以每秒1个长度单位的速度从点O 出发向点A 作匀速运动,运动时间为t 秒,连接CQ .若△OQC 是等腰直角三角形,则t 的值为________.【答案】2或4【解析】【解答】∵由 {y =−12x +3y =x,得 {x =2y =2 , ∴C (2,2);如图1,当∠CQO=90°,CQ=OQ ,∵C (2,2), ∴OQ=CQ=2, ∴t=2;如图2,当∠OCQ=90°,OC=CQ , 过C 作CM ⊥OA 于M ,∵C (2,2), ∴CM=OM=2, ∴QM=OM=2, ∴t=2+2=4,即t的值为2或4,故答案为:2或4.5.如图,已知点C为直线y=x上在第一象限内一点,直线y=2x+1交y轴于点A,交x轴于B,将直线AB沿射线OC方向平移√2个单位,则平移后直线的解析式为________。
1.6.3习题解答编程题1.写两个函数,分别求两个整数的最大公约数和最小公倍数,用主调函数调用这两个函数,并输出结果。
两个整数由键盘输入。
分析:求两个数a和b的最大公约数:设这个数为x,则x一定小于等于a和b中的较小者min(a,b)。
在区间[1, min(a,b)]中能找到的最后一个同时被a和b整除的那个数,就是a和b的最大公约数x。
求两个数a和b的最小公倍数:设这个数为x,则x一定大于等于a和b中的较大者max(a,b),而小于等于a*b。
在区间[max(a,b), a*b ]中找到的第一个能同时整除a和b的那个数,就是a和b的最小公倍数x。
参考程序代码:#include "stdio.h"f1(int a, int b)/*求最大公约数*/{int x,i;for(i=1;i<=(a<=b?a:b);i++){if(a%i==0&&b%i==0){x=i;}}printf("\n最大公约数为: %d\n",x);}f2(int a, int b)/*求最小公倍数*/{int i,x;for(i=((a>b)?a:b);i<=a*b;i++){if(i%a==0&&i%b==0){x=i;break;}}printf("\n最小公倍数为: %d\n",x);}void main(){int a,b;printf("\n请输入两个数:\n");printf("a=");scanf("%d", &a);printf("b=");scanf("%d", &b);f1(a, b);f2(a, b);}运行结果:请输入两个数:a=4b=16最大公约数为:4最小公倍数为:162.编写一个函数,其功能是对于给定的一个时间数(秒为单位),以“时:分:秒”的格式输出。
(2008•上海)如图,在平面直角坐标系中,点O为坐标原点,以点A(0,-3)为圆心,5为半径作圆A,交x轴于B,C两点,交y轴于点D,E两点.(1)求点B,C,D的坐标;(2)如果一个二次函数图象经过B,C,D三点,求这个二次函数解析式;(3)P为x轴正半轴上的一点,过点P作与圆A相离并且与x轴垂直的直线,交上述二次函数图象于点F,当△CPF中一个内角的正切之为12时,求点P的坐标.由题意可知AC=5,OA=3,根据勾股定理可知,OC=4,可知C点坐标,同理求出B点坐标,OA=3,AD=5,求出OD=2,求出D点坐标.(1)∵点A的坐标为(0,-3),线段AD=5,∴点D的坐标(0,2).连接AC,在Rt△AOC中,∠AOC=90°,OA=3,AC=5,∴OC=4.∴点C的坐标为(4,0);同理可得点B坐标为(-4,0).(2)已知B,C,D三点坐标,设出解析式,代入即可求出函数解析式.设所求二次函数的解析式为y=ax2+bx+c,由于该二次函数的图象经过B,C,D三点,则0=16a-4b+c0=16a+4b+c2=c解得a=-18b=0c=2∴所求的二次函数的解析式为y=-18x2+2;(3)根据图象可知,正切为1,则∠cpf为直角,设出P点坐标,然后表示出CP,PF的长度,然后分情况讨论PFCP=12还是CPPF=12,或是两者都可,求出P点坐标.设点P坐标为(t,0),由题意得t>5,且点F的坐标为(t,-18t2+2),PC=t-4,PF=18t2-2,∵∠CPF=90°,∴当△CPF中一个内角的正切值为12时,①若CPPF=12时,即t-418t2-2=12,解得t1=12,t2=4(舍);②当PFCP12时,18t2-2t-4=12解得t1=0(舍),t2=4(舍),所以所求点P的坐标为(12,0).解答解:(1)∵点A的坐标为(0,-3),线段AD=5,∴点D的坐标(0,2).(1分)连接AC,在Rt△AOC中,∠AOC=90°,OA=3,AC=5,∴OC=4.(1分)∴点C的坐标为(4,0);(1分)同理可得点B坐标为(-4,0).(1分)(2)设所求二次函数的解析式为y=ax2+bx+c,由于该二次函数的图象经过B,C,D三点,则0=16a-4b+c0=16a+4b+c2=c(3分)解得a=-18b=0c=2∴所求的二次函数的解析式为y=-18x2+2;(1分)(3)设点P坐标为(t,0),由题意得t>5,(1分)且点F的坐标为(t,-18t2+2),PC=t-4,PF=18t2-2,∵∠CPF=90°,∴当△CPF中一个内角的正切值为12时,①若CPPF=12时,即t-418t2-2=12,解得t1=12,t2=4(舍);(1分)②当PFCP=12时,18t2-2t-4=12解得t1=0(舍),t2=4(舍),(1分)所以所求点P的坐标为(12,0).(1分)。
1.在C语言中,全局变量的存储类别是:A) sta tic B) externC) void D) registerA2.C语言中,凡未指定存储类别的局部变量的隐含存储类别是:A) 自动(auto) B) 静态(static)C) 外部(extern) D) 寄存器(register)A3. 在一个C源程序文件中,要定义一个只允许本源文件中所有函数使用的全局变量,则该变量需要使用的存储类别是:________。
A) extern B) register?C) auto D) staticD4. 若有以下调用语句,则正确的fun函数首部是main(){ ∶∶int a;float x;∶∶fun(x,a);`∶∶}A) void fun(int m,float x) B) void fun(float a,int x)C) void fun(int m,float x[]) D) void fun(int x,float a)B5. 有如下函数调用语句func(rec1,rec2+rec3,(rec4,rec5));该函数调用语句中,含有的实参个数是A) 3 B) 4C) 5 D) 有语法错误、A6. 以下程序的运行结果是。
#include <>main(){ int k=4,m=1,p;p=func(k,m); printf("%d, ",p);p=func(k,m); printf("%d\n",p); }func(int a,int b){ static int m=0,i=2;i+=m+1;^m=i+a+b;return m; }A) 8,17, B) 8,17C) 8,8 D) 4,1B7. 函数fun的功能是:根据以下公式计算并返回S,n通过形参传入,n的值大于等于0。
划线处应填________。
1 1 1 1S=1 - ─+ ─- ─+ …───@3 5 7 2n-1float fun(int n){ float s=,w,t,f=;int i;for(i=0;i<n;i++){f=-f;w=f/(2*i+1);s+=w; }____________; }A) return (f) B) return (S)】C) return (s) D) return (w)C8. 有如下程序int func(int a,int b){ return(a+b); }main(){ int x=2,y=5,z=8,r;r=func(func(x,y),z);printf("%d\n",r); }该程序的输出结果是__________。
?A) 12 B) 13C) 14 D) 15D9. 以下函数返回a数组中最小值所在的下标,在划线处应填入的是________。
fun( int a[],int n){ int i,j=0,p;p=j;for(i=j;i<n;i++))if(a[i]<a[p])_______________;return (p); }A) i=p B) a[p]=a[i]C) p=j D) p=iD10. 设在主函数中有以下定义和函数调用语句,且fun函数为void类型;正确的fun函数的首部应为________(要求形参名为b)。
main(){ double s[10][22];'int n;∶∶fun(s);∶∶}A) void fun(double b[22])B) void fun(double b[][22])C) void fun(double b[][])&D) void fun(double b[22][])B11. 以下程序的输出结果是________。
void fun(){ static int a=0;a+=2;printf("%d",a); }main(){ int cc;for(cc=1;cc<4;cc++) fun( );>printf("\n"); }A) 2222 B) 2468C) 222 D) 246D12. 以下程序的输出结果是#include <>main(){ char a[]="abcdefghi"; int k;fun(a); puts(a); },fun( char s[]){ int x,y; char c;for(x=0,y=(strlen(s)-1)/2; x<y;x++,y--){c=s[y];s[y]=s[x];s[x]=c; } }A) ihgfedcba B) abcdefghiC) edcbafghi D) ihgfefghiC…13. 以下程序的输出结果是________。
int d=1;fun( int p){ static int d=5;d+=p;printf("%d ",d);return (d); }main(){ int a=3; printf("%d \n",fun(fun(d))); }A) 6 11 11 B) 6 6 9。
C) 6 12 12 D) 6 6 15C14. 下列程序的输出结果是________。
int t(int x,int y,int cp,int dp){ cp=x*x+y*y; dp=x*x-y*y; }main(){ int a=4,b=3,c=5,d=6;$t(a,b,c,d);printf("%d %d\n",c,d); }A) 16 9 B) 4 3C) 5 6 D) 25 9C15. 下列叙述中正确的是________。
A) C语言编译时不检查语法B) C语言的子程序有过程和函数两种C) C语言的函数可以嵌套定义D) C语言所有的函数都是外部函数&D16. 以下所列的各函数首部中,正确的是________。
A) void play(var a:Integer,var b:Integer)B) void play(int a,b)C) void play(int a,int b)D) void play(a as integer,b as integer)C17. 以下程序的输出结果是fun(int x,int y,int z){ z=x*x+y*y;}%main(){ int a=31;fun(5,2,a);printf("%d",a); }A) 0 B) 29C) 31 D) 无定值C18. 以下程序输出的结果是________。
long fun(int n)~{ long s;if(n==1||n==2) s=2;else s=n-fun(n-1);return s; }main(){ printf("%ld\n",fun(3));}A) 1 B) 2C) 3 D) 4A;19. 请读程序:#include <>char fun(char c){ if (c<='Z' && c>='A') c-='A'-'a';return (c); },main(){ char s[81]; int k=0;gets(s);while(s[k]){ s[k]=fun(s[k]); putchar(s[k]); k++;}putchar('\n'); }若运行时从键盘上输入OPEN THE DOOR<CR>(<CR>表示回车),则上面程序的输出结果是________。
A) oPEN tHE dOOR B) open the doorC) OPEN THE DOOR D) Open The Door<B20. 请读程序:#include <>f(int b[ ],int n){ int i,r;r=1;for (i=0;i<=n;i++) r=r*b[i];return r; }main(){ int x,a[]={2,3,4,5,6,7,8,9};;x=f(a,4);printf("%d\n",x); }上面程序的输出结果是________。
A) 720 B) 120C) 24 D) 6A21. 有以下程序#inclde <>main()《{int k=4,m=1,p;p=func(k,m); printf("%d, ",p);p=func(k,m); printf("%d\n",p); } func(int a,int b){ static int m=0,i=2;i=m+1;m=i+a+b;return(m); }输出结果是________。
A) 6,6 B) 6,12>C) 6,8 D) 8,8B22. 以下程序的输出结果是________。
#include ""space(char str[ ]){int i,t; char ts[81];"for(i=0,t=0;str[i]!= '\0';i+=2)if(!isspace(str[i]) && str[i]!= 'a')ts[t++]=toupper(str[i]);ts[t]= '\0';strcpy(str,ts); }main(){char s[81]={ "a b c d ef g"};space(s);puts(s);}A) abcdeg B) bcde,C) ABCDE D) BCDED23. 下面函数的功能是________。
sss(char s[ ],char t[ ]){ int i=0;while( t[i]) { s[i]=t[i]; i++ ; }s[i]= '\0'; }A) 求字符串的长度B) 比较两个字符串的大小%C) 将字符串s复制到字符串t中D) 将字符串t复制到字符串s中D24. 下面函数的功能是________。
sss(char s[ ]){ int i=0;while( s[i]) i++ ;return i; }A) 求字符串的长度B) 比较两个字符串的大小*C) 将字符串s逆序存放D) 功能无法确定A25. 设有如下的函数ggg(float x){printf("\n%d",x*x);}则函数的类型________。