文档库 最新最全的文档下载
当前位置:文档库 › C++上机实验报告

C++上机实验报告

C++上机实验报告
C++上机实验报告

第一次上机

1.1

题目:一个首项大于0且等差大于0的等差数列前四项和为26,前四项积为880。请编写函数计算该数列的第20项的值。

提示:如果一个数列从第二项起,每一项与它的前一项的差等于同一个常数,这个数列就叫做等差数列,这个常数叫做等差数列的公差。如等差数列:1,3, 5,7,9,11。公差是2,该数列的第5项值是9。

分析:根据等差数列的特征,估算项数和首项的范围;再利用已知条件以及等差数列求和的公式,在估算出的项数和首项范围内建立循环,依次求和、积,并与已知和、积对比,找到满足已知的首项、公差;最后利用等差数列求末项公式,计算出第20项的值。

程序:

#include

using namespace std;

int get(int a,int d,int n) //等差数列求末项公式

{

int an;

an=a+(n-1)*d;

return an;

}

int main()

{

int an,sum,mul,a,d,k=0;

for(a=1;a<10;a++)

{

for(d=4;d>0;d--)

{

mul=a*(a+d)*(a+2*d)*(a+3*d);

sum=4*a+6*d;

if(mul==880&&sum==26)

{k=1;break;}

}

if(k==1) //标记k的使用可以使循环提前结束break;

}

an=get(a,d,20);

cout<

return 0;

}

结果:

59

小结:估算范围是本题一大难点,估算精确度越高越能提高程序运行效率;此外,设置标志值使循环提前结束也可以提高效率。

1.2

题目:编写函数,实现下面功能:读入两个字符串,比较其是否相等,如果不相等,输出较大的那个。

例如:“word”与“world”,第4个字母不同,"l"的ASCII码比"d"大,则输出world

输入:word

world

输出:world

分析:比较两个字符串的大小,可以依次对比对应位置的字符,建立循环依次对比,一旦某位置处字符不等,进入比大小流程,输出该位置处字符较大的字符串即可。

程序:

#include

using namespace std;

void compare(char a[10],char b[10])

