第二章实验作业

本文分享了作者在C++编程过程中的实战经验,包括基础语法、条件判断、类型转换等内容,并展示了多个实例,如三角形面积计算、一元二次方程求解及简单的加密解密程序。

  摧残了一个早上之后,总算把这一章的c++作业完成个百分之八十了,书里的习题是敲了又敲,争取把那些东西弄清楚,不过,有一些题目看起来没法理解,就暂时先不写了。到时再修改一下吧,来吧,展示我的成果吧


作业1

例题2.1

   bool函数的最简单调用,不过,我发现了一个问题,既然在c++的运算中,把 0.0  的值赋给flag,发现程序输出的是false而不是书里所写的true,引发了我的一个疑问,double类型的0.0在bool类型中是属于非0呢还是等于0呢,希望大神能够帮我解答一下。
/***************************************
**   布尔类型的应用例子   **
**   自动化1121 李庆典    **
***************************************/



#include<iostream>              //编译预处理命令
#include<iomanip>               //控制符所需头文件
using namespace std;            //标准名字空间

int main()                      //主函数
{
	bool flag = true;           //定义一个bool函数,并初始化为true
	cout<<flag<<endl;           //输出默认情况下的判断值(既1)
	cout<<boolalpha<<flag<<endl;   //用boolalpha控制符输出判断值(既true)
	cout<<flag+5<<endl;      //把bool数据当成int数据来使用
	flag = 0;                      //对bool数据进行赋值
	cout<<"执行语句flag =0 ;后,flag的值为"<<boolalpha<<flag<<endl;
	flag = 1;                      //对bool数据进行赋值
	cout<<"执行语句flag =1 ;后,flag的值为"<<boolalpha<<flag<<endl;
	flag = 2;                      //对bool数据进行赋值
	cout<<"执行语句flag =2 ;后,flag的值为"<<boolalpha<<flag<<endl;
	flag = 0.0;                     //把bool数据赋值double数据
	cout<<"执行语句flag =0.0 ;后,flag的值为"<<boolalpha<<flag<<endl;
	cout<<"验证bool数据在运算过程中为int类型数据"<<endl;
	return 0;

}


然后是2.2例题了
  因为在其他作业上花费的时间比较多,所以,这些例题就没有多大改动,这是赋值语句的一些举例练习

/****************************************************
**   赋值语句以及赋值表达式的使用         **
**   自动化1121 李庆典                    **
****************************************************/


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

int main()                   //主函数
{
	int a,b,c,d;
	a=4;
	b=a;
	a=5;
	c=d=6;
	c*=a;                    //c=c*a
	d%=a+b;                  //d=d%(a+b)
	
	cout<<"a = "<<a<<endl    //输出结果
		<<"b = "<<b<<endl
		<<"c = "<<c<<endl
		<<"d = "<<d<<endl;

	system("pause");


}

例题2-3
  讲了一下数据溢出情况的一些不正常显示,所以,在我们学习c++时候,要根据实际情况来修改定义数值类型,从而防止出现因数据溢出而显示不正常的现象

/***********************************************
**  数据溢出情况         **
**  自动化1121 李庆典    **
***********************************************/

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

int main ()                        //主函数
{
	short i,j,m,n;
	i=1000;
	j=1000;
	m=i+j;
	n=i*j;

	cout<<"m = "<<m<<endl          //输出
		<<"n = "<<n<<endl
		<<"已经溢出了short的范围,显示错误"<<endl;         //n以及溢出了short的范围,显示错误

	return 0;

}

例题2.4
  自增自减预算符的相关运算,注意++i与i++它们之间,虽然都是自增但是在自增与运算的顺序是不同的
  ++i 是先自增,然后再赋值,并且它可以作为左值被赋值
  而i++是先参与运算使用完了之后再对i重新自增赋值,是右值表达式
/*****************************************
**  自增自减运算符的举例(只举++) **
**  自动化1121 李庆典              **
*****************************************/


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


