C语言程序设计答案 曹计昌.docx

上传人:b****2 文档编号:24481244 上传时间:2023-05-28 格式:DOCX 页数:71 大小:28.29KB
下载 相关 举报
C语言程序设计答案 曹计昌.docx_第1页
第1页 / 共71页
C语言程序设计答案 曹计昌.docx_第2页
第2页 / 共71页
C语言程序设计答案 曹计昌.docx_第3页
第3页 / 共71页
C语言程序设计答案 曹计昌.docx_第4页
第4页 / 共71页
C语言程序设计答案 曹计昌.docx_第5页
第5页 / 共71页
点击查看更多>>
下载资源
资源描述

C语言程序设计答案 曹计昌.docx

《C语言程序设计答案 曹计昌.docx》由会员分享,可在线阅读,更多相关《C语言程序设计答案 曹计昌.docx(71页珍藏版)》请在冰豆网上搜索。

C语言程序设计答案 曹计昌.docx

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

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > PPT模板 > 中国风

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1