{

char *p1,*p2;

p1=a;

p2=b;

for(int i=0;i<10;i++)

{

if(*(p1+i)!=*(p2+i))

if(*(p1+i)>*(p2+i))

{cout<

else

{cout<

}

}

int main()

{

char a[10],b[10];

//cin>>a; //不能收空格

//cin>>b;

cin.getline(a,10);

cin.getline(b,10); //可以收空格

compare(a,b);

return 0;

}

结果:

输入:word

world

输出:world

小结:输入字符串的小技巧:cin函数不能接收空格,遇到空格或许回车都会自动判断字符串输入结束;cin.getline(a,n)函数可以接收空格,遇到回车才会判定输入结束。

第二次上机:

2.1

题目:编写一个程序,输入N个学生数据,包括学号、姓名、成绩,要求输出这些学生数据并计算平均分。输入第一行为学生个数,接下来输入N个学生的数据。输出时,先输出N个学生,再输出平均分数(保留小数点后两位)。

样例输入:

3

test1 101 90

test2 102 87

tets3 103 83

样例输出:

test1 101 90

test2 102 87

tets3 103 83

86.67

分析:建立类Student来存放学生的数据,类中除了成员函数外,还需要构造函数和显示数据的函数;使用对象数组来存放定义的n个学生对象;由于学生信息是手动输入的,类中便不需要获得score的成员函数,直接在输入时累加即可获得sum进而取得平均值

程序:

#include

#include //因为用到了printf

#include

using namespace std;

class Student

{

private:

string name;

int num;

int score;

public:

Student(string x="",int y=0,float z=0) //string类型的使用极大简化了程序

//必须给出默认参数,否则定义对象函数(不设初始值)时会出错

{

name=x; //string类型可以以赋值的方式进行字符串的复制

num=y;

score=z;

}

//int Getscore()

//{return score;}

void show()

{

cout<

}

};

int main()

{

Student st[10];

int n,Num;

string Name;

int Score;

float sum=0; //sum不能用整型,因为最后规定格式输出

cin>>n;

for(int i=0;i

{

cin>>Name>>Num>>Score;

st[i]=Student(Name,Num,Score); //赋值法调用默认拷贝构造函数

sum+=Score;//st[i].Getscore();

}

for(int i=0;i

{

st[i].show();

}

printf("%.2lf", sum/n);

return 0;

}

结果:

样例输入:

3

test1 101 90

test2 102 87

tets3 103 83

样例输出:

test1 101 90

test2 102 87

tets3 103 83

86.67

小结:

No.1. 若只有带参数(非默认参数)的构造函数,创建对象Student zhang/Student a[10]会出错:

方法1:带默认参数的构造函数;

方法2:不带参数的空构造函数+带参数构造函数。

No.2. string类型较字符数组而言更加方便,至少不需要程序员自定义析构函数。

No.3. 规定输出格式时,可以添加#include 头文件,便可以使用C语言的printf输出。

2.2

题目:设计一个矩形类(Rectangle),属性为矩形的左下和右上角的坐标,矩形水平放置。计算并输入矩形的周长和面积。

输入第一行为左下坐标,第二行为右上坐标。

输出第一行为周长,第二行为面积。

样例输入:

0 0

5 5

样例输出:

20

25

分析:建立一个Rectangle类,数据成员为两个顶点的左标,成员函数包括根据面积和周长公式分别求面积和周长的函数。

程序:

#include

using namespace std;

class Rectangle

{

private:

int a1,a2,b1,b2;

public:

Rectangle(int x,int y,int m,int n)

{

a1=x;a2=y;b1=m;b2=n;

}

int per()

{

int c;

c=2*(b1-a1)+2*(b2-a2);

return c;

}

int area()

{

int s;

s=(b1-a1)*(b2-a2);

return s;

}

};

int main()

{

int x1,y1,x2,y2,c,s;

cin>>x1>>y1>>x2>>y2;

Rectangle A(x1,y1,x2,y2);

c=A.per();

s=A.area();

cout<

cout<

return 0;

}

结果:

样例输入:

0 0

5 5

样例输出:

20

25

小结:

本题除了上述程序外还有一种更优思路,建立两个类,一个点类,一个矩形类,在矩形类中使用点类的对象,这样矩形属性的表达会更加明朗。

类中包含了数据和对数据操作的定义,并进行封装使数据类型本身能够控制外界对其成员的访问。封装性、多态性、继承性是opp语言的三大特征。

第三次上机

3.1

题目:设计一个学生类student,数据成员除学号(no)姓名(name)和成绩(deg)外,还包含两个静态变量num和sum分别存放学生总数和总成绩,另外编写一个静态成员函数avg(),用于计算平均分。在主函数中,定义若干学生对象并初始化,要求输出这些学生信息并计算平均分。

注:所有学生信息在主函数中进行初始化(无需手动输入)

分析:建立一个student类,数据成员包括普通私有成员:学号、姓名、成绩、还有静态数据成员:总人数、总分,成员函数包括带默认参数的构造函数、计算平均分的静态函数。考虑到总分是每个人分数的叠加、每调用一次构造函数就等效于总人数+1,故可以将总人数和总分的变动写入构造函数中。

程序:

#include

#include

#include

using namespace std;

class Student{

private:

int no;

string name;

float deg;

static int num;

static float sum;

public:

static float avg();

Student(int,string,float);

};

int Student::num=0;

float Student::sum=0;

Student::Student(int x=0,string y="",float z=0) {

no=x;

name=y;

deg=z;

++num;

sum+=deg;

cout<

cout<

}

float Student::avg()

{

return (sum/num);

}

int main()

{

Student p1(1000,"Bob",90);

Student p2(1001,"Alice",80);

Student p3(1002,"Anna",75);

cout<

return 0;

}

结果:

1000 Bob 90

1001 Alice 80

1002 Anna 75

81.7

小结:

本题使用了静态数据成员和静态成员函数,类的所有对象共享类的静态成员拥有的存储区域,其中静态数据成员要注意:静态数据成员同样遵守private/public/protected的访问规则;静态数据成员的初始化要在类的外部完成。

类的静态成员函数要注意:没有this指针,只能访问静态成员;其定义可以在类内部也可

以在类的外部。

3.2

题目:设计一个类Sample,它有两个private成员:name和数组A。设计一个友元类Process 对类Sample的对象的数组A进行排序,并输出排序结果。

要求手动输入数组A的每个元素(数组长度为5)。

输入样例:

1 2 5 4 3

输出样例:

1 2 3 4 5

分析:建立一个类Sample,数据成员为name和数组A;再建立一个Sample类的友元类Process,类Process可以访问类Sample的所有成员,类Process的成员函数为数组排序函数,可以使用冒泡排序算法。

程序:

#include

#include

using namespace std;

class Process;

class Sample

{

private:

int name;

int A[5];

public:

Sample(int x[5]);

friend class Process;

};

class Process{

public:

void sort(Sample obj);

};

Sample::Sample(int x[5])

{

for(int i=0;i<5;i++)

A[i]=x[i];

}

void Process::sort(Sample obj)

{

int t;

for(int i=0;i<4;i++) //冒泡排序for(int j=0;j<4-i;j++)

if(obj.A[j]>obj.A[j+1])

{t=obj.A[j];obj.A[j]=obj.A[j+1];obj.A[j+1]=t;}

for(int i=0;i<5;i++)

cout<

}

int main()

{

int a[5];

for(int i=0;i<5;i++)

cin>>a[i];

Sample s(a);

Process p;

p.sort(s);

return 0;

}

结果:

输入样例:

1 2 5 4 3

输出样例:

1 2 3 4 5

小结:

本题使用了友元类,一个类作为另一个类的友元,表示这个类的所有成员函数都是另一个类的友元函数,即友元类的所有成员函数都可以访问另一个类的包括私有成员在内的所有成员。类A向自己的友元类B开放,friend class B的声明写在类A中,注意:这里的类B需要做前向声明。

此外,友元机制的使用需要注意:由于友元机制在一定程度上破坏了类的封装性,应对程序的执行效率以及程序结构设计的合理性进行折中,正确地使用友元机制

c计算器实验报告

简单计算器 姓名: 周吉祥 实验目的:模仿日常生活中所用的计算器,自行设计一个简单的计算器程序,实现简单的计算功能。 实验内容: (1)体系设计: 程序是一个简单的计算器,能正确输入数据,能实现加、减、乘、除等算术运算,运算结果能正确显示,可以清楚数据等。 (2)设计思路: 1)先在Visual C++ 6.0中建立一个MFC工程文件,名为calculator. 2)在对话框中添加适当的编辑框、按钮、静态文件、复选框和单选框 3)设计按钮,并修改其相应的ID与Caption. 4)选择和设置各控件的单击鼠标事件。 5)为编辑框添加double类型的关联变量m_edit1. 6)在calculatorDlg.h中添加math.h头文件,然后添加public成员。 7)打开calculatorDlg.cpp文件,在构造函数中,进行成员初始化和完善各控件 的响应函数代码。

(3)程序清单: 添加的public成员: double tempvalue; //存储中间变量 double result; //存储显示结果的值 int sort; //判断后面是何种运算:1.加法 2.减法 3.乘法 4.除法 int append; //判断后面是否添加数字 成员初始化: CCalculatorDlg::CCalculatorDlg(CWnd* pParent /*=NULL*/) : CDialog(CCalculatorDlg::IDD, pParent) { //{{AFX_DATA_INIT(CCalculatorDlg) m_edit1 = 0.0; //}}AFX_DATA_INIT // Note that LoadIcon does not require a subsequent DestroyIcon in Win32 m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME); tempvalue=0;

C语言程序设计实验报告(实验大纲+过程)

