第二章作业lesson2(待改)

第二章 数据类型、运算符和表达式学习要求和实验

n      学习要求:

了解数据类型概念。

掌握常量和变量的使用。

掌握各种运算符的运算结合性和优先级,掌握各类表达式正确格式。

掌握数据类型转换。

进一步熟悉VC集成编程环境的使用,熟练掌握程序设计过程和步骤,积累程序调试经验。

n      实验作业

1.输入课本各个例题,调试运行程序,并分析程序,将每一个程序改写2到3个版本,自己分析程序结果,然后再调试运行,核对分析结果的对错。

2.编写程序输入一个三角形的三条边,计算其面积和周长;

3.编写程序计算并输出课本本章习题3表达式的值并分析结果。

4.编写一个程序,输入一个一元二次方程的三个系数,并计算其方程的解,然后输出。

5.编写程序,自己确定一个加密算法,将自己的音标姓名(英文)加密,并输出加密后结果,请注释你的加密算法。

6.在一个自动控制设备中,控制字位数16位,控制设备产生机械动作(如削,压等)的是指令字的低8位,其中保护强制停机动作的控制命令是低8位是全为0,控制报警声音是指令的高第1位,0为报警,1为不报警。请编写程序,在紧急状况启动时,向控制器输入控制指令。

7.积累调试程序经验,收集错误信息原因(每个同学收集3-5条错误信息原因,并输入电脑形成文字)。

n      作业要求

网上提交各个程序和相关要求提交的文字。

作业1:

例2.1

/*******************************************
*****     功能:布尔类型使用举例       *****
*******************************************/

#include <iostream>
#include <iomanip>          //使用控制符boolalpha需使用此头文件
using namespace std;         //使用标准名空间std

int main()                     //主函数
{
	bool flag=true;             //定义布尔型变量,并初始化为true  
	cout<<flag<<endl;             //默认情况下为非bool字母(noboolalpha),输出整型值1
	cout<<boolalpha<<flag<<endl;        //使用控制符boolalpha,输出布尔型值为true
	cout<<flag+5<<endl;                  //在算数元算中,把布尔型当做整型数据,输出6
	flag=0;                               // 可以给bool类型的变量赋给任意整型的值 
	cout<<"执行语句flag=0;后flag的值为:"<<boolalpha<<flag<<endl;
	flag=0.0;                                                          //0.0为double类型的数值
	cout<<"执行语句flag=0.0;后flag的值为"<<boolalpha<<flag<<endl;           

	return 0;
}
修改版本1
/*******************************************
*****     功能:布尔类型使用举例       *****
*******************************************/

#include <iostream>
#include <iomanip>          //使用控制符boolalpha需使用此头文件
using namespace std;         //使用标准名空间std

int main()                     //主函数
{
	bool flag=false;             //定义布尔型变量,并初始化为false  
	cout<<flag<<endl;             //默认情况下为非bool字母(noboolalpha),输出整型值0
	cout<<boolalpha<<flag<<endl;        //使用控制符boolalpha,输出布尔型值为false
	cout<<flag/2<<endl;                  //在算数元算中,把布尔型当做整型数据,输出0
	flag=1;                               // 可以给bool类型的变量赋给任意整型的值 
	cout<<"执行语句flag=1;后flag的值为:"<<boolalpha<<flag<<endl;//输出值为true
	flag=0.001;                                                          //0.01为double类型的数值
	cout<<"执行语句flag=0.001;后flag的值为"<<boolalpha<<flag<<endl;      //输出true     

	return 0;
}
经编译,分析结果正确。

修改版本2:

/*******************************************
*****     功能:布尔类型使用举例       *****
*******************************************/

#include <iostream>
#include <iomanip>          //使用控制符boolalpha需使用此头文件
using namespace std;         //使用标准名空间std

