软件工程_实验1_流程控制语句_详细解答

流程控制语句实验答案及详解

【实验目的】
1学习if、switch选择语句的使用及其嵌套的使用方法
2掌握循环结构while、do-while、for的使用。
3了解转向语句的使用。
4学习循环结构的嵌套使用。
【实验内容】

⒈编程实现:输入一个百分制成绩,要求输出成绩等级A、B、C、D、E。

(注:90分以上:为A,80一 89分为B,70一79分为C,60一69分为D,60分以下为E。)
要求:该程序能正确处理任何数据。当输人数据大于:100或小于0的数据通知用户“输人数据错”,结束程序。

#include"iostream" 
using namespace std;

//(注:90分以上:为A,80一 89分为B,70一79分为C,60一69分为D,60分以下为E。)
//要求:该程序能正确处理任何数据。当输人数据大于:100或小于0的数据通知用户“输人数据错”,结束程序。
int main()
{
	
	int sorce;//学生的分数,根据题意,为 int 型。因为并没有 89.5 之类的数据。
	cout<<"输入成绩:"<<endl;
	cin>>sorce;//输入分数。 
	
	if(sorce>=90)
	{
		cout<<"成绩为A"<<endl; 
	}
	else if(sorce<90&&sorce>=80)
	{
		cout<<"成绩为B"<<endl;
	}
	else if(sorce<80&&sorce>=70)
	{
		cout<<"成绩为C"<<endl;
	}
	else if(sorce<70&&sorce>=60)
	{
		cout<<"成绩为D"<<endl;
	}
	else if(sorce<60&&sorce>=0)
	{
		cout<<"成绩为E"<<endl;
	}
	else
	{
		cout<<"输入数据错误"; 
	}

    return 0;
}

2.编程由键盘输入年、月,输出该年该月的天数

  先来看看闰年的集合:如下一张图阴影部分:

#include"iostream" 
using namespace std;

//由键盘输入年、月,输出该月天数。 
//月份有大月小月,2月还有闰年不闰年的区别。先判断是否为闰年,再判断是哪个月份,就能该月知道有几天了。 
int main()
{
	int year,month;
	cout<<"输入年份:"<<endl;
	cin>>year; 
	cout<<"输入月份:"<<endl;
	cin>>month;
	bool is_runnian;//这个 变量用于表示是否为闰年。

	if((year%4==0&&year%100!=0)||year%400==0)//闰年可以被4整除,但是有下面这种限制情况。不可被100整除但可被400整除。//参照上图图片。 
	{//即图片的 (黄框绿框之间部分)再除加上蓝框。
		is_runnian=true;
	}
	else
	{
		is_runnian=false;
	}
	
	if(month==2)
	{
		if(is_runnian==true)//是二月,且是闰年 
		{
			cout<<endl<<"该月份有 29 天。"<<endl;
		}
		else//是二月但不是闰年 
		{
			cout<<endl<<"该月份有 28 天。"<<endl;
		}
	}
	
	else if(month==1||month==3||month==5||month==7||month==8||month==10||month==12)
	{
		cout<<endl<<"该月份有 31 天。"<<endl;
	}
	
	else
	{
		cout<<endl<<"该月份有 30 天。"<<endl;
	} 

    return 0;
}

3.从键盘上输入若干实数,以输入0为结束。设计一程序、分别统计出正数和负数的个数,并求出正数之和、负数之和及总的平均值。

#include"iostream" 
using namespace std;

//3.从键盘上输入若干实数,以输入0为结束。设计一程序、分别统计出正数和负数的个数,并求出正数之和、负数之和及总的平均值。
int main()
{
	double num;//要输入的数
	
	int geshu=0;//输入数据的总数,最后求平均值的时候除以这个数,刚开始输入了 0 个。后来每输入一个就加 1 。
	int ageshu=0;//整数个数。 
	int bgeshu=0;//负数个数。
	 
	double sum=0;//所有输入数据的总和。一开始和为 0 。输入哪个数,就加上哪个数。
	double asum=0;//正数和 
	double bsum=0; //负数和1 
	cin>>num;
	
	while(num!=0)//只要输入的数不为 0 就不结束。
	{
		//这行以上是判断。判断成功 则 执行以下代码。开始执行,则 总和需要加上这个数,而且 输入的个数要加 1 。
		geshu++;
		if(num>0)//输入数据大于 0 ,正数个数加 1 ,正数和加上输入的数。 
		{
			ageshu++;
			asum=asum+num; 
		}
		if(num<0)//输入数据小于 0 ,负数个数加 1 ,负数和加上输入的数。//可以直接写成 else。解释见代码片下方一行。
		{
			bgeshu++;
			bsum=bsum+num; 
		}
		
		sum=sum+num;//无论输入的是正数还是负数都要加上。 
		
		fflush(stdin);//每次输入前,清空输入的缓冲区 防止缓冲区出错。 
		
		cin>>num; //清空输入缓冲区后,从新输入 num 。 
	}//当 输入的 num 为 0 时,结束。 
	
	cout<<"输入个数为"<<geshu<<endl;
	cout<<"平均数为:"<<sum/geshu<<endl;
	cout<<"正数和为:"<<asum<<endl;
	cout<<"负数和为:"<<bsum<<endl;
    return 0;
}

 因为输入 0 就结束计算。所以 可以直接 if 和 else。这样就用不到两个 if 来判断了,优化了代码。而写成两个 if 判断 主要是考虑到还有 0 的非正非负情况。


