c程序设计第二版完整答案.docx

上传人:b****1 文档编号:13594770 上传时间:2023-06-15 格式:DOCX 页数:84 大小:156.52KB
下载 相关 举报
c程序设计第二版完整答案.docx_第1页
第1页 / 共84页
c程序设计第二版完整答案.docx_第2页
第2页 / 共84页
c程序设计第二版完整答案.docx_第3页
第3页 / 共84页
c程序设计第二版完整答案.docx_第4页
第4页 / 共84页
c程序设计第二版完整答案.docx_第5页
第5页 / 共84页
c程序设计第二版完整答案.docx_第6页
第6页 / 共84页
c程序设计第二版完整答案.docx_第7页
第7页 / 共84页
c程序设计第二版完整答案.docx_第8页
第8页 / 共84页
c程序设计第二版完整答案.docx_第9页
第9页 / 共84页
c程序设计第二版完整答案.docx_第10页
第10页 / 共84页
c程序设计第二版完整答案.docx_第11页
第11页 / 共84页
c程序设计第二版完整答案.docx_第12页
第12页 / 共84页
c程序设计第二版完整答案.docx_第13页
第13页 / 共84页
c程序设计第二版完整答案.docx_第14页
第14页 / 共84页
c程序设计第二版完整答案.docx_第15页
第15页 / 共84页
c程序设计第二版完整答案.docx_第16页
第16页 / 共84页
c程序设计第二版完整答案.docx_第17页
第17页 / 共84页
c程序设计第二版完整答案.docx_第18页
第18页 / 共84页
c程序设计第二版完整答案.docx_第19页
第19页 / 共84页
c程序设计第二版完整答案.docx_第20页
第20页 / 共84页
亲,该文档总共84页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

c程序设计第二版完整答案.docx

《c程序设计第二版完整答案.docx》由会员分享,可在线阅读,更多相关《c程序设计第二版完整答案.docx(84页珍藏版)》请在冰点文库上搜索。

c程序设计第二版完整答案.docx

c程序设计第二版完整答案

第一章C++基础知识习题

1.1判断下列标识符的合法性。

sinbook5arry_nameExample2.1main

$1class_cppa3x*ymyname

答:

合法的:

sinbook_namemainclass_cppa3

非法的:

5arryExample2.1$1x*ymyname

1.2假定有下列变量:

inta=3,b=5,c=0;

floatx=2.5,y=8.2,z=1.4;

charch1=’a’,ch2=’5’,ch3=’0’,ch4;

求下列表达式的值,以及运算后表达式所涉及的各变量的值。

x+(int)y%ax=z*b++,b=b*x,b++ch4=ch3-ch2+ch1

int(y/z)+(int)y/(int)z!

(a>b)&&c&&(x*=y)&&b++

ch3||(b+=a*c)||c++z=(a<<2)/(b>>1)

答:

x+(int)y%a表达式值为:

4.5,运算后x、y、a的值不变,仍分别为2.5、8.2、3。

提示:

运算时取出y变量的数值强制转化为整型数放入寄存器参加运算,但内存中y本身的数值不变化。

只有赋值运算和自增、自减运算才改变变量本身的值

x=z*b++,b=b*x,b++表达式值为:

42,运算后x为7.0,b为43。

提示:

逗号表达式,依次运算,表达式的值是最后一次运算的值。

后++是变量先参加运算然后变量自身加1,所以第1步x等于1.4*5,即7.0,然后b增为6;第2步b赋值为42;第3步,表达式的值是上一步后b的值42,但随后b的值自增1,成为43。

ch4=ch3-ch2+ch1表达式值为:

’\\’,字符外斜杠。

运算后ch1、ch2、ch3值不变。

提示:

字符型的变量实质是范围很小的整型量。

int(y/z)+(int)y/(int)z表达式值为:

13。

y和z自身的值不变。

提示:

int(y/z)是完成实数除法后,商强制转化为整型,(int)y/(int)z则是数值先转换,完成的是整除。

!

(a>b)&&c&&(x*=y)&&b++表达式值为:

0。

运算后x仍为2.5,b仍为5

提示:

只要出现一个false右边的不再做,因为c为0,即false,所以其右的所有运算不再做。

ch3||(b+=a*c)||c++表达式值为:

1。

运算后b为5,c为0,均不变。

提示:

