曹计昌《C程序设计》课后习题答案解析.docx

上传人:b****5 文档编号:7280673 上传时间:2023-05-11 格式:DOCX 页数:57 大小:27.74KB
下载 相关 举报
曹计昌《C程序设计》课后习题答案解析.docx_第1页
第1页 / 共57页
曹计昌《C程序设计》课后习题答案解析.docx_第2页
第2页 / 共57页
曹计昌《C程序设计》课后习题答案解析.docx_第3页
第3页 / 共57页
曹计昌《C程序设计》课后习题答案解析.docx_第4页
第4页 / 共57页
曹计昌《C程序设计》课后习题答案解析.docx_第5页
第5页 / 共57页
曹计昌《C程序设计》课后习题答案解析.docx_第6页
第6页 / 共57页
曹计昌《C程序设计》课后习题答案解析.docx_第7页
第7页 / 共57页
曹计昌《C程序设计》课后习题答案解析.docx_第8页
第8页 / 共57页
曹计昌《C程序设计》课后习题答案解析.docx_第9页
第9页 / 共57页
曹计昌《C程序设计》课后习题答案解析.docx_第10页
第10页 / 共57页
曹计昌《C程序设计》课后习题答案解析.docx_第11页
第11页 / 共57页
曹计昌《C程序设计》课后习题答案解析.docx_第12页
第12页 / 共57页
曹计昌《C程序设计》课后习题答案解析.docx_第13页
第13页 / 共57页
曹计昌《C程序设计》课后习题答案解析.docx_第14页
第14页 / 共57页
曹计昌《C程序设计》课后习题答案解析.docx_第15页
第15页 / 共57页
曹计昌《C程序设计》课后习题答案解析.docx_第16页
第16页 / 共57页
曹计昌《C程序设计》课后习题答案解析.docx_第17页
第17页 / 共57页
曹计昌《C程序设计》课后习题答案解析.docx_第18页
第18页 / 共57页
曹计昌《C程序设计》课后习题答案解析.docx_第19页
第19页 / 共57页
曹计昌《C程序设计》课后习题答案解析.docx_第20页
第20页 / 共57页
亲,该文档总共57页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

曹计昌《C程序设计》课后习题答案解析.docx

《曹计昌《C程序设计》课后习题答案解析.docx》由会员分享,可在线阅读,更多相关《曹计昌《C程序设计》课后习题答案解析.docx(57页珍藏版)》请在冰点文库上搜索。

曹计昌《C程序设计》课后习题答案解析.docx

曹计昌《C程序设计》课后习题答案解析

第一章习题

1.4

原码:

对于一个二进制数X,如果规定其最高位为符号位,其余各位为该数的绝对值,并且规定符号位值为0表示正,为1表示负,采用这种方式的二进制编码称为该二进制数X的原码。

补码:

正数的补码等于正数的原码,负数的补码为其原码除符号位不动外,其余各位变反再加1所得。

反码:

对于正数而言,反码与原码相同;对于负数而言,反码符号位的定义与原码相同,但需要将对应原码的数值位按位变反。

1.5和:

10101010

差:

00010000

1.6和01073

  差-0337

1.7和0x1AABA

差-0x5320

1.8

(251)10=(11111011)2=(373)8=(FB)16

1.10

在16位机中,[157]补=0000000010011101

            [-153]补=111111*********1

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中,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

(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

合法常数:

.12 0.L             1.E-5    3.F 浮点型常量

2L  33333   0377UL0x9cfU 整型常量

“a” “”   字符串常量

‘\45’             ‘\0’        ‘\a’ 字符常量

 

非法常数:

‘‘’必须用转义序列

0x1ag十六进制没有g

E20没有尾数部分

‘\18’      要用八进制数

‘\0xa’格式错误,可以是’\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

(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||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

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()

{

 

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

(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

   x1(%4d)= -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

   -2    0

3.8

#include

voidmain()

{

      charc;

      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');

             }

             elseif((c>='A'&&c<='F'))

             {

             printf("%d\n",c-'A'+10);

             }

             else

             printf("%d\n",c-'a'+10);

      }

      else

             putchar(c);

}

 

3.9

#include

voidmain()

{

      shortnum,high,low;

      printf("Pleaseinputashortnumber:

\n");

  scanf("%hd",&num);

  low=0x00ff#

  high=0x00ff&(num>>8);

  printf("Thehighbyteis:

%c\n",high);

  printf("Thelowbyteis:

%c\n",low);

   }

 

3.10

#include"stdafx.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("%d\n",x);

      return0;

}

 

3.11

 

#include

voidmain()

{

unsignedshortintx,m,n;

unsignedshortintresult;

scanf("%hu%hu%hu",&x,&m,&n);

result=(x>>(m-n+1))<<(15-n+1);

printf("%hu\n",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()

{

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

#include"stdafx.h"

 

intmain(intargc,char*argv[])

{

      

      chara[4]="编";

      printf("机内码:

%x%x\t\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);

      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)

{

      if(m==2)return(y%4==0&&(y%100==0||y%400==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("%d\n",days);

}

4.4 if方法:

#include"stdafx.h"

#include

intmain(intargc,char*argv[])

{

      floatx=0;

      printf("inputthesalary\n");

      scanf("%f",&x);

      if(x<0)

             printf("wrong\n");

      elseif(x>0&&x<1000)

                    printf("0\n");

                    elseif(x<2000)

                           printf("%f\n",x*0.05);

                           elseif(x<3000)

                                  printf("%f\n",x*0.1);

                                  elseif(x<4000)

                                         printf("%f\n",x*0.15);

                                         elseif(x<5000)

                                                printf("%f\n",x*0.2);

                                                else

                                                       printf("%f\n",x*0.25);

      return0;

}

 

Case方法:

 

#include"stdafx.h"

#include

intmain(intargc,char*argv[])

{

      floatx;

      printf("inputthesalary\n");

      scanf("%f",&x);

      intxCase=0;

      xCase=(int)(x/1000.0);

      switch(xCase)

      {

      case0:

                    printf("0\n");

                    break;

      case1:

                    printf("%f\n",x*0.05);

                    break;

      case2:

                    printf("%f\n",x*0.1);

                    break;

      case3:

                    printf("%f\n",x*0.15);

                    break;

      case4:

                    printf("%f\n",x*0.2);

                    break;

      default:

                    printf("%f\n",x*0.25);

      }

      return0;

}

 

4.7

#include"stdafx.h"

#include

intmain(intargc,char*argv[])

{

      char*sa;

      charc;

      inti=0,j=0,k=0;

      do

      {

             c=getchar_r();

             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("%2c",sa[k]);

      return0;

}

4.8

#include

voidmain(void)

{

charc;

printf("Inputthecharstobecopy:

\n");

c=getchar();

while(c!

=EOF)

{

if(c==32)

{

c=getchar();

continue;

}

else

{

putchar(c);

c=getchar();

}

}

}

 

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=%10.6f\n",pi);

}

 

4.11

#include

intmain()

{

      inta,b,num1,num2,temp;

      printf("Inputa&b:

");

      scanf("%d%d",&num1,&num2);

      if(num1>num2)

      {

             temp=num1;num1=num2;num2=

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

当前位置:首页 > 经管营销 > 经济市场

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2