int main()                     //主函数
{
	bool a,b;                   //定义布尔型变量a,b;
	
	bool flag1=false;             //定义布尔型变量flag1,flag2,并分别初始化为false ,true 
	bool flag2=true;
	a=flag1|flag2;                //将flag1,flag2相或后赋值给a
	b=flag1&flag2;                 //将flag1,flag2相与后赋值给b
	cout<<a<<endl;                //输出a的整型值1
	cout<<b<<endl;                //输出b的整型值0
	cout<<boolalpha<<a<<endl;      //输出a的布尔类型值true
   	cout<<boolalpha<<b<<endl;       //输出b的布尔类型值false     

	return 0;
}
经编译,分析结果正确。

例题2.2

/***********************************
**   功能:赋值表达式语句的使用   **
***********************************/

#include <iostream>
using namespace std;

int main()         //主函数
{
	int a,b,c,d;    //定义整型变量a,b,c,d
	a=4;            //给变量a赋值4
	b=a;            //将变量a的值赋给b
	a=5;            //给变量a赋值5
	c=d=6;            //将6赋给变量d,再将d的值赋值给c
	c*=a;            // 将a与c相乘,再将值赋给c
	d%=a+b;          //该式与d=d%(a+b)相同
	cout<<"a="<<a<<endl;      //输出a的值
	cout<<"b="<<b<<endl;       // 输出b的值
	cout<<"c="<<c<<endl;       //输出c的值
	cout<<"d="<<d<<endl;       //输出d的值

	return 0;
}

修改版本1:

/***********************************
**   功能:赋值表达式语句的使用   **
***********************************/

#include <iostream>
using namespace std;

int main()         //主函数
{
	int a,b;    //定义整型变量a,b
    a=1;         //给变量a,b赋值1
	b=1;
    while(b<100)  //while函数,当b<100时,执行while函数里面程序,直到b>=100时退出函数
	{
	 b+=1;       //b加1后的值赋给b
	a+=b;         //a加上b的值再赋值给a
   
	}
	cout<<"输出从1加到100的总和"<<endl;
		cout<<"a="<<a<<endl;  //输出从1加到100的总和值5050
	return 0;
}
修改版本2:

/***********************************
**  功能:将浮点数拆成小数和整数部分  **
***********************************/

#include <iostream>
using namespace std;

int main()         //主函数
{
	float num,b; //定义浮点型变量num,b
    int a;  //定义整数a
    cout<<"请输入num的值:";  
	cin>>num;                 //输入一个数赋值给变量num
	b=num;     //将num的值赋给b
    a=num;   //将浮点型变量num的值赋值给整型变量a,得到num的整数部分
	b-=a;     //将b减去a后的值赋给b,得到num的小数部分
	
	cout<<"输出num的整数部分:"<<a<<endl;
		cout<<"输出num的小数部分"<<b<<endl;  
	return 0;
}

例题2.3数据溢出举例

#include<iostream>
using namespace std;
int main()
{
	short i,j,m,n; //定义短整型变量i,j,m,n
	i=1000;//给i,j分别赋值1000
	j=1000;
	m=i+j;//将i,j的值相加后赋值给m ,m值等于2000
	n=i*j;//将i,j的值相乘后赋值给短整型变量n,n的值为1000000,溢出了
	cout<<"m="<<m<<endl;
	cout<<"n="<<n<<endl;
	return 0;
}

修改版本1:

#include<iostream>
using namespace std;
int main()
{
	int c;
	float a,b;
	a=56.3;
	b=200.5;
    c=a+b;   //a+b=56.3+200.5=256.8,为浮点值,但c为整型值,赋值后小数溢出了,所以c=256
	cout<<"c="<<c<<endl;
	
    return 0;
}

修改版本2:

#include<iostream>
using namespace std;
int main()
{
	short a,b,c,d,e,f;   //short类型的取值范围为-32768~32767
    a=10;                //a=10
	b=10*10;              //b=100
	c=10*10*10;           //c=1000
	d=10*10*10*10;        // d=10000
	e=10*10*10*10*10;     //e=100000,数据溢出,为乱码
	f=10*10*10*10*10*10;   //f=1000000,数据溢出,为乱码
	cout<<"a="<<a<<endl;
	cout<<"b="<<b<<endl;
	cout<<"c="<<c<<endl;
	cout<<"d="<<d<<endl;
	cout<<"e="<<e<<endl;
	cout<<"f="<<f<<endl;


  return 0;
}

