当前位置:学习资源下载>课后习题答案
第一章C++基础知识习题
1.1判断下列标识符的合法性。
sin book 5arry _name Example2.1 main
$1 class_cpp a3 x*y my name
答:合法的:sin book _name main class_cpp a3
非法的:5arry Example2.1 $1 x*y my name
1.2假定有下列变量:
int a=3,b=5,c=0;
float x=2.5,y=8.2,z=1.4;
char ch1=?a?,ch2=?5?,ch3=?0?,ch4;
求下列表达式的值,以及运算后表达式所涉及的各变量的值。
x+(int)y%a x=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=z*b++,b=b*x,b++值为:42,x为7,b为43
ch4=ch3-ch2+ch1值为:?\\?
int(y/z)+(int)y/(int)z值为:13
!(a>b)&&c&&(x*=y)&&b++值为:0,b为5 注:只要出现一个false右边的不再做。
ch3||(b+=a*c)||c++值为:1,c为0 注:只要出现一个true,右边不再做。
z=(a<<2)/(b>>1)值为:6
1.3判断下列哪些是常量,哪些是变量。
"China" const int n=10; int m=5; 'a' char ch='a'
int array[5]={1,2,3,4,5}; char s[]="Hello";
答:"China" 文字常量
const int n=10;常变量
int m=5;变量
'a' 文字常量
char ch='a'变量
int array[5]={1,2,3,4,5};变量
char s[]="Hello";变量
1.4将下列算式或叙述用C++表达式描述。
(1)
(2) (x+y)/((x-y)*a y)
(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设有语句:
int a, b;
float x,y;
char ch1,ch2,ch3;
cin>>a>>b>>x>>y>>ch1;
ch2=cin.get();
cin>>ch3;
若从键盘输入:
3 2 1.8 7 a b c
执行后各变量取值如何?注意abc三字符两两间有空格。
答:a是3,b是2,x是1.8,y是7,ch1是?a?,ch2是空格,ch3是?b?。
1.7设有语句:
int a,b,c,d;
cin>>oct>>a>>b>>hex>>c>>dec>>d;
若从键盘输入:
23 23 23 23
执行后各变量的值用十进制表示各是多少?
答:a:19,b:19,c:35,d:23
1.8对于习题1.7,若执行:
cout< 显示结果是什么? 答:19 0x13 043 当前位置:学习资源下载>课后习题答案 第二章基本控制结构程序设计习题 一.基本概念与基础知识自测题 2.1程序阅读题 2.1.1设有说明: int a=3, b=100; 下面的循环语句执行(1)次,执行后a、b的值分别为(2)、(3)。while(b/a>5){ if(b-a>25) a++; else b/=a; } 解答: 本题检查学生整除的概念。跟踪: a b b/a 循环次数b-a 3 100 33 1 97 4 100 2 5 2 96 5 100 20 3 95 ……………1510061385 1610061484 171005停 (1)14 (2)17 (3)100 2.1.2设有说明: int x,y,n,k; 下面程序段的功能是备选答案中的(1),当n=10,x=10打印结果是(2)。cin>>x>>n; k=0; do{ x/=2; k++; }while(k y=1+x; k=0; do{ y=y*y; k++; }while(k cout< 备选答案: A. B. C. D. 解答: 第一个循环使x成为:;y成为:;第二个循环使y成为:; (1)B 考虑整除,当x连除4次2以后即为0,所以:为0 (2)1 2.1.3请看如下程序段: if(num==1) cout<<”Alpha”; else if(num==2) cout<<”Bata”; else if(num==3) cout<<”Gamma”; else cout<<”Delta”; 当num的值分别为1、2、3时,上面程序段的输出分别为(1)、(2)、(3)。 解答: 检查条件语句与字符串输出概念: (1)Alpha (2)Bata (3)Gamma 2.1.4执行下面程序段后,m和k的值分别为(1)、(2)。 int m,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有一个函数: 编写程序,输入x,输出y。 解: #include using namespace std; int main(){ double x,y; cout<<"输入x="; cin>>x; if(x<1) y=x; else if(x<10) y=2*x-1; else y=3*x-11; cout<<"y="< return 0; } 2.3设计程序将输入的百分制成绩转换为五分制输出,90分以上为5分,80~89分为4分,70~79分为3分,60~69分为2分,60分以下为1分。 解:10分一档用10进行整除获得,转换用开关语句实行。 #include using namespace std; int main(){ int mark,result; //mark是百分制成绩,result是5分制 cout<<"请输入百分制成绩:"< cin>>mark; if(mark<0) { cout<<"缺考!"< return 0; } switch (mark/10){ case 9: case 10: result=5; cout<<"输出五分制成绩:"< break; case 8: result=4; cout<<"输出五分制成绩:"< break; case 7: result=3; cout<<"输出五分制成绩:"< break; case 6: result=2; cout<<"输出五分制成绩:"< break; case 5:case 4:case 3:case 2:case 1:case 0: result=1; cout<<"输出五分制成绩:"< break; default: cout<<"输入错误!"< } return 0; } 2.4编程计算个人所得税。个人所得税率表如下:月收入1200元起征,超过起征点500元以内部分税率5%,超过500元到2,000元部分税率10%,超过2,000元到5,000元部分税率15%,超过5,000元到20,000元部分税率20%,超过20,000元到40,000元部分税率25%,超过40,000元到60,000元部分税率30%,超过60,000元到80,000元部分税率35%,超过80,000元到100,000元部分税率40%,超过100,000元部分税率45%。 解:应该从最高税率段开始计算,分段叠加。先算两万元以上各段,每两万为一档,采用switch语句,注意没有使用break语句。后面各低收入段,用if语句,也没有使用else,这两种方法是对应的。第二要注意计算的入口处,收入减去该段的下限,进行计算,以后各段都是完整的段,计算十分简单。 #include using namespace std; int main(){ double income,tax=0; int k; cout<<"请输入个人月收入:"< cin>>income; if(income<=1200){ cout<<"免征个人所得税"< return 0; } else income-=1200; if(income>20000){ k=income/20000; switch(k){ default: tax+=(income-100000)*0.45;income=100000; case 4: tax+=(income-80000)*0.40;income=80000; case 3: tax+=(income-60000)*0.35;income=60000; case 2: tax+=(income-40000)*0.30;income=40000; case 1: 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<<"应征所得税:"< return 0; } 2.5编程打印如下图形: * * * * * * * * * * * * * * * * * * * * * * * * * 解:难点在三角形左边的空格的控制,嵌套一个循环语句完成此任务。#include using namespace std; int main(){ int i,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"; return 0; } 2.6编程输出下列图形,中间一行英文字母由输入得到。 A B B B C C C C C D D D D D D D C C C C C B B B A 解:分上三角和下三角两部分分别处理左边的空格。 #include using namespace std; int main(){ char in; int i,j; do{ cout<<"输入一个字母:"; cin>>in; if((in>=97)&&(in<=122)) in-=32;//小写改大写 }while((in<65)||(in>90)); int line=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< } return 0; } 2.7输入n,求1!+2!+3!+…+n! 解:通常求和作为外循环,阶乘作为内循环。这里考虑到:n!=n*(n-1)!,利用递推法运算速度大大提高,同时两者可合并为一个循环。本程序考虑了输入的健壮性。 #include #include using namespace std; int main(){ int n,i,jch=1; double result=0; //result是结果 cout<<"请输入正整数n:"< cin>>n; if(n<1){ cout<<"输入错误!"< return 1; } result=1; for(i=2;i<=n;i++){ jch*=i; //jch是i的阶乘,注意n!=n*(n-1)!这样可少一层循环 result+=jch; } cout< return 0; } 2.8猴子吃桃问题:猴子摘下若干个桃子,第一天吃了桃子的一半多一个,以后每天吃了前 一天剩下的一半多一个,到第十天吃以前发现只剩下一个桃子,问猴子共摘了几个桃子。解:采用递推法。从最后一天逆推到第一天,9次循环。 #include using namespace std; const int day=10; int main(){ int i,x=1;//最后一天只有一个 for(i=1;i cout<<"开始共有桃子"< return 0; } 2.9从键盘输入一组非0整数,以输入0标志结束,求这组整数的平均值,并统计其中正数和负数的个数。 解:将这组整数放在整型数组中,一边输入一边求和及统计正数和负数的个数,平均数由和除以整数数量取得。 #include #include using namespace std; int main(){ int stem[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++;//正数数量 else nnum++;//负数数量 i++; cin>>stem[i]; } if(!i) cout<<"0个数"< else { cout<<"平均值="<<(double)sum/(pnum+nnum)< cout<<"正数个数="< cout<<"负数个数="< } return 0; } 2.10编程找出1 500之中满足除以3余2,除以5余3,除以7余2的整数。 解:中国古代数学问题(韩信点兵),采用穷举法。注意三个条件同时成立用&&。 #include using namespace std; int main(){ int i; for(i=1;i<=500;i++) if((i%3==2)&&(i%5==3)&&(i%7==2)) cout< return 0; } 2.11编程求1000之内的所有完全数。所谓完全数指的是一个数恰好等于它的所有因子和。例如6=1+2+3,就是一个完全数。 解:采用穷举法。两重循环,外层是从1到999依次处理,内层是求该数的所有因子的和,并判断是否等于该数。 #include using namespace std; int main(){ int i,a,sum_yz; //sum_yz是a的因子和 for(a=1;a<1000;a++){ sum_yz=0;