第三周作业

      实验作业
1.输入课本各个例题,调试运行程序,并分析程序,将每一个程序改写2到3个版本,自己分析程序结果,然后再调试运行,核对分析结果的对错。
2.编写程序输入一个三角形的三条边,计算其面积和周长;
3.编写程序计算并输出课本本章习题3表达式的值并分析结果。
4.编写一个程序,输入一个一元二次方程的三个系数,并计算其方程的解,然后输出。
5.编写程序,自己确定一个加密算法,将自己的音标姓名(英文)加密,并输出加密后结果,请注释你的加密算法。
6.在一个自动控制设备中,控制字位数16位,控制设备产生机械动作(如削,压等)的是指令字的低8位,其中保护强制停机动作的控制命令是低8位是全为0,控制报警声音是指令的高第1位,0为报警,1为不报警。请编写程序,在紧急状况启动时,向控制器输入控制指令。
7.积累调试程序经验,收集错误信息原因(每个同学收集3-5条错误信息原因,并输入电脑形成文字)。

首先是计算三角形的面积和周长的程序;

/************************************
**** 程序功能:计算任意三角形面积****
****		BY: HH		 ****
************************************/

#include<iostream>			//编译预处理命令 
#include<math.h>			//调用包含有数学函数的头文件
#include<windows.h>			
using namespace std;			//使用标准名空间 std  

/************************************
****    程序功能:计算面积公式   ****
************************************/
double result(double x,double y,double z,double lenth) //定义四个double 变量,因为三角形的边长不一定为整数。lenth为三角形边长
{													   //x , y , z 分别为三角形三边长
	
	double halfl,area; //定义两个double 变量,halfl为周长一半、area为三角形面积
	
	halfl = lenth/2;	//以下根据海伦公式算出三角形面积;
	area  = sqrt(halfl*(halfl-x)*(halfl-y)*(halfl-z)); //sqrt 为开方函数;
	
	return area; //该函数返回area的值。
	
}

/************************************
****	     主函数       	 ****
************************************/

int main()
{
	double a,b,c,l,s; //定义五个double 变量,a,b,c分别为三角形三边长,l为三角形边长,s为三角形面积。
	int flag = 0;		//定义一个标志,用于后面是否为正确输入三角形三边的判断。
	char d[50]="该三角形的面积 S = ";
	int i;
	do		// do while() 先执行do ,再判断while 
	{
		
		cout<<"*****************************\n\n";   //此处纯属美化作用
		cout<<"   请输入三角形各边边长  \n\n";			// 提醒用户输入的参数值,使程序更人性化。
		
		cout<<"  请输入第一条边a的值: a = ";			//提示每一步用户应该做的事情。
		cin>>a;
		cout<<".............................\n";		//分割线,方便与其他边长分开,使界面看起来更舒服
		
		cout<<"  请输入第二条边b的值: b = ";
		cin>>b;
		cout<<".............................\n";
		
		cout<<"  请输入第三条边c的值: c = ";
		cin>>c;
		cout<<".............................\n\n";
		
		cout<<"*****************************\n\n";
		if(a+b>c&&a-b<c)		//判断输入的三角形三边长是否符合三角形定义。
		{				//若符合任意两边之和大于第三边,任意两边之差小于第三边,则执行大括号的内容。
			
			l = a+b+c;		//计算三角形的边长
			s=result(a,b,c,l);//调用前面我们自己定义的 result函数,即求三角形面积,并将函数返回值赋给S。
			
			flag = 1;		//输入三角形三边边长无误,将标志置为1.
			
			for(i=0;i<19;i++)
			{
			Sleep(100);
			cout<<d[i];
			}
			cout<< s <<"\n";			//打印输出三角形面积
			cout<<"\n	 边长 L ="<< l <<"\n\n╰( ̄▽ ̄)╭ 怎样,我聪明吧!!!\n\n";	//打印输出三角形边长
			break;		//判断退出
		}
		else								//不符合任意两边之和大于第三边,任意两边之差小于第三边,则执行此内容。 
			cout<<"\n    ︽⊙_⊙︽  \n亲,你别逗我可以吗?你输入的三角形有误!!!请重新输入吧!!\n\n\n";
	}
	
	while(flag==0);   //判断flag是否等于0;若等于0则说明输入有误,继续执行上面 do 大括号部分的程序
	system("pause");
	return 0;
}