《C程序设计》实验教学大纲 一、适用范围 大纲适用信息管理专业本科教学使用。 二、课程名称 C程序设计 三、学时数与学分 总学时:90 总学分:4 实验学时:28 实验学分:1 四、教学目的和基本要求 目的:通过C程序设计实验,培养学生对学习程序设计的兴趣,加深对讲授内容的理解,尤其是通过上机来掌握语法规则,使学生全面了解 C 语言的特点,熟练掌握 C 语言程序设计的基本方法和编程技巧。 基本要求:了解和熟悉C语言程序开发的环境;学会上机调试程序,善于发现程序中的错误,并且能很快地排除这些错误,使程序能正确运行,达到实验知识和理论知识的融会贯通。上机实验前,学生必须事先根据题目的内容编好程序,然后在实验时输入程序、调试程序、直至运行结果正确为止,上机结束后,应整理出实验报告。 注:带*的实验项目为选做实验项目 六、教材、讲义及参考书 《C程序设计题解与上机指导》谭浩强主编清华大学出版社 七、实验成绩评定办法 实验成绩=平时实验表现+实验报告。实验成绩占总成绩的20%。 实验成绩以等级形式给出,评定等级分优、良、中、及格、不及格五类。 1、平时考核:上机实验前,学生必须事先根据题目的内容编好程序,然后在实验时输入程序、调试程序、直至运行结果正确为止。在实验中,教师可根据学生编程操作能力、观察和分析及运用知识能力、程序编制正确性以及学生的课堂纪律、实验态度、保持实验室卫生等方面的表现进行综合考核。

2、实验报告:学生实验后应按时完成实验报告。 八、实验教学大纲说明 本大纲共安排28学时的实验,其中带*号实验项目为选做实验项目,实际课时为18学时。实验项目多为设计性实验项目,每个设计性实验项目中都包含数个小的设计性题目,其中带*号的题目为选做题目,有时间和有能力的同学可以选做。 九、实验项目 实验一C程序的运行环境和运行一个C程序的方法 一、实验目的 1.了解Visual C++6.0编译系统的基本操作方法,学会独立使用该系统。 2.了解在该系统上如何编辑、编译、连接和运行一个C程序。 3.通过运行简单的C程序,初步了解C源程序的特点。 二、实验内容 1.用编辑程序,输入教材第一章例1.1程序,并进行编译和运行。应了解所用的系统是用什么命令进行编译和连接运行的。编译和连接后所得到的目标程序的后缀是什么形式的? 2.编写一个C程序,输出以下信息: **************************** very good! **************************** 3.输入并运行教材第一章中例1.3,了解如何在运行时向程序变量输入数据。 实验二数据类型、运算符和表达式 一、实验目的 1.掌握C语言数据类型,熟悉如何定义一个整型、字符型、实型变量,以及对它们赋值的方法,了解以上类型数据输出时所用格式转换符。 2.学会使用C的有关算术运算符,以及包含这些运算符的表达式,特别是自加(++)和自减(--)运算符的使用。 二、实验内容 1.输入并运行以下程序: main( ) { char c1,c2; c1=97;c2=98; pr intf(“%c %c\n”,c1,c2); printf(“%d %d\n”,c1,c2); } 在此基础上 ①将第三行、第四行改为: c1=321;c2=353; 再使之运行,分析其运行结果。 ②将第二行改为: int c1,c2; 再使之运行,分析其运行结果。。 2.输入并运行以下程序:

matlab第一次实验报告

Matlab第一次实验报告 2012029010010 尹康 1. 编程实现以下数列的图像,用户能输入不同的初始值以及系数。并以x,y为坐标显示图像 x(n+1) = a*x(n)-b*(y(n)-x(n)^2); y(n+1) = b*x(n)+a*(y(n)-x(n)^2) 程序代码: n=input('input the number of pionts:'); a=input('input a:'); b=input('input b:'); x=[]; y=[]; x(1)=input('input x1:'); y(1)=input('input y1:'); %输入点数、初始值以及系数for i=2:n x(i)=a*x(i-1)-b*(y(i-1)-x(i-1)^2); y(i)=a*x(i-1)+b*(y(i-1)-x(i-1)^2); %根据已输入的数据进行迭代end figure;plot(x,y,'linewidth',2) axis equal %横纵坐标等比例 text(x(1),y(1),'1st point') %标记初始点 运行结果:

心得体会及改进:在输入某些数据时,所绘曲线可能是一条折线(如:n=5,a=b=x1=1,y1=2)甚至只有一个点(如:n=5,a=b=x1=y1=1),此时可能出现曲线与坐标轴重合或无法看到点的情况,为了更清晰地展现曲线,可以使线宽适当加宽并标记初始点。 2.编程实现奥运5环图,允许用户输入环的直径。 程序代码: 函数circle: %在指定的圆心坐标处,用指定颜色、宽度的线条绘出指定半径、圆心角的弧 function f=circle(r,x,y,color,linw,alp1,alp2) alp=linspace(alp1,alp2); X=r*cos(alp)+x; Y=r*sin(alp)+y; plot(X,Y,color,'linewidth',linw) end 主程序代码: r=input('input r:');

C上机实验报告实验五

C上机实验报告实验五 This manuscript was revised by the office on December 22, 2012

