上机实验十 指针与数组
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++实验报告一 数组与指针

实验一数组与指针【实验目的】1.准确理解数组和指针的定义,合理运用数组和指针解决问题2.熟练掌握一维数组、二维数组的运用方法3.熟练掌握指针运算符&和*【实验内容】1.写一个程序,要求用户输入10个数据到数组中,然后将数组中的最大值和最小值显示出来,同时显示其下标。
#include<iostream>#include<iomanip>using namespace std;int main(){inti,m,n,a[10],max,min;for(i=0;i<10;i++)cin>>setw(5)>>a[i];cout<<endl;min=max=a[0];for(i=0;i<10;i++){if(a[i]<min){min=a[i];m=i;}if(a[i]>max){max=a[i];n=i;}}cout<<setw(6)<<"min="<<min<<setw(6)<<"下标为:"<<m<<endl;cout<<setw(6)<<"max="<<max<<setw(6)<<"下标为:"<<n<<endl;return 0;}4编写程序,让用户输入一个账号,检验该账号是否出现在下面的列表中。
如果属于下面列表中的账号,则输出合法信息,否则输出非法信息。
采用现行查找法。
5658845,4520125,7895122,8777541,8451277,1302850,8080152,4562555,5552012, 5050552,7825877,1250255,1005231,6545231,3852085,7576651,7881200,4581002 #include<iostream>using namespace std;constint a=18;int s(int L[],intn,int v);int main(){intt[a]={5658845,4520125,7895122,8777541,8451277,1302850,8080152,4562555,5552 012,5050552,7825877,1250255,1005231,6545231,3852085,7576651,7881200,45810 02};intresult,x;cin>>x;result=s(t,a,x);if(result==-1)cout<<x<<"为非法信息"<<endl;elsecout<<x<<"为合法信息"<<endl;return 0;}int s(int L[],intn,int v){for(int i=0;i<n;i++)if(v==L[i])return i;return -1;}5.采用二分查找的方法实现上述程序。
C语言数组与指针详解

C语言数组与指针详解C语言数组与指针详解由于数据的表现形式多种多样,还有字符型和其它的数值类型,因此仅有基本数据类型是不够的。
是否可以通过基本数据类型的组合抽象构造其它的数据类型呢?下面是店铺为大家带来的C语言数组与指针详解的知识,欢迎阅读。
1.数组(1)数组的声明我们知道,一个基本数据类型的变量只能存储一个数据,比如:int data = 0x64;如果需要存储一组int型数据呢?比如,1、2、3,则至少需要3个变量data0、data1、data2。
比如:int data0 = 1, data1 = 2, data2 =3;由于数据的表现形式多种多样,还有字符型和其它的数值类型,因此仅有基本数据类型是不够的。
是否可以通过基本数据类型的组合抽象构造其它的数据类型呢?答案是可以的,构造数据类型数组就是这样产生的。
从概念的视角来看,int型整数1、2和3都是相同的数据类型,data0、data1和data2三个变量的共性是data,其差异性是下标不一样。
因此可以将data0、data1和data2抽象为一个名字,然后用下标区分这些变量的集合——data[0]、data[1]和data[2]。
如果有以下声明:intdata[3]; //解读为data是int数组(元素个数3)那么data[3]就成了存放3个int型数据1、2、3的data[0]、data[1]和data[2]所组成的数组,即可分别对data[0]、data[1]和data[2]赋值:data[0] = 1, data[1] =2, data[2] = 3;当然,也可以按照以下方式声明一个数组并进行初始化:intdata[3] = {1, 2, 3};通常将data称为数组(变量)名,data[0]、data[1]和data[2]被称为变量。
因而可以说,数组是将相同类型数据的若干变量按有序的形式组织起来,用一个名字命名,然后用下标区分这些变量的集合。
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语言-指针与数组

