C++程序设计谭浩强 第三章(程序设计初步)习题答案(部分有改进)

3.2 圆半径r=1.5,圆柱高h=3,求圆周长,圆面积,球表面积,球体积,圆柱体积。取小数点后两位。

#include <iostream>
#include <iomanip>
using namespace std;
int main ( )
{
    float h,r,l,s,sq,vq,vz;
    const float pi=3.1415926;
    cout<<"please enter r,h:";
    cin>>r>>h;
    l=2*pi*r;
    s=r*r*pi;
    sq=4*pi*r*r;
    vq=3.0/4.0*pi*r*r*r;
    vz=pi*r*r*h;

     cout<<setiosflags(ios::fixed)<<setiosflags(ios::right)<<setprecision(2);
     cout<<"l= "<<setw(10)<<l<<endl;
     cout<<"s= "<<setw(10)<<s<<endl;
     cout<<"sq="<<setw(10)<<sq<<endl;
     cout<<"vq="<<setw(10)<<vq<<endl;
     cout<<"vz="<<setw(10)<<vz<<endl;

     return 0;
}  

3.3 输入华氏温度,输出摄氏温度

#include <iostream>
using namespace std;
int main ()
{float c,f;
 cout<<"请输入一个华氏温度:";
 cin>>f;
 c=(5.0/9.0)*(f-32);         //注意5和9要用实型表示,否则5/9值为0
 cout<<"摄氏温度为:"<<c<<endl;
 return 0;
};


3.4 用getchar读入两个字符给c1 c2,用putchar和cout输出

#include <iostream>
using namespace std;
int main ( )
{char c1,c2;
 cout<<"请输入两个字符c1,c2:";
 c1=getchar();        // input to c1
 c2=getchar();        //c2 
 cout<<"用putchar函数输出结果为:";
 putchar(c1);
 putchar(c2);
 cout<<endl;
 cout<<"用cout语句输出结果为:";
 cout<<c1<<c2<<endl;
 cout<<(int)c1<<endl;  //output ascii
 cout<<(int)c2<<endl;
 return 0;
}

3.5 整型变量  字符变量

#include <iostream>
using namespace std;
int main ( )
{char c1,c2; 
 int i1,i2;                  //定义为整型
 cout<<"请输入两个整数i1,i2:"; 
 cin>>i1>>i2;
 c1=i1;
 c2=i2;
 cout<<"按字符输出结果为:"<<c1<<" , "<<c2<<endl;
 return 0;
}

3.8求值

#include <iostream>
using namespace std;
int main ( )
{ int a=3,b=4,c=5,x,y;   //与运算优先于或运算
  cout<<(a+b>c && b==c)<<endl;  // 0
  cout<<(a||b+c && b-c)<<endl;  // 1
  cout<<(!(a>b) && !c||1)<<endl;  // 1
  cout<<(!(x=a) && (y=b) && 0)<<endl;  // 0
  cout<<(!(a+b)+c-1 && b+c/2)<<endl;  // 1
  return 0;
} 

3.9 输入三个整数,输出最大的数

#include <iostream>
using namespace std;
int main ( )
  {
//	int a,b,c,temp,max ;
	int a,b,c;

   cout<<"please enter three integer numbers:";

//   cin>>a>>b>>c;
//   temp=(a>b)?a:b;                 /*  将a和b中的大者存入temp中 */
//   max=(temp>c)?temp:c;            /*  将a和b中的大者与c比较,最大者存入max */
//   cout<<"max="<<max<<endl;
	cin>>a>>b>>c;
	a=(a>b)?a:b;   //max到a
	a=(a>c)?a:c;
	cout<<"max="<<a<<endl;

   return 0;
  }

3.10分段函数

