当前位置:文档之家› 第二章_基本控制结构程序设计习题解答

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

第二章基本控制结构程序设计习题一.基本概念与基础知识自测题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;}解答:本题检查学生整除的概念。

跟踪:(1)14(2)17(3)1002.1.2 设有说明:int x,y,n,k;下面程序段的功能是备选答案中的(1),当n=10,x=10打印结果是(2)。

cin>>x>>n;k=0;do{x/=2;k++;}while(k<n);y=1+x;k=0;do{y=y*y;k++;}while(k<n);cout<<y<<endl;备选答案:A. n n x y )1(+=B. n n x y 2)21(+=C. n n x y )21(+=D. n n x y 21)21(++= 解答:第一个循环使x 成为:n x 2;y 成为:n x 21+;第二个循环使y 成为:nn x 2)21(+; (1)B考虑整除,当x 连除4次2以后即为0,所以:nx2为0 (2)12.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)Gamma2.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; }(1)11 (2)8二.编程与综合练习题2.2 有一个函数:⎪⎩⎪⎨⎧≥-≤≤<=)10x ( 113x )10x (1 1-2x 1)(x x y编写程序,输入x ,输出y 。

解:#include <iostream> 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="<<y<<endl; return 0; }2.3 设计程序将输入的百分制成绩转换为五分制输出,90分以上为5分,80~89分为4分,70~79分为3分,60~69分为2分,60分以下为1分。

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

#include <iostream> using namespace std; int main(){ int mark,result; //mark 是百分制成绩,result 是5分制 cout<<"请输入百分制成绩:"<<endl; cin>>mark; if (mark<0) { cout<<"缺考!"<<endl; return 0; } switch (mark/10){ case 9: case 10: result=5; cout<<"输出五分制成绩:"<<result<<endl; break ; case 8:result=4;cout<<"输出五分制成绩:"<<result<<endl;break;case 7:result=3;cout<<"输出五分制成绩:"<<result<<endl;break;case 6:result=2;cout<<"输出五分制成绩:"<<result<<endl;break;case 5:case 4:case 3:case 2:case 1:case 0:result=1;cout<<"输出五分制成绩:"<<result<<endl;break;default:cout<<"输入错误!"<<endl;}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 <iostream>using namespace std;int main(){double income,tax=0;int k;cout<<"请输入个人月收入:"<<endl;cin>>income;if(income<=1200){cout<<"免征个人所得税"<<endl;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<<"应征所得税:"<<tax<<endl;return 0;}2.5 编程打印如下图形:** * ** * * * ** * * * * * ** * ** * ** * *解:难点在三角形左边的空格的控制,嵌套一个循环语句完成此任务。

#include <iostream>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<<endl;}for(i=1;i<=3;i++) cout<<" * * *\n";return 0;}2.6 编程输出下列图形,中间一行英文字母由输入得到。

AB B BC C C C CD D D D D D DC C C C CB B BA解:分上三角和下三角两部分分别处理左边的空格。

#include <iostream>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<<' '<<char(i+'A');cout<<endl;}for (i=line;i>0;i--){//下三角(少一行)for(j=0;j<=line-i;j++) cout<<" ";for(j=1;j<=2*i-1;j++) cout<<' '<<char(i-1+'A');cout<<endl;}return 0;}2.7 输入n,求1!+2!+3!+…+n!解:通常求和作为外循环,阶乘作为内循环。

这里考虑到:n!=n*(n-1)!,利用递推法运算速度大大提高,同时两者可合并为一个循环。

本程序考虑了输入的健壮性。

#include <iostream>#include <cstdlib>using namespace std;int main(){int n,i,jch=1;double result=0; //result是结果cout<<"请输入正整数n:"<<endl;cin>>n;if(n<1){cout<<"输入错误!"<<endl;return 1;}result=1;for(i=2;i<=n;i++){jch*=i; //jch是i的阶乘,注意n!=n*(n-1)!这样可少一层循环result+=jch;}cout<<result<<endl;return 0;}2.8 猴子吃桃问题:猴子摘下若干个桃子,第一天吃了桃子的一半多一个,以后每天吃了前一天剩下的一半多一个,到第十天吃以前发现只剩下一个桃子,问猴子共摘了几个桃子。

相关主题