指针与数组一、指针与一维数组数组名的实质——地址常量用指针访问一维数组的两种方式函数定义中指针形参与数组名实参对应1. a+i==&a[i]——a+i 没有修改a ,是正确的表达式2. 间接访问:*(a+i)元素取地址法:a[i]3. a 是数组名,是一个地址常量,不可以改变4. p 是指针,是一个变量,可以改变二、指针访问一维数组1. 在p=score;后,用指针访问一维数组所有元素有两种方法:2. 用一个for 循环就行3. 一维数组名是指针常量,可以赋值给基类型相同的指针变量,使指针变量可以访问数组所在的存储空间三、指针与二维数组二维数组是一维数组的一维数组二维数组中的地址分为行地址和列地址二维数组中存在的三种类型1. 列地址——>二维数组元素(加*)2. 二维数组元素——>列地址(加&)3. 行地址与本行0列地址转化规律同上四、行地址与列地址行指针定义格式int score [N ]={1,2,3,4};int *p ;p =score ;a //二维数组的首地址,存放行地址a +i //存放第i 行的地址*(a +i ) //即a[i] 存放第i 行第0列的地址*(a +i )+j //即a[i]+j 存放第i 行第j 列的地址*(*(a +i )+j ) //即a[i][j] 存放第i 行第j 列的元素类型标识指示符 (*指针变量名)[整型常量表达式];五、指针与函数传值/传地址六、常量指针和指针常量常量指针——>指向可以改,值不能改指向可以改(懂?)指针常量——>值可以改,指向不能改七、指针与动态空间#include<stdilb.h>void*malloc(unsigned size); //初始值随机void*calloc(unsigned NumElements,unsigned SizeOfElements)//初始值为0实际调用时需要强制转换类型int*pa=(int*)malloc(n*sizeof(int));int*pa=(int*)calloc(n,sizeof(int));if (p==NULL){printf("NO ENOUGH MEMORY\n");exit(0);}free(p);八、指向函数的指针//完全匹配模式类型标识符(*函数指针名)(形参表);//简单形式类型标识符(*函数指针名)();。
C_lab6-2_指针与一维数组.