实验五继承与派生 1.实验目的 1.学习定义和使用类的继承关系,定义派生类 2.熟悉不同继承方式下对基类成员的访问控制 3.学习利用虚基类解决二义性问题 2.实验要求 1.定义一个基类Animal,有私有整型成员变量age,构造其派生类dog,在其成员函数SetAge(intn)中直接给age赋值,看看会有什么问题,把age改为公有成员变量,还会有问题吗?编程尝试。 2.定义一个基类BaseClass,有整型变量Number,构造其派生类DerivedClass,观察构造函数和析构函数的执行情况。 3.定义一个车(vehicle)基类,具有Maxspeed、Weight等成员,Run、Stop 等成员函数,由此派生出自行车(bicycle)类、汽车(motorcar)类。自行车(bicycle)类有高度(Height)等属性,汽车(motorcar)类有座位数(SeatNun)等属性。从bicycle和motorcar派生出摩托车(motorbicycle)类,在继承过程中,注意把vehicle设置为虚基类。如果不把vehicle设置为虚基类,会有什么问题?编程尝试。 3.实验内容及实验步骤 1.编写程序定义基类Animal,成员变量age定义为私有的。构造派生类dog,在其成员函数SetAge(intn)中直接对age赋值时,会出现类似以下的错误提示: errorC2248:‘age’:cannotaccessprivatememberdeclaredinclass‘Animal’errorC2248:‘age’:cannotaccessprivatememberdeclaredinclass‘Animal’把age改为公有成员变量后重新编译就可以了。程序名:lab7_1.cpp。 2.编写程序定义一个基类BaseClass,构造其派生类DerivedClass,在构造函数和析构函数中用cout输出提示信息,观察构造函数和析构函数的执行情况。程序名:lab7_2.cpp。 3.用debug功能跟踪程序lab7_2的执行过程,观察基类和派生类的构造函数和析构函数的执行情况。 4.编写程序定义一个车(vehicle)基类,由此派生出自行车(bicycle)类、汽车(motorcar)类,注意把vehicle派生为虚基类。再从bicycle和motorcar派生出摩托车(motorcycle)类,在main()函数中测试这个类。程序名:lab7_3.cpp。 编译成功后,把vehicle设置为非虚基类,再编译一次,此时系统报错,无法编译成功。这是因为若不把vehicle设置为虚基类,会出现二义性错误,程序不能成功编译。 4.思考题 1.如何在已有的类的基础上设计新的类?

MCU第一次实验报告

东南大学自动化学院 实验报告 课程名称: MCU综合课程设计 第 1 次实验 实验名称:数据传送与多字节十进制加法实验 院(系):自动化专业:自动化 姓名:李周洋学号:08011328 实验室:测控技术实验室实验组别: 同组人员:刘乃广实验时间:2014 年 4 月17 日评定成绩:审阅教师:

目录 一.实验目的和要求 (2) 二.实验原理 (2) 三.实验方案与实验步骤 (3) 四.实验设备与器材配置 (5) 五.实验记录 (6) 六.实验总结 (6) 七.思考题或讨论题 (6) 八.源代码 (7)

一.实验目的和要求 实验目的 (1)熟悉掌握将数据存入片外存储空间或片内存储空间的方式和指令以及熟悉掌握外部存储空间中数据传递的方式和指令; (2)学会用汇编语言进行循环操作。 (3)熟悉掌握汇编语言进行的十进制加法运算和十进制调整指令。 (4)理解进位溢出的原理。 (5)熟悉使用Medley软件进行下载调试(单步、断点),并查看相关的寄存器值和片内外存储器的值。 实验要求 1、数据传送实验 把数据0A0H放到地址为40H的内存单元,并将数值和地址分别递增1,要求一共做十次这样的操作。然后将内存空间40H-49H的数值分别传递给50H-59H的内存空间中。 2、多字节十进制加法实验 将存放在单片机内部RAM中以40H为首的3个地址单元中的一个六位十进制数与存放在50H为首的3个地址单元中的一个六位十进制数相加,将相加结果存放在以60H为首的地址RAM地址单元中。 数据存放方式:十进制数以BCD码存放,高位数据在低地址,低位数据在高地址。 (40H) (41H) (42H) + (50H) (51H) (52H) = (60H) (61H) (62H) (63H) 最高位进位存放在60H中。数据都存放在片内数据存储器内。 二.实验原理 1、数据传送实验 当使用Ri(i=0、1)作片外寻址时候,需要预先设置高位地址线P2的值。程序中将P2的值设为00H。如果利用DPTR作间址寄存器,无需改变P2口的值,可直接使用. 因为程序中使用的是R0、R1作片外寻址,首先将P2口写0,即把高位地址置0,然后将地址初值40H放入寄存器R0。同时,将初始数据放入一个累加器A中。之后,一个MOVX A,@R0操作便可将累加器中的数据传送到片外数据存储单元中去。由于这样的操作要做十次,所以用一个寄存器R2作为计数器使用,即将0AH存放在寄存器内。当寄存器的值不为0,用DJNZ循环操作。 第二步是要将40H-49H的数值分别传到50H-59H的内存空间中。先将源地址初值和目的地址初值分别存放在寄存器R0和R1内。再重置计数初值R2,同样用DJNZ循环。循环时,先将数据初值放入一个累加器A内,通过A间接地传送数值。R0和R1经过一次循环分别加一。直至循环结束。

C上机实验报告实验四

实验四数组、指针与字符串 1.实验目的 1.学习使用数组 2.学习字符串数据的组织和处理 3.学习标准C++库的使用 4.掌握指针的使用方法 5.练习通过Debug观察指针的内容及其所指的对象的内容 6.联系通过动态内存分配实现动态数组,并体会指针在其中的作用 7.分别使用字符数组和标准C++库练习处理字符串的方法 2.实验要求 1.编写并测试3*3矩阵转置函数,使用数组保存3*3矩阵。 2.使用动态内存分配生成动态数组来重新完成上题,使用指针实现函数的功能。 3.编程实现两字符串的连接。要求使用字符数组保存字符串,不要使用系统函数。 4.使用string类定义字符串对象,重新实现上一小题。 5.定义一个Employee类,其中包括姓名、街道地址、城市和邮编等属性,以及change_name()和display()等函数。Display()显示姓名、街道地址、城市和邮编等属性,change_name()改变对象的姓名属性。实现并测试这个类。 6.定义包含5个元素的对象数组,每个元素都是Employee类型的对象。 7. (选做)修改实验4中的选做实验中的people(人员)类。具有的属性如下:姓名char name[11]、编号char number[7]、性别char sex[3]、生日birthday、身份证号char id[16]。其中“出生日期”定义为一个“日期”类内嵌对象。用成员函数实现对人员信息的录入和显示。要求包括:构造函数和析构函数、拷贝构造函数、内联成员函数、聚集。在测试程序中定义people类的对象数组,录入数据并显示。 3.实验内容及实验步骤 1.编写矩阵转置函数,输入参数为3*3整形数组,使用循环语句实现矩阵元素的行列对调,注意在循环语句中究竟需要对哪些元素进行操作,编写main()函数实现输入、输出。程序名:lab6_1.cpp。 2.改写矩阵转置函数,参数为整型指针,使用指针对数组元素进行操作,在main()函数中使用new操作符分配内存生成动态数组。通过Debug观察指针的内容及其所指的对象中的内容。程序名:lab6_2.cpp。 3.编程实现两字符串的连接。定义字符数组保存字符串,在程序中提示用户输入两个字符串,实现两个字符串的连接,最后用cout语句显示输出。程序名:lab6_3.cpp。用cin实现输入,注意,字符串的结束标志是ASCII码0,使用循环语句进行字符串间的字符拷贝。 4.使用string类定义字符串对象,编程实现两字符串的连接。在string类中已重载了运算符“+=”实现字符串的连接,可以使用这个功能。程序名:lab6_4.cpp。 5.在employee.h文件中定义Employee类。Employee类具有姓名、街道地址、城市和邮编等私有数据成员,在成员函数中,构造函数用来初始化所有数据成员;display()中使用cout显示

