1、C语言程序设计答案 曹计昌 第一章习题 1.4 原码:对于一个二进制数X,如果规定其最高位为符号位,其余各位为该数的绝对值,并且规定符号位值为0表示正,为1表示负,采用这种方式的二进制编码称为该二进制数X的原码。 补码:正数的补码等于正数的原码,负数的补码为其原码除符号位不动外,其余各位变反再加1所得。 反码:对于正数而言,反码与原码相同;对于负数而言,反码符号位的定义与原码相同,但需要将对应原码的数值位按位变反。 1.5 和: 差:00010000 1.6 和 01073 差 -0337 1.7 和 0x1AABA 差 -0x5320 1.8 (251)=()=(373)=(FB) 1621
2、081.10 在16位机中,157= 00000000 补 -153= 1 补157-153=157+(-153) = (00000000) +(1) =(0000000000000100) =(4) 102221.14 算法设计:用变量s存储累加和,k表示计数 描述为: 1 (1)定义变量s,k。 (2)s清零,k赋初值1。 (3)判断k101?如果是,顺序执行(4);否则转步骤(5); (4)k加到累加和变量s中,k加1;转步骤(3)。 (5)输出累加和s。 (6)结束。 开始 结束 int s=0,k=1; k101? s=s+k; k=k+1; s 输出N Y 1.16 第二章习题 2
3、.2(1) x, +, +, y (2)-, 0xabL 2 (3)2.89e+12L (4)”String+” FOO” (5)x, *, *, 2 (6)”X?/” (7)a, ?, b (8)x, -, +=, y (9)intx, =, +, 10 (10)”String”, “FOO” 2.3 不是表识符的如下: 4th 首字母为数字 sizeof关键字 x*y *不是字母、数字、下划线 temp-2 -不是字母、数字、下划线 isnt 不是字母、数字、下划线 enum 关键字 2.4 合法常数: .12 0.L 1.E-5 浮点型常量 3.F 整型常量 33333 0377UL 0
4、x9cfU 2L 字符串常量 “a” “” 45 字符常 a 量3 非法常数: 必须用转义序列 0x1ag 十六进制没有g E20 没有尾数部分 18 要用八进制数 xa 格式错误,可以是xa “34” 需要转义序列 ” 需要转义序列 2.5 (1)int a, b=5; (2)double h; (3)int x=2.3; 0.3 会被截取。 (4)const long y=1; 必须赋初值 (5)float a= 2.5*g; g 没有定义。 (6) int a=b=2; 在 turbo C 中编译出错:未定义的符号b在main函数中。 2.6 (1)4 (2)0 (3)1 (4)6 (5
5、)8 4 (6)0 (7)3.00 (8)1 (9)108 (10)0 2.7 答案不确定 (1)a=b=c c未定义 (2)正确 (3)正确 (4)正确 (5)a*+-b 表达式缺值 (6)a|bi 运算的操作数必须是整型,而i不是 (7)i*j%a %运算的操作数必须是整型,而a不是 (8)正确 (9)正确 (10)int(a+b) 应该改成(int)(a+b) 2.9 (1)0 (2)-2 (3)65535 (4)5 (5)60 5 (6)113 (7)-2 (8)-1 (9)65532 (10)3 2.10 unsigned long encrypt(unsigned long x)
6、unsigned long x0,x1,x2,x3,x4,x5,x6,x7; x0=(x & 0x0000000F) 8; x1=(x & 0x000000F0); x2=(x & 0x00000F00) 8; x3=(x & 0x0000F000); x4=(x & 0x000F0000) 24; x7=(x & 0xF0000000); return(x0|x1|x2|x3|x4|x5|x6|x7); 2.11 #include void main() 6 unsigned long in; unsigned long a,b,c,d; scanf(%ld,&in); /in=1563;
7、a=(in&0xff000000)24; b=(in&0x00ff0000)16; c=(in&0x0000ff00)8; d=in&0x000000ff; printf(%d.%d.%d.%d,a,b,c,d); 2.15 (k 8)& 0xFF00) | (p & 0x00FF)b?ac?a:c:bc?b:c; max=a b ? (a c) ? a : c):(b c) ? b : c); 2.17 X=yn 2.18 7 (c=0 & c=9)? c 0 : c 2.19 (a % 3 = 0) & (a % 10 = 5) ? a : 0; 第三章习题 3.1 函数原型是指对函数的名
8、称、返回值类型、参数的数目和参数类型的说明。其规定了调用该函数的语法格式,即调用形式。 putchar函数的原型为:int putchar(int c); puts函数的原型为: int puts(const char *s); printf函数的原型为:int printf(const char *format,); getchar函数的原型为:int getchar_r(void); gets函数的原型为:char * gets_r(char *s); scanf函数的原型为: int scanf(const char *format,); 3.2 不同点: puts为非格式输出函数,pr
9、intf为格式输出函数; puts函数的参数类型和数目一定(一个字符串),printf函数的参数类型和数目不固定; puts函数输出后会自动换行,printf函数没有这一功能。 相同点:二者都向标准设备输出; 二者返回值类型都为int。 3.3 x1=-1,177777,ffff,65535 x2=-3,177775,fffd,65533 y1=123.456703, 123.457,123.457,123.457 (注意对齐) y2=123.449997,1.23450e+02,123.45 8 x1(M)= -1 3.4 %c;%c;%f;%f;%lu;%d;%d;%d;%f;%Lf 3.
10、5 错误,运行提示为divide error 正确,结果为b 正确,结果为 * 正确 正确,但无法正常从结果中退出 正确 正确,结果为82,63 编译错误,提示 cannot modify a const object 正确 正确 3.6 -6.70000 -6 177601 123 -2 0 3.8 #include void main() char c; c= getchar_r(); if(c=0&c=A&c=a&c=0&c=A&c=F) printf(%dn,c-A+10); else printf(%dn,c-a+10); else putchar(c); 3.9 #include
11、void main() short num,high,low; printf(Please input a short number:n); scanf(%hd,&num); low = 0x00ff & num; 10 high = 0x00ff & (num 8); printf(The high byte is:%cn, high); printf(The low byte is:%cn, low); 3.10 #include stdafx.h int main(int argc, char* argv) unsigned short int x; unsigned short int
12、 high,low; printf(input a integer:n); scanf(%d,&x); high = (x12)&0x000f; low = (x12)&0xf000; x= x&0x0ff0; x=x|high|low; printf(%dn,x); return 0; 3.11 11 #include void main() unsigned short int x,m,n; unsigned short int result; scanf(%hu%hu%hu,&x,&m,&n); result=(x(m-n+1)(15-n+1); printf(%hun,result);
13、 3.12 #include void main() float f,c; scanf(%f,&f); c=(5*(f-32)/9; printf(%.0f(F)=%.2f(C)n,f,c); 或者 #include void main() 12 int f; float c; scanf(%d,&f); c=(5*(f-32)/9; printf(%d(F)=%.2f(C)n,f,c); 3.13 #include #define PI (3.1415926) int main(int argc, char* argv) double r, h; double s, v; printf(Pl
14、ease input the r and h.); scanf(%lf,%lf, &r, &h); s = 2 * PI * r * h + 2 * PI * r * r; v = PI * r * r * h; printf(s is %lf, v is %lf, s, v); return 0; 3.14 #include stdafx.h 13 int main(int argc, char* argv) 挠慨?孡崴?尠编; 瀠楲瑮?机内码:%x%xtn,a0&0xff,a1&0xff); 瀠楲瑮?区位码:%xtn,a0&0xff8+a1&0xff-0x2020-0x8080); 瀠楲瑮
15、?国际码:%xtn,a0&0xff8+a1&0xff-0x8080); return 0; 第四章习题 4.1 #include void main(void) float a,b,c; printf(Please enter the score of A:n); scanf(%f,&a); printf(Please enter the score of B:n); scanf(%f,&b); printf(Please enter the score of C:n); scanf(%f,&c); if(a-b)*(a-c)0) printf(A gets the score %.1f,a)
16、; if(b-a)*(b-c)0) printf(B gets the score %.1f,b); if(c-a)*(c-b)0) printf(C gets the score %.1f,c); 4.3 #include int mdays(int y,int m) 14 if (m=2) return (y%4=0 & (y_x0010_0=0 | y0=0)?29:28; else if (m=4 | m=6 | m=9 | m=11) return 30; else return 31; main() int y,m,d,days; printf(Enter year:); scan
17、f(%d,&y); printf(Enter month:); scanf(%d,&m); printf(Enter day:); scanf(%d,&d); days=d; while(m1)days+=mdays(y,m-1);m-; printf(%dn,days); 4.4 if方法: #include stdafx.h #include int main(int argc, char* argv) float x = 0; printf(input the salaryn); scanf(%f,&x); if(x0 & x1000) printf( else if(x2000) pr
18、intf(%fn,x*0.05); else if(x3000) printf(%fn,x*0.1); else if(x4000) printf(%fn,x*0.15); else if(x5000) printf(%fn,x*0.2); else printf(%fn,x*0.25); return 0; Case方法: 15 #include stdafx.h #include int main(int argc, char* argv) float x ; printf(input the salaryn); scanf(%f,&x); int xCase = 0; xCase = (
19、int)(x/1000.0); switch(xCase) case 0: printf( break; case 1: printf(%fn,x*0.05); break; case 2: printf(%fn,x*0.1); break; case 3: printf(%fn,x*0.15); break; case 4: printf(%fn,x*0.2); break; default: printf(%fn,x*0.25); return 0; 4.7 #include stdafx.h #include int main(int argc, char* argv) char *sa
20、; char c; int i = 0,j = 0,k = 0; do c= getchar_r(); 16 sai+ = c; while(c != r); for(i=0;sai+1;i+) for(j = i+1;saj;j+) if( sai=saj & saj = ) for(k=j;sak;k+) sak = sak+1; j-; for(k=0;sak;k+) printf(,sak); return 0; 4.10 #include #define EPS 1e-5 void main() int s=1; float n=1.0,t=1.0,pi=0; while(1.0/n
21、=EPS) pi=pi+t; n=n+2; s=s*(-1); t=s/n; pi=pi*4; printf(pi=_x0010_.6fn,pi); 4.11 #include int main() int a,b,num1,num2,temp; printf(Input a & b:); scanf(%d%d,&num1,&num2); 17 if(num1num2) temp=num1; num1=num2; num2=temp; a=num1; b=num2; while(b!=0) temp=a%b; a=b; b=temp; printf(The GCD of %d and %d i
22、s: %dn,num1,num2,a); printf(The LCM of them is: %dn,num1*num2/a); 4.13 #include stdafx.h #include int Primes(int x);/判断素数函数 int main(int argc, char* argv) int i,j; int num; for(num = 4;num=100;num+) if(num%2 = 0) for(i=1;inum;i+) for(j=1;jnum;j+) if(num = i+j) if(Primes(i) & Primes(j) printf(%d=%d+%
23、dn,num,i,j); return 0; 18 int Primes(int x) int i ; int n = 0; for(i = 1;i=x;i+) if(x%i=0) n+; if(n=2) return 1; else return 0; 4.17 #include void main(void) int c,i; for(i=1,c=32;c=126;+i,+c) printf(=%-5c,c,c); if(!(i%8) printf(); 4.18 #include stdafx.h #include int main(int argc, char* argv) int x
24、; int i,n,sum; printf(input 10 numbersn); for(i = 0,n = 0,sum = 0;i0) sum+=x; n+; 19 if(n) printf(umbers = %d,average = %fn,n,1.0*sum/n); return 0; 第五章习题 5.5 Extern和static存储类型的区别: Static型外部变量和extern型外部变量的唯一区别是作用域的限制。静态外部变量只能作用于定义它的文件,其他文件中的函数不能使用。Extern型外部变量的作用域可以扩大到整个程序的所有文件。 Static和auto存储类型的区别: 静态
25、局部变量和自动变量有根本性的区别。由于静态局部变量在程序执行期间不会消失,因此,它的值有连续性。当退出块时,它的值能保存下来,以便再次进入块时使用,而自动变量的值在退出块时都丢失了。如果定义时静态局部变量有显示初始化,只在第一次进入时执行一次赋初值操作,而自动变量每次进入时都要执行赋初值操作。 5.6 不能。 在C语言中,参数的传递方式是“值传递”,即把实参的值拷贝到参数的存储区中。因此,swap()函数交换的只是实参的本地拷贝,代表swap()实参的变量并没有被改变。 5.7 6,12 5.10 #include double sum_fac(int n) double s=0; int i; double fac=1.0; for(i=1;i=n;i+) fac*=1.0/i; s+=fac; return s; void m
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1