#include <iostream>
using namespace std;
int main ( )
  {int x,y;
   cout<<"enter x:";
   cin>>x;
   if (x<1)                            
      {y=x;
       cout<<"x="<<x<<", y=x="<<y;
      }
   else if (x<10)                     // 1≤x<10 
       {y=2*x-1;
        cout<<"x="<<x<<", y=2*x-1="<<y;
       }
        else                           // x≥10 
         {y=3*x-11;
          cout<<"x="<<x<<", y=3*x-11="<<y;
         }
    cout<<endl;
	return 0;
}

3.11百分制成绩输出等级ABCDE

#include <iostream>
using namespace std;
int main ()
 {float score;
  char grade;
  cout<<"please enter score of student:"; 
  cin>>score;
  while (score>100||score<0)
    {cout<<"data error,enter data again.";
      cin>>score;
     }
 switch(int(score/10))
       {case 10:
        case 9: grade='A';break;
        case 8: grade='B';break;
        case 7: grade='C';break;
        case 6: grade='D';break;
        default:grade='E';        
       }
   cout<<"score is "<<score<<", grade is "<<grade<<endl;
   return 0;
}

3.12给出一个不多于五位数的整数,求出是几位数,打印出每一位数字,逆序打出各位数字

#include <iostream>
#include <cmath>
using namespace std;
int main ()
{
	int i=1,x;
	cout<<"input x: ";
	cin>>x;
	cout<<endl;

/*位数*/
	int n;
	n=x;
	if(n>99999||n<=0)
		cout<<"error"<<endl;
	else
	{
		while(n>=10)
		{
			i++;
			n=n/10;
		}
		cout<<"整数位数为: "<<i<<endl;
	}
/*正序输出*/
	int a,b,c;
	cout<<"顺序输出: ";
	a=pow(10,(i-1));   //pow为10的几次幂
	b=a*10;
	while(a>=1)
	{

		c=(x%b-x%a)/a;
		cout<<c<<"  ";
		a=a/10;
		b=b/10;
	}
	cout<<endl;
/*逆序输出*/
	int m;
	m=x;
	cout<<"逆序输出: ";
	while(m!=0)
	{
		cout<<m%10<<"  ";
		m/=10;
	}
	cout<<endl;
	return 0;
}

3.13 企业发放的奖金根据利润提成  分别用if 和switch

#include <iostream>
using namespace std;
int main ()
{ long i;                       //i为利润
  float  bonus,bon1,bon2,bon4,bon6,bon10;
  bon1=100000*0.1;             //利润为10万元时的奖金
  bon2=bon1+100000*0.075;      //利润为20万元时的奖金
  bon4=bon2+100000*0.05;       //利润为40万元时的奖金
  bon6=bon4+100000*0.03;       //利润为60万元时的奖金
  bon10=bon6+400000*0.015;     //利润为100万元时的奖金
  cout<<"enter i:"; 
  cin>>i;
  if (i<=100000)
     bonus=i*0.1;                     //利润在10万元以内按10%提成奖金
  else if (i<=200000)
     bonus=bon1+(i-100000)*0.075;    //利润在10万元至20万时的奖金
  else if (i<=400000)
     bonus=bon2+(i-200000)*0.05;     //利润在20万元至40万时的奖金
  else if (i<=600000)
     bonus=bon4+(i-400000)*0.03;     //利润在40万元至60万时的奖金
  else if (i<=1000000)
     bonus=bon6+(i-600000)*0.015;    //利润在60万元至100万时的奖金
  else
     bonus=bon10+(i-1000000)*0.01;   //利润在100万元以上时的奖金
  cout<<"bonus="<<bonus<<endl; 
  return 0;
 }