数电实验二:简易计算器(实验报告)

数电实验2实验报告 1、设计修改方案 (1)加入编码器连接4选一数据选择器,控制进行运算的种类 (2)修改了输出端数据选择器的程序,使得当计算器没有任何输入时,结果显示保持为0,并且利用芯片自身的灭零管脚,让显示结果中,当十位为零时,十 位的零不显示。

2、实验数据及分析 (1)修改后电路图(附后) (2)仿真波形 设置输入2个4位二进制数为0110(十进制6)和0010(十进制2),计算方式控制SW[3:0]设为0111,即模拟除法操作,加入时钟信号。 ①模拟除法波形: 可以看到十位(商)的数码管显示中,1、2、3、4、7段亮,显示为数字3,而个位(余数)显示1、2、3、4、5、6段亮,显示数字0,相当于计算出6除2商3余0。满足计算要求。 ②模拟乘法波形:(SW[3:0]设为1011,其他输入同上)

可以看到个位的数码管显示中,1、4、5、6段亮,显示为C(化为十进制为12),而十位一直显示1、2、3、4、5、6段亮,显示数字0,相当于计算出6乘2等于0C,即等于12。当改变输入4和2是,显示结果为8,。满足计算要求。 ③模拟加法波形:(SW[3:0]设为1101,其他输入同上) 可以看到个位的数码管显示中,1、2、3、4、5、6、7段全亮,显示为数字8,而十位一直显示1、2、3、4、5、6段亮,显示数字0,相当于计算出6加2等于08,即等于8。满足计算要求。 ④模拟减法波形:(SW[3:0]设为1110,其他输入同上) 可以看到个位的数码管显示中,2、3、6、7段亮,显示为数字3,而十位一直显示1、2、3、4、5、6段亮,显示数字0,相当于计算出6减2等于03,即等于3。满足计算要求。 从上面加减乘除四种功能运算的波形仿真可以看出,本实验设计能够正确完成对输入数字的上述四种运算。满足题目要求。

C程序设计上机实验报告11

C程序设计实验报告 实验名称:指针与字符串学时安排:2课时 实验类别:上机操作型实验要求:1人1组 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ 一、实验目的 1. 掌握通过指针操作字符串的方法; 二、实验设备介绍 软件需求: Visual C++ 6.0或CFree3.5以上版本 硬件需求: 对于硬件方面的要求,建议配置是Pentium III 450以上的CPU 处理器,64MB以上的内存,200MB的自由硬盘空间、CD-ROM驱动器、能支持24位真彩色的显示卡、彩色显示器、打印机。 三、实验内容 1.输入一个字符串t和一个正整数m,讲t中从第m个(m小于字符串长度)字符开始的全部字符复制的字符串s中,再输出字符串s。要求用字符指针定义并调用函数strmcpy(s, t, m),它的功能是将字符串t中从第m个字符开始的全部字符复制到字符串s中。示例如下:Input a string: happy new year! Input an integers: 7 Output is: new year! 2. 编写一个函数delchar(s, c),该函数将字符串s中出现的所有c字符删除。自己定义main 函数,并在其中调用delchar(s,c)函数。D此大锅饭 3. 改正程序error08_ 4.cpp中的错误。函数strc的作用是将字符串s连接到t的尾部。在

主函数中输入两个字符串s和t,调用strc完成字符串的连接。输入输出结果如下所示:World! Hello HelloWorld! 要求把正确的代码(按规范缩进)写入报告,并以注释的方式说明错误原因。 注释示例如下: int i; /*循环控制变量不能定义为double类型*/ 4. 编程判断输入的一串字符是否为“回文”,如果是输出“Yes”,否则输出“No”。所谓“回文”,是指顺读和倒读都一样的字符串。如“XYZYX”和“xyzzyx”都是回文。 四、程序清单 第一题 #include void strmcpy(char str[],char t[],int m){ int i=0,n; char *s; s=str; for(s+=m-1;*s!=0;s++) { t[i]=*s; i++; } printf("Output is:"); for(n=0;n

单片机实验报告 计算器

单片机原理及其应用实验报告基于51单片机的简易计算器的设计 班级:12电子1班 姓名:金腾达 学号:1200401123 2015年1月6日

摘要 一个学期的51单片机的课程已经随着期末的到来落下了帷幕。“学以致用”不仅仅是一句口号更应该是践行。本设计秉承精简实用的原则,采用AT89C51单片机为控制核心,4X4矩阵键盘作为输入,LCD1602液晶作为输出组成实现了基于51单片机的简易计算器。计算器操作方式尽量模拟现实计算器的操作方式,带有基本的运算功能和连续运算能力。并提供了良好的显示方式,与传统的计算器相比,它能够实时显示当前运算过程和上一次的结果,更加方便用户记忆使用。本系统制作简单,经测试能达到题目要求。 关键词:简易计算器、单片机、AT89C51、LCD1602、矩阵键盘

