C++程序设计 实验二

实验二 控制结构

【实验目的与要求】

  1. 学习与掌握逻辑运算与逻辑表达式。
  2. 熟练掌握 if、switch、while、do-while、for语句的语法结构与执行过程。
  3. 掌握选择、循环程序的设计方法。 

【实验内容】 

1、输入一个字符,如果为小写,转换为大写输出,否则,输出其后继字符的 ASCII 码值。

2、输入 x 计算表达式的值:分别输入 0.2, 1, 5, 0,观察输出结果。

3、输入三角形的三条边,求周长,并判断该三角形是否为等腰三角形(提示:要三边是否可以构成三角形)

4、 完成计算器程序,实现(+ - * / %)运算。考虑除数为 0 与运算符非法的情况。

5、输入一行字符,分别统计出其中英文字母、空格、数字字符和其它字符的个数。

提示:从键盘上读入一个字符给变量 c,判断 c 是属于哪种字符并计数,循环读入下个字符,直到回车换行字符'\n'为止。

6、编写一个程序:从键盘上输入两个正整数,求 a 和 b 的最大公约数与最小公倍数。

7、使用循环结构输出下列图形:

 

 8、从键盘输入 a,用迭代法求 a 的平方根 x= a 。

求平方根的迭代公式为

要求精确到|xn+1 - xn|

提示:迭代法是把 xn代入迭代公式右边,

计算出 xn+1来,然后把 xn+1 作为新的 xn ,计算出新的 xn+1, 如此重复,直到|xn+1 - xn|

思考:(1)如果输入 a 为负,在运行时会出现什么情况? 修改程序使之能处理任何的 a 值。

             (2)能否|xn+1 - xn|<10-10或更小?为什么?请试一下。

9、苹果每个 0.8 元,第一天买 2 个,第二天开始,每天买前天的 2 倍,直到购买的苹果数不超过 100 的最大值,求每天平均花多少钱。

算法分析、程序与结果

程序:

#include<iostream>

using namespace std;

int main()

{

  char a;

  a=getchar();

  if(a>='a'&&a<='z')

  putchar(a-32);

  else

  cout<<a+1<<endl;

  return 0;
}

结果:

输入

分别输入a,b,*,观察输出结果

输入a时:

输出a的大写字母A

输入b时:

输出b的大写字母B

输入*时:

 输出*后继字符的ASCLL码

2.

程序:

#include<iostream>

using namespace std;

int main()

{

    double x,y;

    cin>>x;

    if(x>0&&x<1){ y=3-2*x;}

    if(x>=1&&x<5){ y=1/(2*x)+1;}

    if(x>=5&&x<10){ y=x*x; }

    cout<<y<<endl;

    return 0;

 }

结果:

输入

分别输入0.2,1,5,0,观察输出结果

输入0.2时:

输出2.6

输入1时:

输出1.5

输入5时:

输出25

输入0时:

输出错误,0不在范围类

3.

程序:

#include<iostream>

using namespace std;

int main()

{

  int a,b,c,s;

  cin>>a>>b>>c;

  if(a+b>c&&a+c>b&&b+c>a)

  {

  s=a+b+c;

  cout<<s<<endl;

  if(a==b||a==c||b==c)

  cout<<"This is an isosceles triangle"<<endl;

  else

  cout<<"This is not an isosceles triangle"<<endl;

  }

  else

  cout<<"This is not a triangle"<<endl;

  return 0;
}

结果:

输入

分别输入1,1,2;2,3,4;2,2,3;三组数据,观察输出结果

输入1,1,2时:

输出不是一个三角形

输入2,3,4时:

输出周长9,并判断不是等腰三角形

输入2,2,3时:

输出周长7,并判断是等腰三角形

4.

程序:

#include<iostream>

using namespace std;

int main()

{

    double x,y;

    while(1)

{

char s;

    cin>>x>>s>>y;

    if(s=='+') cout<<x<<"+"<<y<<"="<<x+y<<endl;

    if(s=='-') cout<<x<<"-"<<y<<"="<<x-y<<endl;

    if(s=='*') cout<<x<<"*"<<y<<"="<<x*y<<endl;

    if (s=='/') {

       if(y==0)

       cout<<"error"<<endl;

       else

       cout<<x<<"/"<<y<<"="<<x/y<<endl;

}

    if(s=='%') cout<<x<<"%"<<y<<"="<<int(x)%int(y)<<endl;

    if(s!='+'&&s!='-'&&s!='*'&&s!='/'&&s!='%') cout<<"invalid"<<endl;

   }

  return 0;
}

结果:

输入

分别输入1+2;1-2;1*2;1/3;4%3;1/0;1&2;观察输出结果

