实验三 数组与指针实验

合集下载

利用指针排序实验报告(3篇)

利用指针排序实验报告(3篇)

第1篇一、实验目的1. 理解指针在排序算法中的应用。

2. 掌握几种常见的排序算法(如冒泡排序、选择排序、插入排序等)的指针实现方式。

3. 比较不同排序算法的效率,分析其优缺点。

二、实验环境1. 操作系统:Windows 102. 编程语言:C++3. 开发环境:Visual Studio 2019三、实验内容本次实验主要实现了以下排序算法:1. 冒泡排序2. 选择排序3. 插入排序以下是对每种排序算法的具体实现和性能分析。

1. 冒泡排序(1)算法原理冒泡排序是一种简单的排序算法。

它重复地遍历待排序的序列,比较每对相邻的元素,如果它们的顺序错误就把它们交换过来。

遍历序列的工作是重复地进行,直到没有再需要交换的元素为止。

(2)指针实现```cppvoid bubbleSort(int arr, int len) {for (int i = 0; i < len - 1; i++) {for (int j = 0; j < len - 1 - i; j++) {if ((arr + j) > (arr + j + 1)) {int temp = (arr + j);(arr + j) = (arr + j + 1);(arr + j + 1) = temp;}}}}```(3)性能分析冒泡排序的时间复杂度为O(n^2),空间复杂度为O(1)。

当待排序序列基本有序时,冒泡排序的性能较好。

2. 选择排序(1)算法原理选择排序是一种简单直观的排序算法。

它的工作原理是:首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置,然后,再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾。

以此类推,直到所有元素均排序完毕。

(2)指针实现```cppvoid selectionSort(int arr, int len) {for (int i = 0; i < len - 1; i++) {int minIndex = i;for (int j = i + 1; j < len; j++) {if ((arr + j) < (arr + minIndex)) {minIndex = j;}}int temp = (arr + i);(arr + i) = (arr + minIndex);(arr + minIndex) = temp;}}```(3)性能分析选择排序的时间复杂度为O(n^2),空间复杂度为O(1)。

C语言教材第七章指针实验

C语言教材第七章指针实验

C语⾔教材第七章指针实验第七章指针第⼀部分知识训练【知识要点】1. 地址与指针指针变量的概念:⽤⼀个变量专门来存放另⼀个变量的地址。

2. 指向变量的指针变量指针变量的形式:基类型 *指针变量名;&: 取地址运算符;*:指针运算符。

3. 指针与数组引⽤⼀个数组元素可以⽤下标法和指针法;可以⽤数组名作函数的参数。

4.指针与函数函数指针变量定义的⼀般形式为:类型说明符 (*指针变量名)();⼀个函数的返回值可以是⼀个函数。

【典型习题与解析】5. char * const p;char const * pconst char *p上述三个有什么区别?【解析】char * const p; //常量指针,p的值不可以修改;char const * p;//指向常量的指针,指向的常量值不可以改;const char *p; //和char const *p。

6. main(){int a[5]={1,2,3,4,5};int *ptr=(int *)(&a+1);printf("%d,%d",*(a+1),*(ptr-1));}输出结果是什么?【解析】答案:输出:2,5*(a+1)就是a[1],*(ptr-1)就是a[4],执⾏结果是2,5。

&a+1不是⾸地址+1,系统会认为加⼀个a数组的偏移,是偏移了⼀个数组的⼤⼩(本例是5个int)。

1)&a是数组指针,其类型为 int (*)[5];⽽指针加1要根据指针类型加上⼀定的值,不同类型的指针+1之后增加的⼤⼩不同。

2)a是长度为5的int数组指针,所以要加 5*sizeof(int),所以ptr实际是a[5],但是prt与(&a+1)类型是不⼀样的(这点很重要),所以prt-1只会减去sizeof(int*) a,&a的地址是⼀样的,但意思不⼀样。

3)a是数组⾸地址,也就是a[0]的地址,&a是对象(数组)⾸地址,a+1是数组下⼀元素的地址,即a[1],&a+1是下⼀个对象的地址,即a[5]。

C语言实验报告——指针

C语言实验报告——指针

C语言实验报告——指针实验目的:1.掌握指针的基本概念与用法;2.熟悉指针的运算规则;3.理解指针与数组之间的关系。

实验设备:1.计算机;2.编程环境:C语言编译器。

实验内容:1.指针的声明与初始化;2.指针的运算;3.指针与数组。

实验原理:指针是C语言中非常重要的概念,它可以用来存储变量的地址。

通过指针,我们可以直接访问存储在内存中的变量,从而实现对变量的灵活操作。

指针的声明与初始化:在C语言中,指针的声明可以通过在变量名前添加一个"*"来实现。

指针的初始化可以通过给指针赋予一些变量的地址来实现。

指针的运算:指针可以进行递增和递减运算。

递增指针使其指向下一个位置,递减指针使其指向上一个位置。

这样可以方便地遍历数组或者对数组进行操作。

指针与数组:指针与数组有着密切的关系。

在C语言中,数组实际上是由连续的存储单元组成的。

指针可以通过指向数组的首元素来访问数组中的各个元素。

通过指针可以方便地对数组进行操作,例如遍历数组、修改数组元素等等。

实验步骤:1.声明一个整型变量并初始化;2.声明一个指向该整型变量的指针,并将其初始化为该整型变量的地址;3.输出指针所指向的变量的值;4.改变指针所指向变量的值,并输出;5.声明一个数组,并初始化;6.输出数组的每个元素;7.使用指针对数组进行递增和递减运算,并输出运算结果。

