实验作业
1.输入课本各个例题,调试运行程序,并分析程序,将每一个程序改写2到3个版本,自己分析程序结果,然后再调试运行,核对分析结果的对错。
2.编写程序输入一个三角形的三条边,计算其面积和周长;
3.编写程序计算并输出课本本章习题3表达式的值并分析结果。
4.编写一个程序,输入一个一元二次方程的三个系数,并计算其方程的解,然后输出。
5.编写程序,自己确定一个加密算法,将自己的音标姓名(英文)加密,并输出加密后结果,请注释你的加密算法。
6.在一个自动控制设备中,控制字位数16位,控制设备产生机械动作(如削,压等)的是指令字的低8位,其中保护强制停机动作的控制命令是低8位是全为0,控制报警声音是指令的高第1位,0为报警,1为不报警。请编写程序,在紧急状况启动时,向控制器输入控制指令。
7.积累调试程序经验,收集错误信息原因(每个同学收集3-5条错误信息原因,并输入电脑形成文字)。
这个是第三章的课本习题3的程序分析;之前不小心看错了。就不删掉了。
第二小题:
最后,名字加密解密程序。
当我写完时我才发现老师又突然加了一个作业.。。。。。。。。。
最后的最后》》》》》》》》》》》
几种常见的错误:
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
这种情况是由于头文件名字打错
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
这种情况是由于头文件名字打错