int main()                          //主函数
{
	int i=6,j,k;
	j=++i;                          //i(6)自增后把值(7)赋给j
	k=i++;                          //先把i(7)赋给k,然后i自增
	++i=1;                          //++i可以作为左值被赋值,执行语句自增后重新赋值i=1
	cout<<"i = "<<i<<endl
		<<"j = "<<j<<endl
		<<"k = "<<k<<endl;


	return 0;
}


例题2.5
  额,这道题基本上原封不动的,主要是举例讲了一下条件表达式的使用,格式为    条件?表达式1:表达式2
  若是条件成立,则执行表达式1,不成立则执行表达式2
  另外,此道题目也向我们描述了一个字符串转换的技巧,同一字母对应的大小写在ASCII码相差的位置是32,要想变换大小写也是一个很简单的事,不过,在我们不知道其相差位置的时候,用下面的语句来转换也是很不错的
/***************************************
** 条件运算符以及条件表达式的举例    **
** 将小写字符转换成大写字符          **
** 自动化1121 李庆典                 **
***************************************/

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

int main()                          //主函数
{
	char ch;
	cout<<"please input a character"<<endl
		<<"请输入一个字符,程序将把其转换成大写字母"<<endl;
	cin>>ch;
	ch = ch>= 'a'&& ch <= 'z'? ch -'a'+'A':ch;
	     //上述语句是对输入字符的判断以及对其的转换
	cout<<"输出结果为:"<<ch<<endl;

	return 0;


}

例题2.6 不写了,主要讲了自动类型的转换,


例题2.7 强制类型转换
  有两种表达格式   (数据类型)表达式
                                   数据类型(表达式)

  前者是c语言使用的格式,后者是c++使用的格式,不过在实际使用中发现两种形式都是可以用的

/***************************************
** 数据类型强制转换示范              **
** 自动化1121 李庆典                 **
***************************************/

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