输入1+2时:

输出1+2=3

输入1-2时:

输出1-2=-1

输入1*2时:

输出1*2=2

输入1/3时:

输出1/3=0.333333

输入4%3时:

输出4%3=1

输入1/0时:

输出error(除数不能为0)

输入1&2时:

输出invaild(输入了不合法字符)

5.

程序:

#include<iostream>

using namespace std;

int main()

{

  char c;

  int english=0,num=0,space=0,other=0;

  while((c=getchar())!='\n')

 {

  if(c>='a'&&c<='z'||c>='A'&&c<='Z') { english++;}

  else if(c==' ') { space++;}

  else if(c>='0'&&c<='9') { num++; }

  else  other++;

 }

  cout<<"英文字母:"<<english<<"\n空格:"<<space<<"\n数字字符:"<<num<<"\n其他字符:" 
  <<other<<endl;

  return 0;
}

结果:

输入

输入一串字符“I love CHINA @@ 2022”观察输出结果

6.

程序:

#include<iostream>

using namespace std;

int main()

{

  int a,b,Y,B;

  cin>>a>>b;

  for(int i=1;i<=a&&i<=b;i++)

  {

   if(a%i==0&&b%i==0) { Y=i; }

  }

  for(int i=1;;i++)

  {

   if(i%a==0&&i%b==0)

   {

    B=i; break;

   }

  }

  cout<<a<<"和"<<b<<"最大公约数"<<Y<<endl;

  cout<<a<<"和"<<b<<"最小公倍数"<<B<<endl;

  return 0;
}

结果:

输入

分别输入2,3;4,32;观察输出结果

输入2,3时:

输出最大公约数1,最小公倍数6

输入4,32时:

输出最大公约数4,最小公倍数32

7.

程序:

#include<iostream>

using namespace std;

int main()

{

    char c='*';

    for(int i=1;i<=5;i++)

    {

      for(int m=1;m<=5-i;m++)

      {

       cout<<" ";

      }

      for(int j=1;j<=i;j++)

      {

      cout<<c;

      }

      cout<<endl;

    }

   return 0;
}

结果:

输入

输出

8.

程序:

#include<iostream>

#include<cmath>

using namespace std;

int main()

{

  double a,x,x1,t;

  cin>>a;

  x=a;

  do

  {

    x1=(x+a/x)/2;

    t=x;

    x=x1;

    x1=t;

  }while(fabs(x-x1)>1/10000);

  cout<<x<<endl;

  return 0;
}

结果:

输入

分别输入2,4,10,观察输出结果

输入2时:

输出1.41421

输入4时:

输出2

输入10时:

输出3.16228

  • 如果输入 a 为负,在运行时会出现什么情况? 修改程序使之能处理任何的 a 值。

输入a为负数时

运行会出错,不会输出结果

修改后的程序:

#include<iostream>

#include<cmath>

using namespace std;

int main()

{

  double a,x,x1,t;

  cin>>a;

  x=a;

  if(a<0){

  cout<<"error"<<endl;

  }

  if(a==0){

  cout<<"0的平方根为0"<<endl;

  }

  if(a>0){

  do{

  x1=(x+a/x)/2;

  t=x;

  x=x1;

  x1=t;

  }while(fabs(x-x1)>1/10000);

  cout<<x<<endl;

  }

  return 0;
}
  • 能否|xn+1 - xn|<10-10或更小?为什么?请试一下。

      不能;更改范围后并没有继续进行迭代

9.

程序:

#include<iostream>

using namespace std;

int main()

{

  int num,sum,d;

  d=0;

  sum=0;

  for(int i=2;i<=100;i*=2)

  {

   num=i;

   sum=sum+num;

   d++;

}

  cout<<0.8*sum/d<<endl;
  return 0;
}

结果:

输入

输出

输出平均每天花16.8元

遇到的问题与解决办法

  1. 在编译程序5时最开始使用的if结构有问题,导致计算机不能读取一整串字符中的每一个,后来经过自己的尝试用while循环结构使程序每次读取一个字符后就开始判断属于那种类型
  2. 编译程序8时开始就绝对值的表达不清楚,后经查阅资料,引入头文件cmath,利用函数fabs()表达绝对值。
  3. 编译程序9时开始利用while循环结构总是使循环体多执行一次,后经过自己的尝试换用for(int i=2;i<=100;i*=2)结构,解决了此问题。

总结

实验二的难度相对与实验一有了提升,考察大家对所学知识的灵活运用,并锻炼大家的创新和自学能力。通过老师的指导和自我的不断调试运行,能够较好的解决遇到的问题。实验二令我收获极大。

  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值