厦门理工学院11级C语言 实验7_指针
- 格式:doc
- 大小:41.50 KB
- 文档页数:3
c指针的实验报告C指针的实验报告引言:C语言作为一种高级编程语言,广泛应用于各个领域。
其中,指针作为C语言的重要特性之一,对于程序的灵活性和效率起着至关重要的作用。
本实验旨在通过实际的案例,详细探讨C指针的用法和特性。
一、指针的概念和基本用法指针是C语言中的一种数据类型,它存储了一个变量的内存地址。
通过指针,我们可以直接访问和修改变量的值。
在C语言中,可以通过使用"*"符号来声明和使用指针。
在实验中,我们首先定义了一个整型变量num,并通过指针p将其地址赋值给指针变量。
然后,通过指针p可以直接访问和修改num的值。
例如,通过*p = 10可以将num的值修改为10。
二、指针和数组的关系指针和数组在C语言中有着密切的联系。
事实上,数组名本身就是一个指针,它存储了数组首元素的地址。
通过指针,我们可以对数组进行遍历和操作。
在实验中,我们定义了一个整型数组arr,并通过指针p将数组的首地址赋值给指针变量。
然后,通过指针p可以对数组进行遍历和操作。
例如,通过*p = 0可以将数组的首元素的值修改为0。
三、指针和函数的关系指针在函数中的应用也是非常广泛的。
通过指针参数,我们可以在函数内部直接修改传入的变量的值,而不需要返回值。
这样可以提高程序的效率和灵活性。
在实验中,我们定义了一个函数swap,用于交换两个整型变量的值。
通过传入指针参数,我们可以在函数内部直接修改这两个变量的值。
例如,通过使用指针参数int *a和int *b,在函数内部可以通过指针来访问和修改a和b的值。
四、指针和动态内存分配动态内存分配是指在程序运行过程中,根据需要动态地分配和释放内存空间。
指针在动态内存分配中扮演了重要的角色。
通过指针,我们可以使用函数malloc和free来分配和释放内存空间。
在实验中,我们使用了函数malloc来动态地分配一块内存空间,并将其地址赋值给指针变量。
然后,通过指针可以对这块内存空间进行读写操作。
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实验结论:通过本次实验,我掌握了指针的基本概念与用法。
指针可以用来存储变量的地址,通过指针可以访问变量的值。
指针还可以用来操作数组,方便地遍历数组、修改数组元素等。
指针的递增和递减运算可以方便地遍历数组。
在实际编程中,熟练掌握指针的使用将会事半功倍。
第七章指针第一部分知识训练【知识要点】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)。
int *ptr=(int *)(&a+1);则ptr实际是&(a[5]),也就是a+5。
原因如下: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的地址是一样的,但意思不一样。
C语言实验程序总结实验七指针c语言实验程序、总结实验七指针一、实验目的实验七指针1.理解指针的概念,学习定义和使用指针变量。
2掌握指针、变量和数组的关系和用法。
3.学习使用指向函数的指针变量。
二实验内容1编写函数fun(float*Sn,INTN),其函数是根据以下公式计算s,计算结果通过形式参数Sn返回;N通过参数传入,N的值大于或等于0。
在计算机上运行并记录输入和输出(主要功能已给出)。
s?1?1111????3572n?1fun(float*sn,intn){定义变量:和s,一般术语W,符号F,循环控制变量I;/*其中s和F将被初始化*/循环累加和s{改变符号;/*由负变正或由正变负*/找出一般术语W;累加:S+=w;}形参指针变量sn赋值;/*通过形参sn传回累加和s*/}main(){浮动;intn;printf(\n=\);scanf(\%d\,&n);fun(&s,n);printf(\s=%f\\n\,s);}完整程序如下:#包括voidfun(float*sn,intn){floats=0.0,w,f=-1.0;inti=0;对于(i=0;i<=n;i++);{f=(-1)*f;w=f/(2*i+1);s+=w;}*sn=s;}main(){浮动;intn;printf(\fun(&s,n);printf(\}输出结果如下图:2.如果你想让指针变量pT1指向a和B中较大的一个,而pT2指向较小的一个,下面的程序能达到这个目的吗?交换(int*p1,int*p2){int*p;p=p1;p1=p2;p2=p}main() {inta,b;int*pt1,*pt2;scanf(\%d,%d\,&a,&b);pt1=&a;pt2=&b;if(aprintf(\%d,%d\\n\,*pt1,*pt2);]上机调试此程序。
如果不能实现题目要求,指出原因并修改之。
《数据结构》实验报告实验序号:6 实验项目名称:树和二叉树的操作}while(x!=-9999);}改写以上程序,实现功能如下(任选两题):1.编写函数实现前序、中序和后序遍历。
运行结果截图:2.编写函数实现计算叶节点个数。
运行结果截图:四、分析与讨论附源程序清单:1.#include <stdlib.h>#include <stdio.h>typedef int TElemType;typedef struct BiTNode{TElemType data;struct BiTNode *lchild,*rchild;}BiNode, *Bitree;DLR( Bitree root ){ if (root !=NULL) { //非空二叉树printf("%d",root->data); //访问DDLR(root->lchild); //递归遍历左子树DLR(root->rchild); //递归遍历右子树}return(0);}LDR(Bitree root){ if(root !=NULL){LDR(root->lchild);printf("%d",root->data);LDR(root->rchild);}return(0);}LRD (Bitree root){ if(root !=NULL) {LRD(root->lchild);LRD(root->rchild);printf("%d",root->data);}return(0);}Bitree root;//定义根结点void insert_data(int x) /*生成/树*/{Bitree p,q,s;s=(Bitree)malloc(sizeof(BiNode)); //创建结点s->data=x; //结点赋值s->lchild=NULL;s->rchild=NULL;if(!root){root=s;}else{p=root;while(p) /*如何接入二叉排序树的适当位置*/{q=p;if(p->data==x) //相同结点不能重复插入{printf("data already exist! \n");return;}else if(x<p->data)p=p->lchild;elsep=p->rchild;}if(x<q->data)q->lchild=s;elseq->rchild=s;}}void main() /*先生成二叉排序树*/{int i=1,x; //i记录结点个数,x存放结点值root=NULL; /*千万别忘了赋初值给root!*/printf("请输入数据,-9999表示输入结束\n");do{printf("please input data %d:",i);i++;scanf("%d",&x); /*从键盘采集数据,以-9999表示输入结束*/if(x==-9999){printf("\nNow output data value:\n");}elseinsert_data(x); /*调用插入数据元素的函数*/}while(x!=-9999);printf("\nDLR");DLR(root);printf("\nLDR");LDR(root);printf("\nLRD");LRD(root);}2.#include <stdlib.h>#include <stdio.h>typedef int TElemType;typedef struct BiTNode{TElemType data;struct BiTNode *lchild,*rchild;}BiNode, *Bitree;Bitree root;//定义根结点int CountLeaf (Bitree root){ //返回指针T所指二叉树中所有叶子结点个数int m,n;if (!root ) return 0;if (!root->lchild && !root->rchild) return 1;else {m = CountLeaf( root->lchild); n = CountLeaf( root->rchild);return (m+n);} //else} // CountLeafvoid insert_data(int x) /*生成/树*/{Bitree p,q,s;s=(Bitree)malloc(sizeof(BiNode)); //创建结点s->data=x; //结点赋值s->lchild=NULL;s->rchild=NULL;if(!root){root=s;}else{p=root;while(p) /*如何接入二叉排序树的适当位置*/{q=p;if(p->data==x) //相同结点不能重复插入{printf("data already exist! \n");return;}else if(x<p->data)p=p->lchild;elsep=p->rchild;}if(x<q->data)q->lchild=s;elseq->rchild=s;}}void main() /*先生成二叉排序树*/{int i=1,x; //i记录结点个数,x存放结点值int sum;root=NULL; /*千万别忘了赋初值给root!*/printf("请输入数据,-9999表示输入结束\n");do{printf("please input data %d:",i);i++;scanf("%d",&x); /*从键盘采集数据,以-9999表示输入结束*/if(x==-9999){printf("\nNow output data value:\n");}elseinsert_data(x); /*调用插入数据元素的函数*/ }while(x!=-9999);printf(" \n叶节点个数=");sum=CountLeaf (root);printf("%d\n",sum);}。
C语言实验报告《指针》C语言实验报告《指针》学号:__________ 姓名:__________ 班级:__________ 日期:__________指导教师:__________ 成绩:__________实验五指针一、实验目的1、掌握指针的概念、会定义和使用指针变量2、掌握指向数组的指针变量3、掌握字符串指针的使用二、实验内容1、输入3个字符串,按由小到大的顺序输出。
(习题10.2)2、写一函数,求一个字符串的长度。
在main函数中输入字符串,并输出其长度。
(习题10.6)3、完善程序,要求使用函数功能:将一个数字字符串转换成一个整数(不得调用C语言提供的将字符串转换为整数的函数)。
例如,若输入字符串“-1234”,则函数把它转换为整数值-1234。
#inlude <STDIO.H> #inlude <STRING.H> long fun{ 填写程序} void main { har s; long n; printf; gets; n=fun; printf; }一、三、实验步骤与过程第一┆.lizhi12整理该文章,版权归原作者、原出处所有...四、程序调试记录附送:C语言实验报告《数组》C语言实验报告《数组》学号:__________ 姓名:__________ 班级:__________ 日期:__________指导教师:__________ 成绩:__________实验三数组一、实验目的1、掌握一维和二维数组的定义、赋值和输入输出2、掌握字符数组和字符串数组的使用3、掌握与数组有关的排序算法二、实验内容1、已有一个已排好序的数组,要求输入一个数后,按原来排序的规律将它插入数组中。
(习题7.4)2、将一个数组中的值按逆序重新存放。
例如,原来顺序为8,6,5,4,1。
要求改为1,4,5,6,8。
(习题7.5)3、如下程序是按选择法对数组中的n个元素按从小到大的顺序排序,请对程序中的错误进行改正,使其正常运行。