实验6-2指针与一维数组【实验目的】1. 正确认识指针与数组的关系。
2. 掌握如何利用指针变量控制对数组的各种操作【实验内容】Part1:基础练习(课堂练习)1. C语言中,数组名是一个不可改变的地址,不能对它进行赋值运算。
数组在内存中占用一段连续的存储空间,它的首地址由数组名表示。
2. 若有以下声明和语句,则++(*p的值是 2 ,*--p的值是 0 。
int a[4] ={0,1,2,3}, *p;p=&a[1];3. 若有定义:int a[]={2,4,6,8,10,12}, *p=a;则*(p+1的值是 4 ,*(a+5的值是12 。
4. 以下程序段通过移动指针变量m,将下图所示连续动态存储单元的值,从第一个元素起,输出到终端屏幕,请填空(假设程序段中的所有变量均已正确说明)。
for(m=q; m-q<10;printf(“%3d”, *m++ ;5. 以下程序段通过指针变量q,给下图所示连续动态存储单元赋值(此过程中不能移动q),请填空(假设程序段中的所有变量均已正确说明)。
for( k=0;k<10;k++scanf(“%d”, q+k ;6. 以下程序段通过移动指针变量m,给下图所示连续动态存储单元赋值,请填空(假设程序段中的所有变量均已正确说明)。
for(m=q; mscanf(“%d”, m++ ;7. 若数组m如下所示,则数组元素m[m[4]+m[8]]的值是 8 ,*m+m[9]的值是12 。
m[*(m+4]的值是 12 。
8. 若有声明如int x[10], *p=x; 则在程序中引用数组元素x[i]的四种形式是: *(p+i ,*(x+i , p[i] , x[i]。
9. 下面程序的运行结果是sum=25 。
Part2:巩固提高(课后实践)1. 若有声明int a[10], *p=a; 则p+5表示 A ,*(p+5表示 B 。
A. 元素a[5]的地址B. 元素a[5]的值C.元素a[6]的地址 D. 元素a[6]的值2. 若已有声明char s[10]; 则在下面表达式中不表示s[1]的地址的是 B 。
C语言程序设计-指针与数组

数组元素,其中a是数组名,p是指向数组的指针变量,其值为数组 的首地址。
2 指针与数组
程序举例
【例8.3】使用指针法输出数组中的全部元素 main() {
int a[5],i,*p; p=a; for(i=0;i<5;i++)
指针与数组
2 指针与数组
➢ 一个变量有一个地址,一个数组包含若干元素,每个数组元素都在内 存中占用存储单元,它们都有相应的地址。所谓数组的指针就是指数 组的起始地址(首地址),数组元素的指针则是数组元素的地址。
➢ 指向数组的指针 一个数组占用一段连续的内存单元,数组名即为这段连续内存单元的
首地址,一个数组元素的地址就是它所占用的几个连续内存单元的首地 址。
*(p+i)=i; for(i=0;i<5;i++);
printf("a[%d]=%d \n",i,*(p+i); }
谢谢观看
Байду номын сангаас
2 指针与数组
定义一个指向数组元素的指针变量的方法: int a[10]; int *p; p=&a[0];
下面两个语句等价:p=&a[0]; p=a;
通过指针引用数组元素如果指针变量p指向数组中的一个元素,则p+1 指向同一数组中的下一个元素。
2 指针与数组
如果p的初始值为&a[0],则: 1. p+i和a+i就是a[i]的地址,或者说它们指向a数组的第i个元素。 2. *(p+i)或*(a+i)就是p+i或a+i所指向的数组元素,即a[i]。如*(p+
C++程序设计实验报告-数组、指针与字符串

for(j=0;j<i;j++) {
t=b[i][j]; b[i]]=t; } } int main() { int (*a)[3]=new int[3][3]; int i,j; cout<<"请输入 3x3 矩阵:"<<endl; for(i=0;i<3;i++) for(j=0;j<3;j++)
cin>>a[i][j]; zhuanzhi(a); cout<<"转置后的矩阵为:"<<endl; for(i=0;i<3;i++) {
for(j=0;j<3;j++) cout<<a[i][j]<<" ";
cout<<endl; } delete[] a; return 0; } 运行结果:
(3)编程实现两字符串的连接。要求使用字符数组保存字符串,不要使用 系统函数。 源程序代码: #include<iostream> using namespace std;
int main() {
char str1[100],str2[100],str[200]; int i,j; cout<<"请输入第一个字符串:"; cin>>str1; cout<<"请输入第二个字符串:"; cin>>str2; for(i=0;str1[i]!='\0';i++)
C语言中的数组与指针详解

C语言中的数组与指针详解C语言是一门广泛应用于系统软件、嵌入式软件和应用软件开发的高级编程语言。
其中,数组和指针是C语言中常用的数据类型和概念。
在本文中,我们将详细讨论C语言中的数组和指针,包括它们的定义、使用方式以及相关的特性和技巧。
一、数组(Arrays)数组是一种用于存储多个相同类型元素的连续内存区域的数据结构。
C语言中的数组可以存储基本数据类型(如整数和字符)或自定义的数据类型(如结构体)。
数组的定义使用方括号([])来表示,并指定数组的大小。
例如,下面的代码片段展示了如何声明和初始化一个整型数组:```cint numbers[5] = {1, 2, 3, 4, 5};```在这个例子中,我们定义了一个名为numbers的整型数组,它有5个元素并初始化为{1, 2, 3, 4, 5}。
可以使用索引(index)来访问数组中的元素,索引从0开始。
数组在C语言中具有以下特点和技巧:1. 数组名即为指向数组首元素的指针。
可以使用指针运算对数组进行操作。
2. 数组的大小在编译时就确定了,并且不能动态改变。
3. 数组的元素在内存中是连续存储的,可以通过指针算术运算实现遍历和访问。
4. 数组名作为函数参数传递时会自动转换为指针。
二、指针(Pointers)指针是C语言中另一个重要的概念,它用于存储变量的内存地址。
指针变量可以指向任何数据类型,包括基本数据类型和复合数据类型。
通过指针,我们可以直接访问和修改内存中的数据。
在C语言中,可以通过使用感叹号(*)来声明指针变量。
例如,下面的代码片段展示了如何声明一个指向整型变量的指针:```cint *ptr;```在这个例子中,我们声明了一个名为ptr的指针变量,它可以指向整型变量。
我们可以使用取地址运算符(&)来获取变量的内存地址,并将其赋值给指针变量。
指针在C语言中具有以下特点和技巧:1. 可以使用指针间接访问和修改变量的值。
2. 可以通过指针传递变量的引用,从而实现函数间的数据传递。
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-+=设计思路:已知三角形三个边长求三角形三个内角算法简单,需要的数据也少,顺序结构即可实现。
上机实验十一 指针字符串指针数组二级指针

上机实验十一指针、字符串、指针数组、二级指针学号: 姓名:一、目的要求:1.掌握数组元素、数组名、指针作为函数参数的用法以及区别2.学会使用字符串的指针和指向字符串的指针变量。
3.掌握字符串的两种表示法:一维字符数组和指向字符串的指针。
4.掌握字符串数组的两种表示法:二维字符数组和指向字符串的字符指针数组。
5.学会使用指针数组、二级指针来处理字符串数组。
二、实验内容:第1题、参照P224自定义strcpy、strcat、strcmp和strlen函数,要求分别用字符数组和字符指针实现,并编写合适的主函数测试函数是否正确。
第2题、编制函数del_char,函数原形为void del_char(char *a,char ch),函数的功能是删除a指向的字符串中的值为ch的字符。
例如从字符串"AscADef"中删除'A'后,字符串为"scDef"。
第3题、编写一函数实现删除字符串中重复的字符(函数中使用指针处理字符串),在主函数中输入一字符串然后调用函数实现删除字符串中重复出现的字符。
第4题、在字符串S中查找某个字符C,若包含则打印该字符在字符串中首次出现的位置,若不包含给出找不到信息。
第5题、练习指针数组:有三个字符串“Data structure”、“Coputer design”、“C Progrom”,请按字符顺序输出这三个字符串。
(要求用指针数组、二维字符数组和二级指针三种方法实现。
可参考P234例10-13和P236例10-15)第6题、下面程序中函数fun的功能是:把一个整数各位上的数转换成对应的数字字符,并按逆序输出。
例如:输入256,输出的字符为6 * 5 * 2 *。
请改正函数fun中的错误,上机调试使其能得出正确的结果。
注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。
第7题、编一个函数int fun(* char ss),它的功能是:把ss字符串中的字符按逆序存放。
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个元素按从小到大的顺序排序,请对程序中的错误进行改正,使其正常运行。
c语言数组和指针的学习

C语言数组与指针详解2008-08-11 02:01在C语言中,指针和数组有着紧密的联系,其原因在于凡是由数组下标完成的操作皆可用指针来实现。
在数组中我们已经知道,可以通过数组的下标唯一确定了某个数组元素在数组中的顺序和存储地址,这种访问方式也称为"下标方式"。
例如:int a[5] = {1, 2, 3, 4, 5}, x, y;x=a[2]; /* 通过下标将数组a下标为2的第3个元素的值赋给x,x=3 */y=a[4]; /* 通过下标将数组a下标为4的第5个元素的值赋给y,y=5 */由于每个数组元素相当于一个变量,因此指针变量既然可以指向一般的变量,同样也可以指向数组中的元素,也就是可以用"指针方式"访问数组中的元素。
例10-6:分析程序的运行过程和结果。
#include <stdio.h>main ( ){ int a[ ] = {1, 2, 3, 4, 5} ;int x, y, *p;/* 指针变量p */p = &a[0]; /* 指针p指向数组a的元素a[0],等价于p=a */x = *(p+2); /* 取指针p+2所指的内容,等价于x=a[2] */y = *(p+4); /* 取指针p+4所指的内容,等价于y=a[4] */printf ("*p=%d, x=%d, y=%d\n", *p, x, y);}语句"p=&a[0]"表示将数组a中元素a[0]的地址赋给指针变量p,则p就是指向数组首元素a[0]的指针变量,"&a[0]"是取数组首元素的地址。
C语言中规定,数组第1个(下标为0)元素的地址就是数组的首地址,同时C中还规定,数组名代表的就是数组的首地址,所以,该语句等价于"p=a;"。
注意,数组名代表的一个地址常量,是数组的首地址,它不同于指针变量。
C语言程序设计 实验11.1_指针数组、指针与函数

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++上机实验报告(指针)

{void change(string &,string &);
string str1="
",
str2="
",
str3="
";
char *p1=&str1[0],*p2=&str2[0],*p3=&str3[0];
cout<<"input three line:"<<endl;
gets(p1);
gets(p2);
Now,the order is: C language is very interesting. He is a professor. I study very hard.
(3)12 6 87 6 12 87
(4)input number of person:n=8 The last one is No.7
void swap(int *p1,int *p2) {int p;
p=*p1;Biblioteka p1=*p2;*p2=p; }(2) Ⅰ.用字符数组方法的源程序 #include<iostream> using namespace std; int main() {void swap(char *,char *); char str1[20],str2[20],str3[30]; cout<<"input three line:"<<endl; gets(str1); gets(str2); gets(str3); if(strcmp(str1,str2)>0) swap(str1,str2); if(strcmp(str1,str3)>0) swap(str1,str3); if(strcmp(str2,str3)>0) swap(str2,str3); cout<<endl<<"Now,the order is:"<<endl; cout<<str1<<endl<<str2<<endl<<str3<<endl; return 0; } void swap(char *p1,char *p2)
上机实验十指针与数组

上机实验十指针与数组学号: 姓名:一、目的要求:1.了解或掌握指针与数组的关系,指针与数组有关的算术运算、比较运算。
2.了解或掌握运用指针处理数组。
二、实验内容:第1题、分别用下标法和指针变量p访问数组a[5]={1,3,5,7,9},至少用三种方法输出数组各元素的值,每种方法输出的五个元素在一行上。
第2题、书上P211例10-4。
并仔细体会P212“使用指针实现数组元素逆序存放”的指针移动思想。
第3题、编写程序,使用指针实现逆序打印一维整型数组所有元素的操作。
数组a: 1 3 7 2 9 6 5 8 2 0 4 8 2 0 4第4题、书上P213冒泡排序。
第5题、编写一个函数s(a,n),其中a是一个指向整型的指针接受一维整型数组首地址,n 是数组长度,功能是通过指针求数组中元素的平均值,并编写主函数测试函数。
第6题、编写一个函数void sort(int *a, int n), 用选择法对数组a中的元素按降序排序。
在main()函数中输入10个数,调用sort函数排序后,然后输出。
第7题、使用指针把从键盘输入的2个数按从大到小的顺序输出(不改变变量的值),请补充完整并上机调试。
注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。
第8题、输入10个整数存入一维数组,然后逆置数组,最后输出。
下面给出部分程序的内容,请将程序补充完整,然后上机调试。
注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。
第9题、上机调试下面程序,看哪些程序实现了交换主函数中两个变量值的操作,哪些没有实现,并分析原因。
第10题、调试修改下面程序,函数fun的功能是:在含有10 个元素的s数组中查找最大数,及最大数所在位置(即,下标值),最大数可能不止一个。
最大数作为函数值返回,最大数的个数通过指针变量n传回,所在位置由数组pos传回。
例如:若输入 2 8 5 7 8 4 5 3 2 8则应输出:The max: 8The positions: 1 4 9请改正函数fun中的错误,使它能得出正确的结果。
实验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) __(1)__; //若发现了x,则不用继续循环、继续查找if(k__(2)__)cout<<"x存在,它的位置序号是:"<<__(3)__<<endl;elsecout<<"不存在!"<<endl;}2.本题分值:10题目描述:编写一个程序,可以根据用户输入的不同值,建立不同长度的整型数组。
给这个数组赋值,并求其所有元素之和。
请填空使程序完整,并在计算机上调试程序,以测试填入的部分是否正确。
代码:#include<iostream>using namespace std;void main(){int n,i,sum=0,*p;cin>>n; //输入一个整数np=new int[__(1)__]; //创建一个含有n个整数的整数数组for(i=0;i<n;i++) //输入n个整数存于动态数组p中cin>>__(2)__;for(i=0;i<n;i++) //求动态数组中的所有整数之和sum=sum+*(p+i);cout<<sum<<endl; //显示结果delete __(3)__; //删除动态数组p}3.本题分值:10题目描述:输入5个整数依次存放到数组a中(从下标1开始存放),再输入待插入的整数x以及它要插入到数组中的位置下标k(1≤k≤5),要求插入后不影响a中原来下标为k到5的所有元素的先后顺序。
实验3指针与一维数组

13.3 实验指导13.3.1 使用指针输入10个实数1.题目要求使用指针输入10个实数存入一维数组中,计算并输出它们的和与平均值。
要求输入、计算和输出均使用指针。
2.分析输入的10个数可以保存在数组中。
根据题目要求,定义一个具有10个元素的实型数组和一个实型指针,初始化指针指向数组。
可以使用一个循环输入数据并输出数据,然后再用一个循环统计并输出统计结果。
设数组为a,指针为p,则循环:for(i=0,p=a;i<10;i++)sum+= *p++;或for(i=0,p=a;i<10;i++)sum+= *(p+i);或for (p=a;p<a+10;p++}sum+= *p;均可以统计出数组元素的和。
本题比较简单,不需要再多的分析,请读者给出程序代码。
3.思考本题使用指针并不比使用下标直接操作数组元素更方便。
但是在复杂的题目中,使用指针就能体现出优越性,尤其是在字符串处理方面。
本题也可以不使用数组而直接使用指针,请读者考虑这种方案的程序。
13.3.2 求两集合的交集1.题目要求整数集合是由多个不同的整数构成的,可将其存放在一个一维整型数组中。
两个集合的交集由同时属于两个集合的元素构成。
例如,集合a[]={1,3,5,7,9},集合b[ ]={1,2,3,4},它们的交集是c[ ]={1,3}。
要求使用4个函数,一个输入数据(两个数组的数据),一个计算交集,另一个输出数组(三个数组),主函数的作用是定义数组和调用函数。
2.分析本题需要三个数组a、b、c,a、b的数据来自键盘输入,数组c的数据则是a、b的交集,需要计算。
求交集的算法是:依次判断数组a中的元素a[i]是否属于数组b,如果属于,则将a[i]放入交集数组c中。
要求编写一个程序,完成求两个整数集合的交集。
所谓将a[i]]放人数组c中,就是将a[i]赋值给数组c的元素。
本题中数组a、b、c需要分别使用不同的下标变量。
测试a[i]是否属于b数组,使用一个循环可以实现,设有指针p1、p2、p3,且p1=&a,则可以:for(j=0;j<J;j++} //J为数组b的元素数目if(*p1== *p2++)break;if (p2< &a [J] ) //说明在数组b中找到了a[i],即a[i]属于b*p3++= *p1; //将a[i]放人数组c,修改指针p3,准备放人下一个a[i]或for (j=0;j<J;j++)//J为数组b的元素数目if(*p1== *p2++) *p3++= *p1; //找到后直接将a[i]放入集合c中;3.思考本题考虑的是求两个集合的交集,运用上述思路,还可以考虑多集合(三个集合以上) 的交集。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
上机实验十指针与数组
学号: 姓名:
一、目的要求:
1.了解或掌握指针与数组的关系,指针与数组有关的算术运算、比较运算。
2.了解或掌握运用指针处理数组。
二、实验内容:
第1题、分别用下标法和指针变量p访问数组a[5]={1,3,5,7,9},至少用三种方法输出数组各元素的值,每种方法输出的五个元素在一行上。
第2题、书上P211例10-4。
并仔细体会P212“使用指针实现数组元素逆序存放”的指针移动思想。
第3题、编写程序,使用指针实现逆序打印一维整型数组所有元素的操作。
数组a: 1 3 7 2 9 6 5 8 2 0 4 8 2 0 4
第4题、书上P213冒泡排序。
第5题、编写一个函数s(a,n),其中a是一个指向整型的指针接受一维整型数组首地址,n 是数组长度,功能是通过指针求数组中元素的平均值,并编写主函数测试函数。
第6题、编写一个函数void sort(int *a, int n), 用选择法对数组a中的元素按降序排序。
在main()函数中输入10个数,调用sort函数排序后,然后输出。
第7题、使用指针把从键盘输入的2个数按从大到小的顺序输出(不改变变量的值),请补充完整并上机调试。
注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。
第8题、输入10个整数存入一维数组,然后逆置数组,最后输出。
下面给出部分程序的内容,请将程序补充完整,然后上机调试。
注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。
第9题、上机调试下面程序,看哪些程序实现了交换主函数中两个变量值的操作,哪些没有实现,并分析原因。
第10题、调试修改下面程序,函数fun的功能是:在含有10 个元素的s数组中查找最大数,及最大数所在位置(即,下标值),最大数可能不止一个。
最大数作为函数值返回,最大数的个数通过指针变量n传回,所在位置由数组pos传回。
例如:
若输入 2 8 5 7 8 4 5 3 2 8
则应输出:The max: 8
The positions:1 4 9
请改正函数fun中的错误,使它能得出正确的结果。
注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。