}
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
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
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 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<<' '< for (i=line;i>0;i--){//下三角(少一行) for(j=0;j<=line-i;j++) cout<<\ for(j=1;j<=2*i-1;j++) cout<<' '< return 0; } 2.7输入n,求1!+2!+3!+…+n! 解:通常求和作为外循环,阶乘作为内循环。这里考虑到:n!=n*(n-1)!,利用递推法运算速度大大提高,同时两者可合并为一个循环。本程序考虑了输入的健壮性。 #include 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< 2.8猴子吃桃问题:猴子摘下若干个桃子,第一天吃了桃子的一半多一个,以后每天吃了前一天剩下的一半多一个,到第十天吃以前发现只剩下一个桃子,问猴子共摘了几个桃子。 解:采用递推法。从最后一天逆推到第一天,9次循环。 #include int i,x=1;//最后一天只有一个 for(i=1;i 2.9从键盘输入一组非0整数,以输入0标志结束,求这组整数的平均值,并统计其中正数和负数的个数。 解:将这组整数放在整型数组中,一边输入一边求和及统计正数和负数的个数,平均数由和除以整数数量取得。 #include 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<<\个数\ else { cout<<\平均值=\double)sum/(pnum+nnum)< return 0; } 2.10编程找出1?500之中满足除以3余2,除以5余3,除以7余2的整数。 解:中国古代数学问题(韩信点兵),采用穷举法。注意三个条件同时成立用&&。 #include for(i=1;i<=500;i++) if((i%3==2)&&(i%5==3)&&(i%7==2)) cout< 2.11编程求1000之内的所有完全数。所谓完全数指的是一个数恰好等于它的所有因子和。例如6=1+2+3,就是一个完全数。 解:采用穷举法。两重循环,外层是从1到999依次处理,内层是求该数的所有因子的和,并判断是否等于该数。 #include int i,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< return 0; } 2.12将100元换成用10元、5元和1元的组合,共有多少种组合方法。 解:采用穷举法。考虑10元最多10张,5元最多20张,余下是1元。 #include int i,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< cout< 2.13利用反正切展开计算?的近似值,要求误差10-5,公式如下: 令x=1,可计算出?/4的近似值。