1、第一章习题 1.4 原码:对于一个二进制数X,如果规定其最高位为符号位,其余各位为该数的绝对值,并且规定符号位值为0表示正,为1表示负,采用这种方式的二进制编码称为该二进制数X的原码。 补码:正数的补码等于正数的原码,负数的补码为其原码除符号位不动外,其余各位变反再加1所得。 反码:对于正数而言,反码与原码相同;对于负数而言,反码符号位的定义与原码相同,但需要将对应原码的数值位按位变反。 1.5 和:10101010 差:00010000 1.6 和 01073 差 -0337 1.7 和 0x1AABA 差 -0x5320 1.8 (251)10=(111110
2、11)2=(373)8=(FB)16 1.10 在16位机中,[157]补= 0000000010011101 [-153]补= 1111111101100111 157-153=157+(-153) = (0000000010011101) 2+(1111111101100111) 2=(0000000000000100) 2=(4) 10 1.14 算法设计:用变量s存储累加和,k表示计数 描述为: (1)定义变量s,k。 (2)s清零,k赋初值1。 (3)判断k<101?如果是,顺序执行(4);否则转步骤(5); (4)k加到累加和变量s
3、中,k加1;转步骤(3)。 (5)输出累加和s。 (6)结束。 开始 结束 int s=0,k=1; k<101? s=s+k; k=k+1; 输出s N Y 1.16 第二章习题 2.2 (1) x, ++, +, y (2)-, 0xabL (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 不是表识符
4、的如下: 4th 首字母为数字 sizeof关键字 x*y *不是字母、数字、下划线 temp-2 -不是字母、数字、下划线 isn’t ’不是字母、数字、下划线 enum 关键字 2.4 合法常数: .12 0.L 1.E-5 3.F 浮点型常量 2L 33333 0377UL 0x9cfU 整型常量 “a” “” 字符串常量 ‘\45’ ‘\0’ ‘\a’ 字符常量 非法常数: ‘‘’必须用转义序列 0x1ag 十六进制没有g E20 没有
5、尾数部分 ‘\18’ 要用八进制数 ‘\0xa’ 格式错误,可以是’\xa’ “3’4”” 需要转义序列 ‘”’ 需要转义序列 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)8 (6)0 (7)3.0
6、0 (8)1 (9)108 (10)0 2.7 答案不确定 (1)a==b==c c未定义 (2)正确 (3)正确 (4)正确 (5)a*++-b 表达式缺值 (6)a||b^i ^运算的操作数必须是整型,而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 (6)113 (7)-2 (8)-1 (9)65532 (10)3 2.10 unsigne
7、d long encrypt(unsigned long x) { 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) << 8; x5=(x & 0x00F00000); x6=(x & 0x0F000000) >> 24; x7=(x & 0xF0000000);
8、 return(x0|x1|x2|x3|x4|x5|x6|x7);
}
2.11
#include
9、8)& 0xFF00) | ((p & 0x00FF)<<8) 2.16 max=a>b?a>c?a:c:b>c?b:c; max=a > b ? ((a > c) ? a : c):((b > c) ? b : c); 2.17 X=y>>n 2.18 (c>=’0’ && c<=’9’)? c – ‘0’ : c 2.19 (a % 3 == 0) && (a % 10 == 5) ? a : 0; 第三章习题 3.1 函数原型是指对函数的名称、返回值类型、参数的数目和参数类型的说明。其规定了调用该函数的语法格式,即调用形式。 putchar
10、函数的原型为: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为非格式输出函数,printf为格式输出函数; ② puts函数的参数类型和数目
11、一定(一个字符串),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 x1(%4d)= -1 3.4
12、⑴%c;⑵%c;⑶%f;⑷%f;⑸%lu;⑹%d;⑺%d;⑻%d;⑼%f;⑽%Lf
3.5 ⑴错误,运行提示为divide error
⑵正确,结果为b
⑶正确,结果为 *
⑷正确
⑸正确,但无法正常从结果中退出
⑹正确
⑺正确,结果为82,63
⑻编译错误,提示 cannot modify a const object
⑼正确
⑽正确
3.6 -6.70000
-6
177601
123
-2 0
3.8
#include 13、o.h>
void main()
{
char c;
c= getchar_r();
if((c>='0'&&c<='9')||(c>='A'&&c<='F')||(c>='a'&&c<='f'))
{
if((c>='0'&&c<='9'))
{
printf("%d\n",c-'0');
}
else if((c>='A'&&c<='F'))
14、 {
printf("%d\n",c-'A'+10);
}
else
printf("%d\n",c-'a'+10);
}
else
putchar(c);
}
3.9
#include 15、 scanf("%hd",&num);
low = 0x00ff & num;
high = 0x00ff & (num >> 8);
printf("The high byte is:%c\n", high);
printf("The low byte is:%c\n", low);
}
3.10
#include "stdafx.h"
int main(int argc, char* argv[])
{
unsigned short int x;
unsigned short int hig 16、h,low;
printf("input a integer:\n");
scanf("%d",&x);
high = (x>>12)&0x000f;
low = (x<<12)&0xf000;
x= x&0x0ff0;
x=x|high|low;
printf("%d\n",x);
return 0;
}
3.11
#include 17、ned short int result;
scanf("%hu%hu%hu",&x,&m,&n);
result=(x>>(m-n+1))<<(15-n+1);
printf("%hu\n",result);
}
3.12
#include 18、ain()
{
int f;
float c;
scanf("%d",&f);
c=(5*(f-32))/9;
printf("%d(F)=%.2f(C)\n",f,c);
}
3.13
#include 19、 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"
int main(int argc, char* argv[])
{
char a[4] = "编";
printf("机内码:%x%x\t 20、\n",a[0]&0xff,a[1]&0xff);
printf("区位码:%x\t\n",a[0]&0xff<<8+a[1]&0xff-0x2020-0x8080);
printf("国际码:%x\t\n",a[0]&0xff<<8+a[1]&0xff-0x8080);
return 0;
}
第四章习题
4.1
#include 21、
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);
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
22、include 23、printf("Enter month:");
scanf("%d",&m);
printf("Enter day:");
scanf("%d",&d);
days=d;
while(m>1){days+=mdays(y,m-1);m--;}
printf("%d\n",days);
}
4.4 if方法:
#include "stdafx.h"
#include 24、 0;
printf("input the salary\n");
scanf("%f",&x);
if(x<0)
printf("wrong\n");
else if(x>0 && x<1000)
printf("0\n");
else if(x<2000)
printf("%f\n",x*0.05);
25、 else if(x<3000)
printf("%f\n",x*0.1);
else if(x<4000)
printf("%f\n",x*0.15);
else if(x<5000)
26、 printf("%f\n",x*0.2);
else
printf("%f\n",x*0.25);
return 0;
}
Case方法:
#include "stdafx.h"
#include 27、 printf("input the salary\n");
scanf("%f",&x);
int xCase = 0;
xCase = (int)(x/1000.0);
switch(xCase)
{
case 0:
printf("0\n");
break;
case 1:
printf("%f\n",x*0.05);
28、 break;
case 2:
printf("%f\n",x*0.1);
break;
case 3:
printf("%f\n",x*0.15);
break;
case 4:
printf("%f\n",x*0.2);
break;
default: 29、
printf("%f\n",x*0.25);
}
return 0;
}
4.7
#include "stdafx.h"
#include 30、] = c;
}while(c != '\r');
for(i=0;sa[i+1];i++)
{
for(j = i+1;sa[j];j++)
{
if( sa[i]==sa[j] && sa[j] ==' ')
{
for(k=j;sa[k];k++)
sa[k] = 31、sa[k+1];
j--;
}
}
}
for(k=0;sa[k];k++)
printf("%2c",sa[k]);
return 0;
}
4.10
#include 32、ile(1.0/n>=EPS)
{
pi=pi+t;
n=n+2;
s=s*(-1);
t=s/n;
}
pi=pi*4;
printf("pi=%10.6f\n",pi);
}
4.11
#include 33、anf("%d%d",&num1,&num2);
if(num1>num2)
{
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 is: %d\n",num1,n 34、um2,a);
printf("The LCM of them is: %d\n",num1*num2/a);
}
4.13
#include "stdafx.h"
#include 35、 {
for(i=1;i 36、imes(j))
{
printf("%d=%d+%d\n",num,i,j);
}
}
}
}
}
}
37、 return 0;
}
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 38、
{
int c,i;
for(i=1,c=32;c<=126;++i,++c)
{
printf("%3d%-5c",c,c);
if(!(i%8))
printf("\n");
}
}
4.18
#include "stdafx.h"
#include 39、t i,n,sum;
printf("input 10 numbers\n");
for(i = 0,n = 0,sum = 0;i<10;i++)
{
scanf("%d",&x);
if(x >0)
{
sum+=x;
n++;
}
}
if(n)
printf("number 40、s = %d,average = %f\n",n,1.0*sum/n);
return 0;
}
第五章习题
5.5
Extern和static存储类型的区别:
Static型外部变量和extern型外部变量的唯一区别是作用域的限制。静态外部变量只能作用于定义它的文件,其他文件中的函数不能使用。Extern型外部变量的作用域可以扩大到整个程序的所有文件。
Static和auto存储类型的区别:
静态局部变量和自动变量有根本性的区别。由于静态局部变量在程序执行期间不会消失,因此,它的值有连续性。当退出块时,它的值能保存下来,以便再次进入块时使用,而自动变量 41、的值在退出块时都丢失了。如果定义时静态局部变量有显示初始化,只在第一次进入时执行一次赋初值操作,而自动变量每次进入时都要执行赋初值操作。
5.6
不能。
在C语言中,参数的传递方式是“值传递”,即把实参的值拷贝到参数的存储区中。因此,swap()函数交换的只是实参的本地拷贝,代表swap()实参的变量并没有被改变。
5.7 6,12
5.10
#include 42、
fac*=1.0/i;
s+=fac;
}
return s;
}
void main(void)
{
int n;
printf("Please enter the integer n:");
scanf("%d",&n);
printf("the sum is %lf\n",sum_fac(n));
}
5.17
#include 43、 {
reverse();
putchar(ch);
}
}
int main()
{
reverse();
printf("\n");
return 0;
}
第六章习题
6.1
(1)正确
(2)错误,不需要加“;”
(3)错误,“ident”与“(”之间不能有空格
(4)错误,宏名不能是关键字“void”
(5)错误,将x*y改成((x)*(y))
6.4
将会导致变量blue的重复定义
6.5
(1)#define N 44、O 0
(2)#include “common.h”
(3)#line 3000
(4)#undef TRUE
#define TRUE 1
(5)#if TRUE !=0
#define FALSE 0
#else
#define FALSE 1
#endif
(6)#ifndef SIZE
assert(0);
#else
assert(SIZE<10&&SIZE>1);
#endif
(7)#define SQUARE_VOLUME(x) (x)*(x)*(x)
6.10
#include 45、i 3.1415926
#define BALL_VOLUME(r) ((4/3)*pi*(r)*(r)*(r))
int main()
{
int r;
float v[11];
for(r=1;r<11;r++)
{
v[r]=float(BALL_VOLUME(r));
printf("r=%2d v=%.2f\n",r,v[r]);
}
return 0;
}
第七章习题
7.9
#include 46、
int gdriver=DETECT,gmode,i,size;
initgraph(&gdriver,&gmode,"c:\\tc\\bgi");
setbkcolor(BLUE);
setcolor(RED);
setlinestyle(0,0,1);
setfillstyle(1,5);
circle(200,250,RED);
size=imagesize(200,250,200,300);
buffer=malloc(size);
getimage_r(200,250,200,300,buffer);
for(i=0;i<=10;i++)
putimage 47、200,250+g*i*i/2,buffer,COPY_PUT);
getch_r();
closegraph();
}
7.11
#include 48、}
void main()
{
long i;
int n=0;
int szWord[RAND];
char a[]="heads";
char b[]="tails";
srand(time(0));
for(i=0;i 49、3)
{
printf("\nIt took %ld flips to get heads 3 consecutives times",i+1);
break;
}
}
}
7.16
char *MonthName(int month);
int MonthDays(int month,int year);
int FirstDayOfMonth(int month,int year);
int IsLeapYear(int year);
enum weak{SUNDAY ,MONDAY,TUESDAY,WEDNESD 50、AY,THURSDAY,FRIDAY,SATURDAY};
#include “caltools.h”
char *MonthName(int month)
{
Switch(month)
{
Case 1: return(“January”);
Case 2: return(“February”);
Case 3: return(“March”);
Case 4: return(“April”);
Case 5: return(“May”);
Case 6: return(“June”);
Case 7: return(“July”);
C






