C语言程序设计课后习题参考答案.docx

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

C语言程序设计课后习题参考答案.docx

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

C语言程序设计课后习题参考答案.docx

C语言程序设计课后习题参考答案

附录G习题参考答案

习题一参考答案

【习题1-1】ABCD

【习题1-2】C

【习题1-3】B

【习题1-4】B

【习题1-5】略

习题二参考答案

一、单项选择题

【习题2-1】~【习题2-6】:

CCDBAA

二、简答题

【习题2-7】:

C语言提供了丰富的数据类型,可以根据这些数据类型构造出不同的数据结构。

C中的数据类型包括基本类型、构造类型、指针类型、空类型等。

其中基本类型包括整型、字符型、实型(浮点型)等。

【习题2-8】:

C中整常数的表示

整型常量即整常数。

C整常数可用以下三种形式表示:

①十进制整数;②八进制整数。

以数字0开头的数是八进制数,如0123表示八进制数123;③十六进制整数。

以0x开头的数是十六进制数。

如0x123,代表十六进制数123。

【习题2-9】:

C规定对所有的变量要“先定义,后使用”,这样规定有以下好处:

(1)便于纠错;

(2)便于编译系统为变量分配存储空间;

(3)运算合法性检查。

【习题2-10】:

C语句可以分为以下五类:

(1)控制语句。

完成一定的控制功能;

(2)函数调用语句;

(3)表达式语句;

(4)空语句;

(5)可以用{}把一些语句括起来成为复合语句。

C只有9种控制语句,它们是:

(1)if()~else~(条件语句)

(2)for()~(转向语句)

(3)while()~(循环语句)

(4)do~while()(循环语句)

(5)continue(结束本次循环语句)

(6)break(中止执行switch或循环语句)

(7)switch(多分支选择语句)

(8)goto(转向语句)

(9)return(从函数返回语句)

【习题2-11】:

表达式不是独立存在的,它存在于其他表达式、语句、函数参数里,表达式后面加上一个分号,就变成表达式语句,如

i=i+1(是表达式,不是语句)

i=i+l;(是语句)

表达式能构成语句是C语言的一个特色。

其实“函数调用语句”也是属于表达式语句,因为函数调用也属于表达式的一种,只是为了便于理解和使用,我们把“函数调用语句”和“表达式语句”分开来说明。

由于C程序中大多数语句是表达式语句(包括函数调用语句),所以有人把C语言称作“表达式语言”。

【习题2-12】:

字符常量就是一个字符,用单引号括起来,占一个字节;而字符串常量是由若干个字符组合而成,用双引号括起来,存贮时自动在后面加“\0”,即使同样是一个字符,字符串常量后面还要加一个“\0”。

【习题2-13】:

(1)12,a;

(2)40,20;(3)113,4b;(4)176627,fd97;(5)177621,ff91;(6)4663,9b3;(7)110022,9012;(8)51013,520b。

三、阅读程序写结果或填空

【习题2-14】:

aabbccabc

AN

【习题2-15】:

261

【习题2-16】:

10

【习题2-17】:

57

57

67.856400,-789.124023

67.856400,-789.124023

67.86,-789.12,67.8564,-789.1240,67.856400,-789.124023

6.78564e+01,-7.9e+02

A,65,101,41

1234567,4553207,d687

65535,177777,ffff,-1

COMPUTER,COM

【习题2-18】:

9,11,9,10

【习题2-19】:

2.5

【习题2-20】:

3.5

【习题2-21】:

(1)14,

(2)10,(3)60,(4)0,(5)0,(6)0

【习题2-22】:

x>-5&&x<5

x>5||x<-5

四、编写程序题

【习题2-23】

main()

{

floatr,h,C1,Sa,Sb,Va,Vb;

scanf("%f,%f",&r,&h);

C1=2*3.14*r;

Sa=3.14*r*r;

Sb=4*Sa;

Va=4*3.14*r*r*r/3;

Vb=Sa*h;

printf("C1=%.2f\n",C1);

printf("Sa=%.2f\nSb=%.2f\nVa=%.2f\nVb=%.2f\n",Sa,Sb,Va,Vb);

}

【习题2-24】

main()