只要出现一个true,右边不再做。

ch3的值为48。

z=(a<<2)/(b>>1)表达式值为:

6。

运算后a与b的值不变仍为3和5。

提示:

a的数值为(00000011)2,左移2位为(00001100)2即12,相当整数2两次,而b的数值为(00000101)2,右移1位为(00000010)2,即2,相当于整除2。

1.3判断下列哪些是常量,哪些是变量。

"China"constintn=10;intm=5;'a'charch='a'

intarray[5]={1,2,3,4,5};chars[]="Hello";

答:

"China"文字常量

constintn=10;常变量

intm=5;变量

'a'文字常量

charch='a'变量

intarray[5]={1,2,3,4,5};变量

chars[]="Hello";变量

1.4将下列算式或叙述用C++表达式描述。

(1)

(2)(x+y)/((x-y)*ay)

(3)位于原点为圆心,a,b为半径的圆环中的点坐标。

(4)

(5)

并且字符ch不为'\0'。

答:

pi/2+sqrt(asin(x)*asin(x)+c*c)

(x+y)/((x-y)*pow(a,y))

((x*x+y*y)>=a*a)&&((x*x+y*y)<=b*b)

(a!

=b)&&(a!

=c)&&(b!

=c)

(k<=20)&&(ch!

='\0')

1.6设有语句:

inta,b;

floatx,y;

charch1,ch2,ch3;

cin>>a>>b>>x>>y>>ch1;

ch2=cin.get();

cin>>ch3;

若从键盘输入:

321.87abc

执行后各变量取值如何?

注意abc三字符两两间有空格。

答:

a是3,b是2,x是1.8,y是7,ch1是’a’,ch2是空格,ch3是’b’。

1.7设有语句:

inta,b,c,d;

cin>>oct>>a>>b>>hex>>c>>dec>>d;

若从键盘输入:

23232323

执行后各变量的值用十进制表示各是多少?

答:

a:

19,b:

19,c:

35,d:

23

1.8对于习题1.7,若执行:

cout<

显示结果是什么?

答:

190x13043

第二章基本控制结构程序设计习题

一.基本概念与基础知识自测题

2.1程序阅读题

2.1.1

解答:

本题检查学生整除的概念。

跟踪:

a

b

b/a

循环次数

b-a

3

100

33

1

97

4

100

25

2

96

5

100

20

3

95

15

100

6

13

85

16

100

6

14

84

17

100

5

(1)14

(2)17

(3)100

2.1.2

解答:

第一个循环使x成为:

;y成为:

;第二个循环使y成为:

(1)B

考虑整除,当x连除4次2以后即为0,所以:

为0

(2)1

2.1.3

解答:

检查条件语句与字符串输出概念:

(1)Alpha

(2)Bata

(3)Gamma

2.1.4执行下面程序段后,m和k的值分别为

(1)、

(2)。

intm,k;

for(k=1,m=0;k<=50;k++){

if(m>=10)break;

if(m%2==0){

m+=5;

continue;

}

m-=3;

}

解答:

注意continue语句的使用

初值

m=0

k=1

第1次循环后

m=5

k=2

第2次循环后

m=2

k=3

第3次循环后

m=7

k=4

第4次循环后

m=4

k=5

第5次循环后

m=9

k=6

第6次循环后

m=6

k=7

第7次循环后

m=11

k=8

第8次循环

m=11结束

k=8,k++未做

(1)11

(2)8

二.编程与综合练习题

2.2

解:

#include

usingnamespacestd;

intmain(){

doublex,y;

cout<<"输入x=";

cin>>x;

if(x<1)y=x;

elseif(x<10)y=2*x-1;

elsey=3*x-11;

cout<<"y="<

return0;

}

2.3解:

10分一档用10进行整除获得,转换用开关语句实行。

#include

usingnamespacestd;

intmain(){

intmark,result;//mark是百分制成绩,result是5分制

cout<<"请输入百分制成绩:

"<

cin>>mark;

if(mark<0){

cout<<"缺考!

"<

return0;

}

switch(mark/10){

case9:

case10:

result=5;

cout<<"输出五分制成绩:

"<

break;

case8:

result=4;

cout<<"输出五分制成绩:

"<

break;

case7:

result=3;

cout<<"输出五分制成绩:

"<

break;

case6:

result=2;

cout<<"输出五分制成绩:

"<

break;

case5:

case4:

case3:

case2:

case1:

case0:

result=1;

cout<<"输出五分制成绩:

"<

break;

default:

cout<<"输入错误!

"<

}

return0;

}