实验结果与分析:1.初始变量的值为10;2.指针所指向的变量的值为10;3.改变指针所指向变量的值为20;4.数组元素分别为1、2、3、4、5;5.指针的递增运算结果为2、3、4、5;6.指针的递减运算结果为4、3、2、1实验结论:通过本次实验,我掌握了指针的基本概念与用法。

指针可以用来存储变量的地址,通过指针可以访问变量的值。

指针还可以用来操作数组,方便地遍历数组、修改数组元素等。

指针的递增和递减运算可以方便地遍历数组。

在实际编程中,熟练掌握指针的使用将会事半功倍。

c语言数组与指针实验心得

c语言数组与指针实验心得

c语言数组与指针实验心得
C语言的数组和指针一直是两个容易混淆的东西,当初在学习的时候,也许为了通过考试会对指针和数组的一些考点进行突击,但是很多极其细节的东西也许并不是那么清楚。

本篇侧重点在于分析数组与指针的关系,什么时候数组可以等同于指针,什么时候二者不同。

我们常常把指针和数组混淆,比如以下这种情况,定义为指针,却使用了数组的方式来取值。

char*p="pointertest";
c=p[i];
定义为指针,但是使用数组的方式来取值。

我们可以结合以上两种方式,来分析这种情况下的取值过程:
1.先根据符号p的地址,取到符号p的值,是一个地址,我们假设为4040,也就是和上面第二种情况的指针访问一样。

2.接下来就是4040+i,得到新的地址值
3.取新的地址的内容
同理,取偏移地址的时候,需要注意变量类型,比如int类型,就是加上i*4
以下对于二者可相互替换做一个总结
(1)externchara[];通过extern声明的数组,不能用指针形式替换
(2)数组定义为chara[5],不能用指针的形式替换
(3)数组作为函数参数,可以使用指针形式替换
(4)在表达式中,比如c=a[i],这种情况也可以使用指针形式来替换,因为在表达式中,数组名a被当做指向该数组第一个元素的指针,所以可以和指针相互替换。

而且数组下标i可以和指针的偏移量等同起来,a[i]等同于*(a+i)。

C语言指针实验报告-c语言指针心得

C语言指针实验报告-c语言指针心得
用字符串的指针与指向字符串的指针变量;
2
将一个任意整数插入到已排序的整形数组中,插入后,数组中的数仍然保持有序 要求:
(1) 整形数组直接由赋值的方式初始化,要插入的整数有seanf()函数数入;
(2)算法实现过程采用指针进行处理;
(3) 输入原始数据以及插入整数后的数据,并加以说明;
c语言程序设计实验报告实验名称指针机械工程与自动化专业班级机械1003任课教师实验时间实验内容将一个任意整数插入到已排序的整形数组中插入后数组中的数仍然保持有序要求
C
实验名称
指针
学院
机械工程与自动化
专业班级
机械1003
姓名
学号
任课教师
实验时间
1
(1)掌握指针的概念,会定义与使用指针变量;
(2) 能正确使用变量的指针与指向变量的指针变量;

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

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

实验十 参考答案(指针)三、实验内容( 按要求完善或设计以下程序,并调试分析运行结果)1. 程序填空题 给定程序BLACK10-1.C 中,函数fun 的功能是:将形参n 所指变量中,各位上为偶数的数去除,剩余的数按原来从高位到低位的顺序组成一个新的数,并通过形参指针n 传回所指变量。

例如,输入一个数:27638496,新的数:为739。

请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。

【解题思路】第一处:t 是通过取模的方式来得到*n 的个位数字,所以应填:10。

第二处:判断是否是奇数,所以应填:0。

第三处:最后通形参n 来返回新数x ,所以应填:x 。

2. 程序改错题 给定程序MODI10-1.C 中函数fun 的功能是: 计算n 的5次方的值(规定n 的值大于2、小于8),通过形参指针传回主函数;并计算该值的个位、十位、百位上数字之和作为函数值返回。

例如,7的5次方是16807, 其低3位数的和值是15。

【解题思路】第一处:变量d 的初始值应为1。

第二处:整除的符号是 /。

3. 程序设计题 请编写函数fun ,它的功能是:求出能整除形参x 且不是偶数的各整数,并按从小到大的顺序放在pp 所指的数组中,这些除数的个数通过形参n 返回。

例如,若 x 中的值为: 35,则有 4 个数符合要求,它们是: 1, 5, 7, 35。

【解题思路】本题是求出能整除形参x 且不是偶数的各整数,并按从小到大的顺序放在pp 所指的数组中,这些除数的个数通过形参n 返回。

【参考答案】void fun ( int x, int pp[], int *n ){ int i; *n=0;for(i=1; i <= x; i++)if((x % i== 0) && (i % 2)) pp[(*n)++]=i;}4. 程序填空题 给定程序中,函数fun 的功能是:找出N ×N 矩阵中每列元素中的最大值,并按顺序依次存放于形参b 所指的一维数组中。

vs2008程序编写实验报告--数组、指针与函数

vs2008程序编写实验报告--数组、指针与函数

《测绘程序设计()》上机实验报告(Visual C++.Net)实验3 数组、指针与函数班级:学号:姓名:序号:二零一零年三月实验3 数组、指针与函数一、实验目的∙掌握数组的定义、引用及应用方法。

∙掌握指针与动态数组。

∙掌握函数的定义、引用及应用方法。