这个是第三章的课本习题3的程序分析;之前不小心看错了。就不删掉了。

#include<iostream>		//编译预处理命令 
using namespace std;		//使用标准名空间 std  

int main()
{
	int i,j;		//定义两个整形变量
	
	for(i=0;i<5;i++)	//进入第一个for循环,先给i赋值,然后进行判断i是否小于5,如果是,则i自增1;
	{
		for(j=i;j<5;j++)	//i自增后进入第二个for循环,把i的值赋给j,判断j的值是否小于5,如果是则j自增。
			cout<<"*";		// 打印 * ,打印完后继续判断j的值,一直到j的值为5.
		
		cout<<endl;			//换行功能。当第二个循环结束后,继续判断i的值。直到i的值为5便退出循环。
		
		
	}
	
	return 0;		//程序到此结束。
	
}
#if(0)

这也可以算是一种注释.

	主函数中第一次i的值为0,进行第一次判断。i=0<5,进入第二个循环,j=i=0.j进行判断,打印一个“*”。j自增1,j=1。

	继续进行判断,1<5,打印第二个“*”.j自增1,j=2.
	
	继续进行判断,2<5,打印第三个“*”,j自增1,j=3.
	。。。。。。
	当j的值为4时,已经打印了五个“*”,此时j自增,j=5,明显不符合j<5.于是退出此for 循环。打印换行。然后i自增1,进行判断。

	此时i=1<5;进入第二个for循环,j=i=1。j进行判断,打印一个“*”。j自增1,j=2.在此处与上面对比。

	直到j的值为5,不符合条件,退出循环。依次类推,直到i的值为5,不符合条件。退出第一个循环。整个程序运行至此结束。
	
	于是就此实现了,每行递减打印 “*”的功能。


#endif


就在这里补上吧!每道例题我都用自己的话去表达,可能比较啰嗦,但是你绝对能理解为什么结果就是这样。

第一小题:

#include<iostream>
#include<math.h>
using namespace std;

int main()
{
	int e=1,f=4,g=2;  //定义并赋值 三个整形变量
	float m=10.5,n=4.0,k;  //定义三个浮点形变量
	k=(e+f)/g;
	cout<<k<<endl;
	k=(e+f)/g+sqrt((double)n)*1.2/g+m;  
	/* 先计算 sqrt,里面将n强制转换为 双精度浮点型。 
	我们想开方之后是 2.0000;但是我们sqrt 默认的是返回一个整形变量 。
	所以此时开根后的值为 2 。接下来计算乘除,2乘以1.2等于2.4;
	因为整形的2系统自动转换为浮点型,防止精度丢失。	
	2.4再除以g,而g=2;那么系统又会将g自动转换为浮点型,道理一样。结果为1.2.
	再看看左边的, e+f=5,因为两者都为整形,所以直接相加。
	结果再除以 g(2),就等于2;因为两者都为整形,所以计算后的结果必为整形,就将小数位舍去。
	最后加减法运算。2+1.2+10.5=13.7。因为三个数中,有浮点型,那么系统自动转换,道理跟上面一样。
	于是我们最后得到的结果就是 13.7
	*/
	cout<<k<<endl;  //此句为自己加上去的 ,方便验证分析结果。
return	0;
}

第二小题:

float x=2.5,y=4.7; //定义两个浮点型变量并赋值;
int a=7;		//定义一个整形变量并赋值;
x+a%3*(int(x+y)%2)/4;	
	