目录 一、系统模块设计......................................................................................... 错误!未定义书签。 1.1 单片机最小系统 (1) 1.2 LCD1602液晶显示模块 (1) 1.3 矩阵按键模块 (2) 1.4 串口连接模块 (1) 二、C51程序设计 (2) 2.1 程序功能描述及设计思路 (2) 2.1.1按键服务函数 (2) 2.1.2 LCD驱动函数 (2) 2.1.3 结果显示函数 (2) 2.1.4状态机控制函数 (2) 2.1.5串口服务函数 (2) 2.2 程序流程图 (3) 2.2.1系统总框图 (3) 2.2.2计算器状态机流程转换图 (3) 三、测试方案与测试结果 (4) 3.1测试方案 (4) 3.3 测试结果及分析 (7) 4.3.1测试结果(仿真截图) (7) 4.3.2测试分析与结论 (7) 四、总结心得 (7) 五、思考题 (8) 附录1:整体电路原理图 (9) 附录2:部分程序源代码 (10)

2010C语言实验报告参考答案

2010C语言实验报告参考答案

长沙理工大学2010C语言实验报告参考答案 实验一熟悉C语言程序开发环境及数据描述四、程序清单 1.编写程序实现在屏幕上显示以下结果: The dress is long The shoes are big The trousers are black 答案: #include main() { printf("The dress is long\n"); printf("The shoes are big\n"); printf("The trousers are black\n"); } 2.改错题(将正确程序写在指定位置) 正确的程序为: #include main() {

printf("商品名称价格\n"); printf("TCL电视机¥7600\n"); printf("美的空调¥2000\n"); printf("SunRose键盘¥50.5\n"); } 2.编写程序: a=150,b=20,c=45,编写求a/b、a/c(商)和a%b、a%c(余数)的程序。 答案: #include main() { int a,b,c,x,y; a=150; b=20; c=45; x=a/b; y=a/c; printf("a/b的商=%d\n",x); printf("a/c的商=%d\n",y);

x=a%b; y=a%c; printf("a/b的余数=%d\n",x); printf("a/c的余数=%d\n",y); } 4. 设变量a的值为0,b的值为-10,编写程序:当a>b时,将b赋给c;当a<=b时,将a赋给c。(提示:用条件运算符) 答案: #include main() { int a,b,c; a=0; b=-10; c= (a>b) ? b:a;

电路分析实验报告第一次完整版

电路分析实验报告第一 次 Document serial number【NL89WT-NY98YT-NC8CB-NNUUT-NUT108】

电路分析实验报告 实验报告(二、三) 一、实验名称实验二 KCL与KVL的验证 二、实验目的 1.熟悉Multisim软件的使用; 2.学习实验Multisim软件测量电路中电流电压; 3.验证基尔霍夫定理的正确性。 三、实验原理 KCL为任一时刻,流出某个节点的电流的代数和恒等于零,流入任一封闭面的电流代数和总等于零。且规定规定:流出节点的电流为正,流入节点的电流为负。 KVL为任一时刻,沿任意回路巡行,所有支路电压降之和为零。且各元件取号按照遇电压降取“+”,遇电压升取“-”的方式。沿顺时针方向绕行电压总和为0。电路中任意两点间的电压等于两点间任一条路径经过的各元件电压降的代数和。 四、实验内容 电路图截图: 1.验证KCL: 以节点2为研究节点,电流表1、3、5的运行结果截图如下: 由截图可知,流入节点2的电流为2.25A,流出节点2 的电流分别为750mA和1.5A。2.25=0.75+1.5。所以,可验证KCL成立。2.验证KVL:

以左侧的回路为研究对象,运行结果的截图如下: 由截图可知,R3两端电压为22.5V,R1两端电压为7.5V,电压源电压为30V。22.5+7.5-30=0。所以,回路电压为0,所以,可验证KVL成立。 一、实验名称实验三回路法或网孔法求支路电流(电压) 二、实验目的 1.熟悉Multisim软件的使用; 2.学习实验Multisim软件测量电路中电流电压; 3.验证网孔分析法的正确性。 三、实验原理 为减少未知量(方程)的个数,可以假想每个回路中有一个回路电流。若回路电流已求得,则各支路电流可用回路电流线性组合表示。这样即可求得电路的解。回路电流法就是以回路电流为未知量列写电路方程分析电路的方法。网孔电流法就是对平面电路,若以网孔为独立回路,此时回路电流也称为网孔电流,对应的分析方法称为网孔电流法。 四、实验内容 实验电路截图: 如图所示,i1,i2,i3分别为三个网孔的电流,方向如图所示,均为顺时针。 网孔一中含有一个电流源,而且电流源仅在网孔一中,所以,网孔一的电流就是电流源电流2A。设电流源两端电压为U7。

c计算器实验报告

c计算器实验报告集团标准化工作小组 #Q8QGGQT-GX8G08Q8-GNQGJ8-MHHGN#

简单计算器 姓名: 周吉祥 实验目的:模仿日常生活中所用的计算器,自行设计一个简单的计算器程序,实现简单的计算功能。 实验内容: (1)体系设计: 程序是一个简单的计算器,能正确输入数据,能实现加、减、 乘、除等算术运算,运算结果能正确显示,可以清楚数据等。 (2)设计思路: 1)先在Visual C++ 中建立一个MFC工程文件,名为calculator. 2)在对话框中添加适当的编辑框、按钮、静态文件、复选框和 单选框 3)设计按钮,并修改其相应的ID与Caption. 4)选择和设置各控件的单击鼠标事件。 5)为编辑框添加double类型的关联变量m_edit1. 6)在中添加头文件,然后添加public成员。 7)打开文件,在构造函数中,进行成员初始化和完善各控件的 响应函数代码。 (3)程序清单: 添加的public成员: double tempvalue; 法 2.减法 3.乘法 4.除法