{floatF,c;

printf("请输入一个华氏温度:

\n");

scanf("%f",&F);

c=5.0/9.0*(F-32);/*注意5和9要实型表示,否则5/9的值为0*/

printf("摄氏度为:

%5.2f\n",c);

}

【习题2-25】

#include"stdio.h"

main()

{charc1,c2;

printf("请输入两个字符c1,c2:

\n");

c1=getchar();

c2=getchar();

printf("用putchar语句输出结果为:

\n");

putchar(c1);

putchar(’’);

putchar(c2);

printf("用printf语句输出结果为:

\n");

printf("\n%c%c\n",c1,c2);

}

(1)都可以;

(2)用printf()函数;

(3)不是在任何情况下,因为char只有一个字节,而int有2个字节。

能表示的范围不一样。

【习题2-26】:

#include

#definePI3.14159

main()

{

floatr,h,cl,cs,cvz;

printf("Inputr,h:

");

scanf("%f,%f",&r,&h);

cl=2*PI*r;

cs=PI*r*r;

cvz=cs*h;

printf("Thelengthofthecircumference:

%6.2f\n",cl);

printf("areaofthecircle:

%6.2f\n",cs);

printf("volumeofthecolumn:

%6.2f\n",cvz);

}

【习题2-27】:

#include

main()

{

charch;

printf("\nInputaletter:

");

scanf("%c",&ch);

printf("\nASCIItheletter:

%d",ch);

}

习题三参考答案:

一、单项选择题

【习题3-1】~【习题3-6】:

DCADCB。

【习题3-7】:

(1)0;

(2)1;(3)1;(4)0;(5)1。

二、简单题

【习题3-8】:

程序解决问题是按指定的次序执行一系列操作的结果,按照次序执行操作的过程描述称为算法。

算法的特性:

①有穷性;②确定性;③有零个或多个输入;④有一个或多个输出;⑤有效性。

举例:

菜谱操作步骤、乐谱、施工图纸等。

【习题3-9】:

(1)自然语言;

(2)伪代码;(3)流程图;(4)计算机语言。

自然语言通俗易懂,但有歧义性;伪代码方便实用,但没有流程图明晰,容易犯逻辑错误;流程图明晰但绘制和修改时比较繁琐;计算机语言表示算法严谨,但无法做到算法设计的第一步就使用计算机语言,读程序比看流程图要费神很多。

【习题3-10】:

顺序结构,由顺序执行的一组语句或者结构组成。

(2)分支结构,根据判断条件,做出取舍,要么执行A分支要么执行B分支,必须执行其中的一个,不可全执行也不可全不执行。

(3)循环结构,由需要反复执行的一段代码或者结构组成。

任何算法功能都可以通过以上三种基本程序结构的组合来实现。

【习题3-11】:

非0为真,0为假。

三、用传统流程图表示求解以下问题的算法

【习题3-12】~【习题3-19】:

如图3-12至图3-19所示。

3-123-133-14

其中的符号“→”表示“倒给”,例如“A→C”“将A瓶中的液体倒给C瓶”。

3-153-163-17

3-183-19

四、编写程序题

【习题3-20】:

#include

main()

{intx,y;

printf("输入x:

");

scanf("%d",&x);

if(x<1)                        /*x<1*/

{y=x;

printf("x=%3d,y=x=%d\n",x,y);

}

elseif(x<10)                /*1≤x-10*/

{y=2*x-1;

printf("x=%3d,y=2*x-1=%d\n",x,y);

}

else                    /*x≥10*/

{y=3*x-11;

printf("x=%3d,y=3*x-11=%d\n",x,y);

}

}

【习题3-21】:

#include

main()

{longintnum;

intindiv,ten,hundred,thousand,ten_thousand,place;

                /*分别代表个位、十位、百位、千位、万位和位数*/

printf("请输入一个整数(0~99999):

");

scanf("%ld",&num);

if(num>9999)place=5;

elseif(num>999)place=4;

elseif(num>99)place=3;

elseif(num>9)place=2;

elseplace=1;

printf("place=%d\n",place);

ten_thousand=num/10000;

thousand=num/1000%10;

hundred=num/100%10;

ten=num%100/10;

indiv=num%10;

switch(place)

{case5:

printf("%d,%d,%d,%d,%d",ten_thousand,thousand,hundred,ten,indiv);

         printf("\n反序数字为;");

         printf("%d%d%d%d%d\n",indiv,ten,hundred,thousand,ten_thousand);

         break;

   case4:

printf("%d,%d,%d,%d",thousand,hundred,ten,indiv);

         printf("\n反序数字为:

");

         printf("%d%d%d%d\n",indiv,ten,hundred,thousand);

         break;

   case3:

printf("%d,%d,%d",hundred,ten,indiv);

         printf("\n反序数字为:

");

         printf("%d%d%d\n",indiv,ten,hundred);

         break;

   case2:

printf("%d,%d",ten,indiv);

         printf("\n反序数字为:

");

         printf("%d%d\n",indiv,ten);

         break;

   case1:

printf("%d",indiv);

         printf("\n反序数字为:

");

         printf("%d\n",indiv);

         break;

}

}

【习题3-22】:

(1)用if语句编程序。

  

#include

main()

{longi;

floatbonus,bon1,bon2,bon4,bon6,bon10;

bon1=100000*0.1;               /*利润为10万元时的奖金*/

bon2=bon1+100000*0.075;        /*利润为20万元时的奖金*/

bon4=bon2+200000*0.05;         /*利润为40万元时的奖金*/

bon6=bon4+200000*0.03;         /*利润为60万元时的奖金*/

bon10=bon6+400000*0.015;       /*利润为100万元时的奖金*/

printf("请输入利润i:

");

scanf("%ld",&i);

if(i<=100000)

bonus=i*0.1;                  /*利润在10万元以内按0.1提成奖金*/

elseif(i<=200000)

bonus=bon1+(i-100000)*0.075;   /*利润在10万至20万元时的奖金*/

elseif(i<=400000)

bonus=bon2+(i-200000)*0.05;    /*利润在20万至40万元时的奖金*/

elseif(i<=600000)

bonus=bon4+(i-400000)*0.03;    /*利润在40万至60万元时的奖金*/

elseif(i<=1000000)

bonus=bon6+(i-600000)*0.015;   /*利润在60万至100万元时的奖金*/

else

bonus=bon10+(i-1000000)*0.01;  /*利润在100万元以上时的奖金*/

printf("奖金是%10.2f\n",bonus);

}

此题的关键在于正确写出每一区间的奖金计算公式。

例如利润在10万元至20万时,奖金应由两部分组成:

①利润为10万元时应得的奖金。

即100000*0.1;②10万元以上部分应得的奖金。

即(num-100000)*0.075。

同理,20万~40万这个区间的奖金也应由两部分组成:

①利润为20万元时应得的奖金,即100000*0.1*10万*0.075;②20万元以上部分应得的奖金,即(num-200000)*0.05。

程序中先把10万、20万、40万、60万、100万各关键点的奖金计算出来,即bon1、bon2、bon4、bon6、hon10;然后再加上各区间附加部分的奖金。

(2)用switch语句编程序。

输入利润i,确定相应的提成等级branch

#include

main()

{longi;

floatbonus,bon1,bon2,bon4,bon6,bon10;

intc;

bon1=100000*0.1;

bon2=bon1+100000*0.075;

bon4=bon2+200000*0.05;

bon6=bon4+200000*0.03;

bon10=bon6+400000*0.015;

printf("请输入利润i:

");

scanf("%ld",&i);

c=i/100000;

if(c>10)c=10;

switch(c)

{case0:

bonus=1*0.1;break;

case1:

bonus=bon1+(i-100000)*0.075;break;

case2:

case3:

bonus=bon2+(i-200000)*0.05;break;

case4:

case5:

bonus=bon4+(i-400000)*0.03;break;

case6:

case7:

case8:

case9:

bonus=bon6+(i-600000)*0.015;break;

case10:

bonus=bon10+(i-1000000)*0.01;

}

printf("奖金是%10.2f",bonus);

}

【习题3-23】:

#include

main()

{intt,a,b,c,d;

printf("请输入4个整数:

");

scanf("%d,%d,%d,%d",&a,&b,&c,&d);

printf("\na=%d,b=%d,c=%d,d=%d\n",a,b,c,d);

if(a>b){t=a;a=b;b=t;}

if(a>c){t=a;a=c;c=t;}

if(a>d){t=a;a=d;d=t;}

if(b>c){t=a;b=c;c=t;}

if(b>d){t=b;b=d;d=t;}

if(c>d){t=c;c=d;d=t;}

printf("排序结果如下:

\n");

printf("%d,%d,%d,%d\n",a,b,c,d);

}

【习题3-24】:

#include

main()

{intp,r,n,m,temp;

  printf("请输入两个正整数n,m:

");

  scanf("%d,%d",&n,&m);

  if(n

  {temp=n;n=m;m=temp;}  /*把大数放在n中,小数放在m中*/

  p=n*m;     /*先将n和m的乘积保存在p中,以便求最小公倍数时用*/

  while(m!

=0)  /*求n和m的最大公约数*/

  {r=n%m;

    n=m;

    m=r;

  }

  printf("它们的最大公约数为:

%d\n",n);

  printf("它们的最小公倍数为:

%d\n",p/n);/*P是原来两个整数的乘积*/

}

【习题3-25】:

#include

main()

{charc;

  intletter=0,space=0,digit=0,other=0;

  printf("请输入一行字符:

\n");

  while((c=getchar())!

='\n')

  {if(c>='a'&&c<='z'||c>='A'&&c<='z')  letter++;

    elseif(c=='')  space++;

    elseif(c>='0'&&c<='9')  digit++;

    else  other++;

  }

  printf("字母数=%d,空格数=%d,数字数=%d,其他字符数\

=%d\n",letter,space,digit,other);

}

【习题3-26】:

#include

main()

{

inta,b,x,y;

scanf("%d,%d",&a,&b);

x=a*a+b*b;

if(x>100){y=x/100;printf("%d",y);}

elseprintf("%d",a*a+b*b);

}

【习题3-27】:

#include

main()

{

intx;

scanf("%d,",&x);

if(x%5==0&&x%7==0)printf("Yes");

elseprintf("No.");

}

【习题3-28】:

#include

main()

{

intx;

floaty;

scanf("%d,",&x);

if(x<0)y=0;

elseif(x>0&&x<=10)y=x;

elseif(x>10&&x<=20)y=10;

elseif(x>20&&x<40)y=-0.5*x+20;

elsey=-1;

if(y!

=-1)printf("%f",y);

elseprintf("Error!

\n");

}

【习题3-29】:

#include

main()

{

intx;

scanf("%d,",&x);

if((x%3==0)&&(x%5==0)&&(x%7==0))

printf("%dcanbedividedby3,5,7\n",x);

elseif((x%3==0)&&(x%5==0))

printf("%dcanbedividedby3,5,\n",x);

elseif((x%3==0)&&(x%7==0))

printf("%dcanbedividedby3,7\n",x);

elseif((x%5==0)&&(x%7==0))

printf("%dcanbedividedby5,7\n",x);

elseif(x%3==0)

printf("%dcanbedividedby3\n",x);

elseif(x%5==0)

printf("%dcanbedividedby5\n",x);

elseif(x%7==0)

printf("%dcanbedividedby7\n",x);

elseprintf("%dcannotbedividedby3,5,7\n",x);

}

【习题3-30】:

#include

main()

{

floatx;

inty;

printf("\ninputx:

");

scanf("%f",&x);

switch(x<0)

{

case1:

y=-1;break;

case0:

switch(x==0)

{case1:

y=0;break;

defaut:

y=1;

}

}

printf("\ny=%d",y);

}

【习题3-31】:

#include

main()

{

intscore,temp,log;chargrade;

log=1;

while(log)

{

printf("enterscore:

");

scanf("%d",&score);

if(score>100||score<0)

printf("\nerror,tryagain!

\n");

elselog=0;

}

if(score==100)temp=9;

elsetemp=(score-score%10)/10;

switch(temp)

{

case0:

case1:

case2:

case3:

case4:

case5:

grade='E';break;

case6:

grade='D';break;

case7:

grade='C';break;

case8:

grade='B';break;

case9:

grade='A';break;

}

printf("score=%d,grade=%c\n

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

当前位置:首页 > 工程科技 > 能源化工

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

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