《2022年c程序设计语言第二版答案.docx》由会员分享,可在线阅读,更多相关《2022年c程序设计语言第二版答案.docx(35页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、精品学习资源c 程序设计语言其次版答案【篇一: c 语言程序设计现代方法 其次版 习题答案】answers to selected exercises2. was #2 a the program contains one directive #include and four statements three calls of printf and one return.bparkinsons law:work expands so as to fill the time available for its completion.3. was #4 #include stdio.h int
2、mainvoidint height = 8, length = 12, width = 10, volume; volume = height * length * width;printfdimensions: %dx%dx%dn, length, width, height; printfvolume cubic inches: %dn, volume;printfdimensional weight pounds: %dn, volume + 165 / 166;return 0;4. was #6 heres one possible program:欢迎下载精品学习资源#inclu
3、de stdio.h int mainvoidint i, j, k; float x, y, z;printfvalue of i: %dn, i;printfvalue of j: %dn, j; printfvalue of k: %dn, k; printfvalue of x: %gn, x; printfvalue of y: %gn, y; printfvalue of z: %gn, z; return 0;when compiled using gcc and then executed, this program produced the following output:
4、value of i: 5618848 value of j: 0value of k: 6844404value of x: 3.98979e-34 value of y: 9.59105e-39 value of z: 9.59105e-39the values printed depend on many factors, so the chance thatyoull get exactly these numbers is small.欢迎下载精品学习资源5. was #10 a is not legal because 100_bottles begins with a digit
5、.8. was #12 there are 14 tokens: a, =, , 3, *, q, -, p, *, p, , /, 3, and ;.answers to selected programming projects4. was #8; modified #include stdio.hint mainvoidfloat original_amount, amount_with_tax; printfenter an amount: ;scanf%f, original_amount; amount_with_tax = original_amount * 1.05f;prin
6、tfwith tax added: $%.2fn, amount_with_tax; return 0;the amount_with_tax variable is unnecessary. if we remove it, the program is slightly shorter:#include stdio.h int mainvoidfloat original_amount; printfenter an amount: ; scanf%f, original_amount;欢迎下载精品学习资源printfwith tax added: $%.2fn, original_amo
7、unt * 1.05f; return 0;chapter 3answers to selected exercises 2. was #2(a) printf%-8.1e, x;(b) printf%10.6e, x;(c) printf%-8.3f, x;(d) printf%6.0f, x;5. was #8 the values of x, i, and y will be 12.3, 45, and .6, respectively. answers to selected programming projects1. was #4; modified #include stdio.
8、hint mainvoidint month, day, year;printfenter a date mm/dd/yyyy: ; scanf%d/%d/%d, month, day, year;printfyou entered the date %d%.2d%.2dn, year, month, day; return 0;3. was #6; modified #include stdio.h欢迎下载精品学习资源int mainvoidint prefix, group, publisher, item, check_digit; printfenter isbn: ;scanf%d-
9、%d-%d-%d-%d, prefix, group, publisher, item,check_digit;printfgs1 prefix: %dn, prefix; printfgroup identifier: %dn, group; printfpublisher code: %dn, publisher; printfitem number: %dn, item; printfcheck digit: %dn, check_digit;/* the five printf calls can be combined as follows:printfgs1 prefix: %dn
10、group identifier: %dnpublisher code: %dnitem number: %dncheck digit: %dn,prefix, group, publisher, item, check_digit;*/return 0;chapter 4answers to selected exercises2. was #2 not in c89. suppose that i is 9 and j is 7. the value of -i/j could be either1 or 2, depending on the implementation. on the
11、 other hand, the value of -i/j is always1, regardless of the implementation. in c99, on the other hand, the value of -i/j must be equal to the value of -i/j.欢迎下载精品学习资源9. was #6a 63 8b 3 2 1 c 2 -1 3d 0 0 013. was #8 the expression +i is equivalent to i += 1. the value of both expressions is i after
12、the increment has been performed. answers to selected programming projects2. was #4#include stdio.hint mainvoidint n;printfenter a three-digit number: ; scanf%d, n;printfthe reversal is: %d%d%dn, n % 10, n / 10 % 10, n / 100;return 0;chapter 5answers to selected exercises 2. was #2(a) 1(b) 1欢迎下载精品学习
13、资源(c) 1(d) 14. was #4 i j - i j6. was #12 yes, the statement is legal. when n is equal to 5, it does nothing, since 5 is not equal to9.10. was #16 the output is onetwosince there are no break statements after the cases. answers to selected programming projects2. was #6【篇二: c 语言与程序设计 -第 2 章课后习题参考答案】t
14、xt 关键字是注释空白符八进制常量是三字符序列字符串常量是括号是2.2 c 编译器可将以下每一个源字符串分解为哪些记号?不必考虑记号组合是否合法1 x+y x, +, +, y2 -0xabl -, 0xabl欢迎下载精品学习资源3 2.89e+12l 2.89e+12l5 x*2 x, *, *, 2 6 x./ x./7 a.ba, ., b8 x-+=y x, -, +=, y9 intx=+10intx, =, +, 1010 stringfoo string, foo这道题当时改的时候有几个小题改得有错误,留意!2.3 以下哪些不是标识符,为什么?标识符由字母、数字和下划线组成,但首
15、字符必需是字母或下划线;4th 不是,以数字开头;sizeof不是标准 c 的关键字 _limit是_is2 是xyshould是 x*y 不是, * 非法o_no_o_no是temp-2不是, - 非法isnt 不是, 非法enum不是标准 c 的关键字;注:关键字也称为保留字,是被系统赐予特定含义并有特地用途的标识符;关键字不能作为一般标识符, 但可以作为宏名;全部预处理均发生在识别这些关键字之前;欢迎下载精品学习资源2.4 在以下表示中,哪些是合法常数,哪些是非法常数?对于合法常数,指出其类型;对于非法常数,说明其错误缘由;2l合法, long长整型不合法,单引号组中的单引号前需要转义字
16、符.12合法, double双精度浮点型0x1ag不合法, g 不是 16 进制数中的符号,也不表示任何类型33333 合法, int 整形a合法,字符串常量 合法,字符串常量0.l合法, long double长双精度浮点型e20不合法,缺少尾数部分0377ul合法, unsigned long无符号长整型18不合法,存在非 8 进制位0xa 不合法,不符合十六进制字符码表示规章xhh 0x9cfu合法, unsigned int无符号整形45合法, char 字符型1.e-5 合法, double双精度浮点型0合法, char 字符型3.f合法, float 浮点型34 不合法,缺少转义符
17、合法, char 字符型 p35 ,双引号作为字符常量时既可用图形符号也可用转义序列表示欢迎下载精品学习资源a合法, char 字符型2.6 以下的变量声明语句中有什么错误?(1) int a; b = 5;第一个分号改为逗号 int a, b=5;(2) doubel h;关键字错误 double h;(3) int x = 2.3;类型错误 float x = 2.3;(4) const long y;需要赋初值 const long y = 0;(5) float a = 2.5*g; g未定义变量 int g = 1; float a = 2.5*g;(6) int a = b = 2
18、; b未定义变量 int a = 2, b = 2;2.7 设变量说明为: int a = 1, b = 2, c = 3, d; double x = 2.0; y = 7.7; 请给出以下表达式的值;1 +a*b- 42 .a+b/c 03 a=-b+c true4 d=a+,a*=b+1d为 1, a 为 6 5 d=y+=1/x y为 8.2, d 为 86 abx=yfalse7 x=inty/b+x为 3.0 8 a-.+a:+aa为 1 9 a+xa+a 10810 a=0,-a,a+=a+-a表达式结果为 -1, a 的值为 0欢迎下载精品学习资源2.8 设 i 和 j 是 i
19、nt 类型, a 和 b 是 double类型,以下表达式哪些是错误的,为什么?1 a=b=c错误, c 未定义且规律错误2 a045正确3 7+i*-j/3正确4 39/-+i-+29%j正确(5) a*+-b错误, + 需要左值(6) a|bi错误, 号左侧类型为 double(7) i*j%a错误, %右侧类型为 double(8) i/j2正确9 a+=i+=1+2正确10 inta+b正确, vc+ 下可运行2.9 下面代码的执行结果是什么?char a = 1, b = 2, c = 3;printf%d,%d,%d,%dn,sizeofc, sizeofa, sizeofc=a,
20、 sizeofa+b+7.7;结果: 1,4,1,82.10 设变量说明为:unsigned short x = 1, y = 2, z = 4, mask = 0xc3, w; short v;请给出以下表达式的值;1 xx 02 v=x -2欢迎下载精品学习资源3 w=xx 655354 x|yx|z 55 w=y|z,w3+w1 606 w=x|yx|zymaskx113 7 v=-1,v=1-28 v=x|x -19 w=xy 6553210 x|y|z2 32.11 写一个表达式,将整数k 的高字节作为结果的低字节,整数p的低字节作为结果的高字节,拼成一个新的整数;表达式为: 32
21、位k 24 | k 25588 | p 255168 | p 2416 位k 8 | p 82.12 写一个表达式,将整数x 向右循环移位 n 位;表达式为: 32 位x32-n%32 | xn%3216 位x16-n%16 | xn%162.13 写一个表达式,将整数x 从第 p 位开头的向右 n 位 p 从右至左编号为 015 翻转即 1 变 0,0 变 1,其余各位保持不变;表达式为:x0p+1-n unsigned short016-p-1欢迎下载精品学习资源或: x016-np+1-n2.15 表达式 v = v-1 能实现将 v 最低位的 1 翻转;比方 v=108 ,其二进制表示
22、为 01101100 ,就 v = v-1 的结果是 01101000 ;用这一方法,可以实现快速统计v 的二进制中 1 的位数,只要不停地翻转v 的二进制数的最低位的1,直到 v 等于 0 即可;请用该方法重写例2-18 ; #includestdio.h int mainvoidunsigned char data, backup, t = 0; int parity = 0;data = getchar; backup = data; whiledata t+;data = data -1;data = backup | parity7t7; printfthe data is %#xn
23、, backup; printfparity-check code is %#xn, data; return 0;2.16 写一个表达式,其结果是a、b 和 c 这 3 个数中最大的一个;表达式为:欢迎下载精品学习资源ab.ac.a:c:bc.b:c或ab.ac.a:c:bc.b:c或ab.ac.a:c:bc.b:c2.18 写一个表达式,假如整数a 能被 3 整除且个位数字是 5,就结果为非 0,否就为 0; 表达式为:a%3 . 0 : a%10=5 . 1 : 02.19 定义一个枚举类型 enum month,用来描述一年 12 个月:一月 jan 、二月 feb 、 、十二月 de
24、c ,并编写一个程序, 依据用户输入的年份,输出该年各月的英文名及天数;#includestdio.henum year jan, feb, mar, apr, may, jun, jul, aug, sep, oct, nov, dec;int mainvoid2.20 设变量说明为: float a; double b; char c; int x;试将以下表达式中隐含的类型转换改为用强制类型转换运算符转换的表达式;(1) x = inta - floatintc + a(2) b * doublex + double intc - int0 (3) x 0 . doublea : ben
25、um yaer month; int year_num, year_days=365; char*month_name =january, february, march, april, may, june, july, august, september, october, november, december; intmonth_days = 31,28,31,30,31,30,31,31,30,31,30,31; scanf%d,year_num; if.year_num%4year_num%100| .year_num%400 month_days1=29, year_days=366
26、; printfn%dn, year_days; formonth=jan; month = dec;欢迎下载精品学习资源month+ printf%s,%dn, month_namemonth,month_daysmonth; return 0;【篇三: c 语言程序设计学习指导其次版答案】.c4.c5.d6.a7.b8.c9.a10.d 11.b 12.c 13.a14.d 15.b 16.b其次章一、1.d2.a3.c4.d5.a6.b7.a8.b9.a 10.d 11.b 12.c 13.c14.d 15.c 16.b 17.d 18.a 19.c 20.b 21.b 22.d 23.
27、a 24.b25.b 26.b 27.b第三章一、1.d2.c3.a4.c5.a6.c7.c8.d 9.a 10.d 11.a13.c 14.c 15.a 16.b 17.a 18.a 19.c 20.a 21.b 22.d 23.b 24.b25.d26.d 27.c 28.c第四章一、1.b2.c3.d4.d5.d6.c7.b8.d9.c 10.d 11.b 12.a 13.c14.c 15.b 16.ab 17.d二、1. double funint m欢迎下载精品学习资源 double y=0; y=sinm*10; returny;2. float fun float h retur
28、n long h * 100 + 0.5 / 100.0; 3.double fundouble m float n; n=5.0/9.0*m-32;return n; 4. char funchar cc=c+32;return c;146f 12.b一、1.d2.c3.c4.c5.a6.a7.c8.a9.b 10.b 11.a 12.b 13.c14.c 15.d 16.a 17.d 18.a 19.a 20.a 21.b 22.d 23.c 24.b 25.d二、1.int funint nint bw,sw,gw;bw=n/100;sw=n-bw*100/10;gw=n%10; ifn
29、=bw*bw*bw+sw*sw*sw+gw*gw*gw return 1;欢迎下载精品学习资源else return 0; 2.float funfloat xfloat y;if x0 x.=-3.0 y=x*x+x+6;else ifx=0x10.0 x.=2.0 x.=3.0y=x*x-5*x+6; else y=x*x-x-1; return y;3. double yfloat xdouble z; ifx10 z=expx;else ifx-3 z=logx+3; else z=sinx/cosx+4; returnz;4. int funint x int k; k=x*x;if
30、k%10=x|k%100=x return 1;else return 0; 第六章欢迎下载精品学习资源一、1.c2.c3.d4.b5.c6.a7.a8.a9.d 10.a 11.d 12.c 13.c14.c 15.c 16.a 17.a 18.b 19.a 20.d 21.b 22.c 23.c 24.d 25.b26.b27.c 28.a二、1. 位置 1:r.=0【或】 0.=r 【或】 r 位置 2:r=m%n【或】 r=m-m/n*n 位置 3:n位置 4:gcd,lcm【或】 n,lcm 2. 位置 1:k=0位置 2:n%10【或】 n-n/10*10【或】 n-10*n/10
31、位置 3:whilen0【或】 while0n【或】 whilen.=0【或】while0.=n位置 4:printfn3. 位置 1:x.=0【或】 x位置 2:else【或】 else ifx%2=1【或】 else ifx%2.=0【或】ifx%2位置 3:scanf%d,x位置 4:av2=s2/j 4. 位置 1:n=0位置 2:i=300【或】 i300 【或】 300=i 【或】 300i位置 3:i%7=0|i%17=0【或】 .i%7|.i%17【或】 .i%17|.i%7【或】 .i%7i%17【或】 i%17=0|i%7=0欢迎下载精品学习资源位置 4:n%5=0【或】
32、.n%5 【或】 n/5*5=n 5. 位置 1:s=0位置 2:i+=2【或】 i=i+2 【或】 i=2+i 【或】 i+,i+位置 3:j=i 【或】 i=j 【或】 ji+1 【或】 i+1j 【或】 j1+i 【或】1+ij 位置 4:f=f*j【或】 f=j*f三、1. 位置 1:#include math.h【或】 #include math.h位置 2:float s=0,t=1,p=1;【或】 float s=0,p=1,t=1;【或】 float p=1,s=0,t=1;【或】 float p=1,t=1,s=0;【或】 float t=1,p=1,s=0;【或】 floa
33、t t=1,s=0,p=1;位置 3:whilefabst1e-4【或】 while0.0001fabst【或】while1e-4fabst【或】 whilefabst0.0001位置 4:printfpi=%fn,s*4;【或】 printfpi=%fn,4*s;2. 位置 1:printf%8.0f,f1;【或】 printf%f,f1;【或】printf%8f,f1;位置 2:fori=1;i20;i+【或】 fori=1;20i;i+【或】fori=2;i=20;i+【或】 fori=2;20=i;i+【或】 fori=1;i=19;i+【或】 fori=1;19=i;i+位置 3:f
34、1=f2;位置 4:f2=f3;3. 位置 1:long k=1;位置 2: scanf%ld,n;位置 3: n/=10;【或】 n=n/10;欢迎下载精品学习资源4. 位置 1:scanf%d,n;位置 2:fori=1;i=n;i+【或】 fori=1;n=i;i+【或】fori=1;in+1;i+【或】 fori=1;n+1i;i+位置 3:s+=1.0/t;【或】 s=s+1.0/floatt;【或】 s=1.0/floatt+s;【或】 s=s+1.0/t;【或】 s=1.0/t+s;【或】 s+=1.0/floatt;【或】 s+=1.0/doublet;【或】 s=s+1.0/
35、doublet;【或】 s=1.0/doublet+s;5. 位置 1:sum=1.0;【或】 sum=1;位置 2:s2=1.0;【或】 s2=1;位置 3:fork=4;k=n;k+【或】 fork=4;n=k;k+【或】fork=4;kn+1;k+【或】 fork=4;k1+n;k+【或】fork=4;n+1k;k+【或】 fork=4;1+nk;k+6. 位置 1:t=1;【或】 t=1.0;位置 2:t=t*j;【或】 t=j*t;【或】 t*=j;位置 3:s=s+t;【或】 s=t+s;【或】 s+=t;位置 4:printfjiecheng=%fn,s;四、1. int fun
36、int n int d,s=0; while n0d=n%10;s+=d*d*d; n/=10;欢迎下载精品学习资源return s;2. int funint nint i,s=0;for i=2;in;i+if n%i=0 s=s+i; return s;3. float sumint nfloat s=0; int i;fori=1;i=n;i=i+2 s=s+i*i; returns;4. double funint nint i,s=0;for i=1;in;i+if i%3=0 i%7=0 s=s+i; return sqrts;5. gcdint n,int m欢迎下载精品学习资
37、源int r,t;ifnm t=n;n=m;m=t; r=n%m;whiler.=0 n=m;m=r;r=n%m;returnm; 6.double funint nint i,j=0; double s=0;for i=3;i=n;i+ for j=2;ji;j+if i%j=0 break;if j=i s=s+sqrti;return s;7. long fun long s,long tlong sl=10; t = s % 10;whiles0 s = s/100;t = s%10*sl + t;欢迎下载精品学习资源sl = sl * 10;8. double funint ndou
38、ble m=1.0; int i;double p=1.0; fori=1;i=n;i+p=p*i;m=m+1.0/p;return m; 9.int funint nint i,k; fori=n+1;i+ fork=2;ki;k+ ifi%k=0 break;ifk=i returni; 10.int funint sint x1=0,x2=1,m=0;欢迎下载精品学习资源while smm=x1+x2; x1=x2; x2=m;return m; 第七章 一、1.a2.d3.c4.b5.b6.d7.b8.c9.b 10.b 11.d 12.b 13.b14.a 15.c 16.a 17.c 18.a 19.b 20.c 21.d 22.a 23.a 24.d 25.a26.d27.a 28.d 29.b 30.c 31.a 32.d 33.d 34.c 35.a 36.b 37.c 38.a39.a40.b 41.d 42.b 43.a 44.c 45.a二、1. 位置 1: break;位置 2: i-1;位置 3: c;欢迎下载