当前位置:文档之家› 实验三 数组与指针实验

实验三 数组与指针实验

实验三  数组与指针实验
实验三  数组与指针实验

实验三数组与指针实验

【实验目的】

1.学习使用数组数据对象。

2.掌握指针的使用方法。

3.学习通过动态内存分配实现动态数组的定义和使用,并体会指针在其中的作用。4.练习通过Debug观察指针的内容及其所指对象的内容。

【实验内容】

1.运行下列程序,观察运行结果。

(1)#include

class ArrayElem

{

int x;

public:

ArrayElem(int i){x=i;} //带参数的构造函数

int getx(){return x;}

};

int main()

{

ArrayElem obs[4] ={-1,-2,-3,-4}; //创建对象数组并初始化

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

cout<<"obs["<

return(0);

}

(2)#include

class NumClass

{

int num;

public:

void set_num(int val){num=val;}

void show_num(){cout<<"The num is :"<

};

int main()

{

NumClass ob,*p; //声明一个对象和指向对象的指针

ob.set_num(10); ob.show_num(); //通过对象ob直接调用成员函数

p=&ob; //使对象指针p指向对象ob

p->set_num(20);p->show_num(); //通过指针调用成员函数

return(0);

}

(3)#include

class NumClass

{

int num;

public:

void set_num(int val){num=val;}

void show_num(){cout<<"The num is :"<

};

int main()

{

NumClass ob[2],*p; //声明一个对象数组和对象指针

ob[0].set_num(10); ob[1].set_num(20); //通过对象数组名和下标来访问元素

p=&ob[0]; //将对象数组的首元素地址赋给指针

p->show_num(); //通过指针显示数组元素

p++; p->show_num();

return(0);

}

(4)#include

class NumClass

{

int num;

public:

void set_num(int val){num=val;}

void show_num(){cout<<"The num is :"<

};

int main()

{

NumClass *p=new NumClass[2]; //创建一个对象数组

p[0].set_num(10); p[1].set_num(20); //通过指针访问数组元素的成员

p[0].show_num(); p[1].show_num(); //通过指针显示数组元素delete[] p; //删除整个对象数组

return(0);

}

2.编写一个程序,输入N个学生数据,包括学号、姓名、成绩,要求输出这些学生数据并计算平均分。设计一个学生类,包括学号、姓名和成绩数据成员外,还有两个静态变量sum和num,分别存放总分和人数,另有两个普通成员函数setdata()和disp(),分别用于给数据成员赋值和输出数据成员的值,另有一个静态成员函数avg(),它用于计算平均分。在main()函数中定义了一个对象数组用于存储输入的学生数据。

3.用对象数组实现一个简单的银行账户管理系统,完成开户、存款、取款和查询余额等行为。银行账户(Account)类可参考实验二的第2题。

【思考题】

1.数组之间如何赋值?

2.引用和指针有何区别?

3.对那些类型的数据不能使用引用?

4.C++中静态成员有什么作用?静态成员的内存是如何分配的?

5.类的指针成员为何要用new开辟内存空间,这样做的好处是什么?

6.如果你定义了一个类,其指针成员是使用new初始化的,请指出可能出现的3个问题以及如何纠正这些问题。

实验三 数组和字符串

实验三数组和字符串 一、实验目的 1.掌握Java中的数组定义、引用 2.掌握向量的基本概念和应用技术 3.掌握使用字符串String类处理字符串的方法 4.掌握使用字符串StringBuffer类处理字符串的方法 5.掌握Date类以及Calendar类的常用方法; 二、实验内容 1.使用https://www.doczj.com/doc/c31293042.html,ng.Math类,生成100 个100~999 之间的随机整数,找出他们之中的最大的和最小的,并统计随机产生的大于300 的整数个数。 package exercise; publicclass shiyan3_1 { publicstaticvoid main(String [] args) { int count=0; int max=0; int min=Integer.MIN_VALUE; int num[]=newint[100];//声明并创建一个具有100 个元素的整型数组对象num int i; for(i=1;i<=100;i++) { num[i-1]=100+(int)(Math.random()*899); System.out.print(num[i-1]+"\t");//随机产生一个100~999 之间的随机整数 if(i % 10 == 0) System.out.println();//输出当前产生的随机数,并一行输出10 个数 if(num[i-1]>max) max=num[i-1]; if(num[i-1]300) count++; } System.out.println("最大的随机整数是:"+max); System.out.println("最小的随机整数是:"+min); System.out.println("大于300 的整数个数是:"+count); } }

微机原理实验2程序 - 字符串匹配实验

8086汇编语言程序实验: 实验二、字符串匹配实验 题目: 1、(必做题)编程实现:从键盘分别输入两个字符串(不必等长), 然后进行比较,若两个字符串有相同的字符,则显示“MATCH”,若字符都不相同则显示“NO MATCH”。 2、(选做题)编程实现:从键盘分别输入两个字符串,然后进行比 较,若两个字符串的长度和对应字符都完全相同,则显示“MATCH”,否则显示“NO MATCH”。 对应程序如下所示: ;第1题 ;==================================== HUICHE MACRO ;定义一个具有回车、换行功能的宏,为程序多次回车换行所调用。 MOV DL,0DH ;用2号功能“显示”回车。 MOV AH,02H INT 21H MOV DL,0AH ;用2号功能“显示”换行。 MOV AH,02H INT 21H ENDM DA TA SEGMENT MESSAGE1 DB 'MATCH','$' ;定义“MATCH”提示信息,“$”作为调用9号功能的结束符。 MESSAGE2 DB 'NO MATCH','$' ;定义“NO MATCH”提示信息。 TISHI1 DB 'Please input the first string:','$' ;提示输入第1个字符串的提示信息。 TISHI2 DB 'Please input the second string:','$' ;提示输入第1个字符串的提示信息。 STRING1 DB 100 ; 100为存第一个字符串的最大可用空间的字节数。 DB ? ;预留字节,存储将要输入的第1个字符串的实际长度。 DB 100 DUP(?) ;预留100个字节空间,用于存放第1个字符串。 STRING2 DB 100 DB ? DB 100 DUP(?) DA TA ENDS

微机实验三 串操作

实验三串操作 一、实验目的 1.熟悉串操作指令的功能。 2.了解串操作指令的使用方法。 二、实验预习要求 1.复习8086指令系统中的串操作类指令。 2.按照题目要求在实验前编写好实验中的程序段。 三、实验任务 1.输入以下程序段并运行之,回答后面的问题。 CLD MOV DI,1000H MOV AX,55AAH MOV CX,10H REP STOSW 上述程序段执行后: (1) 从DS:1000H开始的16个字单元的内容是什么?。 (2) (DI)= ?(CX)= ?,并解释其原因。 2.在上题的基础上,再输入以下程序段并运行之,回答后面的问题。

MOV SI,1000H MOV DI,2000H MOV CX,20H REP MOVSB 程序段执行后: (1)从DS:2000H开始的16个字单元的内容是什么? 55AAH (2)(SI)=?(DI)=?(CX)= ?,并分析之。 SI=1020H,DI=2020H,CX=0000H 3.从DS:1000H开始存放有一个字符串”This is a string”,要求把这个字符串从后往前传送到DS:2000H开始的内存区域中(即传送结束后,从DS:2000H开始的内存单元的内容为”gnirts a si sihT”),试编写程序段并上机验证之。 assume cs:code,ds:datasg,ss:stack datasg segment db 'THIS IS A STRING' db 1000 dup(1) datasg ends stack segment dw 0,0,0,0,0,0,0,0 stack ends code segment start: mov ax,datasg

实验报告_实验3 类与对象

实验报告_实验3 类与对象(学生学号_姓 名) 一、实验目的 1.熟悉类的组成,掌握类的声明方法; 2.理解构造方法的作用,并掌握构造方法的定义; 3.熟练使用访问器和设置器实现信息隐藏和封装; 4.熟悉一般方法、构造方法的重载; 5.能够正确地区分静态变量与实例变量、静态方法与实例方法的不同,掌握静态变量和静态方法的使用;6.掌握对象的创建、引用和使用及向方法传递参数的方式; 7.掌握this关键字的使用以及对象数组的创建和访问; 8.掌握Java包的创建、包成员的各种访问方式; 9.掌握一维数组:声明,创建,初始化,数组元素的访问; 10.掌握多维数组的概念:二维数组的声明,初始化,元素的访问。 二、实验内容与步骤 1.请回答下列问题: (1)Cirecle类定义了几个属性?它们的类型、访问权限各为什么? 答:两个PI,floatl类型,静态私有权限 Radius,float;类型,私有权限 (2)类中的“PI”的值可以在程序的方法中更改吗? 答:不可以,因为PI为静态变量 (3)Cirecle类定义了几个方法?它们的访问权限怎样?

答:四个,getRadius(),setRadius(float radius),getPerimeter(),getArea()都是公有权限 2.写出Rectangle类的程序代码: class Rectangle { private float width; private float length; public float getWidth( ) //获取矩形宽度 {return width;} public float getLength( ) //获取矩形长度 {return length;} public float getPerimeter( ) //获取矩形周长 {return 2*(width+length);} public float getArea( ) //获取矩形面积 {return (width*length);} public void setWidth(float w) //设置矩形宽度 {width=w;} public void setLength(float l) //设置矩形长度 {length=l;} } 3.回答下列问题: (1)该程序中有几个类?主类是什么?如果将这两个类放在一个文件中,源程序文件名应是什么?答:两个类:Circle、CircleTest;主类是CircleTest;源程序文件名是CircleTest。

朱 实验三 字符及字符串的输入和输出

实验三字符及字符串的输入和输出 一、实验目的 1.熟悉如何进行字符及字符串的输入输出。 2.掌握简单的DOS系统功能调用。 二、实验预习要求 1.复习系统功能调用的1、2、7、8、9、10号功能。 2.按照题目要求预先编写好实验中的程序段。 三、实验任务 1.输入以下程序段并用“single step”单步运行,执行INT 21H指令时,在键盘上按“5”键。 MOV AH,1 INT 21H (1) 运行结束后,(AL)=?它是哪一个键的ASCII码? (2) 重复运行以上程序段,并分别用“A”、“B”、“C”、“D”键代替“5” 键,观察运行结果有何变化? (3) 再将1变为7和8,分别运行之 2.输入以下程序段并运行之。 MOV DL,‘A’ MOV AH,2 INT 21H (1)观察屏幕上的输出,是否显示了“A”字符? (2)分别用“#”、“X”、“Y”、“$”、“?”代替程序段中的“A”字符,观 察屏幕上的输出有何变化,并查看DL中的内容。 (3)分别用0DH、0AH、24H代替程序段中的“A”字符,观察屏幕上 的输出有何变化。 (4)用07H代替程序段中的“A”字符,观察屏幕上有无输出?计算机内的扬声器是否发出“哔”的声音? 3.按要求运行程序,并回答问题。 提示:系统使用0AH号功能调用时,按如下方法设置键盘缓冲区:

在DS:0000H开始的内存区域设置变量名为M1的如下键盘缓冲区:DATA SEGMENT M1 DB 5,0,5 dup (?) DATA ENDS 然后输入以下程序段并单步运行,执行INT 21H指令时,在键盘上键入“5”、“4”、“3”、“2”、“1”、〈回车〉这六个键。 LEA DX,M1 MOV AH,0AH INT 21H 程序段运行完后,检查DS:0000H开始 的内存区域: ①DS:0001H单元的内容是什么?它表示了什么含义? ②从DS:0002H开始的内存区域中的内容是什么?其中是否有字符“1” 的ASCII码?为什么? 4.要在屏幕上显示一个字符串“Hello, world”,写出该字符串变量的定义语句和显示这个字符串的程序段。上机验证之。(此题不要求写在实验报告上) 四、实验报告要求 1.整理出运行完整的实验程序和运行结果。 2.回答题目中的问题。 3. 1、2、9、10号功能的输入输出参数有哪些?分别放在什么寄存器中? 4.

VB实验3数组

本科实验报告 课程名称:人机界面程序设计基础实验项目:三、数组 实验地点:北区多学科楼 专业班级:学号: 学生姓名: 指导教师: 年月日

一、实验目的和要求 1、掌握数组的声明、数组元素的引用。 2、掌握固定长度数组和动态数组的使用差别。 3、掌握数组常用的操作和常用算法。 4、掌握列表框和组合框的使用。 二、实验内容和原理 1、随机产生30~100(包括30、100)的10个正整数,求最大值、最小值、平均值,并显示整个数组的值和结果。 2、随机产生20个学生的成绩,统计各分数段人数并显示结果。产生的数据在List1显示,统计结果在List2显示。 提示:①、在通用声明段声明一个数组。例如:Dim mark%(19);在Command2声明一个数组s(9),分别存放分数段的人数。 ②、统计时的关键在于确定每个人的分数mark(i)与数组s下标之间的关系。 3、窗体上建立一个简单组合框,在组合框的文本框输入数字字符,按回车键后加入到组合框的列表框内,单击“交换”按钮,将列表框中最小值项目和第0个项目交换;最大值项目与最后项目交换。 三、主要仪器设备 计算机 四、实验结果与分析(必填) 1.随机产生30~100(包括30,100)的10个正整数,求最大值、最小值、

平均值,并显示整个数组的值和结果,。 代码: Private Sub Form_Click() Dim i%, s%(1 To 10), max%, min%, avg! For i = 1 To 10 s(i) = Int(Rnd * 71 + 30) Next i max = s(1) min = s(1) avg = s(1) For i = 2 To 10 If s(i) > max Then max = s(i) If s(i) < min Then min = s(i) avg = avg + s(i) Next i avg = avg / 10 For i = 1 To 10 Print s(i); Next i Print Print "max="; max; "min="; min; "avg="; avg End Sub 2.随机产生20个学生的成绩,统计各分数段人数。即0~59,60~69,70~ 79,80~89, 90~100, 并显示结果。产生的数据在picture1显示,统计结果在picture2显示,如图E3所示。

实验3要求(数组)

实验3-1一维数组 目的和要求: 1.理解数组的概念以及用数组描述数据结构的好处; 2.掌握一维数组的定义、下标变量的引用、数组的初始化以及输入输出的方法; 3.学习应用数组解决查找和排序问题。 一. 实验内容 1.改错题 (1)下列程序的功能是:为指定的数组输入10个数据,并求这10个数据之和。但程序中存在若干错误,请你纠正,并将正确的程序保存到学号文件夹下,文件名为shiyan3_1.c。 #include void main() {int n=10,i,sum=0; int a[n]; for(i=0;i<10;i++) { scanf("%d",a[i]); sum=sum+a[i]; } printf("sum=%d\n",sum); } (2)下列程序的功能是:读入20个整数,统计其中非负整数个数,计算所有非负整数之和。但程序中存在若干错误,请你纠正,并将正确的程序保存到学号文件夹下,文件名为shiyan3_2.c。 #include main( ) { int i, n=20, s, count; int a[n];s = count = 0; for ( i = 1; i <= n; i++ ) scanf("%d",a[i]); for ( i = 1; i <= n; i++ ) { if ( a[i] <0 ) break; s += a[i]; count++; } printf("s=%d\t count=%d\n", s, count ); } 2.程序填空 (1)以下程序的功能是:采用二分法在给定的有序数组中查找用户输入的值,并显示示查找结果。根据题意,将程序写完整,并将程序保存到学号文件夹下,文件名为shiyan3_T1.c。

微机原理实验三 字符串匹配程序.

实验三字符串匹配程序 教学目标:通过教学让学生掌握显示提示信息的方法及接收键盘输入信息的方法。 重点、难点: 重点:字符串匹配的算法,用INT 21H 的09号子功能显示提示信息,用INT 21H的0A号子功能接收字符 难点:用INT 21H的0A号子功能接收字符 课时安排:2学时 教学过程:讲解实验过程 一实验目的: 掌握显示提示信息的方法及接收键盘输入信息的方法 二实验内容: 编写程序,实现两个字符串的比较。如相同,则显示“MATCH”,否则,显示”NO MATCH”. 三程序框图(讲解流程图,介绍编写程序的思路) 四实验原理 1、讲解DB、DUP、EQU等伪指令的功能以及使用格式 2、讲解INT 21H 的09H子功能的功能、工作情况以及使用格式 3、讲解INT 21H的0AH子功能的功能、工作情况以及使用格式 4、讲解串扫描指令SCASB的功能以及使用格式 5、入栈、出栈指令PUSH 、POP的使用情况 五实验参考程序

CRLF MACRO MOV AH,02H MOV DL,0DH INT 21H MOV AH,02H MOV DL,0AH INT 21H ENDM DATA SEGMENT MESS1 DB 'MA TCH',0DH,0AH,'$' MESS2 DB 'NO MA TCH',0DH,0AH,'$' MESS3 DB 'INPUT STRING1:',0DH,0AH,'$' MESS4 DB 'INPUT STRING2:',0DH,0AH,'$' MAXLEN1 DB 81 ACTLEN1 DB ? STRING1 DB 81 DUP(?) MAXLEN2 DB 81 ACTLEN2 DB ? STRING2 DB 81 DUP(?) DATA ENDS STACK SEGMENT STA DB 20 DUP(?) TOP EQU LENGTH STA STACK ENDS CODE SEGMENT ASSUME CS:CODE,DS:DA TA,SS:STACK,ES:DATA START: MOV AX,DA TA MOV DS,AX MOV AX,DA TA MOV ES,AX MOV AX,STACK MOV SS,AX MOV SP,TOP ;段寄存器及堆栈初始化 MOV AH,09H MOV DX,OFFSET MESS3 INT 21H ;显示输入提示1 MOV AH,0AH MOV DX,OFFSET MAXLEN1 INT 21H ;接收键入的字符串1 CRLF ;回车换行 MOV AH,09H MOV DX,OFFSET MESS4 INT 21H ;显示输入提示2 MOV AH,0AH MOV DX,OFFSET MAXLEN2 INT 21H ;接收键入的字符串2 CRLF CLD

实验 6-3 数组

实验6-3 数组(三) 1 【实验目的】 (1)掌握字符数组的定义、赋值和输入输出的方法 (2)掌握字符数组和字符串函数的使用 (3)掌握数组的基本操作和排序算法 【实验要求】 (1)熟悉掌握字符数组的定义、赋值和输入输出方法 (2)掌握字符数组和字符串函数的使用 (3)掌握数组的增加元素和删除元素的操作 (4)掌握数组的排序算法(比较、选择和冒泡三种算法,要求至少会一种) 【实验环境】 (1) Microsoft XP操作系统 (2) Microsoft VC++ 6.0 【实验内容】 1、Palindromes_easy version https://www.doczj.com/doc/c31293042.html,/acmhome/problemdetail.do?&method=showdetail&id=1384 描述 “回文串”是一个正读和反读都一样的字符串,比如“level”或者“noon”等等就是回文串。请写一个程序判断读入的字符串是否是“回文”。

输入 输入包含多个测试实例,输入数据的第一行是一个正整数n,表示测试实例的个数,后面紧跟着是n个字符串,每个字符串的长度不超过30。 输出:如果一个字符串是回文串,则输出"yes",否则输出"no". 样例输入: 4 level abcde noon haha 样例输出: yes no yes no 2、分割整数https://www.doczj.com/doc/c31293042.html,/acmhome/problemdetail.do?&method=showdetail&id=1173 描述:从键盘输入一个长正整数(不超过10位),从高位开始逐位分割并输出。 输入:正整数n,不含前导零。 输出:分割的整数序列,各整数之间用空格格开。注意,最后一个数字后面没有空格! 样例输入:654321 样例输出:6 5 4 3 2 1

北理工_汇编_实验三_字符串操作实验

本科实验报告 实验名称: 字符串操作实验 课程名称: CPU 与汇编实验 实验时间: 任课教师: 实验地点: 实验教师: 实验类型: □ 原理验证 ■ 综合设计 □ 自主创新 学生姓名: 学号/班级: 组 号: 无 学 院: 信息与电子 同组搭档: 无 专 业: 信息工程 成 绩:

一、实验要求和目的 1.了解汇编语言字符串处理基本流程; 2.熟悉汇编语言字符串处理基本指令的使用方法; 3.掌握利用汇编语言实现字符串处理的程序设计方法。 二、软硬件环境 1、硬件环境:计算机系统 windows; 2、软件环境:装有 MASM、DEBUG、LINK等应用程序。 三、实验涉及的主要知识 1、字符串处理基本操作流程 (1)利用 SI 寄存器保存源串首地址; (2)利用 DI 寄存器保存目的串首地址; (3)利用 CX 寄存器保存字符串长度; (4)利用 CLD 或 STD 指令设置字符串处理方向; (5)利用字符串处理指令实现相关处理。 其中,CLD 指令使 DF=0,在执行串处理指令时可使地址自动增量;STD 使 DF=1,在执行串处理指令时可使地址自动减量。 2、重复前缀指令,重复次数由计数寄存器 CX 中存放的值决定,指令每重复执行一次,计数器 CX 中值减 1,当 CX 中值减至 0 时,停止重复执行,继续执行下一条指令REP无条件重复前缀,重复串操作直到计数寄存器的内容 CX 为0为止。经常与REP 配合工作的字符串处理指令有 MOVS、STOS 和 LODS。 REPE/REPZ 判断计数寄存器的内容 CX 是否为0或ZF=0(即比较的两个操作数不等),只要满足一个则重复执行结束,否则继续执行。可以与 REPE/REPZ 配合工作的串指令有 CMPS 和SCAS。 REPNE/REPNZ 判断计数寄存器的内容是否为0或ZF=1(即比较的两个操作数相等),只要满足一个则重复执行结束,否则继续执行。可以与REPE/REPZ 配合工作的串指令有 CMPS 和SCAS。 3、字符串处理基本指令 (1)MOVS 传送指令 格式:MOVS DST,SRC或 MOVSB(传送字节)或 MOVSW(传送字)。后面两种形式需要与 REP 指令结合使用。该指令把由源变址寄存器(SRC)指向的数据段中的一个字(或字节)数据传送到由目的变址寄存器(DST)指向的附加段中的一个字(或字节)中去,同时,根据方向标志及数据格式(字或字节)对源变址寄存器和目的变址寄存器进行修改。 (2)STOS 存入串指令 格式:STOS DST 或 STOSB(存入字节)或 STOSW(存入字)。 该指令把 AL 或 AX 的内容存入由目的变址寄存器指向的附加段的某单元中,并根据方向标志(DF)和数据类型修改目的变址寄存器的内容。

数据结构_实验3_串和数组

实验3 串和数组的相关操作 一,实验目的 理解并掌握串的逻辑结构和定长顺序存储方式; 理解串的相关基本算法; 编程对相关算法进行验证。 理解数组的逻辑结构和顺序存储方式; 掌握对称矩阵和稀疏矩阵的压缩存储方法; 掌握稀疏矩阵的三元组顺序表表示法和快速转置运算。 二,实验内容 3.1 串的模式匹配运算 编写一个程序,实现顺序串的各种模式匹配运算,并在此基础上设计主程序完成如下功能: (1)建立目标串s=‘abcabcdabcdeabcdefabcdefg’和模式串t=‘abcdeabcdefab’;(2)采用简单模式匹配算法求t在s中的位置; (3)由模式串t求出next值和nextval值; (4)采用KMP算法求t在s中的位置; (5)采用改进的KMP算法求t在s中的位置。 3.2 数组的操作 1.建立一个n*n的对称矩阵A;用动态分配的一维数组B对矩阵A进行压缩存储,输出矩阵A和一维数组B; 2.在B中查找对称矩阵A中第row行,第col列(下标从1开始)的元素,输出该元素值; 3.建立一个稀疏矩阵C,输入其行数,列数和非零元个数,用三元组顺序表存储该矩阵,并按矩阵形式输出稀疏矩阵B; 4.对稀疏矩阵C做快速转置运算得到矩阵D,并按矩阵形式输出转置后的矩阵D。【要求】 1.矩阵元素相关信息要从终端输入; 2.在三元组顺序表中按行优先顺序存放非零元素; 3.具体的输入和输出格式不限; 4.算法要具有较好的健壮性,对错误操作要做适当处理。 三,源代码及结果截图 3.1 #include

#include #include #define MaxSize 100 typedef struct { char data[MaxSize]; //定义可容纳MaxSize个字符的空间 int length; //标记当前实际串长 }SqString; void StrAssign(SqString &str,char cstr[]) { //由串常量cstr创建串str int i; for(i=0;cstr[i]!='\0';i++) str.data[i]=cstr[i]; str.length=i; } void DispStr(SqString s) { //输出串s的所有元素 int i; if(s.length>0){ for(i=0;i=t.length)

实验三串基本操作的编程实现

实验三串基本操作的编程实现 【实验目的】 容:串基本操作的编程实现 要求: 串基本操作的编程实现(2学时,验证型),掌握串的建立、遍历、插入、删除等基本操作的编程实现,也可以进一步编程实现查找、合并、剪裁等操作,存储结构可以在顺序结构或结构、索引结构中任选,也可以全部实现。也鼓励学生利用基本操作进行一些应用的程序设计。 【实验性质】 验证性实验(学时数:2H) 【实验容】 字符串用常规的顺序存储法来存储,实现常用的功能。 自己编程模式:开发一个程序,用来统计文件中各种信息,如字符个数,行数等。 修改程序模式:将下面程序空白的地方填空。 程序检查模式:将本文件夹中的程序运行后总结相关功能。 【思考问题】 1.字符串的顺序存储和链表存储的差异?C语言中是如何实现字符串的? 2.在字符串处理方面主要有什么操作? 3.字符串的操作的主要特点是什么? 4.举出几个字符串的应用例? 【参考代码】 //功能:顺序串的基本基本功能 #include #include #include #include #define maxsize 30//顺序串的总空间大小 enum returninfo{success,fail,overflow,underflow,range_error,empty};//定义返回信息清单 class string { public: string();//构造函数 ~string();//析构函数 returninfo strcreate(); //创建串 returninfo strinsert(int position,char newstr[],int str_length); //插入 returninfo strdelete(int beginposition,int endposition); //删除 returninfo strmodify(int beginposition,int endposition,char newstr[]); //修改 int strsearch(char newstr[]); //查找

虚拟仪器实验三

实验三LabVIEW编程的数组和簇与图形显示 (一)LabVIEW编程的数组和簇 一、实验目的 1.掌握如何创建、使用数组;数组函数的功能和应用,掌握它们的区别以及相应操作。 2.掌握如何创建、使用簇;簇函数的功能和应用,掌握它们的区别以及相应操作。 二、实验原理 1.数组是一些具有相同类型的元素组成的集合。数组包含两方面的内容:元素和维数。数组中的元素可以是数字、布尔、字符、路径、波形和簇等数据类型。一个数组可以是一维或者多维,如果必要,每维最多可有231-1个元素。可以通过数组索引访问其中的每个元素。数组元素不能是数组、图表或者图形。 LabVIEW提供了很多用于操作数组的功能函数,位于函数Functions?数组Array中。其中包括创建数组、初始化数组、数组大小、数组子集、索引数组等。 创建数组:用于根据标量值或者其他的数组创建一个数组。 初始化数组:创建所有元素值都相等的数组。 数组大小:返回输入数组中的元素个数。 数组子集:选取数组或者矩阵的某个部分。 索引数组:用于访问数组中的某个元素。 建立数组的步骤如下: 1)从数组和类子模板(Controls-All Controls-Array & Cluster)上选中数组,放置在前面板中,此时为数组空壳,可以向里边添加(用拖拽的方法)数字、布尔、字符等数据类型的控制器或指示器,来建立相应的数组控制器和指示器。此时可以看到数组上有两个显示窗口:标号显示窗:标号从0开始,每单击一次“增加”键,标号显示值顺序递增。这个标 号就是数组元素的序号;对于一个含n个元素的数组,其标号为0~n-1。 元素显示窗:用来显示元素的数值。数组中的元素按序号排列。数组元素的查找按行 /列标号进行。 2)右键单击标号窗口,弹出一个快捷菜单,选择Add Dimension来增加数组的维数。 2.簇(Cluster)是另一种数据类型,它的元素可以是不同类型的数据。它类似于C语言中的structure。使用簇可以把分布在框图中各个位置的数据元素组合起来,这样可以减少连线的拥挤程度,减少子VI的连接端子的数量。 簇相当于一个容器,容器中的元素可以是各种不同的数据类型。也就是说,可以在一个簇中放置控制模板上的各种控件,如数字控件、布尔控件、数组控件等,但是不能将输入控件和输出控件同时放入其中。因此,在编辑流程图时,可以减少连线数以及连线的节点数,最终简化流程图。它有多个输入,一个输出。 要建立簇,可以选择控制模板中数组和类子模板上的Cluster,将其调入前面板。向类控件中放入元素,即将控制模板中的相应控件放入其中,俗称把元素“捆绑”在一起。 捆绑(Bundle)数据 Bundle功能将分散的元件集合为一个新的簇,或允许你重置一个已有的 簇中的元素。可以用位置工具拖曳其图标的右下角以增加输入端子的个数。

面向对象实验三 重载

面向对象实验三重载 一、实验目的在C语言中,每个函数都必须有其唯一的名字。对于不同类型上作不同运算而又用同样名字的情况,则称之为重载。重载分为对函数重载和对运算符重载。对重载函数必须至少在参数个数、参数类型或参数顺序上有所不同。运算符重载不改变运算顺序和优先级。有五个 运算符不能重载,它们是. :: * ?: # 。也不能创造新运算符。C++规定,运算符中,参数说明都是内部类型时,不能重载。通过重载类的成员函数来掌握面向对象程序设计中的编译时多态性。 二、实验内容 建立一个字符串类,使用Visual C++ 6.0 为该类添加进行比较的运算符成员函数或友 元函数。 三、实验要求 1 .建立一个字符串类,在字符串类中定义一个有参数构造函数的和一个不带参数的 构造函数; 2 .编写对字符串进行比较、运算(<,>,==,+=,=等)的成员函数或友元函数(通过重载运算符实现)。 3.编制主程序,将重载运算符运用于实际的字符串比较、运算中。 实验代码: //String.h #ifndef STRING_H_ #define STRING_H_ #include class String { private: char *name; public: String(){ name = new char[1]; name[0] = '\0'; }

String(const char *n); bool operator<(String &os); bool operator>(String &os); bool operator==(String &os); String &operator+=(String &os); String &operator=(String &os); friendstd::ostream&operator<<(std::ostream&os,const String &g); }; #endif //string.cpp #include"String.h" String &String::operator+=(String &os) { int len1 = 0; int len2 = 0; len1 = strlen(name); len2 = strlen(https://www.doczj.com/doc/c31293042.html,); strcat(name,https://www.doczj.com/doc/c31293042.html,); name[len1 + len2 + 1] = '\0'; return *this; } bool String::operator<(String &os) { if (strcmp(name, https://www.doczj.com/doc/c31293042.html,) <0) return true; else return false; } String &String::operator=(String &os) { intlen=0; len = strlen(https://www.doczj.com/doc/c31293042.html,); name = new char[len + 1]; strcpy(name,https://www.doczj.com/doc/c31293042.html,); name[len+1]='\0'; return *this; } bool String::operator==(String &os)

c++实验3程序结构和数组

实验3:C++语言程序结构、数组 说明:所有的程序和文档都建立在学生学号_名字_第三次实验文件夹内,最终以压缩文件的形式提交到指定邮箱。 第一部分 基础练习 1.用牛顿迭代法求方程:3x 3 +2x 2 -8x-5=0,在x=1.5附近的根。 ◆ 要求:前后两次求出的x 的差的绝对值小于10-6 ,则为结果。 ◆ 思路: 如图所示,设x n 为一个接近x a 的近似根,过(x n , f(x n )) 点做切线,其切线方程为: n n n n x x x f x f -= +1) ()(' 式中只有x n+1为未知量,将它放在等号的左边,即: 上式就为牛顿迭代公式。 源代码: #include #include using namespace std; int main() { float x1,x0,f,f1; x1=1.5; do

{ x0=x1; f=3*x0*x0*x0+3*x0*x0-8*x0-5; f1=9*x0*x0+4*x0-8; x1=x0-f/f1; }while (fabs(x1-x0)>1e-6); cout<<"该方程的根为:"<

C语言大学实用教程学习指导·138· 2.编程序,输出以下图形 ①********* ******* ***** *** * ②***** **** *** ** * ③ 1 13 135 1357 13579 ④ A BBB CCCCC DDDDDDD CCCCC BBB A 要求 应该使用双重循环。外循环体中包含两个并列的for循环语句,分别控制每行输出的空格符和非空格字符(如:星号);用cout <<“\n”; 语句控制输出一行字符之后回车换行。 源程序: #include using namespace std; int main () { int i,j; for(i=1;i<=5;i++) { for(j=1;j<=i;j++) cout<<" "; for(j=11-2*i;j>0;j--) cout<<"*"; cout<<"\n"; } cout<<"\n"; for(i=1;i<=5;i++) { for(j=1;j<=i;j++) cout<<" "; for(j=6-i;j>0;j--) cout<<"*"; cout<<"\n"; } cout<<"\n"; for(i=1;i<=5;i++) { for(j=6-i;j>0;j--) cout<<" "; for(j=1;j<=i;j++)

实验三 数组与指针实验

实验三数组与指针实验 【实验目的】 1.学习使用数组数据对象。 2.掌握指针的使用方法。 3.学习通过动态内存分配实现动态数组的定义和使用,并体会指针在其中的作用。4.练习通过Debug观察指针的内容及其所指对象的内容。 【实验内容】 1.运行下列程序,观察运行结果。 (1)#include class ArrayElem { int x; public: ArrayElem(int i){x=i;} //带参数的构造函数 int getx(){return x;} }; int main() { ArrayElem obs[4] ={-1,-2,-3,-4}; //创建对象数组并初始化 for(int i=0;i<4;i++) cout<<"obs["< class NumClass { int num; public: void set_num(int val){num=val;} void show_num(){cout<<"The num is :"<set_num(20);p->show_num(); //通过指针调用成员函数 return(0); } (3)#include class NumClass

字符及字符串输入输出与顺序程序设计实验 实验报告

字符及字符串输入输出与顺序程序设计实验 实验报告 2.2.1 实验目的 1、学习和掌握字符及字符串的输入输出方法。 2、掌握顺序程序的设计方法。 3、进一步掌握调试工具的使用方法。 2.2.2 实验预习要求 1、复习DOS功能调用中用于字符输入(功能号01H)、字符输出(功能号02H)、字符串 输入(功能号为0AH)以及字符串输出(功能号09H)的调用方法(详见教材5.5.6)。 2、复习BCD码运算调整指令。 3、根据“2.2.3 实验内容”中给出的源程序框架编写完整的源程序,以便实验时调试。 4、从“2.2.4 实验习题”中任选一道题目,编写源程序,以便上机调试。 2.2.3实验内容 从键盘输入两个一位十进制数,计算这两个数之和,并将结果在屏幕上显示出来。1、问题分析 比如使用功能号为01H的用于实现单个字符输入的DOS功能调用接收从键盘输入的两个十进制数8和6,这时计算机内部得到的是这两个数的ASCII码值38H和36H。由于数字0 9的ASCII码值与其代表的数值之间相差30H,因此将其减去30H即可得到以非压缩型BCD数形式表示的十进制数08H和06H,使用ADD指令对它们进行相加后结果为0EH(00001110B),显然需要用非压缩型BCD数加法调整指令对ADD的运算结果进行调整,调整后得到两个非压缩型BCD数01H和04H,将它们分别加上30H后变为其对应的ASCII码31H(1的ASCII码)和34H(4的ASCII码),然后调用功能号为02H用于单个字符输出的DOS功能调用将它们显示出来。综上所述,需要考虑以下问题。 (1)从键盘输入一个一位十进制数的方法 通过功能号为1的DOS功能调用实现从键盘输入一个字符,格式如下:MOV AH, 01H INT 21H ;此时程序等待用户键入,键入字符的ASCII码值存在AL中 SUB AL, 30H ;减去30H后得到键入数字所代表的数值 (2)提示信息字符串的显示 通过功能号为9的DOS功能调用实现字符串显示,注意字符串的最后一个字符必需为’$’。指令格式如下: MOV DX, OFFSET INFOR1 ;INFOR1为在数据段中定义的要显示的字符串

实验三.数组与字符串

1.实验三数组与字符串 一、实验目的: 1.熟悉Java的数组的使用,编程练习数组声明、定义、遍历和排 序等操作。 2.熟悉Java的字符串相关类的使用,通过编程实现针对字符串的 一般操作。 二、实验内容: 1.定义一个有10个元素的整型数组,找出最大最小值; 2.定义一个有10个元素的整型数组,用选择法实现由小到大排序; 3.定义一个能实现冒泡法排序的方法bSort(int[] arr),然后定义并 初始化一4*5的二维数组,用bSort(int[] arr)将该二维数组的每 行元素进行升序排序; 4.编程求解一个3*3矩阵每一行的元素之和,每一列元素之和,对 角线元素之和,并输出。 5.接收键盘输入的字符串,使用String类的方法indexOf()来统 计该字符串中各个字符出现的次数。 6.设定并初始化一个字符串数组,并将数组中那些以字母b开头的 元素打印出来。 7.接收键盘输入的字符串,分别按顺序输出该字符串中的大写字符 和小写字符。 8.接收键盘输入的英文字符串(单词之间用空格隔开),将字符串 中出现的单词首字母改成大写后输出。 三、实验要求: 1.通过实验掌握数组的定义和初始化; 2.掌握数组最值求解算法; 3.掌握数组的基本排序算法; 4.掌握遍历数组的算法; 5.通过实验掌握String类的使用; 6.通过实验掌握String类常用方法的使用;

7.从JDK文档中查阅String类的以下方法(与本实验内容相关): split(),startWith(),toUpperCase(),indexOf(),charAt(),并说明 它们的用法; 8.写出实验报告。 四、实验学时:3学时 五、实验步骤: 1.进入Java编程环境; 2.新建一个Java文件,编写main()方法实现一维数组求最值的算 法; 3.新建一个Java文件,编写main()方法实现一维数组选择法排序 算法; 4.新建一个Java类,定义bSort(int[] arr)方法(冒泡法)实现数组 升序排序,然后在main方法里实现对一4*5二维数组每行元素 的升序排序; 5.新建一个Java文件,编写main()方法声明并初始化一两维3*3 数组,设计算法实现行、列和对角线元素的求和操作; 6.编写主方法main(),其中实现接收键盘输入功能、文件操作功能 和文件内容输出功能; 7.调用相应构造方法创建String对象; 8.查阅JDK文档,找出可以实现实验内容的String方法,设计算 法,编写程序; 9.调试运行程序,观察输出结果。

相关主题
文本预览
相关文档 最新文档