4.编写程序用公式计算e的近似值。直到最后一项小于给定精度。

  由图公式看出:e 是由阶乘倒数的和得来的。 所以 e 是多次循环得来的。每次循环 加上一个阶乘倒数的和。而阶乘由循环得来。这样的想法就可以用二重循环实现。外层循环是 最终结果的循环。内层是每次阶乘的结果。但是,后一个数的阶乘,可以用前一个结果去乘,这样就可以省去第二个循环。(双重循环方法见第二段代码)(e为2.71828来运行验证一下。精度不要太高)

#include"iostream" 
using namespace std;
//单重循环法。
int main()
{
	double e=1;
	
	double a;//用来输入给定精确的值。比如精确到0.0001位置,就输入0.0001;
	/*
	1.0/a  如果比最后阶乘大,则最后一项抵达精确范围。 
	*/ 
	cout<<"输入最后一个数的精度"<<endl;
	cin>>a;
	
	double b=1.0/a;
	
	long int n=1;//用 n 来求阶乘。
	 
	for(int i=1;b>=n;i++)
	{
		n=n*i;
		double f=1.0/n;
		e=e+f;
	}
	
	cout<<"e的值为"<<e<<endl;
    return 0;
}

第二种方法:

#include"iostream" 
using namespace std;
//双重循环法。不如单重的快,因为没有利用上一次的阶乘结果,而要从 1 开始算阶乘。 
int main()
{
	double e=1;
	
	double a;//用来输入给定精确的值。比如精确到0.0001位置,就输入0.0001;
	/*
	1.0/a  如果比最后阶乘大,则最后一项抵达精确范围。 
	*/ 
	cout<<"输入最后一个数的精度"<<endl;
	cin>>a;
	
	double b=1.0/a;
	 
	for(int i=1;;i++)
	{
		int f=1;//每次阶乘结果还原。
		
		for(int j=1;j<=i;j++)
		{
			f=f*j;//算阶乘,直到 i 次结束。
		}
		
		if(f>b)//如果精度到达指定值 则 break 循环。 
		{
			break;
		} 
		
		e=e+1.0/f;//未到达指定值则让 e 不断的加该阶乘的倒数。 
	}
	
	cout<<"e的值为:"<<e<<endl;
    return 0;
}

⒌ 编程序打印一个如图3-2所示的数字金字塔:

  观察图可知: 设行为 i 。有9行,则外循环要9次,即 i 从 1 到 9。每行前面的空格数是 ( 9 - i ) 个。每行结束后,还要换行。

  每行从 1 输出到 i 再从 i 输出到 1 。这又是一个循环。行内的第几个数用 j 表示。

  从 1 输出到 i 要在第一层循环下,从 i 到 1 也在第一层循环下,且在 1 到 i 的后面输出。

#include"iostream" 
using namespace std;
//双重循环法。不如单重的快,因为没有利用上一次的阶乘结果,而要从 1 开始算阶乘。 
int main()
{
	for(int i=1;i<9;i++)
	{
		
		for(int k=1;k<=9-i;k++)//输出 前面的(9-i)个 空格。 
		{
			cout<<" ";//输出空格 
		}
		for(int j=1;j<i;j++)//从 1 到 i 。输出。 
		{
			cout<<j;
		}
		for(int j=i;j>=1;j--)//从 i 到 1 。输出。 
		{
			cout<<j;
		}
		cout<<endl;
	}
    return 0;
}


6 设计一个简单的计算器程序。能进行两个数的加,减,乘,除即可。

#include"iostream" 
using namespace std;
 
int main()
{
	char a;//用来存 =-*/号。 
	double b,c;//两个用于计算的数。
	
	cout<<"输入 x+y,x-y,x*y,x/y 的格式"<<endl;
	cin>>b>>a>>c;

	switch(a)
	{
		case '+':
			cout<<b<<"+"<<c<<"="<<b+c<<endl;
			break;
		case '-':
			cout<<b<<"-"<<c<<"="<<b-c<<endl;
			break;
		case '*':
			cout<<b<<"*"<<c<<"="<<b*c<<endl;
			break;
		case '/':
			cout<<b<<"/"<<c<<"="<<b/c<<endl;
			break;
		default :
			cout<<"输入格式错误"<<endl;
			break;
	} 

    return 0;
}



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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值