int main()                          //主函数
{
	int ab ,ac;
	double b=3.14;
	char c='a';
	ab = int(b);                   //将b强制转换成int类型赋给ab
	ac = int(c);                   //将c强制转换成int类型赋给ac,输出为c的ASCII字符编号
	cout<<"b = "<<b<<endl          //输出
		<<"ab = "<<ab<<endl
		<<"c ="<<c<<endl
		<<"ac ="<<ac<<endl;


	return 0;

至此,作业1就完成了,都是书里的题,比较简单但是也很重要,基础这东西一定要打好,而且,一定要养成一个好习惯说不要遗漏一些分隔符啊括号之类的,虽然要是有错了我们调试编译时会提醒我们修改,但是能不错还是不要错号。

作业2

作业2是写一个程序计算三角形的面积与周长,在实际过程中,我想到了三角形的边长不仅要是正数,而且还有可能是小数,所以我用了float类型来定义输入的三角形边长:此外,我还主要到了输入的边也是需要判断是否能够构成一个三角形,所以我引入了一个条件判断语句,用“任意三角形两边之和大于第三边”这个公理来判定,若是不合适就重新输入(),这里又涉及到了一个重新输入的问题,记得在上一次的作业中,我乱七八糟的想开个玩笑,但是实在不会跳出条件循环,不过,后来我在自己买的c语言书上看到了goto这个功能很强大的函数,直接在c++里试用发现同样也可以用在我想要的目的。然后就是计算了周长还好,很容易,但是面积比较难,涉及到开方,在同学的提醒以及网上搜了一下,然后就调用了math.h文件用sqrt命令来开方,通过余弦定理来求正弦,然后在用公式s=1/2*absinc来求三角形的面积
/**********************************************
**  计算三角形的面积以及周长  **
**  自动化1121 李庆典         **
**********************************************/

#include <iostream>                           //预编译处理命令
#include<math.h>                              //数学调用符号所需头文件(网上找的)

using namespace std;                          //标准名字空间

int main ()                                   //主函数
{
	float a,b,c,d,e;                          //定义一些函数
	double mianji,zhouchang;

shuru:                                        //goto语句的调用
	cout<<"请输入所求三角形的三条边"<<endl;   //输入三角形的三条边
	cin>>a>>b>>c;

	if(a+c>b&&a+b>c&&c+b>a)                   //判断输入的边是否构成三角形
	{
		d=(a*a+b*b-c*c)/(2*a*b);              //求某一个角的余弦值
		e=sqrt(1-d*d);                        //求这一个角的正弦值
		mianji=0.5*a*b*e;                     //计算面积
		zhouchang=a+b+c;                      //计算周长
		cout<<"该三角形的面积为"<<mianji<<endl        //输出结果
			<<"该三角形的周长为"<<zhouchang<<endl;
		goto shuru;                           //返回,继续下一个运算
	}
	else                                      //若输入的边不构成三角形,则错误重新输入
	{
		cout<<"输入有错,请确认边长是否能构成三角形后重新输入"<<endl;
		goto shuru;
	}

	return 0;

}


作业3

作业三是写程序分析一下书本的例题,然后我发现只要是建一个项目,里面至少要22mb左右的内容,其中,各种外部依赖项都要14mb,有点夸张,于是直接把两个程序糅合在一起了,反正能够运行就好了,不过,分析倒是写的少了

/****************************************************
** 第二章课后习题3的计算结果     **
** 自动化1121 李庆典             **
****************************************************/

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

int main()
{
	cout<<"为了减少C++项目的占用空间,把两道题目解答整合了"<<endl;
	cout<<"请输入你想要看的题号,1或者2"<<endl;

	int a;                                      //输入题号从而查看结果
	cin>>a;

	if(a==1)                                   
	{    cout<<"int e=1,f=4,g=2;"<<endl                        //输出第一道题目
		     <<"float m=10.5,n=4.0,k;"<<endl
		     <<"k=(e+f)/g+sqrt(double(n))*1.2/g+m;"<<endl;

		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;
		cout<<"运算结果 = "<<k<<endl;                          //输出第一道题目答案
	}
	if(a==2)                                       
	{
		cout<<"float x=2.5,y=4.7"<<endl                        //输出第二道题目
			<<"int a=7"<<endl
			<<"x+a%3*(int(x+y)%2)/4"<<endl;

		float x=2.5,y=4.7;
		int a=7;
		cout<<"运算结果为"<<((x+a%3*(int(x+y)%2)/4))<<endl;     //输出第二道题目答案 
	}
	return 0;
}



作业4

作业4写一个程序解一元二次方程,这个也比较简单,同样需要调用math.h函数来开方,注意当△=b^2-4ac小于0时方程无实数解,这里同样需要判断结构,我还多加了一个用于判断其解是否相等。
/*************************************
**  解一元二次方程                **
**  自动化1121 李庆典             **
*************************************/


#include<iostream>                   //预编译处理命令
#include<math.h>                     //数学函数调用所需头文件
using namespace std;

int main()                           //主函数
{
	float a,b,c,e,x1,x2;

	cout<<"解一元二次方程,请输入其系数"<<endl       //输入一元二次方程的系数
		<<"请输入两次项系数a"<<endl;
	cin>>a;

	cout<<"请输入一次项系数b"<<endl;
	cin>>b;

	cout<<"请输入常数项系数c"<<endl;
	cin>>c;

	e=b*b-4*a*c;                                     //△的运算

	if(e<0)                                          //判断该方程是否有实根
	{
		cout<<"该一元二次方程没有实根"<<endl;
	}
	else
	{
		x1=((-b)+sqrt(double(e)))/(2*a);            //求根
		x2=((-b)-sqrt(double(e)))/(2*a);

		if(x1=x2)                                     //判断是否有相同实根
			cout<<"该一元二次方程只有一个解,既  x="<<x1<<endl;
		else
			cout<<"该一元二次方程有两个解,既  x1="<<x1
			<<"    x2="<<x2<<endl;
	}
	return 0;

}


暂时先这样吧 第5道以及第6道题还没有做呢 晚一点更新吧
来了

作业5

设计一个加密程序并对你的名字进行加密,先把这个加密程序放上来吧 这个是参考其它同学的加密程序自己改的,用到了数组(还没学,不熟),待会让老师来帮我看看我想糅合的一个兼具加密和解密的程序吧、

/**********************************************
**  输入英文名字并加密,之后解密   **
**  自动化1121 李庆典             **
**********************************************/



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

int main()                                  //主函数
{
	char a[25],b[25],c[25];          //定义四个一维字符型数量组
	
	cout<<"欢迎进行名字加密与解密程序"<<endl;      //加密解密选择
	int i;
	cout<<"请输入你要加密的名字"<<endl;         //输入要加密的名字
	cin.get(a,25);                              //从键盘获取字符
	cout<<"该名字的加密成果为:"<<endl;         //加密结果输出
	for(i=0;i<25;i++)
	{
		if(a[i]==0)
		{
			break;
		}
		b[i]=a[i];
		b[i]=b[i]+6;
		c[i]=b[i];
		cout<<c[i];
	}
	cout<<endl;                              //输出加密结果
	return 0;
}

这个是糅合了加密与解密的程序,但是一直调试不成功,调试时直接跳到了最后,在老师的指导下,我终于发现了程序的错误,加了个清除缓存的代码 fflush(stdin) 在cin.get(a,25)之前,在输入之前清除缓存的数据以防止影响后面的程序,才终于使得程序编写成功并能够正确运行。

/**********************************************
**  输入英文名字并加密,之后解密   **
**  自动化1121 李庆典             **
**********************************************/


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

int main()                                  //主函数
{
	char a[25],b[25],c[25],e[25];          //定义四个一维字符型数量组
    int k;  
	cout<<"欢迎进行名字加密与解密程序"<<endl;        //加密解密选择
	cout<<"加密请输入“1”,解密请输入任意数"<<endl;
	cin>>k; 
	
	if(k==1)                                        //加密                      
	{
		//int i;
		cout<<"请输入你要加密的名字"<<endl;         //输入要加密的名字
    	fflush(stdin);                              //清除输入缓存
		cin.get(a,25);                              //从键盘获取字符
	    //	cin>>a; 	                            
		cout<<"该名字的加密成果为:"<<endl;         //加密结果输出
		for(int i=0;i<25;i++)
		{
			if(a[i]==0)
			{
				break;
			}
			b[i]=a[i];
			b[i]=b[i]+9;                           //加密方法
			c[i]=b[i];
			cout<<c[i];

		}
		cout<<endl;
	}
	else                                           //解密                                            
	{
		
		cout<<"请输入你要解密的名字"<<endl;        //输入要解密的名字
		fflush(stdin);                             //清除输入缓存
		cin.get(a,25);
		
		cout<<"该名字的解密成果为:"<<endl;        //解密结果输出 
		for(int i=0;i<25;i++)
		{
			if(a[i]==0)
			{
				break;
			}
			b[i]=a[i];
			b[i]=b[i]-9;                          //解密方法
			e[i]=b[i];
			cout<<e[i];
		}
		cout<<endl;
	}
	return 0;
}



 


在实际的程序编写中,在反复练习中才能够不断发现问题,解决问题,提高问题,不过 程序编写我觉得最重要的还是说要细心,在调试过程中积累一些编写经验。
不过,我后面写的几个程序都是调试了很多次,每一种情况都去试一下看是否对,期间也出现了很多错误然后一点一点修改,要我列举一点出来还真的不大会,因为至少得再来一个这样的篇幅我才能写完错误,就暂时不写了先o(╯□╰)o



评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值