/*
	乘除优先级都是一样,结合方向是从左到右;
	那系统就先算 a%3 ,因为a和3是整形,所以结果必为整形,
	a%3 就是7除以3取余,那么我们都知道 2*3+1=7;所以结果就是 1了。1为余数嘛。
	接下来,算乘法,先看int(x+y),此处做了强制转换,即原本是2.5+4.7=7.2;
	但由于将其强制转换为整形,所以结果等于 7;
	我们继续看,7%2 就是7除以2取余,跟前面a%3一样的道理。
	前面 a%3 = 1;乘以上面的 7%2,结果为 1;再除以4,由于都为整形,所以 1/4不够除,直接补零。
	为什么呢?我们都知道 1、4=0.25;
	这时候系统就说,我不管了,他是整形的,我就只做小数点前的。所以,得到的结果当然就是0.
	最后 x+0,毫无疑问,结果就是2.5。




*/



接着是解一元二次方程的解的程序;

/************************************
****   程序功能:解一元二次方程  ****
****		BY: HH				 ****
************************************/

#include<iostream>
#include<math.h>
#include<windows.h>
using namespace std;


/************************************
****  函数功能:判断方程是否有解 ****
*****     并按照情况输出解     ******
************************************/
float result(double a,double b,double c)
{						//该函数集计算与输出结果,使主函数看起来更简洁
	
	float tmp,tmp1,tmp2;
	tmp = b*b-4*a*c;
	if(tmp==0)	//判别式结果为0;
	{
		
		tmp1=(-b+sqrt(tmp))/(2*a);	//求根公式
		cout<<"   ( ̄︶ ̄) 哈哈,结果出来了!!\n\n"; //娱乐解说
		cout<<"方程只有一个解哦!! x = "<<tmp1<<"\n";	//输出答案
	}	
	
	if(tmp>0)	//判别式结果大于0
	{
		
		cout<<"   ( ̄︶ ̄) 哈哈,结果出来了!!\n\n"<<">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>\n\n";
		
		tmp1=(-b+sqrt(tmp))/(2*a);//求根公式
		cout<<"方程有两个解哦!!!\n\n   第一个解 x1 = "<<tmp1<<"\n\n";//输出第一个解
		
		tmp2=(-b-sqrt(tmp))/(2*a);//求根公式
		cout<<"   第二个解 x2 = "<<tmp2<<"\n\n";//输出第一个解
		
	}
	if(tmp<0)	//判别式结果小于0
	{	
		tmp = abs(tmp);//此处的函数为abs 包含在math里面,是返回一个数的绝对值得函数。
		cout<<" (# ̄▽ ̄#) 对不起,该方程无实解!!!\n\n";//无解,提示用户
		Sleep(1000);
		cout<<" (^O^) 但是我还是有办法滴!!!\n   卖萌无罪\n";//卖萌无罪,与用户互动
		cout<<"***************************************************\n\n";
		Sleep(1000);
		cout << " ** 虚根X1=" << -b/(2*a) <<"+"<<sqrt(tmp)/(2*a) <<"i\n";  //i表示虚数单位
		Sleep(1000);
        cout << " ** 虚根X2=" << -b/(2*a) <<"-"<<sqrt(tmp)/(2*a) <<"i\n"; 


	}


	return 0;
	
	
	
}

/************************************
****          主函数             ****
************************************/