二、实验内容1.求任意多边形面积多边形面积计算原理及算法计算原理:例如上图:))((21))((21))((21))((214114344323321221y y x x y y x x y y x x y y x x P -++-++-++-+=面积计算的算法:经整理后得:)11,,2,1())((21111=+==-+=∑=++i n i n i Y Y X X P ni i i i i 时,;当设计思路:因为计算多边形面积的数据随多边形顶点数的增加而增加,因此要编写一个分割字符串的函数,使输入的数据第一行表示多边形类型,接下来的每一行依次表示一个顶点的坐标,X 与Y 之间用逗号隔开。

创建一个二维数组,行数即顶点个数,列数为2,用来保存各顶点的坐标。

调用Split 函数分离,获取各顶点坐标数据 界面设计:由1个静态框、2个文本框和2个命令按钮组成。

具体见运行结果的输出界面主要代码:ComAreaDlg.cppvoid CComAreaDlg::OnBnClickedCancel(){// TODO: 在此添加控件通知处理程序代码OnCancel();}CString * CComAreaDlg::SplitString(CString str, char split, int& iSubStrs){int iPos = 0; //分割符位置int iNums = 0; //分割符的总数CString strTemp = str;CString strRight;//先计算子字符串的数量while (iPos != -1){iPos = strTemp.Find(split);if (iPos == -1){break;}strRight = strTemp.Mid(iPos + 1, str.GetLength());strTemp = strRight;iNums++;}if (iNums == 0) //没有找到分割符{//子字符串数就是字符串本身iSubStrs = 1;return NULL;}//子字符串数组iSubStrs = iNums + 1; //子串的数量= 分割符数量+ 1CString* pStrSplit;pStrSplit = new CString[iSubStrs];strTemp = str;CString strLeft;for (int i = 0; i < iNums; i++){iPos = strTemp.Find(split);//左子串strLeft = strTemp.Left(iPos);//右子串strRight = strTemp.Mid(iPos + 1, strTemp.GetLength()); strTemp = strRight;pStrSplit[i] = strLeft;}pStrSplit[iNums] = strTemp;return pStrSplit;}void CComAreaDlg::OnBnClickedButton1(){// TODO: 在此添加控件通知处理程序代码UpdateData(TRUE);int iLine;//分行并存入字符串数组CString *pstrLine=SplitString(strCoordData,13,iLine);if(iLine<4){MessageBox(_T("输入的数据不完整!"));return;}int iApexCount=iLine-1;//多边形顶点个数short npolygonType;//多边形类型,double (*cApex)[2];cApex=new double[iApexCount][2];//顶点坐标值CString *strTmp=NULL;int n;npolygonType = _ttoi(pstrLine[0]); //第一行为多边形类型//逐行用Split函数分离,获取各顶点坐标数据for(int i=0;i<iApexCount;i++){strTmp = SplitString(pstrLine[i+1], ',',n);//分割第三行cApex[i][0] = _tstof(strTmp[0]);cApex[i][1] = _tstof(strTmp[1]);if(strTmp!=NULL)//释放内存{delete[] strTmp;strTmp=NULL;}}if(strTmp!=NULL)//释放内存{delete[] strTmp;strTmp=NULL;}double Area=0.0;//多边形面积for(int i=0;i<iApexCount;i++){if(i==iApexCount-1){//i+1=0;Area = Area+(0.5)*(cApex[0][0]+cApex[i][0])*(cApex[0][1]-cApex[i][1]);}elseArea = Area+(0.5)*(cApex[i+1][0]+cApex[i][0])*(cApex[i+1][1]-cApex[i][1]); //计算面积}//输出结果strResult.Format(_T("%s%.1fmm\r\n"),_T("面积S=:"),Area);//_T("序号 "),_T("调整后H (m) "));UpdateData(FALSE);//释放内存if(cApex!=NULL){delete [] cApex; cApex=NULL;}}运行结果:2.由三角形三个边长求内角函数计算公式: bc ac b A 2cos 222-+=ac bc a B 2cos 222-+=abcb a C 2cos 222-+=设计思路:已知三角形三个边长求三角形三个内角算法简单,需要的数据也少,顺序结构即可实现。

C语言实验报告-数组与指针

C语言实验报告-数组与指针
scanf("%d,%d,%d",&m,&n,&dn);
pArr=(int **)malloc((m+2)*sizeof(int *));
for(i=0;i<=m+2;i++)
pArr[i]=(int *)malloc((n+2)*sizeof(int *));
for(i=0;i<=n+2;i++)
3.掌握理解数组与指针的概念及两者之间的联系;
4.掌握指向数组元素指针的使用;
5.掌握用指向数组指针变量表示数组的数组元素及其操作方法;
6.掌握用指针形式参数在函数间传递数组实际参数的方法。
7.熟悉并掌握动态数组的创建方式及元素访问方法。
二、实验项目内容(实验题目)
模拟“地雷游戏”。在M*N的方格中,随机布上dn个“地雷”,按M行N列输出各格子的数(有雷为9(或‘*’),无雷为0)。在有相邻地雷的格子内进一步标出相邻地雷数。要求:
{
for(j=0;j<=n+2;j++)
pArr[i][j]=0;
}
printf("随机雷区:\n");
mine(pArr,m,n,dn);
for(i=1;i<=m;i++)
{
for(j=1;j<=n;j++)
{
printf("%5d",pArr[i][j]);
}
printf("\n");
}
printf(ቤተ መጻሕፍቲ ባይዱ\n地雷分布及数目\n");
mine_dis(pArr,m,n);

C语言实验报告《指针》与C语言实验报告《数组》汇编

C语言实验报告《指针》与C语言实验报告《数组》汇编

C语言实验报告《指针》与C语言实验报告《数组》汇编C语言实验报告《指针》学号:__________ 姓名:__________ 班级:__________ 日期:__________指导教师:__________ 成绩:__________实验五指针一、实验目的1、掌握指针的概念、会定义和使用指针变量2、掌握指向数组的指针变量3、掌握字符串指针的使用二、实验内容1、输入3个字符串,按由小到大的顺序输出。

(习题10.2)2、写一函数,求一个字符串的长度。

在main函数中输入字符串,并输出其长度。

(习题10.6)3、完善程序,要求使用函数功能:将一个数字字符串转换成一个整数(不得调用C语言提供的将字符串转换为整数的函数)。

例如,若输入字符串“-1234”,则函数把它转换为整数值-1234。

#include#includelong fun(char *p)填写程序void main()char s[6];long n;printf("Enter a string:\n");gets(s);n=fun(s);printf("%ld\n",n);一、三、实验步骤与过程第一┆..整理该文章,版权归原作者、原出处所有...四、程序调试记录C语言实验报告《数组》学号:__________ 姓名:__________ 班级:__________ 日期:__________指导教师:__________ 成绩:__________实验三数组一、实验目的1、掌握一维和二维数组的定义、赋值和输入输出2、掌握字符数组和字符串数组的使用3、掌握与数组有关的排序算法二、实验内容1、已有一个已排好序的数组,要求输入一个数后,按原来排序的规律将它插入数组中。

(习题7.4)2、将一个数组中的值按逆序重新存放。

例如,原来顺序为8,6,5,4,1。

要求改为1,4,5,6,8。

(习题7.5)3、如下程序是按选择法对数组中的n个元素按从小到大的顺序排序,请对程序中的错误进行改正,使其正常运行。

实验三 数组与指针实验

实验三  数组与指针实验

实验三数组与指针实验【实验目的】1.学习使用数组数据对象。

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

3.学习通过动态内存分配实现动态数组的定义和使用,并体会指针在其中的作用。

4.练习通过Debug观察指针的内容及其所指对象的内容。

【实验内容】1.运行下列程序,观察运行结果。

(1)#include<iostream.h>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["<<i<<"].getx():"<<obs[i].getx()<<"\n";//访问数组元素的成员return(0);}(2)#include<iostream.h>class NumClass{int num;public:void set_num(int val){num=val;}void show_num(){cout<<"The num is :"<<num<<"\n";}};int main(){NumClass ob,*p; //声明一个对象和指向对象的指针ob.set_num(10); ob.show_num(); //通过对象ob直接调用成员函数p=&ob; //使对象指针p指向对象obp->set_num(20);p->show_num(); //通过指针调用成员函数return(0);}(3)#include<iostream.h>class NumClass{int num;public:void set_num(int val){num=val;}void show_num(){cout<<"The num is :"<<num<<"\n";}};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<iostream.h>class NumClass{int num;public:void set_num(int val){num=val;}void show_num(){cout<<"The num is :"<<num<<"\n";}};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个学生数据,包括学号、姓名、成绩,要求输出这些学生数据并计算平均分。

C语言程序设计 实验11.1_指针数组、指针与函数

C语言程序设计 实验11.1_指针数组、指针与函数
char str[80];
scanf("%d",&repeat);
getchar();
for(ri=1;ri<=repeat;ri++){
scanf("%s",str);
count=0;
for(i=0;i<7;i++){
if(strcmp(str,date[i])==0){
color[index]=color[i];
color[i]=temp;
}
for(i = 0; i < n; i++)
printf("%s ", color[i]);
printf("\n");
}
2 编程题
/*---程序填空,不要改变与输入输出有关的语句。输入一个正整数repeat (0<repeat<10),做repeat次下列运算:编写程序,输入一个月份,输出对应的英文名称,要求用指针数组表示12个月的英文名称。若输入月份错误,输出提示信息。输入输出示例:括号内为说明
用字符指针实现函数str_cat(s,t),将字符串t复制到字符串s的末端,并且返回字符串s的首地址,并编写主程序。
例:(括号内为说明)
输入
abc
def
输出
abcdef
------*/
#include <stdio.h>
#include <string.h>
char *str_cat(char *s,char *t);
void main()
{
char s[80],t[80];

《c语言程序设计》实验指导书答案

《c语言程序设计》实验指导书答案

《c语言程序设计》实验指导书答案《C语言程序设计》实验指导书答案实验一:C语言环境搭建与基本语法1. 问题:如何在计算机上搭建C语言开发环境?答案:搭建C语言开发环境通常需要安装编译器和集成开发环境(IDE)。

常见的编译器有GCC,而IDE如Visual Studio Code、Code::Blocks等。

安装完成后,配置好编译器路径,即可开始编写和编译C语言程序。

2. 问题:C语言的基本数据类型有哪些?答案:C语言的基本数据类型包括整型(int)、字符型(char)、浮点型(float和double)以及更复杂的结构体(struct)和联合体(union)等。

3. 问题:如何定义一个变量?答案:定义变量的基本语法是:`类型名变量名;`。

例如,定义一个整型变量a:`int a;`。

4. 问题:如何实现变量的输入和输出?答案:使用`scanf`函数进行输入,使用`printf`函数进行输出。

例如,输入一个整数并输出:`scanf("%d", &a); printf("%d", a);`。

实验二:控制结构1. 问题:C语言中的条件语句有哪些?答案:C语言中的条件语句主要有`if`语句和`switch`语句。

2. 问题:如何使用`if`语句?答案:`if`语句的基本语法是:`if (条件) { 语句 }`。

例如,判断一个数是否为正数:`if (a > 0) { printf("正数"); }`。

3. 问题:如何使用`switch`语句?答案:`switch`语句用于多条件分支选择。

基本语法是:`switch (表达式) { case 常量1: 语句1; break; case 常量2: 语句2; break; ... default: 默认语句; }`。

4. 问题:C语言中的循环语句有哪些?答案:C语言中的循环语句主要有`for`循环、`while`循环和`do-while`循环。

c 指针实验报告

c  指针实验报告

c 指针实验报告
C指针实验报告
在计算机编程中,指针是一种非常重要的概念。

它可以让程序员直接访问内存中的数据,从而实现更高效的操作。

本次实验旨在通过C语言编程实践,加深对指针的理解和运用。

实验一:指针的基本概念
首先,我们创建了一个简单的C程序,通过指针来访问一个整型变量的地址和数值。

通过这个实验,我们深入了解了指针的概念和基本操作。

实验二:指针的运算
接着,我们进行了指针的运算实验。

我们对指针进行了加法和减法运算,并观察了其结果。

这个实验帮助我们更好地理解了指针的运算规则和原理。

实验三:指针和数组
在这个实验中,我们将指针和数组结合起来使用。

我们通过指针来访问数组的元素,并进行了一些简单的操作。

这个实验让我们更加熟悉了指针和数组之间的关系。

实验四:指针和函数
最后,我们进行了指针和函数的实验。

我们编写了一些函数,其中包括了指针作为参数和返回值。

通过这个实验,我们学会了如何在函数中使用指针,并且理解了指针在函数调用中的作用。

通过这些实验,我们对C指针有了更深入的理解和掌握。

指针作为C语言中的重要概念,对于程序员来说是必须要掌握的。

通过实践,我们不仅加深了对指针的理解,还提高了编程能力和技术水平。

希望通过这次实验,能够对大家有
所帮助,也希望大家能够继续深入学习和探索C语言的奥秘。

数组应用实验报告

数组应用实验报告

数组应用实验报告
《数组应用实验报告》
在计算机科学领域,数组是一种非常重要的数据结构,它可以存储多个相同类型的数据,方便进行管理和操作。

在本次实验中,我们将探讨数组的应用,并通过实验报告来展示其在不同场景下的使用情况。

实验一:数组的创建和初始化
在本实验中,我们首先学习了如何创建和初始化数组。

通过编写简单的代码,我们成功创建了一个包含整数类型的数组,并对其进行了初始化。

我们发现,数组的索引是从0开始的,这意味着我们可以通过索引来访问数组中的元素。

实验二:数组的遍历和操作
接下来,我们学习了如何遍历数组并对其进行操作。

我们使用循环结构来遍历数组中的每个元素,并进行相应的操作。

我们发现,使用数组可以方便地对一组数据进行统一的处理,比如求和、平均值等操作。

实验三:多维数组的应用
在这个实验中,我们学习了多维数组的应用。

通过创建二维数组,我们可以模拟二维空间中的数据结构,比如矩阵、图像等。

我们发现,多维数组可以方便地表示复杂的数据结构,并且可以通过多重循环来对其进行遍历和操作。

实验四:数组的应用案例
最后,我们通过实际案例来展示数组的应用。

我们使用数组来实现一个简单的学生成绩管理系统,通过输入学生的成绩,然后计算平均分、最高分、最低分等统计数据。

我们发现,数组的使用大大简化了数据的管理和操作,提高了程序的效率和可维护性。

综上所述,本次实验通过实验报告展示了数组在不同场景下的应用情况。

通过学习和实践,我们深刻理解了数组的重要性和灵活性,相信在今后的编程工作中,我们将能够更加熟练地运用数组来解决实际问题。

c语言实验实验报告——数组

c语言实验实验报告——数组

c语言实验实验报告——数组### 一、实验目的本次实验的主要目的是通过C语言指针实现数组的基本操作,如排序,调整等,进一步加深对数组的认识,为以后深入学习编程能力打下坚实基础。

1. 采用数组作为示例,使用C语言编程实现数组排序,并编写程序分析排序过程中的时间复杂度。

2. 编写程序以实现数组调整,即根据一个给定的条件,将数组中的一部分向右移动,将另外一部分向左移动,并分析调整过程中的时间复杂度。

### 三、程序代码首先编写程序来实现数组的排序,使用冒泡法进行排序,程序代码如下:```c#include<stdio.h>#define N 12//冒泡排序算法void BubbleSort(int a[],int n){int i,j;int temp;for(i=0;i< n-1;i++)for(j=0;j< n-i-1;j++)//如果第j位大于第j+1位,则进行位置交换if(a[j]>a[j+1]){temp=a[j];a[j]=a[j+1];a[j+1]=temp;}}### 调整// 将小于5的数放到数组的左边,大于等于5的数放到右边 int MinToLeft(int array[], int N){int i = 0;int j = N - 1;while (i<j){// 找右边大于5的while (array[j] >= 5 && i<j)j--;// 找左边小于5的while (array[i] < 5 && i<j)i++;// 左边比右边大则交换if (i<j){int t = array[i];array[i] = array[j];array[j] = t;}}return i;}### 四、时间复杂度数组排序是在数据量很大的情况下也能维持O(n2)时间复杂度,其中n是要排序数组中元素的个数。

数组、字符处理实验报告[五篇范例]

数组、字符处理实验报告[五篇范例]

数组、字符处理实验报告[五篇范例]第一篇:数组、字符处理实验报告验实验 4数组1.实验目的和要求(1)掌握一维数组与二维数组的定义、使用及初始化方法。

(2)学习数组作为函数参数的用法。

(3)掌握字符数组和字符串函数的使用方法。

(4)掌握与数组有关的常用排序算法,进一步理解模块化程序设计的方法。

(5)掌握字符、字符串的输入/输出方法。

(6)掌握字符数组的使用。

(7)学会使用字符串的指针和指向字符串的指针变量。

2.实验内容:实验指导书中的实验六、实验七3.实验步骤实验六数组部分:6-1:解决问题的算法或源程序代码:程序的运行测试结果截图(考虑各种情况下的运行结果):6-2:该程序完整的源程序代码是:程序运行结果截图:6-3 :该程序完整的源程序代码是:程序运行结果截图:6-4.:解决问题的关键算法的源程序代码是:程序运行结果截图:6-5:解决问题的关键算法的源程序代码是:程序运行结果截图:6-6(选作):我使用的算法为:请用文字描述一下程序运行结果截图:6-7(选作):我使用的算法为:程序运行结果截图:7-1 该程序的功能是:去除空格后的字符串程序运行结果截图:7-2:解决问题的关键算法的源程序代码是:程序运行结果截图:7-3:解决问题的关键算法的源程序代码是:程序运行结果截图:7-4:解决问题的关键算法的源程序代码是:程序运行结果截图:7-5:解决问题的关键算法的源程序代码是:程序运行结果截图:7-6:解决问题的关键算法的源程序代码是:程序运行结果截图:、实验小结一维数组与二维数组使用和初始化,数组作为函数参数的用法还是不太熟练。

掌握了与数组有关的常用排序算法,字符、字符串的输入输出方式。

进一步掌握使用字符串的指针和指向字符串的指针变量的方法。

掌握了字符串数组和数字数组的运算。

第二篇:实验:字符数组与字符串实验11:字符数组与字符串一、实验目的1、理解字符数组和字符串的概念。

2、掌握字符数组的定义、初始、数组元素引用、输入输出。

指针实验报告结果讨论

指针实验报告结果讨论

指针实验报告结果讨论引言指针是C语言中一种重要的数据类型,它可以存储变量的内存地址。

指针的使用可以帮助我们在程序中更加灵活地操作内存,提高程序的执行效率。

本实验旨在通过对指针的实验,来验证指针的使用方式和效果,并讨论其在程序设计中的应用。

实验结果在实验过程中,我们通过编写C程序来进行指针的操作和应用。

在实验一中,我们编写了一个简单的程序,通过指针来交换两个变量的值。

实验二中,我们编写了一个程序,通过指针来实现数组元素的逆序排列。

在实验三中,我们通过指针来实现动态分配内存,并在程序运行过程中动态改变内存空间的大小。

实验结果显示,指针的使用确实可以提高程序的执行效率。

在实验一中,通过指针交换变量的值,只需要进行一次赋值操作,而不需要额外的变量来保存中间值,节省了内存空间,并提高了程序的执行速度。

在实验二中,通过指针进行数组元素的逆序排列,同样只需要进行一次赋值操作,而不需要额外的数组来存储逆序后的结果。

而在实验三中,通过指针来动态分配内存,可以根据实际需求来动态改变内存空间的大小,从而提高程序的灵活性和可扩展性。

结果讨论指针的使用在程序设计中有着广泛的应用。

首先,通过指针可以实现变量的间接访问,可以通过指针修改变量的值,或者通过指针获取变量的地址等。

这种间接访问方式可以帮助我们更加灵活地操作内存,同时也可以提高程序的效率。

其次,指针的使用可以减少内存的占用,在一些需要频繁操作内存的场景中尤为重要。

例如,在实验二中,通过指针进行数组元素的逆序排列,只需要进行一次赋值操作,而不需要额外的数组来保存逆序后的结果,从而减少了内存的占用。

最后,通过指针可以实现动态内存分配,可以根据实际需要来动态改变内存空间的大小,提高程序的灵活性和可扩展性。

然而,指针的使用也有一些需要注意的地方。

首先,指针的使用需要谨慎,容易出现一些常见的错误,例如空指针引用、野指针等。

这些错误在程序中很难调试,容易导致程序崩溃或产生不可预期的结果。

指针实验报告

指针实验报告

指针实验报告指针实验报告引言:指针是计算机编程中非常重要的概念,它允许程序直接访问计算机内存中的数据。

通过指针,程序可以更加灵活地操作内存,提高程序的效率和性能。

本实验旨在通过一系列实际案例,深入理解指针的概念和使用方法。

实验一:指针的基本概念首先,我们需要了解指针的基本概念。

指针是一个变量,它存储了一个内存地址。

通过指针,我们可以访问和修改该地址处的数据。

在C语言中,我们可以通过使用"*"符号来声明和操作指针。

实验一中,我们编写了一个简单的程序,演示了指针的基本用法。

在程序中,我们声明了一个整型变量和一个指针变量。

通过指针变量,我们可以获取和修改整型变量的值。

这个实验帮助我们理解了指针的基本概念和使用方法。

实验二:指针与数组指针与数组之间有着密切的关系。

事实上,数组名本身就是一个指针,它存储了数组的第一个元素的地址。

通过指针,我们可以遍历数组中的所有元素,并对其进行操作。

在实验二中,我们编写了一个程序,演示了指针与数组的关系。

通过指针遍历数组,我们可以对数组中的元素进行排序。

这个实验加深了我们对指针和数组的理解,并展示了指针在处理数组时的强大功能。

实验三:指针与动态内存分配动态内存分配是指在程序运行时,根据需要分配和释放内存空间。

指针在动态内存分配中起着重要的作用。

通过指针,我们可以在程序运行时分配内存,并在不再需要时释放内存,避免内存泄漏。

在实验三中,我们编写了一个程序,演示了指针与动态内存分配的使用。

通过使用malloc函数,我们可以在程序运行时分配一块指定大小的内存空间,并通过指针访问和操作该内存。

这个实验帮助我们理解了动态内存分配的原理和指针在其中的作用。

实验四:指针与函数指针在函数中也有着重要的应用。

通过指针参数,我们可以在函数中修改传入的变量的值,实现函数的返回值效果。

指针参数还可以用于函数之间的数据传递,提高程序的效率和性能。

在实验四中,我们编写了一个程序,演示了指针在函数中的应用。

实验三 数组、指针与字符串

实验三 数组、指针与字符串

实验三数组、指针与字符串(4学时)[实验目的]1、通过动态内存分配实现动态数组,并体会指针在其中的作用;2、理解C++中深、浅拷贝的区别和适用场合,掌握其应用方法;3、运用所学知识,实现简单的数据结构,培养分析和解决实际问题的能力。

[实验内容与步骤]1、实现一个大小可变的整型数据元素集合,集合可存储的集合元素个数在对象构造时给定,由构造函数为数据元素分配存储空间,在对象被释放时由析构函数释放存储空间。

此外,编程实现元素增添、删除、复制、查找、显示及求集合的交集、并集。

#include<iostream>using namespace std;const int maxNum = 20; //集合中允许容纳的元素的默认最大值//大小可变的集合类:class Set{int size; //集合中允许容纳的元素的最大个数int *elems; //存储元素的数组int num; //集合中元素的个数public:Set (int sz=maxNum);~Set();bool IsMember(int); //判断是否为集合的元素bool AddElement(int); //添加元素void RemoveElement(int); //删除元素void Copy(Set &); //集合复制void Show(); //显示集合中元素void Intersect(Set &,Set &); //求集合的交集bool Union(Set &,Set &); //求集合的并集};//类Set的实现inline Set::Set(int sz){num=0;size=sz;elems=new int[size];}inline Set::~Set(){delete []elems;}bool Set::IsMember(int e){for (int i=0; i<num; i++)if (elems[i]==e) return true;return false;}bool Set::AddElement(int elem){if (IsMember(elem)) return true;if (num<size){elems[num++] = elem;return true;}return false;}void Set::RemoveElement(int c){int index=-1;for (int i=0; i<num; i++)if (elems[i]==c){index =i;break;}if (index!=-1){for (int i=index; i<num-1; i++){elems[i] = elems[i+1];num --;}}}void Set::Copy(Set &s){if (size<s.size){delete []elems;elems = new int[s.size];size = s.size;}for (int i=0; i<s.num; i++) elems[i] = s.elems[i];num = s.num;}void Set::Show(){cout<<"{";for (int i=0; i<num-1; i++) cout<<elems[i]<<",";if (num>0) cout<<elems[num-1];cout<<"}"<<endl;}void Set::Intersect(Set &s1,Set &s2){if (size<s1.size){delete []elems;elems=new int[s1.size];size=s1.size;}num=0;for (int i=0; i<s1.num; i++)if (s2.IsMember(s1.elems[i])) elems[num++] = s1.elems[i];}bool Set::Union(Set &s1,Set &s2) //求集合的并集(填写代码实现其功能){}//测试int main(){Set s1,s2,s3;int i;for (i=0; i<5; i++) s1.AddElement(2*i);for(i=0;i<5;i++) s2.AddElement(3*i);cout<<"s1="; s1.Show();cout<<"s2="; s2.Show();s2.RemoveElement(9);cout<<"s2-{9}="; s2.Show();if(s1.IsMember(2)) cout<<"2 is in s1\n";else cout<<"2 is not in s1\n";s3.Intersect(s1,s2);cout<<"s1 intsec s2="; s3.Show();////s3.Union(s1,s2);//cout<<"s1 union s2="; s3.Show();return 0;}2、下面是一个声明了部分成员的类:c lass strclass{char *p;int length;public:char *getstring(){return (p);}int getlength(){return (length);}};要求编写两个构造函数。

实验3数组与指针

实验3数组与指针

实验3 数组与指针程序填空1.本题分值:10题目描述:随机产生10个整数存放到数组中(下标0的位置不放,从下标1开始),输入待查找的整数x,查找x是否存在于这10个数中。

若存在,则输出x(最初)出现在这批数中的位置序号(例如1或2或……);若不存在x,则输出“不存在”。

以下是完成此项工作的程序,请在计算机上调试程序以补足其中的空格。

代码:#include <iostream>using namespace std;void main( ){int a[101],k,x;for(k=1;k<=10;k++) //从数组中下标1的元素开始存放数据{a[k]=rand( )%101; //产生0~100之间的的整数cout<<a[k]<<" ";}cout<<endl;cin>>x; //输入待查找数xfor(k=1;k<=10;k++)if(a[k]==x) __break__; //若发现了x,则不用继续循环、继续查找if(k__<=10__)cout<<"x存在,它的位置序号是:"<<__k__<<endl;elsecout<<"不存在!"<<endl;}2.指针编程本题分值:10题目描述:编写一个程序,可以根据用户输入的不同值,建立不同长度的整型数组。

给这个数组赋值,并求其所有元素之和。

请填空使程序完整,并在计算机上调试程序,以测试填入的部分是否正确。

代码:#include<iostream>using namespace std;void main(){int n,i,sum=0,*p;cin>>n; //输入一个整数np=new int[__n__]; //创建一个含有n个整数的整数数组for(i=0;i<n;i++) //输入n个整数存于动态数组p中cin>>_p[i]__;for(i=0;i<n;i++) //求动态数组中的所有整数之和sum=sum+*(p+i);cout<<sum<<endl; //显示结果delete __[]p__; //删除动态数组p}3.本题分值:10题目描述:输入5个整数依次存放到数组a中(从下标1开始存放),再输入待插入的整数x以及它要插入到数组中的位置下标k(1≤k≤5),要求插入后不影响a中原来下标为k到5的所有元素的先后顺序。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
}
void student::setdata(long a,char *s,int t)
{
name=new char[strlen(s)+1];
no=a;
strcpy(name,s);
score=t;
num++;
sum+=t;
}
float student::avg()
{
float avg=0;
avg=sum/num;
}
void Account::getName(char *name)
{}
void Account::setmSN(long msn)
{
mSN=msn;
}
long Account::getmSN()
{
return(mSN);
}
int main()
{
char a[20];
long b;
int N=0;
Account *s;
cout<<"obs["<<i<<"].getx():"<<obs[i].getx()<<"\n";//访问数组元素的成员
return(0);
}
(2)#include<iostream.h>
class NumClass
{
int num;
public:
void set_num(int val){num=val;}
p++; p->show_num();
return(0);
}
(4)#include<iostream.h>
class NumClass
{
int num;
public:
void set_num(int val){num=val;}
void show_num(){cout<<"The num is :"<<num<<"\n";}
return(0);
}
2.编写一个程序,输入N个学生数据,包括学号、姓名、成绩,要求输出这些学生数据并计算平均分。设计一个学生类,包括学号、姓名和成绩数据成员外,还有两个静态变量sum和num,分别存放总分和人数,另有两个普通成员函数setdata()和disp(),分别用于给数据成员赋值和输出数据成员的值,另有一个静态成员函数avg(),它用于计算平均分。在main()函数中定义了一个对象数组用于存储输入的学生数据。
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++)
}
void Account::deposit(float amount)
{
mBalance+=amount;
}
void Account::withdraw(float amount)
{
mBalance-=amount;
}
float Account::getBalance()
{
return(mBalance);
students[i].setdata(tempno,temps,tempscore) ;
}
cout<<"所有学生信息如下:"<<endl;
cout<<setw(10)<<"学号"<<setw(10)<<"姓名"<<setw(10)<<"成绩"<<endl;
//cout<<"学号"<<"姓名"<<"成绩"<<endl;
6.如果你定义了一个类,其指针成员是使用new初始化的,请指出可能出现的3个问题以及如何纠正这些问题。
2题
#include<iostream>
#include<string>
#include <cstdio>
#include <iomanip>
using namespace st(void);//输出数据
private:
long no;//学号
char *name;//姓名
int score;//分数
};
student::student()
{
cout<<"构造函数被调用"<<endl;
}
student::student(student &p)
{
name=new char[strlen()+1];
void show_num(){cout<<"The num is :"<<num<<"\n";}
};
int main()
{
NumClass ob,*p; //声明一个对象和指向对象的指针
ob.set_num(10); ob.show_num(); //通过对象ob直接调用成员函数
p=&ob; //使对象指针p指向对象ob
cout<<"请输入用户数"<<endl;
cin>>N;
s=new Account[20];
for(int i=0;i<N;i++)
{
cout<<"请输入用户名:"<<endl;
cin>>a;
s[i].getName(a);
cout<<"请输入账号:"<<endl;
cin>>b;
s[i].setmSN(b);
return avg;
}
float student::sum=0;
int student::num=0;
int main()
{
//NumClass *p=new NumClass[2];
int count;
long tempno;
char temps[10];
int tempscore;
cout<<"请输入学生人数:";
}
3题
#include<iostream.h>
#include<string.h>
class Account
{
private:
char mName[20]; //银行账户的户名
long mSN; //本账户的帐号
float mBalance; //本账户当前的余额
public:
Account(char name[]=" ",long num=0,float amount=0);//类的构造函数
};
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;//删除整个对象数组
}
char choose='y';
while(choose=='y'||choose=='Y')
{
float a1,a2;
cout<<"请输入要查找的账号:"<<endl;
cin>>b;
for(int i=0;i<N;i++)
{
if(s[i].getmSN()==b)
{
cout<<"现在对账号"<<s[i].getmSN()<<"进行操作"<<endl;
long getmSN();
};
Account::Account(char name[],long num,float amount)
{
strcpy(mName,name);
mSN=num;
mBalance=amount;
}
Account::~Account()
{
//cout<<"析构函数被调用"<<endl;
{
public:
static float sum;
static int num;
static float avg();
student();//构造函数
student(student &p);//拷贝构造函数
~student();//析构函数
void setdata(long a,char *s,int t);//赋值
p->set_num(20);p->show_num(); //通过指针调用成员函数
return(0);
}
(3)#include<iostream.h>
相关文档
最新文档