例题2.4  ++运算符使用举例

/*************************
*** 功能:++运算使用  ****
*************************/

#include <iostream>
using namespace std;
int main()
{
	int i=6,j,k,temp;
	j=++i;                  //先对变量i自增,i的值变为7,之后把i的值7赋给变量j
	k=i++;                  // 先把变量i的值7赋给变量k,然后i的值自增,i的值变为8
	++i=1;                  //++i可以作为左值,执行完该语句后变量i的值为1
	cout<<"i="<<i<<endl
	    <<"j="<<j<<endl
		<<"k="<<k<<endl;

	return 0;
}

修改版本1:
/*************************
*** 功能:++运算使用  ****
*************************/

#include <iostream>
using namespace std;
int main()
{
	int i=1,j=2,k=3;
	j-=i++;//先将j-i后的值赋给j,然后i的值自增1;得j=1,i=2
	++i=1;//i++作为左值,执行完该语句后i的值为1
	k*=i++;                  // 先执行k=k*i,然后i的值自增1;得k=3,i=2
	cout<<"i="<<i<<endl
	    <<"j="<<j<<endl
		<<"k="<<k<<endl;    //输出i=2,j=1,k=3

	return 0;
}

修改版本2:

/*************************
*** 功能:++运算使用  ****
*************************/

#include <iostream>
using namespace std;
int main()
{
	int i=10,j=5,k=1;
	j+=--i;//先执行i自减1,再执行j=j+i;得j=14,i=9
	i=-k++;//先执行i=-k,再执行k++,得i=-1,k=2
	k*=i++; // 先执行k=k*i,然后i的值自增1;得k=-2,i=0
	cout<<"i="<<i<<endl
	    <<"j="<<j<<endl
		<<"k="<<k<<endl;    //输出i=0,j=14,k=-2

	return 0;
}

例题2.5

#include <iostream>
using namespace std;
int main()
{
	char ch;
	cout<<"please input a character:";
	cin>>ch;                             //输入一个字符
	ch=ch>='a'&&ch<='z'?ch-'a'+'A':ch;   //先判断ch>'a'&&ch<='z'是否成立,若成立,则ch=ch-'a'+'A',否则ch=ch
	//上述语句等价于ch=ch>='a'&&ch<='z'?ch-32:h;
	cout<<"The result is:"<<ch<<endl;

	return 0;
}

修改版本1:

/***********************************
**** 功能:输出两个数中的最大值 ****
***********************************/
#include <iostream>
using namespace std;
int max(int a,int b);//函数声明
int main()           //主函数
{
    int m,n;
	cout<<"请输入两个整型数据"<<endl;
	cin>>m>>n;
	cout<<"输出两个数中最大值:"<<max(m,n)<<endl;
	

	return 0;
}
int max(int a,int b)//子涵数:求两数中的最大值
{
	int t;
	t=a>b?a:b;
	return t;
}

修改版本2:

/***********************************
**** 功能:输出三个数中的最大值和最小值 ****
***********************************/
#include <iostream>
using namespace std;
int max(int a,int b,int c);//函数声明
int min(int a,int b,int c);
int main()           //主函数
{
    int m,n,k;
	cout<<"请输入三个整型数据"<<endl;
	cin>>m>>n>>k;
	cout<<"输出三个数中最大值:"<<max(m,n,k)<<endl;
	cout<<"输出三个数中最小值:"<<min(m,n,k)<<endl;

	

	return 0;
}
int max(int a,int b,int c)//子涵数:求三数中的最大值
{
	int t;
	t=a>b?a:b;
	t=t>c?t:c;
	return t;
}
int min(int a,int b,int c)//子函数:求三数中的最小值
{
	int j;
	j=a<b?a:b;
	j=j<c?j:c;
	return j;
}

例题2。7强制类型转换实例