#include <iostream>
using namespace std;
int main ()
{long i;
 float bonus,bon1,bon2,bon4,bon6,bon10;
 int c;
 bon1=100000*0.1;
 bon2=bon1+100000*0.075;
 bon4=bon2+200000*0.05;
 bon6=bon4+200000*0.03;
 bon10=bon6+400000*0.015;
 cout<<"enter i:";
 cin>>i;
 c=i/100000;
 if (c>10)  c=10;
 switch(c)
  {case 0: bonus=i*0.1; break;
   case 1: bonus=bon1+(i-100000)*0.075; break;
   case 2:
   case 3: bonus=bon2+(i-200000)*0.05;break;
   case 4:
   case 5: bonus=bon4+(i-400000)*0.03;break;
   case 6:
   case 7:
   case 8:
   case 9: bonus=bon6+(i-600000)*0.015; break;
   case 10: bonus=bon10+(i-1000000)*0.01;
   }
  cout<<"bonus="<<bonus<<endl;
  return 0;
}

3.14 输入四个整数,由小到大

#include <iostream>
#include <string>
#define m 4
using namespace std;
 
int main() {
	int n[m-1];
	int i, j;
	int temp;                                 //用于缓存需要交换的数字
	cout << "请输入4个数字!" << endl;
	for (i = 0; i < m; i++) {
		cin >> n[i];
	}
	for (i = 0; i < m-1;i++) {                  //共进行9步
		for (j = 0; j < m-1 - i;j++) {      //在每一步进行10-i次两两比较
			if (n[j] > n[j + 1]) {
				temp = n[j];
				n[j] = n[j + 1];
				n[j + 1] = temp;
			}
		}
	}
	cout << "排序后的数据是:" << endl;
	for (i = 0; i < m; i++) 
	{
	    cout << n[i] << ' ';
	}
	cout << endl;
	return 0;
}

3.15 输入两个正整数mn,求最大公约数最小公倍数

#include <iostream>
using namespace std;
int main ()
{int p,r,n,m,temp;
 cout<<"please enter two positive integer numbers n,m:"; 
 cin>>n>>m; 
 if (n<m)              
     {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;
 }
 cout<<"HCF="<<n<<endl;
 cout<<"LCD="<<p/n<<endl;        // p是原来两个整数的乘积
 return 0;
 }

3.16输入一行字符,统计出英文字母  空格  数字  其他字符 的个数

#include <iostream>
using namespace std;
int main ()
{char c;
 int letters=0,space=0,digit=0,other=0;
 cout<<"enter one line:"  <<endl;
 while((c=getchar())!='\n')
 {if (c>='a' && c<='z'||c>='A' && c<='Z')
	    letters++;
  else if (c==' ')
	    space++;
  else if (c>='0' && c<='9')
	    digit++;
  else
	    other++;
  }
  cout<<"letter:"<<letters<<", space:"<<space<<", digit:"<<digit<<", other:"<<other<<endl;
  return 0; 
  } 

3.17求a+aa+aaa+……+aa……a的值,输入n

#include <iostream>
using namespace std;
int main ()
{
	int a,n,i=1,sn=0,tn=0;
	cout <<"input a & n  ";
	cin >>a>>n;
	while(i<=n)
	{
		tn=tn+a;
		sn=sn+tn;
		a=a*10;
		++i;
	}
	cout<<"a+aa+aaa+...= "<<sn<<endl;
	return 0; 
  } 

3.18 求    \sum_{n=1}^{20}n!

#include <iostream>
using namespace std;
int main ()
{float s=0,t=1;
  int n;
  for (n=1;n<=20;n++)
  {
   t=t*n;      // 求n! 
   s=s+t;      // 将各项累加 
  }
  cout<<"1!+2!+...+20!="<<s<<endl;
  return 0;
  } 
 

3.19输出所有水仙花数(三位数,各个数字立方和 等于 数字本身)

#include <iostream>
using namespace std;
int main ()
{int i,j,k,n;
 cout<<"narcissus numbers are:"<<endl;
     for (n=100;n<1000;n++)
      {i=n/100;
       j=n/10-i*10;
       k=n%10;
       if (n == i*i*i + j*j*j + k*k*k)
         cout<<n<<" ";
      }
    cout<<endl;
	return 0;
  }

3.20    1000以内完数。(数值=因子之和)