int append; //判断后面是否添加数字 ●成员初始化: CCalculatorDlg::CCalculatorDlg(CWnd* pParent /*=NULL*/) : CDialog(CCalculatorDlg::IDD, pParent) { //{{AFX_DATA_INIT(CCalculatorDlg) m_edit1 = ; //}}AFX_DATA_INIT // Note that LoadIcon does not require a subsequent DestroyIcon in Win32 m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME); tempvalue=0; result=0; sort=0; append=0; } ●各控件响应函数代码: void CCalculatorDlg::OnButton1() //按钮“1” { // TODO: Add your control notification handler code here if(append==1)result=0;

c语言实验报告1

C语言程序设计报告 日

程序主要内容 任务1. 程序首先随机产生一到十之间的正整数,在屏幕上打印出问题,例如6*7=?然后让学生输入答案,序检查学生输入的答案是否正确,若正确,则“RIGHT”,然后问下一个问题,否则打印“WRONG,PLEASE TRY AGAIN”,然后提示学生重做,直到答对为止。 程序如下: #include #include #include int Magic(int x); int Answer(); main() { int guess,answer,counter=1; do{ printf("%d*%d=",Magic(1),Magic(2)); answer=Magic(1)*Magic(2); if(Answer()==answer) { printf("Right\n"); break; } else printf("Wrong!,please try again\n"); }while(counter>=1); } int Magic(int m)

int x,int y; srand(time(NULL)); x=rand()%10+1; y=rand()%10+1; if(m==1) return x; if(m==2) return y; } int Answer() { int n; scanf("%d",&n); return n; } 任务2:在(1)的基础上,当学生回答错误时,最多给三次重做的机会。 :程序如下: #include #include #include int Magic(int x); int Answer(); int Exam(); main() { int n; n=Exam(); if(n==0) printf("Right\n"); else if(n==1) printf("Wrong!You have tried

c上机实验报告

实验五继承与派生 实验目的 1.学习定义和使用类的继承关系,定义派生类 2.熟悉不同继承方式下对基类成员的访问控制 3.学习利用虚基类解决二义性问题 实验要求 1?定义一个基类Animal,有私有整型成员变量age,构造其派生类dog,在其成员函数SetAge (int n)中直接给age赋值,看看会有什么问题,把age改为公有成员变量,还会有问题吗?编程尝试。 2?定义一个基类BaseClass有整型变量Number,构造其派生类 DerivedClass观察构造函数和析构函数的执行情况。 3.定义一个车(vehicle)基类,具有Maxspeed、Weight 等成员,Run、Stop 等成员函数,由此派生出自行车(bicycle)类、汽车(motorcar)类。自行车 (bicycle)类有高度(Height)等属性,汽车(motorcar)类有座位数 (SeatNun)等属性。从bicycle和motorcar 派生出摩托车(motorbicycle)类,在继承过程中,注意把vehicle设置为虚基类。如果不把vehicle设置为虚基类,会有什么问题?编程尝试。 实验内容及实验步骤 1?编写程序定义基类Animal,成员变量age定义为私有的。构造派生类dog,在其成员函数SetAge (int n)中直接对age赋值时,会出现类似以下的错误提示: error C2248: ‘age':cannot access private member declared in class C2248: ‘ age' :cannot access privateer declared in class 把Agm改为公 有成员变量后重新编译就可以了。程序名:。 错误代码: #include using namespace std; class Animal

简易计算器设计实验报告

简易计算器设计实验报告 一.设计任务及要求 1.1实验任务: 根据计算器的原理设计一个具有加减乘除功能的简易计算器。如:5+3*4/8=4。 1.2 实验基本要求: (1)实现最大输入两位十进制数字的四则运算(加减乘除)。 (2)能够实现多次连算(无优先级,从左到右计算结果)。 如:12+34*56-78/90+9=36 (3)最大长度以数码管最大个数为限,溢出报警。 二.实验设计方案 (1)用QuartusII的原理图输入来完成系统的顶层设计。 (2)用VHDL编写以及直接拖模块来各功能模块。 (3)通过2个脉冲分别实现个位数和十位数的输入。 (4)通过选择每次的输出数值,将输出值反馈到运算输入端 (4)通过除法运算实现十六进制到十进制的转换输出。 其具体实现流程图如下:

三系统硬件设计 FPGA: EP2C5T144C8目标板及相应外围硬件电路。(从略) 四系统软件设计 1.数据输入模块 原理:用VHDL创建模块,通过两个脉冲分别对两个数码管进行输入控制,再通过相应运算模块将两个独立数据转化成两位十进制数字。 2.运算模块 原理:用VHDL创建模块,四种运算同步运行,通过按键加、减、乘、除选择输出对应的计算结果,当按键等号来时,将所得结果反馈给运算模块输入端。具体实现代码见附录二。 3.输出模块 原理:用VHDL创建模块,通过按键等号来控制显示运算对象还是运算结果,当等号按下时,输出计算结果,否则显示当前输入的数据,并且通过除法模块将十六进制转化为十进制。当输出结果溢出是LED0亮,同时数码管显示都为零。部分实现见附录二。 五实验调试 输入数据12,再按加法键,输入第二个数字25,按等号键,数码管显示37;按灭加法、等号键,输入第二个数据2,依次按等号键,减法键,数码管显示35;同上,按灭减法键、等号键,输入第三个数据7,依次按等号键,除法键,数码管显示5;按灭除法键、等号键,输入第四个数据99,依次按等号键,乘法键,数码管显示495,按灭乘法键、等号键,当前显示为99,依次按等号键、乘法键,数码管显示49005,同上进行若干次之后,结果溢出,LED0亮,同时数码管显示都为零。当输出为负数时,LED0灯变亮,同时数码管显示都为零。六实验结论 本实验基本实现了计算器的加减乘法运算功能,但是存在一个突出的缺陷,就是当输出结果时,必须先按等号键导通数据反馈,再按运算键选择输出结果。这与实际应用的计算器存在很大的差距。但是,本设计可以通过等号键实现运算对象和运算结果之间的切换。