#include <iostream>
using namespace std;
int main()
{
	int ab,ac;
	double b=3.14;
	char c='A';
	ab=int(b);   //将浮点型数据b强制转换为整型值,赋值给ab
	ac=int(c);   //将字符型数据c强制转换为整型值,赋值给ac
	cout<<"b="<<b<<endl;    
	cout<<"ab="<<ab<<endl;  
	cout<<"c="<<c<<endl;
	cout<<"ac="<<ac<<endl;

	return 0;
}

修改版本1:

#include <iostream>
using namespace std;
int main()
{
	char a,b;
	int ab=23;
	float ac=2.3;
	
	a=char(ab);   //将整型数据ab强制转换为字符型值,赋值给a
	b=char(ac);   //将浮点型数据ac强制转换为字符型值,赋值给b
	cout<<"a="<<a<<endl;    
	cout<<"ab="<<ab<<endl;  
	cout<<"b="<<b<<endl;
	cout<<"ac="<<ac<<endl;//结果不知

	return 0;
}

修改版本2:

#include <iostream>

using namespace std;
int main()
{
	int a=0;
	char b;
	while(a<=20)//当a<=20,执行while函数,否则退出
	{
	b=char(a);
	cout<<b<<endl;
	a++;
    }
                       //输出0 ~20所对应的符号
	return 0;
}


作业2:


/********************************
** 输入三边长求三角形面积和周长**
********************************/
#include <iostream>
#include<math.h>


using namespace std;
float perimeter(float x,float y,float z)//子函数:求周长perimeter
{
	float m;                            //周长等于三边长之和
	m=x+y+z;
	return m;
}
float area(float x,float y,float z)//子函数:求三角形的面积area
{
	double a1,a2,a3,a4;            //面积公式:海伦公式
	double n,p;
	a1=x+y+z;
	a2=x+y-z;
	a3=x+z-y;
	a4=y+z-x;
	p=a1*a2*a3*a4;
	p=sqrt(p);
	n=p/4;
	return n;
}
bool abc(float x,float y,float z)
{
	bool t;
	if((z<x+y)&&(z>x-y)&&(z>y-x))
		t=true;
	else
		t=false;
	return t;

}
/**以下是主函数**/
int main()
{
	float a,b,c;
	cout<<"请输入三角形的三边长:"<<endl;
	cout<<"a=";
	cin>>a;
	cout<<"b=";
	cin>>b;
	cout<<"c=";
	cin>>c;
	while(!abc(a,b,c))
    {
	cout<<"输入三边长不能组成三角形,请重新输入:"<<endl;
	
	cout<<"a=";
	cin>>a;
	cout<<"b=";
	cin>>b;
	cout<<"c=";//输入三边长度
	cin>>c;
    cout<<"三角形的周长perimeter="<<perimeter(a,b,c)<<endl; // 输出周长
	cout<<"三角形的面积area="<<area(a,b,c)<<endl; // 输出面积
	cout<<"*******流星在颤抖*******"<<endl;
	return 0;
	}
}

作业3

#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+sqrt((double)n)*1.2/g+m;//(e+f)/g=(1+4)/2=2;sqrt

((double)n)*1.2/g=1.2;m=10.5
	cout<<"k="<<k<<endl;//输出k=13.7
	return 0;

}


 
#include<iostream>
#include<math.h>
using namespace std;
int main()
{
   float x=2.5,y=4.7,k;
   int a=7;
   k=x+a%3*(int(x+y)%2)/4;//a%3=1;int(x+y)%2=1; 
   cout<<"k="<<k<<endl;
   return 0;
}


作业4

/******************************************
**      功能:求一元二次方程的根        **
******************************************/
#include<iostream>
#include<math.h>
using namespace std;
bool panduan(float x,float y,float z);
/*** 以下是主函数 *****/
int main()
{
	float a,b,c;
	float x1,x2;
	cout<<"请输入方程的三个参数a,b,c:"<<endl;
	cout<<"a=";
	cin>>a;
	cout<<"b=";
	cin>>b;
	cout<<"c=";
	cin>>c;
	if(panduan(a,b,c)==true) //如果有根,执行if语句里面程序
	{
	 x1=float((-b+sqrt(b*b-4*a*c))/(2*a)); //求两个根x1,x2的值 
	x2=float((-b-sqrt(b*b-4*a*c))/(2*a));
	 cout<<"输出方程的根x1="<<x1<<endl; 
	 cout<<"输出方程的根x2="<<x2<<endl;
	}
	else //如果没根,执行else语句程序
	{
	cout<<"该方程无根"<<endl;
	}
	 return 0;
}
 bool panduan(float x,float y,float z)//判断方程是否有根,有根则返回true,没根则返回false
 {
	bool t;
	 float m;
	 m=y*y-4*x*z;
	 if(m>=0){t=true;}
	 else{t=false;}
	 return t;
} 