int main()
{
	double a,b,c,x,y;
	
		cout<<"*****************************************************\n\n";//以下为程序人性化而设计
		cout<<"  欢迎使用本程序!!!∩ε∩ \n";
		cout<<"  注意,使用本程序之前请将一元二次方程化为此格式:\n\n";
		cout<<"  ax2+bx+c=0 (注:式中x2为x的平方)\n\t\t\t\t\tBY: HH\n";
		cout<<"*****************************************************\n\n";
		
		cout<<"  请输入第一个系数a的值: a = ";		//提示用户输入第一个系数,并保存在 a 中.
		cin>>a;
		cout<<".............................\n";	
		
		cout<<"  请输入第二个系数b的值: b = ";		//提示用户输入第二个系数,并保存在 b 中.
		cin>>b;
		cout<<".............................\n";
		
		cout<<"  请输入第三个系数c的值: c = ";		//提示用户输入第三个系数,并保存在 c 中。
		cin>>c;
		cout<<".............................\n";
		
		cout<<"计算中,请稍后!!\n\n";//稍作等待
		Sleep(1000);
		
		result(a,b,c); //将三个系数放到result函数中计算
		cout<<"*******************************************************\n\n\n";
		

	return 0;
	
	
}



最后,名字加密解密程序。

/************************************
****    程序功能:名字加密解密   ****
****		BY: HH		 ****
************************************/
#include<iostream>		//编译预处理命令 
#include<windows.h>
using namespace std;		//使用标准名空间 std 

int main()
{	
	char a[50],b[50],temp,zi;
	int i,j,flag;
	char c[20]="加密中,请稍后!!!";		//提示字符数组
	char d[20]="解密中,请稍后!!!";		//提示字符数组
	cout<<"***********************************\n\n" ;
	cout<<"本程序为加密名字拼音字母设计\n\n";
	do							//先执行,再判断后面的while
	{	
		fflush(stdin);						//清空输入缓存
		cout<<"请选择需要的功能:\n\n"<<"1、加 密 \n\n2、解 密 \n\n";//提供选择功能,同时美化界面
		cout<<"***********************************\n\n" ;
		cin>>temp;
		
		if(temp==49)	//因我们的temp是字符型,而当用户选择要加密会按下1,1的ASCII码为49
		{	
			flag = 1;			//表示输入正确的标志
			system("cls");		//清屏
			fflush(stdin);		//清空输入缓存;
			cout<<"请输入你要加密的名字的拼音缩写\n\n";	//人性化提示
			cin.get(a,50);			//该函数将输入的字符装到数组 a 中,遇到回车就会停止执行
			Sleep(500);		
			cout<<"\n";		
			
			for(j=0;j<18;j++)		//假装加密过程很复杂
			{
				
				Sleep(100);
				cout<<c[j];
			}
			Sleep(1000);
			cout<<"\n\n加密完成!!!\n\n";	//加密成功提示
			Sleep(700);
			cout<<"加密结果:\n\n";
			
			for(i=0;i<50;i++)
			{
				zi = a[i];		//将拼音缩写逐个赋值给zi,zi再根据算法机密后赋值给数组 b。
				zi = zi+4;
				b[i] = zi;
				if(a[i]==0)
				{
					cout<<"\n\n请记好加密结果!!!\n\n";	//当遇到空字符,也就是到用户输入的最后一个                                                                                //字符后面就跳出循环,
					break;					//防止输出不明结果
				}
					cout<<b[i];				//打印加密结果,方
										//便用户查看
                                                                                                   
			}
			
			
		}

		if(temp==50)		//当用户选择要加密会按下2,2的ASCII码为50
		{	
			flag = 1;		//表示输入正确的标志
			system("cls");	//清屏
			fflush(stdin);	//清空输入缓存;
			cout<<"注意,只有用此程序加密后的才能解出正确的名字!!\n\n";	//人性化提示
			cout<<"请输入你要解密的名字的拼音缩写\n\n";
			cin.get(a,50);	//该函数将输入的字符装到数组 a 中,遇到回车就会停止执行
			
			for(j=0;j<18;j++)	假装加密过程很复杂
			{
				
				Sleep(100);
				cout<<d[j];
			}

			Sleep(1000);
			cout<<"\n\n解密完成!!!\n你的大名是:\n\n";	//人性化显示
			
			for(i=0;i<50;i++)	//将加密的字符逐个从数组a去除并放到字符zi,zi再按算法解密放到数组 b 中
			{	
				zi = a[i];
				if(zi==0)
					break;
				zi = zi-4;
				b[i] = zi;
				Sleep(500);
				cout<<b[i];		//打印显示解密后的结果	
			}
			cout<<"\n\n";
			
		}

		if(temp!=49&&temp!=50)			//若用户按下的不是 1 也不是 2 ,那么久执行此步
		{
			cout<<"亲,你的选择有误哦!!\n";	//提示用户输入有误
			
			cout<<"......................................\n\n";		//美化界面需要	
			cout<<"请重新输入:\n\n";		//人性化提示
			fflush(stdin);		//清屏
			flag = 0;		//表示输入有误的标志
		}
	}
	
	while(flag==0);	//判断是否输入有误,flag=0就是输入有误,则执行do部分;
	
	system("pause");	//便于直接打开 .exe
	return 0;		//加密原理:将原来的拼音字母ASCII码加 4 后储存
	
}