2.4

#include

usingnamespacestd;

intmain(){

doubleincome,tax=0;

intk;

cout<<"请输入个人月收入:

"<

cin>>income;

if(income<=1200){

cout<<"免征个人所得税"<

return0;

}

elseincome-=1200;

if(income>20000){

k=income/20000;

switch(k){

default:

tax+=(income-100000)*0.45;income=100000;

case4:

tax+=(income-80000)*0.40;income=80000;

case3:

tax+=(income-60000)*0.35;income=60000;

case2:

tax+=(income-40000)*0.30;income=40000;

case1:

tax+=(income-20000)*0.25;income=20000;

}

}

if(income>5000){

tax+=(income-5000)*0.20;

income=5000;

}

if(income>2000){

tax+=(income-2000)*0.15;

income=2000;

}

if(income>500){

tax+=(income-500)*0.10;

income=500;

}

tax+=income*0.05;

cout<<"应征所得税:

"<

return0;

}

2.5

解:

难点在三角形左边的空格的控制,嵌套一个循环语句完成此任务。

#include

usingnamespacestd;

intmain(){

inti,j;

for(i=1;i<=4;i++){

for(j=4-i;j>0;j--)cout<<"";//三角形每行前部的空格

for(j=1;j<=2*i-1;j++)cout<<"*";

cout<

}

for(i=1;i<=3;i++)cout<<"***\n";

return0;

}

2.6

解:

分上三角和下三角两部分分别处理左边的空格。

#include

usingnamespacestd;

intmain(){

charin;

inti,j;

do{

cout<<"输入一个字母:

";

cin>>in;

if((in>=97)&&(in<=122))in-=32;//小写改大写

}while((in<65)||(in>90));

intline=in-'A';

for(i=0;i<=line;i++){//上三角

for(j=line-i;j>0;j--)cout<<"";//前方空格

for(j=1;j<=2*i+1;j++)cout<<''<

cout<

}

for(i=line;i>0;i--){//下三角(少一行)

for(j=0;j<=line-i;j++)cout<<"";

for(j=1;j<=2*i-1;j++)cout<<''<

cout<

}

return0;

}

2.7

#include

#include

usingnamespacestd;

intmain(){

intn,i,jch=1;

doubleresult=0;//result是结果

cout<<"请输入正整数n:

"<

cin>>n;

if(n<1){

cout<<"输入错误!

"<

return1;

}

result=1;

for(i=2;i<=n;i++){

jch*=i;//jch是i的阶乘,注意n!

=n*(n-1)!

这样可少一层循环

result+=jch;

}

cout<

return0;

}

2.8

#include

usingnamespacestd;

constintday=10;

