C语言程序设计答案 曹计昌.docx
《C语言程序设计答案 曹计昌.docx》由会员分享,可在线阅读,更多相关《C语言程序设计答案 曹计昌.docx(71页珍藏版)》请在冰豆网上搜索。
C语言程序设计答案曹计昌
第一章习题
1.4
原码:
对于一个二进制数X,如果规定其最高位为符号位,其余各位为该数的绝对值,并且规定符号位值为0表示正,为1表示负,采用这种方式的二进制编码称为该二进制数X的原码。
补码:
正数的补码等于正数的原码,负数的补码为其原码除符号位不动外,其余各位变反再加1所得。
反码:
对于正数而言,反码与原码相同;对于负数而言,反码符号位的定义与原码相同,但需要将对应原码的数值位按位变反。
1.5和:
差:
00010000
1.6和01073
差-0337
1.7和0x1AABA
差-0x5320
1.8
(251)=()=(373)=(FB)1621081.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)判断k<101?
如果是,顺序执行(4);否则转步骤(5);
(4)k加到累加和变量s中,k加1;转步骤(3)。
(5)输出累加和s。
(6)结束。
开始
结束
ints=0,k=1;
k<101?
s=s+k;
k=k+1;
s
输出N
Y
1.16
第二章习题2.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-不是字母、数字、下划线
isn't'不是字母、数字、下划线
enum关键字
2.4
合法常数:
.120.L1.E-5浮点型常量3.F
整型常量333330377UL0x9cfU2L
字符串常量“a”“”
‘'‘45'字符常‘a'
量3
非法常数:
‘‘'必须用转义序列
0x1ag十六进制没有g
E20没有尾数部分
‘18'要用八进制数
‘xa'格式错误,可以是'xa'
“3'4””需要转义序列
‘”'需要转义序列
2.5
(1)inta,b=5;
(2)doubleh;
(3)intx=2.3;0.3会被截取。
(4)constlongy=1;必须赋初值
(5)floata=2.5*g;g没有定义。
(6)inta=b=2;在turboC中编译出错:
未定义的符号'b'在main函数中。
2.6
(1)4
(2)0
(3)1
(4)6
(5)8
4
(6)0
(7)3.00
(8)1
(9)108
(10)0
2.7答案不确定
(1)a==b==cc未定义
(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
5
(6)113
(7)-2
(8)-1
(9)65532
(10)3
2.10
unsignedlongencrypt(unsignedlongx)
{
unsignedlongx0,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);
return(x0|x1|x2|x3|x4|x5|x6|x7);
}
2.11
#include
voidmain()
6
{
unsignedlongin;
unsignedlonga,b,c,d;
scanf(%ld,&in);
//in=1563;
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)<<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
7
(c>='0'&&c<='9')?
c–‘0':
c
2.19
(a%3==0)&&(a%10==5)?
a:
0;
第三章习题
3.1函数原型是指对函数的名称、返回值类型、参数的数目和参数类型的说明。
其规定了调用该函数的语法格式,即调用形式。
putchar函数的原型为:
intputchar(intc);
puts函数的原型为:
intputs(constchar*s);
printf函数的原型为:
intprintf(constchar*format,…);
getchar函数的原型为:
intgetchar_r(void);
gets函数的原型为:
char*gets_r(char*s);
scanf函数的原型为:
intscanf(constchar*format,…);
3.2不同点:
①puts为非格式输出函数,printf为格式输出函数;
②puts函数的参数类型和数目一定(一个字符串),printf函数的参数类型和数目不固定;
③puts函数输出后会自动换行,printf函数没有这一功能。
相同点:
①二者都向标准设备输出;
②二者返回值类型都为int。
3.3x1=-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.5⑴错误,运行提示为divideerror
⑵正确,结果为b
⑶正确,结果为*
⑷正确
⑸正确,但无法正常从结果中退出
⑹正确
⑺正确,结果为82,63
⑻编译错误,提示cannotmodifyaconstobject
⑼正确
⑽正确
3.6-6.70000
-6
177601
123
-20
3.8
#include
voidmain()
{
charc;
c=getchar_r();
if((c>='0'&&c<='9')||(c>='A'&&c<='F')||(c>='a'&&c<='f'))
9
{
if((c>='0'&&c<='9'))
{
printf(%dn,c-'0');
}
elseif((c>='A'&&c<='F'))
{
printf(%dn,c-'A'+10);
}
else
printf(%dn,c-'a'+10);
}
else
putchar(c);
}
3.9
#include
voidmain()
{
shortnum,high,low;
printf(Pleaseinputashortnumber:
n);
scanf(%hd,&num);
low=0x00ff#
10
high=0x00ff&(num>>8);
printf(Thehighbyteis:
%cn,high);
printf(Thelowbyteis:
%cn,low);
}
3.10
#includestdafx.h
intmain(intargc,char*argv[])
{
unsignedshortintx;
unsignedshortinthigh,low;
printf(inputainteger:
n);
scanf(%d,&x);
high=(x>>12)&0x000f;
low=(x<<12)&0xf000;
x=x&0x0ff0;
x=x|high|low;
printf(%dn,x);
return0;
}
3.11
11
#include
voidmain()
{
unsignedshortintx,m,n;
unsignedshortintresult;
scanf(%hu%hu%hu,&x,&m,&n);
result=(x>>(m-n+1))<<(15-n+1);
printf(%hun,result);
}
3.12
#include
voidmain()
{
floatf,c;
scanf(%f,&f);
c=(5*(f-32))/9;
printf(%.0f(F)=%.2f(C)n,f,c);
}
或者
#include
voidmain()
{
12
intf;
floatc;
scanf(%d,&f);
c=(5*(f-32))/9;
printf(%d(F)=%.2f(C)n,f,c);
}
3.13
#include
#definePI(3.1415926)
intmain(intargc,char*argv[])
{
doubler,h;
doubles,v;
printf(Pleaseinputtherandh.);
scanf(%lf,%lf,&r,&h);
s=2*PI*r*h+2*PI*r*r;
v=PI*r*r*h;
printf(sis%lf,vis%lf,s,v);
return0;
}
3.14
#includestdafx.h
13
intmain(intargc,char*argv[])
{
挠慨?
孡崴?
尠编;
瀠楲瑮?
机内码:
%x%xtn,a[0]&0xff,a[1]&0xff);
瀠楲瑮?
区位码:
%xtn,a[0]&0xff<<8+a[1]&0xff-0x2020-0x8080);
瀠楲瑮?
国际码:
%xtn,a[0]&0xff<<8+a[1]&0xff-0x8080);
return0;
}
第四章习题
4.1
#include
voidmain(void)
{
floata,b,c;
printf(PleaseenterthescoreofA:
n);
scanf(%f,&a);
printf(PleaseenterthescoreofB:
n);
scanf(%f,&b);
printf(PleaseenterthescoreofC:
n);
scanf(%f,&c);
if((a-b)*(a-c)<0)
printf(Agetsthescore%.1f,a);
if((b-a)*(b-c)<0)
printf(Bgetsthescore%.1f,b);
if((c-a)*(c-b)<0)
printf(Cgetsthescore%.1f,c);
}
4.3
#include
intmdays(inty,intm)
{
14
if(m==2)return(y%4==0&&(y_x0010_0==0||y@0==0))?
29:
28;
elseif(m==4||m==6||m==9||m==11)return30;
elsereturn31;
}
main()
{
inty,m,d,days;
printf(Enteryear:
);
scanf(%d,&y);
printf(Entermonth:
);
scanf(%d,&m);
printf(Enterday:
);
scanf(%d,&d);
days=d;
while(m>1){days+=mdays(y,m-1);m--;}
printf(%dn,days);
}
4.4if方法:
#includestdafx.h
#include
intmain(intargc,char*argv[])
{
floatx=0;
printf(inputthesalaryn);
scanf(%f,&x);
if(x<0)
printf(wrongn);
elseif(x>0&&x<1000)
printf(
elseif(x<2000)
printf(%fn,x*0.05);
elseif(x<3000)
printf(%fn,x*0.1);
elseif(x<4000)
printf(%fn,x*0.15);
elseif(x<5000)
printf(%fn,x*0.2);
else
printf(%fn,x*0.25);
return0;
}
Case方法:
15
#includestdafx.h
#include
intmain(intargc,char*argv[])
{
floatx;
printf(inputthesalaryn);
scanf(%f,&x);
intxCase=0;
xCase=(int)(x/1000.0);
switch(xCase)
{
case0:
printf(
break;
case1:
printf(%fn,x*0.05);
break;
case2:
printf(%fn,x*0.1);
break;
case3:
printf(%fn,x*0.15);
break;
case4:
printf(%fn,x*0.2);
break;
default:
printf(%fn,x*0.25);
}
return0;
}
4.7
#includestdafx.h
#include
intmain(intargc,char*argv[])
{
char*sa;
charc;
inti=0,j=0,k=0;
do
{
c=getchar_r();
16
sa[i++]=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]=sa[k+1];
j--;
}
}
}
for(k=0;sa[k];k++)
printf(,,sa[k]);
return0;
}
4.10
#include
#defineEPS1e-5
voidmain()
{
ints=1;
floatn=1.0,t=1.0,pi=0;
while(1.0/n>=EPS)
{
pi=pi+t;
n=n+2;
s=s*(-1);
t=s/n;
}
pi=pi*4;
printf(pi=_x0010_.6fn,pi);
}
4.11
#include
intmain()
{
inta,b,num1,num2,temp;
printf(Inputa&b:
);
scanf(%d%d,&num1,&num2);
17
if(num1>num2)
{
temp=num1;num1=num2;num2=temp;
}
a=num1;b=num2;
while(b!
=0)
{
temp=a%b;
a=b;
b=temp;
}
printf(TheGCDof%dand%dis:
%dn,num1,num2,a);
printf(TheLCMofthemis:
%dn,num1*num2/a);
}
4.13
#includestdafx.h
#include
intPrimes(intx);//判断素数函数
intmain(intargc,char*argv[])
{
inti,j;
intnum;
for(num=4;num<=100;num++)
{
if(num%2==0)
{
for(i=1;i{
for(j=1;j{
if(num==i+j)
{
if(Primes(i)&&Primes(j))
{
printf(%d=%d+%dn,num,i,j);
}
}
}
}
}
}
return0;
}
18
intPrimes(intx)
{
inti;
intn=0;
for(i=1;i<=x;i++)
{
if(x%i==0)
n++;
}
if(n==2)
return1;
else
return0;
}
4.17
#include
voidmain(void)
{
intc,i;
for(i=1,c=32;c<=126;++i,++c)
{
printf(=%-5c,c,c);
if(!
(i%8))
printf(
);
}
}
4.18
#includestdafx.h
#include
intmain(intargc,char*argv[])
{
intx;
inti,n,sum;
printf(input10numbersn);
for(i=0,n=0,sum=0;i<10;i++)
{
scanf(%d,&x);
if(x>0)
{
sum+=x;
n++;
}
}
19
if(n)
printf(
umbers=%d,average=%fn,n,1.0*sum/n);
return0;
}
第五章习题
5.5
Extern和static存储类型的区别:
Static型外部变量和extern型外部变量的唯一区别是作用域的限制。
静态外部变量只能作用于定义它的文件,其他文件中的函数不能使用。
Extern型外部变量的作用域可以扩大到整个程序的所有文件。
Static和auto存储类型的区别:
静态局部变量和自动变量有根本性的区别。
由于静态局部变量在程序执行期间不会消失,因此,它的值有连续性。
当退出块时,它的值能保存下来,以便再次进入块时使用,而自动变量的值在退出块时都丢失了。
如果定义时静态局部变量有显示初始化,只在第一次进入时执行一次赋初值操作,而自动变量每次进入时都要执行赋初值操作。
5.6
不能。
在C语言中,参数的传递方式是“值传递”,即把实参的值拷贝到参数的存储区中。
因此,swap()函数交换的只是实参的本地拷贝,代表swap()实参的变量并没有被改变。
5.76,12
5.10
#include
doublesum_fac(intn)
{
doubles=0;
inti;
doublefac=1.0;
for(i=1;i<=n;i++)
{
fac*=1.0/i;
s+=fac;
}
returns;
}
voidm