#include <iostream>
using namespace std;
 int main()
  {int m,s,i;
   for (m=2;m<1000;m++)
    {s=0;
     for (i=1;i<m;i++)
       if ((m%i)==0) s=s+i;
     if(s==m)
      {cout<<m<<" is a完数"<<endl;
	   cout<<"its factors are:";
       for (i=1;i<m;i++)
        if (m%i==0)  cout<<i<<" ";
       cout<<endl;
      }
    }
   return 0;
 } 

3.21

#include <iostream>
using namespace std;
int main()
  {int i,t,n=20;
   double a=2,b=1,s=0;
   for (i=1;i<=n;i++)
   {s=s+a/b;
    t=a; 
    a=a+b;           // 将前一项分子与分母之和作为下一项的分子 
    b=t;             // 将前一项的分子作为下一项的分母 
   }
   cout<<"sum="<<s<<endl;
   return 0;
   } 
  

3.22

#include <iostream>
using namespace std;
int main()
  {int day,x1,x2;
   day=9;
   x2=1;
   while(day>0)
    {x1=(x2+1)*2;        // 第1天的桃子数是第2天桃子数加1后的2倍 
     x2=x1;
     day--;
    }
   cout<<"total="<<x1<<endl;
   return 0;
   } 
  
//递归函数(第四章)

#include<iostream>
using namespace std;
int peach(int);

int main()
{
	cout << peach(10) << endl;
	return  0;
}

int peach(int n)
{
	int c;
	if (n == 1)
		c = 1;
	else
		c = (peach(n-1)+1)*2;
	return c;
}

3.23迭代法求x=sqrt(a)

#include <iostream>
#include <cmath>
using namespace std;
int main()
 {float a,x0,x1;
  cout<<"enter a positive number:";
  cin>>a;            // 输入a的值 
  x0=a/2;
  x1=(x0+a/x0)/2;
  do
    {x0=x1;
     x1=(x0+a/x0)/2;
     }
  while(fabs(x0-x1)>=1e-5);
  cout<<"The square root of "<<a<<" is "<<x1<<endl;
  return 0;
 } 

3.24输出

*

***

*****

*******

*****

***

*

#include <iostream>
using namespace std;
int main()
  {int i,k;
    for (i=0;i<=3;i++)         // 输出上面4行*号 
      {for (k=0;k<=2*i;k++)
        cout<<"*";           // 输出*号 
       cout<<endl;           //输出完一行*号后换行 
      }
    for (i=0;i<=2;i++)        // 输出下面3行*号 
      {for (k=0;k<=4-2*i;k++)
         cout<<"*";          // 输出*号 
       cout<<endl;           // 输出完一行*号后换行
      }
	return 0;
    } 

(心形图像)

#include<iostream>

#include<cmath>
using namespace std;
int main()
{
    float x, y;
    for (y = 1.5f; y >-1.5f; y -= 0.1f)
    {
        for (x = -1.5f; x <1.5f; x += 0.05f)
        {
            float a = x*x + y*y - 1;
            if ((a*a*a- x*x*y*y*y)<=0)//心形方程
                cout << '*';
            else cout << " ";
        }
        cout << endl;
    }
    return 0;
}

3.25两个乒乓球队进行比赛,各出3人。甲队为ABC三人,乙队为XYZ三人。已抽签决定比赛名单。

A不和X比,C不和XZ比,找出名单。

#include<iostream>
using namespace std;
int main()
{
    char i,j,k;
	for (i='X';i<='Z';i++)
		for(j='X';j<='Z';j++)
			if(i!=j)
				for(k='X';k<='Z';k++)
					if(i!=k&&j!=k)
						if(i!='X'&&k!='X'&&k!='Z')
							cout<<"A-"<<i<<"   B-"<<j<<"   C-"<<k<<endl;
	return 0;
}


零基础C++,有很多不完善的地方和不想改网上参考答案的地方

有问题可留言,反正我也不会

  • 62
    点赞
  • 154
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

国服最强貂蝉

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值