作业5:

/*****************************
****    功能:加密算法    ****
*****************************/
#include<iostream>
using namespace std;

void encrypt(char m,int i);//对函数进行声明
void main()
{
	int t,k;
	char a[20];
	cout<<"请输入你的英文名:";
	cin.get(a,20);//输入字符并存在a【20】数组中
	k=strlen(a);//计算出输入字符的长度
	cout<<"输出加密后的字符码:";
	for(t=0;t<k;t++)
	{
	    encrypt(a[t],t+1);
	}
	
	
	
} 
void encrypt(char m,int i)//加密函数,对输入的第i个字符m进行加密
{
	m=m+i;
	cout<<m;
}

作业6:

/************************************
****   程序功能:模拟控制设备    ****
************************************/


#include<iostream>
using namespace std;
void xianshi(int x,int y);
int main()
{
	char k,h,g;
	int al,ah;     
	
   cout<<"按T键启动设备"<<endl;
   cin>>k;
   if(k=='t'||k=='T')
   {
      ah=0xff;
	  al=0xff;
	  cout<<"设备已启动!!!!"<<endl;
	  xianshi(ah,al);
	  cout<<"按F键可打开报警装置,按其他键则不打开报警装置"<<endl;
	  cin>>h;
	  if(h=='F'||h=='f')
	  {
		  ah=ah&0xfe;
	      cout<<"报警装置已开启!!如遇紧急情况会自动报警"<<endl;
		  xianshi(ah,al);
	  }
	  cout<<"机器正在运行中........"<<endl;
	  cout<<"机器正在运行中........"<<endl;      
	  cout<<"机器正在运行中........"<<endl;      
	  cout<<"机器正在运行中........"<<endl;      
	  cout<<"机器正在运行中........"<<endl;      
	  cout<<"机器正在运行中........"<<endl;      
	  cout<<"机器正在运行中........"<<endl;      
	  cout<<"紧急情况!!!请马上按S键强制停止机器"<<endl;
	  cin>>k;
	  if(k=='S'||k=='s')
	  {
		  al=al&0x00;
		  xianshi(ah,al);
		  cout<<"机器已经停止完毕!!!";
	  }

   }
	return 0;
}

void xianshi(int x,int y)//显示出指令码
{
			int b,i;

		cout<<"输出高八位ah:";
		for(i=0;i<8;i++)
		{
			b=x&0x01;
			x=x>>1;
			cout<<b<<' ';
			
		}
		cout<<endl;
		cout<<"输出低八位al:";
		for(i=0;i<8;i++)
		{
			b=y&0x01;
			y=y>>1;
			cout<<b<<' ';
			
		}
		cout<<endl;
}


作业7:

错误1

efefa.obj : error LNK2005: _main already defined in ew3.obj
Debug/4t4.exe : fatal error LNK1169: one or more multiply defined symbols found
执行 link.exe 时出错.

有时编译时无出错,连接时就出现这个错误,不知道什么原因。不过重新建个工程把内容复制进去就可以了


错误2

efefa.obj : error LNK2005: _main already defined in ew3.obj
Debug/4t4.exe : fatal error LNK1169: one or more multiply defined symbols found

每当子函数写于主函数后时前面没有进行声明就会遇到这种错误,所以,记得要声明哦!


错误3

E:\C++程序设计\lesson2_1\lesson2_1.cpp(19) : error C2679: binary '>>' : no operator defined which takes a right-hand operand of type '' (or there is no acceptable conversion)

经常习惯性地在cin>>a后面多加了一个>>endl造成这种错误








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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值