c语言上机实验报告 (2)

c语言上机实验报告 (2) 实验六 姓名班级单周上机的那班学号 一 程序源:#include #include void main() { FILE*fp; fp=fopen("E:\\yxf01.text","w"); if(fp==NULL) { printf("文件打不开"); exit(0); } int a,i; printf("请输入一个尾部为0的整数\n"); scanf("%d",&a); while(a%10!=0) { printf("输入值非法,请从新输入!\n"); scanf("%d",&a); }

fprintf(fp,"%d=%d+%d+%d+%d+%d+%d+%d+%d+%d+%d\n",a,a/10,a/10,a/10,a/1 0,a/10,a/10,a/ 10,a/10,a/10,a/10); fprintf(fp,"%d=%d+%d+%d+%d+%d+%d+%d+%d+%d\n",a,a/10,a/10,a/10,a/10,a /10,a/10,a/10,a/ 10,a-8*(a/10)); fprintf(fp,"%d=%d+%d+%d+%d+%d+%d+%d+%d\n",a,a/10,a/10,a/10,a/10,a/10 ,a/10,a/10,a-7*(a /10)); fprintf(fp,"%d=%d+%d+%d+%d+%d+%d+%d\n",a,a/10,a/10,a/10,a/10,a/10,a/ 10,a-6*(a/10)); fprintf(fp,"%d=%d+%d+%d+%d+%d+%d\n",a,a/10,a/10,a/10,a/10,a/10,a- 5*(a/10)); fprintf(fp,"%d=%d+%d+%d+%d+%d\n",a,a/10,a/10,a/10,a/10,a-4*(a/10)); fprintf(fp,"%d=%d+%d+%d+%d\n",a,a/10,a/10,a/10,a-3*(a/10)); fprintf(fp,"%d=%d+%d+%d\n",a,a/10,a/10,a-2*(a/10)); fprintf(fp,"%d=%d+%d\n",a,a/10,a-(a/10)); fclose(fp) } 运行结果:

并行计算第一次实验报告

并行计算上机实验报告题目:多线程计算Pi值 学生姓名 学院名称计算机学院 专业计算机科学与技术时间

一. 实验目的 1、掌握集群任务提交方式; 2、掌握多线程编程。 二.实验内容 1、通过下图中的近似公式,使用多线程编程实现pi的计算; 2、通过控制变量N的数值以及线程的数量,观察程序的执行效率。 三.实现方法 1. 下载配置SSH客户端 2. 用多线程编写pi代码 3. 通过文件传输界面,将文件上传到集群上 4.将命令行目录切换至data,对.c文件进行编译 5.编写PBS脚本,提交作业 6.实验代码如下: #include

#include #include #include #include #include static double PI=0; static int N=0; static int numOfThread=0; static int length=0; static int timeUsed=0; static int numOfThreadArray[]={1,2,4,6,8,10,12,14,16,20,24,30}; static int threadArraySize=12; static int nTime=4; static int repeatTime=30; static double totalTime=0; struct timeval tvpre, tvafter; pthread_mutex_t mut; clockid_t startTime,endTime;

C上机实验报告

实验一 顺序结构程序设计 【实验日期】 年 月 日 【实验目的】 1. 熟悉VC++6.0调试环境,掌握运行一个C 程序的基本步骤。 2. 掌握基本输入、输出函数的使用。 3. 能够编写简单的顺序结构程序,实现简单的数据处理。 4. 掌握C 程序的查错方法。 【实验内容】 调试示例 改正下列程序中的错误,求华氏温度1000F 对应的摄氏温度。计算公式如下,其中:c 表示摄氏温度,f 表示华氏温度。 源程序(有错误的程序) #include “stdoi.h ” void main() { int c;f; f=100; c=5*(f-32)/9; printf(“f=d,c=%d\n ”,f,c); } 运行结果(改正后程序的运行结果) f=100,c=37 调试过程: (1) 输入源程序。 (2) 使用菜单或工具栏来完成编译、连接和运行操作。 (3) 单击编译(Compile )按钮,编译时出现的第一条错误信息是: Cannot open include file:’stdoi.h ’:no such file or directory 通过拖动信息窗口右侧的滚动块或将信息窗口拉大可查看错误信息。双击该错误信息,箭头指向源程序的第一行,因为“stdio.h ”被误写为“stdoi.h ”。改正为“stdio.h ”后,重新编译,新产生的第一9)32(5-?=f c

条错误信息是:‘f’:undeclared identifier 双击该错误信息,箭头指向源程序的第四行,错误信息指出“f”变量没有被定义。仔细观察后,发现“f”前的分号应该为逗号。将“f”前的分号改为逗号后,重新编译,编译正确。 (4) 单击连接(Build)按钮,连接正确。 (5) 单击运行(Build Execute)按钮,运行结果为:f=d,c=100。 结果不符合题目的要求,仔细检查源程序,发现函数printf中“f=d”的“d”应为“%d”。改正后,重新编译、连接和运行,运行结果与题目要求的结果一致。 ●改错题 改正下列程序中的错误,计算x的平方y,并分别以“y=x*x”和“x*x=y”的形式输出x和y的值。 源程序(有错误的程序) /********************found********************/ #include “stdoi.h” void main() { int y,x; printf(“Input x:”); scanf(“%d”,&x); y=x*x; /********************found**********************/ printf(“%d=%d*%d\n”,x); /********************found**********************/ printf(“%d*%d=%d\n”,y); } 运行结果1(改正后程序的运行结果)运行结果2 Input x:5 Input x:4 25=5*5 16=4*4 5*5=25 4*4=16 ●编程题 1、已知某位学生的数学、英语和计算机课程的成绩分别是82分、78分和91分,求该生3门课的平均成绩。 输出示例: Math=82,eng=78,comp=91,average=83

相关文档