当我写完时我才发现老师又突然加了一个作业.。。。。。。。。。

/************************************
****  程序功能:模仿设备紧急停止 ****
****		   BY: HH	    	 ****
************************************/


#include<iostream>
using namespace std;

int main()
{
	int a[17]={0,1,0,1,1,1,1,1,0,1,1,1,0,1,0,0};//此为自己定的,随意更改,但第八位不要更改。
	int b[17],i,j;
	char key;	//用于存储键盘输入
	cout<<"原来的运行指令为:"<<endl<<"   高八位为:";
	for(i=0;i<16;i++)		//将前面原先的指令码打印出来
	{
		if(i==8)
			cout<<endl<<endl<<"   低八位为:";
		cout<<a[i]<<" ";
	}
	cout<<endl<<endl;
	cout<<endl<<"现在我们来模拟紧急停机!!!"<<endl;//提醒如何模拟紧急停机
	cout<<endl<<"现在请按下S键来紧急停止设备"<<endl;
	cout<<"****************************************"<<endl;
	do
	{
		cin>>key;
		if(key=='s'||key=='S')//判断按下的键。
		{
			//成功按下停止键
			cout<<"你已经按下紧急停止按钮!!!以下你看到的将是放慢后的画面"<<endl;
			cout<<endl<<"高八位更改为:";
			
			for(i=0;i<16;i++)	//将原先设定后的第八位变零,高八位第一位改为0报警
			{
				if(i==8)
					cout<<endl<<endl<<"低八位更改为:";
				if(i>7)
					b[i]=((a[i]||1)^1);
				else	//搭配最近的一个if函数
				{
					b[i]=a[i];
					if(i==7)	
						b[7]=0;
				}
				cout<<b[i]<<" ";
			}	
			cout<<endl<<endl<<"请注意对比原来的指令码!!!"<<endl<<endl;//提示对比
			break;//退出循环
		}
		else
			cout<<"人命关天,别开玩笑!!!"<<endl;//按下不正确的键温馨提示
	}	
	while(key!='s'||key!='S');	//判断是否为正确的键,不正确则继续获取
	system("pause");//这个前面有提到过,方便EXE拷出运行	
	return 0;//其他的不多注释了
	
}

最后的最后》》》》》》》》》》》
几种常见的错误:


D:\临时\C\C++\3.4\3-4.cpp(11) : error C2065: 'cout' : undeclared identifier 
这种情况是由于忘记 打 using namespace std;

D:\临时\C\C++\3.4\3-4.cpp(10) : error C2144: syntax error : missing ';' before type 'char'
这种情况是忘记加 ;

D:\临时\C\C++\3.4\3-4.cpp(9) : error C2018: unknown character '0xa3'
这种情况是由于打了中文标点

D:\临时\c\c++\3.4\3-4.cpp(1) : fatal error C1083: Cannot open include file: 'iotream': No such file or directory
这种情况是由于头文件名字打错


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值