《C语言程序设计(第二版)习题参考答案.docx》由会员分享,可在线阅读,更多相关《C语言程序设计(第二版)习题参考答案.docx(46页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、C语言程序设计习题参考答案习题1一、判断题1 .在计算机中,小数点和正负号都有专用部件来保存和表示。2 .二进制是由0和1两个数字组成的进制方式。3 .二进制数的逻辑运算是按位进行的,位与位之间没有进位和借位 的关系。4 .在整数的二进制表示方法中,0的原码、反码都有两种形式。5 .有符号数有三种表示法:原码、反码和补码。6 .常用字符的ASCII码值从小到大的排列规律是:空格、阿拉伯数 字、大写英文字母、小写英文字母。解:1.F 2 , T 3 . T 4 . T 5 . T 6 , T二、单项选择题1 .在计算机中,最适合进行数值加减运算的数值编码是。A.原码B.反码 C.补码D.移码2
2、.英文小写字母m的ASCII码为十进制数109 ,那么英文小写字 母y的ASCII码为十进制数。A. 112 B. 120 C. 121 D. 1223 .关于ASCII码,在计算机中的表示方法准确地描述是。A.使用8位二进制数,最右边一位为1B.使用8位二进制数,最左边一位为1C.使用8位二进制数,最右边一位为0D.使用8位二进制数,最左边一位为04 .设在机器字长4位,X = 0111B , Y=1011B ,那么以下逻辑运算 中,正确的选项是OA. XaY=1000 B. XvY = llll C. XY = 0011 D. Y = 10005 .以下表达中正确的选项是()o解:$ n2
3、 . int i = 123 ; float x=-;语句,xprintf(i=%5d x=%n”,i,x); 的输出结果是。解:i= 123 x=3 . char c=a ; int a=65 ;语句 putchar(c+l);putchar(a); 的输出结果是。解:bA4 . int a=98 ;语句 printf( d,%c,%o,%x aa + l,a+2,a + 3);的输出结果是 o解:98,c,144,655 . int k; float f;语句 scanf( 3d%*4d%6f,&k,&f);执行时输入.43 /贝!J k= , f=o解:k=123 f=6 .使用pow(
4、)函数时,程序的开头必须写一条预处理命令:O解:#include 5 .填空题。(l)int i=123fj=45;函数printf(d,%dn”,i,j);的输出结果是。解:123,45(2)int i = 123; float x=;语句 printf(i=%5d x=%7.4fn-/i/x);的输出结果是。解:i= 123 x=(3)float alfa=60zpi=3习题3一、根据以下数学式,写出C的算术表达式。历 n2-ab + c + d-(a2+3)x/2芦 Jl sin(x)产 x6-e5 二-tan士cd解:-(a2+b2)xy4 的 C 表达式:-(a*a + b*b)*p
5、ow(y/4).的 C 表达式:(sqrt(2) + 10*10)/(pow(tan(x),-l)+tan x + 7TJl sin。)产 的 C 表达式:sqrt(pow (fabs (sin(x)Jx6-e5 的 C 表达式:pow(x,6)-exp(5)1 , , ab + c + d2 7 的 C 表达式:2*a*b+c+d)/(a+2*b-(c+d)/c/d) c + da + 2bcd二、按照要求,写出以下C的表达式。1 .写出int类型变量x为奇数”的表达式。解:x%2= = l2 .Int类型变量x、y、z ,写出描述又或y中有且仅有一个小于z的表达式。解:x =z|x =z&
6、y =01:-l)*(y =Oy:-y)5 .条件-5vxw3所对应的C逻辑表达式。解:-5=x&x21&yba:b)c(a ba:b):c10 .假设字符变量ch为小写字母,那么将其转换为对应的大写字母。解:ch=ch=a&ch = z,ch-32:ch三、单项选择题1 .设int x=3 , y=4 , z=5 ;,以下表达式中值为0的是()。A .B. x=y C . x|y+z&y-z D.!(x =y&chB&!y 的值是()。A . 0B. 1C . 假D.真”3 .判断char型变量c为数字字符的正确表达式为()。A . 0=c = 9 B . 0=c&c = 0,|c=0&c=
7、94 .以下运算符中,优先级最低的是()。A . :B &C.=D . *=5 .假设有条件表达式xa +:b,那么以下表达式中()等价于表 达式X。A . x=0 B . x!=0C . x= = lD . x! = l6 .有定义 int k=4 , a=3 , b=2 , c=l ;,表达式,kak:cc);后,m 和 n 的值分别为。解:m为0, n为217 .设int a=2 ;,表达式a%2!=0的值为 。解:018 .设 char c=y;,表达式 c = a,&c = A&c = ,Z,/ 的值为。解:119 .写出与代数式(x+2)ex+2对应的C表达式。解:(x+2)*ex
8、p(x+2)20 .设int a=2;执行语句a = 3*5,a*4;后a的值为。解:15五、写出以下程序的输出结果。1 .#include void main()(unsigned k,n;scanf(%u,&n); 3 c.3f输入矩形的边长,求矩形面积。解:#include void main()(double a,b,s;printf(请输入矩形的长,宽n);scanf( %l%lf” ,&a,&b);s=a*b;printf( 矩形面积二%fn,s);8 .等差数列的第一项为a ,公差为d ,求前n项之和,a、d、n由 键盘输入。解 :#include void main()(int
9、 a,d,nzsum;printf(请输入等差数列的首项公差项数n);scanf( %d%d%d,&a,&d,&n);sum=a*n + n*(n-l)*cl/2; printf( sum=%dn/ fsum);)9 .编写程序,将d天h小时m分钟换算成分钟,输入d、h、m ,输出 换算结果。解 :#include void main()(intprintf(请输入天小时分钟n);scanf( %d%d%d,&d,&h,&m);t=d*24*60+h*60+m;printf( 1天:1 小时d 分钟二d 分钟n,d,h,m,t);)10.编写程序,求出给定半径r的圆以及内接正n边形的面积,输出
10、计算 结果。r和n的值由键盘输入。解 :#include #include #define PI void main() ( double r;sl,s2; int n;printf( Input r nn/r );scanf( %lf%d,&r,&n);sl=PI*r*r;s2=n/*r*r*sin(2*PI/n);printf(圆面积=%f,正内接d边形面积二%人己,sl,s2); 习题4 一、单项选择题1 .以下语句将小写字母转换为大写字母,其中正确的选项是()。A . if(ch = ,a&ch=a,&ch=a&ch,a&chs)t=u ; t=s ;B . t=sif(us)t=u
11、;C . if(us)t=s ; else t=uD . t=u ; if(us)t=s ;.假设变量x、k都已定义,以下语句片段中,无语法错误的选项是()。A. switch(x)case x=90: putchar(A);case x60: putchar(E);)B. switch(x) case 1+2: k=A;defualt: k=E;case 2*4: k=B;)C. switch(x)case 2+x: k=x-2;case 3*x: k=x+3;default: k=0;)D. switch(x)case: k=*x;case : k=8*x;default: k=0;)*4
12、 .与语句while(!s )中的条件等价的是()。A . s=0B . s!=0C . s= = lD . s=05 .以下语句中,哪一个可以输出26个大写英文字母()。A . for(a = A ; a=Z ; printf(%c , +a);B . for(a = A ; aZ ; a + +)printf(%c , a);A.高级语言就是机器语言B.汇编语言程序、高级语言程序都是计算机程序,但只有机器 语言程序才是计算机可以直接识别并执行的程序C.C语言因为具有汇编语言的一些特性,所以是汇编语言的一 种D.C源程序经过编译、连接,假设正确,执行后就能得到正确的 运行结果6 .用C语言编
13、写的源程序经过编译后,假设没有产生编译错误,那么系 统将()。A.生成可执行文件B.生成目标文件C.输出运行结果D .自动保存源文件7 .以下表达中不正确的选项是()。A . main函数在C程序中必须有且只有一个B. C程序的执行从main函数开始,所以main函数必须放在 程序最前面C.函数可以带参数,也可以不带参数。D.每个函数执行时,按函数体中语句的先后次序,依次执行每 条语句解:1.C2 . C 3 . D 4 . B 5 . B 6 . B 7 . B三、填空题1 . ( ) 10= ( ) 2= ( ) 8= ( ) 162 . ( .10111 )2= ( )8= ( ) 16
14、= ( ) 103 .输入三个数,计算并输出三个数的和与三个数的乘积。程序如下:#include void main()int a,b,c,s,z;C . for(a = A ; a = Z ; printf(%cn , a+);D . for(a=A ; aZ ; printf(%cn , +a);6 .判断下面的while循环体的执行次数()0i=0;k=10;while( i=8 ) i=k一;A . 8 次B . 10 次C . 2 次D .无数次解: B (2)B (3)B (4) A (5) C (6) D二、写出以下程序的输出结果1 . #include void main()c
15、har x;while(x=getch3r(.) U= #)0*面积肃幻4,)3一/)4和11111n n一 才 _ +一 +401 x。* x +墓健卜珠舞嚏篇.龛?二9生收()、年信while(x=getch3r(.) U= #)0*面积肃幻4,)3一/)4和11111n n一 才 _ +一 +402 x。* x +墓健卜珠舞嚏篇.龛?二9生收()、年信x = 0 10 IO 2 10-_ i2 2!Un2In3In4In o息查询2.元旦是星期脑耀春%吊(蝴机丫莉);pri项请辉觞能:nw y,scanf( %d ,&number);if(number= = l) year=legal(
16、year);leapyear(year); if(number=2) week=judqeweeknumber(year);judgeweeKchinese(week);if(number= = 3)x = 0 y 0x=0return;int legal(int y)*print(请重新输入一个年份:);Ranf( d,&y); while(y0);return v;)void leapyear(int y) if(y%4=0&y%100!=0|y%400=0)Rintf( d 鱼闰年n !y);printf( M%d 不是闰年n,y);printf( M%d 不是闰年n,y);elsein
17、t judgeweeknumber(int y) int week;week=(y+(y-l)/4-(y-l)/100+(y-l)/400)%7;return week;void iudqeweekchinese(int week) swifch(week) case 0: printn case 1: print!void iudqeweekchinese(int week) swifch(week) case 0: printn case 1: print!case case case case case) ):益1B微:print:Pr!ntf rea;brea;brea;brea;br
18、eak;K;k;*14 .输入n、x,计算xn输出。要求定义一个递归函数计算xn。解:#includedouble mypow(double xjnt n)double v=l;if (n0)return(x15 .数列的第1、2项为1 ,此后各项为前两项之和。编制求数列中彳引可一项值的递归函数。mypow(x,n-l);elseif (n0) return(l/x*mypow(xzn + l);else return 1;void main() double x;解:此数列为1、1、2、3、5、8、13。#includeint f(int n) if (n = = l|n =2) retur
19、n (1);elsereturn (f(n-l)+f(n-2);void main() int n;while(scanfC%d”,&n),n0); printf(数列匿d 项为:%d”,n,f(n);习题5 一、单项选择题1 .以下能正确定义一维数组a的语句是()。A . int a(10);B . int n = 10 , an;C . int n ; scanf(%d , &n) ; D . #define n 10 int an ;int an;2 .假设有定义语句int a10; 那么以下对a中数组元素正确引用的是()oB . a 10A . a 10/2-5D.a(l)3 .能对一
20、维数组正确初始化的语句是(A . inta6=6*l;A . inta6=6*l;B . inta6=l/n3;C . int a6=;C . int a6=;D . int a6= ( 0 ,0,0);4.以下能正确定义二维数组的语句为(4.以下能正确定义二维数组的语句为()oA . int a;B . inta4 ; C . int a3D . int a34;.假设有数组定义语句int a45; ,那么对a中数组元素的正确引用C. a 4 5A . a4lD . a 4-1 5-5.以下能对二维数组a进行正确初始化的语句为()oA.inta2=l/4,5;B.inta23=l/2,3,4
21、,5,6,7;4,5,6,7;C.int a =1,2, 3,4,5, 6;D . int a3=l , 2 ,3,4,5;7 .以下对字符数组s的初始化不正确的选项是(A . chars5 = abc;char s5=a,b , c, e;C . char s5 = abcde;chars = abcde;8 .以下程序段的运行结果为()。char s = abOcdn; printf(%s,s);C . AbedD . ab cd9,以下数组s中所存放字符串的长度为()。char s = a128btcdxdgn;D . 1810 .有数组定义语句char a20; ,那么正确的输入语句为
22、()。A . scanf(n%s , &a) ;B . scanf(n%sna);C . gets(a20) ;D . gets(a);.下面程序执行后的正确输出项是()。#include void swapl(int a) int t;t=a0; a0=al; al=t;) void swap2(int a,int b) int t;t=a;a = b; b=t;) void main() int x2=l,5;int y2=l,5;swapl(x);swap2(y0,yl);printf(x: %d %dn x0,xl); printf(y: %d %dn; yO,yl);)A. x :
23、5 1B. x : 1 5 C. x : 1 5y : 5 111 .执行以下程序后的输出结果是()。#include char f(char sJnt n) return (sn);main() chara = ABCD;printf(”c”,f(a,2) + l);)A . DB . CC . BD . A.执行以下程序后的输出结果是()。#include int f(int aJnt n) if(n =O) return a0;else return f(azn-l)+an;)main() int x口=1,3,5,7,9;printf(dn,f(x,3);D . 16解:二、填空题.构
24、成数组的各个元素必须具有相同的 O解:数据类型.假设有定义int a10=l , 2; ,那么数组元素a2的值为。 解:01 .假设有定义int a34; ,那么数组a行下标的上限为,列下 标的下限为 O解:2 04 .C语言程序在执行过程中,不检查数组下标是否。解:越界.C语言中,二维数组元素在内存中的存放顺序是 o解:按行存放.假设有定义int a34; ,那么在数组元素a22前有 个元素。解:10.假设用数组名作为函数调用的实参,传递给形参的是 o解:数组第一个元素的地址.假设有定义语句 Mchar sl=abc, s2 =az bz c; ,那么数组si有 个元素,数组s2有 个元素。
25、解:4 3三、写出以下程序的输出结果1 . #include void main()(int a6=2,371,9,6,i,j,k,m;for(i = 5;i=0;i)k=a5;for(j=4;j=0;j-) aj+l=aj;a0 = k;for(m=0;m6;m+)printf(%2d,am); putchar(n);)解:6237199623711 9 6 2 3 77 1 9 62 33 7 1 9 6 2237196. #include void main()for(i=0;i3;i + +)ni=O;k=3;for(i=0;ik;i+)for(j=0;jk;j + +) nj + =
26、 ni + l;for(i=0;i3;i + +) printf(%5drni);解:13 14 172 . #include void main()(inta66jj;for(i = l;i6;i + +)for(j = l;j6;j + +)aij = (i/j)*(j/i);for(i = l;i6;i+)for(j = l;j6;j + +) printf(%3dn,aij);printf(n);)解:1 0 0 0 00 10 0 00 0 10 00 0 0 1 04 . #include void main()(int x10;int i,m = l;void sort(int
27、aJnt n);for(i=0;i10;i+)m=-m;xi = m*i;)sort(x,10);for(i=0;i10;i + +) printf(%3d”,xi);void sort(int aJnt n)(int ijt;for(i = l;i=0;j-)if(taj) break;else aj + l=aj;aj + l=t;)printf(Please input a b c:n);s=a + b+c;printf(dn”,s);)*4.输入三角形三条边的边长,计算并输出三角形的面积。根据三条边的边长,计算三角形面积的公式如下:面积= JS(S7)(S-y)(S-Z) (其中 S=
28、+;+程序如下:#include #include void main()(double x,y,乙s,dime;scanf(%lf%lf%lf/&x,&y/&z);dime=sqrt(s*(s-x)*(s-y)*(s-z);)解:1 .2 .3 . scanf(%f%f%f,&a/&b/&c); z=a*b*c; printf(f”,z);4 . s=(x+y+2)/2; printf(%f,dim);四、编程题1 .仿照例,编程序在屏幕上显示:解:-8 6 -4 2 0 1 3 5 7 9. #include void main()(charsl = aexnzs2 = dpsy/s10;
29、int il,i2J,flag;il=i2 = i=flag=0;while(l)if(slil =O) flag = l;break;)if(s2i2 = = 0)flag=2; break;)if(slils2i2)si + +=slil+;elsesi+=s2i2+;)if(flag = = l)while(s2i2!=0)si + +=s2i2+;elsesi + +=slil+;si=O;puts(s);)解:adepsxy5 .#include void main() (char hll;int d10;int i,n=0,x=l;gets(h);统计在一个字符串中各元音字母(a、
30、e、i、o、u )出现的次数。#include void main() (char s80;int i,;printf(input a string:nn);gets(s);for(i=0;i + +)if()a0 + +;else if(si =e,|si = = E)al + +;else if(si =T|si =T)a2 + +;else if(si =o|si=,O)a3 + +;else if(si =,u|si =U) a4 + +;printf( A E I O Un); for(i=0;i5;i + +)解: a5si!=0si = = a| si = = Aprintf(
31、5d,i)五、编程题.在数组x的10个数中求平均值v ,找出与v相差最小的数组元素。解:#include #include void main() double x10zv,d;int i;for(i=0zv=0;i10;i + +) scanf(lf”,&xi);v+=xi; v=v/10;d=x0;for(i=l;i fa bs(x i - v)d=xi;printf(平均值:%-8.2f,与平均值最近元素:%-8.2fn”,v,d);).输入n ( nw20 )个数放在一维数组中,找出其中最小的数,将它与 数组最前面的元素交换后输出这些数。解:#include void main() i
32、nt i,k,temp,n,a20;printf(Input n:nn);scanf(d”,&n);for(i=0;in;i + +)scanf(n%d,&ai);for(k=0,i=l;in;i+)if(aiak) k=i;temp=aO;aO=ak;ak=temp;for(i=0;in;i+) printf(%d ,ai);)1 .输入一个字符串,统计其中数字字符出现的次数。解:#include void main() char s80;int i,n=O;gets(s);for(i=0;si! = 0;i + +)if(si = 0,&si = 9)n + +;printf(%s 中包含
33、d 个字符n”,s,n);).设有一头母牛,它每年年初生一头小母牛。每头小母牛从第四个年头 开始,每年年初也生一头小母牛。问在第20年时,共有多少头牛分别输 出从第1年至第20年每年的母牛数。解:#include #define N 20void main()int xN + l=l,i;O O O,,Feb.,Mar.,Apr.,May.Jun.,July., Aug.,Sept./,Oct.n/Nov.n,Dec.;puts(pm-l);)void main() int no;printf(”请输入月份(1-12 ) n); scanf(%d&no);if (no = l&no=12) f
34、indmonth(no);else printf(数据输入错误! n);)15 .输入5个字符串,输出其中最长的字符串。解:#include #include void main() char str5100,*p5;int i,k; ame); B . printf(%s , &stul.name);C . printf(%s , stul.name0); D . printf(%s &stul.name0);*5 .以下程序的输出结果是()。#include void main() int x=l,y=2,z=3;struct aa int a; int *p; s =4/&x,5/&y,
35、6/&z;struct aa *q=s+l; printf(%dn/(q-p)+);)A . 1B . 2C . 36.有以下定义语句:struct node int n; struct node *next; x,y,*p=&x,*q二&y; 那么能将y节点链接到x节点之前的语句是()。A . pB .二 qC . pD .二 q*7 .以下程序的输出结果为()0#include void main()(struct nodeint n;struct node *next;a4;int i;for(i=0;in=i+l;(a + i)-next=a4-i + l;)(a+i)-next=a;
36、printf(%d,%dn,(al.next)-n,a3.next-n);)A.1,2B.2,1C.1,3D . 3 , 18 .已建立一单向链表,指针变量pl指向链表中某一节点,p2指向下一节点,将p2所指节点从链表中删除并释放的语句为()。Pl-A . pl = p2 ; free(p2) ;Bnext=p2-next; free(p2);C . *=* ; free(p2) ;D . pl=p2-next; free(p2);9 .已建立一单向链表,指针变量pl指向链表中某一节点,p2指向下一 节点;指针变量p指向新申请节点,将p所指节点插入到链表中pl与 p2之间的语句为()。A .
37、p-next=p2 ; pl-next=p ;B . pl-next=p ; p-next=p2 ;C . p=p2 ; pl-next=p ;D . pl=p ; p-next=p2 ;10 .假设要利用下面的程序片段使指针变量p指向一个整型变量的存储 单元那么括号中需填入的内容是()。int *p;p=( )malloc(sizeof(int);A . intB . *intC . &intD . int *解:(1)B (2)C (3)A (4)D (5)B (6)C (7)D (8)B (9)A (10)D二、写出以下程序的输出结果1 .#include struct st int num;char name10;int age;x3=l;zhang;19H2;li;20M3;wang;21/p=x; void main() printf(%s,%dnz(p+2)-name,(*p).age);)