intmain(){

inti,x=1;//最后一天只有一个

for(i=1;i

cout<<"开始共有桃子"<

\n";

return0;

}

2.9

#include

#include

usingnamespacestd;

intmain(){

intstem[256],sum=0,pnum=0,nnum=0,i=0;

cout<<"从键盘输入一组非0整数,以输入0标志结束:

"<

cin>>stem[i];

while(stem[i]!

=0){

sum+=stem[i];//求和

if(stem[i]>0)pnum++;//正数数量

elsennum++;//负数数量

i++;

cin>>stem[i];

}

if(!

i)cout<<"0个数"<

else{

cout<<"平均值="<<(double)sum/(pnum+nnum)<

cout<<"正数个数="<

cout<<"负数个数="<

}

return0;

}

2.10解:

中国古代数学问题(韩信点兵),采用穷举法。

注意三个条件同时成立用&&。

#include

usingnamespacestd;

intmain(){

inti;

for(i=1;i<=500;i++)

if((i%3==2)&&(i%5==3)&&(i%7==2))cout<

return0;

}

2.11解:

采用穷举法。

两重循环,外层是从1到999依次处理,内层是求该数的所有因子的和,并判断是否等于该数。

#include

usingnamespacestd;

intmain(){

inti,a,sum_yz;//sum_yz是a的因子和

for(a=1;a<1000;a++){

sum_yz=0;

for(i=1;i

//求因子运算未改变循环控制变量a的值,否则要用另一个变量b来代替a来参加运算

if(a==sum_yz)cout<

}

return0;

}

2.12解:

采用穷举法。

考虑10元最多10张,5元最多20张,余下是1元。

#include

usingnamespacestd;

intmain(){

inti,j,k,count=0;

for(i=0;i<=10;i++)//i是10元张数,j是5元张数,k是1元张数

for(j=0;j<=20;j++){

k=100-10*i-5*j;

if(k>=0){

cout<

count++;

}

}

cout<

return0;

}

2.13

解:

采用递推法。

初看每一项的递推通式不易写出,但每一项全看作奇数项,而偶数项全为零,则很容易写出:

第1项为x,第3项为第1项乘以x的平方除以项序号3乘以-1,其余类推。

同时和的误差小于最后一项的绝对值。

#include

#include

usingnamespacestd;

constdoublee=1e-5;

intmain(){

doublex,a,sum;

inti=3;

cout<<"请输入正切值:

"<

cin>>x;

a=x;

sum=x;

do{

a*=x*x*(-1);

sum+=a/i;

i+=2;

}while(fabs(a/i)>e);

cout<<"arctg("<

return0;

}

2.14

解:

迭代法也是用循环语句实现,数学上迭代法可能收敛,也可能发散,解答中加了最大迭代次数的限制。

#include

#include

usingnamespacestd;

constdoublee=1e-5;

intmain(){

doublex0,x1;

intn=0;

cout<<"输入初始近似值:

"<

cin>>x1;

do{

x0=x1;

x1=(x0*x0-10*(x0*sin(x0)+cos(x0)))/(2*x0-10*sin(x0));

//x0是上次算出的结果,x1用作保存新算出的结果

n++;

}while((fabs(x1-x0)>e)&&(n<=1e5));

if(n>1e5)

cout<<"超出迭代1e5次\n";

elsecout<<"方程x*x+10*cos(x)=0的一个根为:

"<

cout<<"方程误差为:

"<

return0;

}

2.15解:

这是一个组合问题,使用穷举法。

共有5个位置,设甲队5名队员位置不变,乙队改变队员位置,进行配对。

注意第1个位置可在5个队员中任选一个,以后的位置必须扣除已选过的队员。

并扣除不能配对的情况,即得所有可能的比赛名单。

#include

usingnamespacestd;

intmain(){

charst1[5]={'A','B','C','D','E'},st2[5]={'J','K','L','M','N'};

inti=0,j,k,l,m,n;

for(j=0;j<5;j++){//0号位

if(j==0)continue;//A选手不与选手J比赛,即st1[0]不与st2[0]比赛

for(k=0;k<5;k++){//1号位

if(k==j)continue;//剔除乙队占据0号位的选手

for(l=0;l<5;l++){//2号位

if(l==j||l==k)continue;//剔除乙队占据0、1号位的选手

for(m=0;m<5;m++){//3号位

if(m==j||m==k||m==l)continue;//剔除乙队占据0、1、2号位的选手

if(m==3)continue;//st1[3]不与st2[3]比赛,即D不与M比赛

for(n=0;n<5;n++){//4号位

if(n==j||n==k||n==l||n==m)continue;

//剔除乙队占据0、1、2、3号位的选手

if(n==3)continue;//st1[4]不与st2[3]比赛,即E不与M比赛

cout<

cout<

cout<

i++;

}

}

}

}

}

cout<

return0;

}

2.16解:

用5个元素的整型数组,分别放弃权票和各候选人的得票,然后用开关语句打印。

#include

#include

usingnamespacestd;

intmain(){

enumcandidate{feipiao,zhang,wang,li,zhao}cand;

intvote[5]={0},i,k=0,n;

cin>>n;

while(n!

=-1){

k++;

if(n>=1&&n<=4)vote[n]++;

elsevote[0]++;

cin>>n;

}

for(i=0;i<5;i++){

cand=(candidate)i;

switch(cand){

casefeipiao:

cout<

casezhang:

cout<

if(vote[cand]>k/2)cout<<"当选"<

elsecout<

break;

casewang:

cout<

if(vote[cand]>k/2)cout<<"当选"<

elsecout<

break;

caseli:

cout<

if(vote[cand]>k/2)cout<<"当选"<

elsecout<

break;

casezhao:

cout<<

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

当前位置:首页 > 初中教育 > 语文

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

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