实验7-指针
C语言实验-第七章-第九章2

实验七:指针的应用【实验目的】1.掌握指针和指针变量,内存单元和地址、变量与地址、数组与地址的关系;2.掌握指针变量的定义和初始化,指针变量的引用方式;3.能正确使用数组的指针和指向数组的指针变量;【实验内容】1.填空题输入一个字符串,将其中的大写字母转换成小写字母,然后输出本程序主要是比较scanf()输入和gets()输入的区别#include <stdio.h>void main(){ char s[20];char *p=s;scanf(“%s”,p); /*注意用scanf()输入和gets()输入的区别*/while( 1 ){if( 2 ) *p=*p+ (‘a’-‘A’);p++ ;}puts ( 3 );}答案:1、*p!=’\0’2、(*p>='A')&&(*p<='Z')3、s运行结果:输入:Program输出:program输入:This is Program输出:this提示:scanf ()输入时遇到空格认为字符串结束,用gets()输入时只有遇到回车才认为字符串结束。
如键入any boy并回车,则2。
补充程序题输入15个整数存入一维数组,再按逆序重新调整该数组中元素的顺序然后再输出。
下面给出部分程序的内容,请将程序补充完整,然后上机调试。
部分程序清单如下:#include <stdio.h>void main(){ int a[15],*p1,*p2,x;for(p1=a;p1<a+15;p1++)scanf("%d",p1);for(p1=a,p2=a+14;p1<a+7;p1++,p2--){ x=*p1;*p1=*p2;*p2=x;}……}答案:for(p1=a;p1!=a+15;p1++)printf("%d ",*p1); // %d后面有一个空格运行结果:输入:1 2 3 4 5 6 7 8 9 10 11 12 13 14 15输出:15 14 13 12 11 10 9 8 7 6 5 4 3 2 1提示:(1)在整型数组中,没有结束标志,必须依靠数组中数据元素的个数控制循环次数。
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]。
07-第7章 指针调整故障处理

目录第7章指针调整故障处理........................................................................................................ 7-17.1 背景知识............................................................................................................................ 7-17.1.1 指针调整的机理 ...................................................................................................... 7-17.1.2 指针调整的检测上报............................................................................................... 7-27.1.3 指针调整的性能事件............................................................................................... 7-37.2 常见故障原因..................................................................................................................... 7-47.3 故障定位方法与步骤.......................................................................................................... 7-57.3.1 常用定位方法.......................................................................................................... 7-57.3.2 故障定位步骤.......................................................................................................... 7-57.4 分类故障定位与排除.......................................................................................................... 7-97.4.1 检查时钟配置数据................................................................................................... 7-97.4.2 检查环境温度.......................................................................................................... 7-97.4.3 检查设备对接的同步情况........................................................................................ 7-97.4.4 检查光纤连接........................................................................................................ 7-107.4.5 检查外部时钟质量................................................................................................. 7-107.4.6 检查网元硬件故障................................................................................................. 7-10插图目录图7-1 AU指针的产生....................................................................................................... 7-2图7-2 组网示意图............................................................................................................ 7-2图7-3 指针调整故障处理流程图...................................................................................... 7-7表格目录表7-1 设备支持的指针调整性能事件............................................................................... 7-3表7-2 指针调整的常见原因 ............................................................................................. 7-4表7-3 与指针调整关的告警及告警产生的可能原因......................................................... 7-7第7章指针调整故障处理本章介绍OptiX OSN 1500设备指针调整的故障处理流程和故障处理方法,包括:●背景知识●常见故障原因●故障定位方法与步骤●分类故障定位与排除7.1 背景知识指针调整是SDH网络所特有的一种现象。
C语言实验六实验报告——指针

一、实验项目名称指针二、实验目的1.掌握指针的基本概念和基本用法。
包括:变量的地址和变量的值,指针变量的说明、指针变量的初始化、指针的内容与定义格式、指针的基本运算等;2.掌握数组与指针的关系并能够利用指针解决数组的相关问题;3.掌握字符串与指针的关系并能够利用指针处理字符串的问题;4.掌握指针与函数的关系并能够利用指针处理函数问题;5.了解指向指针的指针的概念及其使用方法;6.能够使用指针进行程序设计。
三、实验内容有关指针的程序设计1.编程实现:任意输入的10个数,求其平均值。
要求:(1)10个数采用scanf语句读入。
(2)利用指针实现对这10个数的访问。
(3)要求平均值的精度为小数后面2位。
2.编程实现:将一个任意整数插入到一个已排序的整数数组中,插入后数组中的数仍然保持有序。
要求:(1)整数数组由初始化方式输入。
任意整数由scanf函数输入;(2)实现过程采用指针处理;(3)输出原始数组数据以及插入数据后的数组数据并加以相应说明。
3.编写函数newcopy(char *new,char *old),它的功能是删除old所指向的字符串中的小写字母,并将所得到的新串存入new中。
要求:(1)在主函数中以初始化方式输入一个字符串;(2)调用newcopy()函数;(3)在主函数中输出处理后的结果。
4.编程实现:输入三个整数,按由大到小的顺序输出。
要求:(1)通过scanf函数输入三个数据并存入三个变量中;(2)利用指针实现从大到小输出;(3)修改程序,将三个整型数据改为字符型数据,输入三个字符,按从大到小数顺序输出;(4)修改程序,将三个字符型数据改为字符串数据,输入三个字符串,按从小到大顺序输出;(5)体会指针对不同数据处理的特点。
四、实验步骤及结果一、#include <>void main(){int a[10],n,sum=0;float aver;/* 定义平均数为浮点型*/int *p=a;/*初始化*/printf("Please input 10 numbers:\n");for (n=0;n<10;++n)scanf("%d",&a[n]);/*输入十个数*/for (n=0;n<10;++n)sum=sum+*(p+n);/*使用指针访问数据*/aver=(float)sum/n;printf("Average is %.2f",aver);/*精确到小数点后两位*/}二、#include <>void arr(int *a,int n);/*定义排序函数*/void insert(int *a,int num);/*插入并排序函数*/int n=10;/*定义数据个数,可修改*/void main(){int *a,num,j,k,b[10];printf("请输入个数据:\n");for (j=0;j<n;++j)scanf("%d",&b[j]);/*输入原始数据*/a=&b[0];/*初始化*/arr(a,n);/*调用排序函数*/printf("排序好的数据为:\n");for (j=0;j<n;++j)printf("%d ",*(a+j));/*输出排序好的原始数据*/ printf("\n请输入要插入的数:");scanf("%d",&num);printf("插入%d后的数据为:\n",num);insert(a,num);/*调用插入并排序函数*/}void arr(int *a,int n)/*排序函数*/{int k,j,h;for (k=0;k<10;++k)for (j=0;j<n-k-1;++j)if (*(a+1+j)<*(a+j)){h=*(a+1+j);*(a+1+j)=*(a+j);*(a+j)=h;}}void insert(int *a,int num){void arr(int *a,int n);int j,k;*(a+n)=num;/*将插入的数排在数组最后一位*/arr(a,n+1);/*将新数组重新排序*/for (j=0;j<(n+1);++j)if (*(a+j)==num){k=j;break;}/*找到插入的数在数组中的位置*/for (j=0;j<(n+1);++j)printf("%d ",*(a+j));printf("\n插入的数据排在数组的第%d位",k+1);}三、#include <>void newcopy(char *new1,char *old);void main(){char *new1,*old,a[10];/*new是不能当做变量,所以用new1*/old=a;new1=a;/*字符串的初始化*/printf("请输入字符串:\n");scanf("%s",a);newcopy(new1,old);/*调用函数*/printf("新的字符串为:\n");printf("%s",new1);}void newcopy(char *new1,char *old){int n,j=0;for (;* old!='\0';++old)if ((* old)>'z' || (* old)<'a'){* (new1+j)=* old;++j;}/*排除原字符串中的小写字母,将其他字符存入新字符串*/ *(new1+j)='\0';/*结束新字符串,否则新字符串的输出会故障*/}四、#include <>void main(){void exchange(int *q1,int *q2,int*q3);int a,b,c,*q1,*q2,*q3;printf("请输入个数:\n");scanf("%d,%d,%d",&a,&b,&c);q1=&a;q2=&b;q3=&c;/*将三个数的地址存入q1q2q3中*/ exchange(q1,q2,q3);/*调用排序函数*/printf("3个数从大到小排列为:\n%d,%d,%d",a,b,c); }void exchange(int *q1,int *q2,int *q3){void swap(int *q1,int *q2);/*调用交换函数*/if (*q1<*q2)swap(q1,q2);/*若*q1小于*q2,交换地址位置*/if (*q1<*q3)swap(q1,q3);if (*q2<*q3)swap(q2,q3);}void swap(int *q1,int *q2)/*交换函数*/{int n;n=*q1;*q1=*q2;*q2=n;}修改程序,将三个整型数据改为字符型数据,输入三个字符,按从大到小数顺序输出:只需将程序中的所有int改为char,将%d改为%c即可。
c语言指针实验总结

c语言指针实验总结《c语言指针实验总结》在学习C语言的过程中,指针是一个非常重要的概念。
为了更好地掌握指针的用法和理解其工作原理,我进行了一系列的实验。
在这篇总结中,我将分享我在实验中所学到的知识和经验。
首先,我进行了一个基本的指针实验,用于了解指针的定义和初始化。
我定义了一个整型变量,并通过指针将其地址赋给另一个指针变量。
然后,我通过对指针变量进行修改,来改变原始变量的值。
这个实验帮助我深入理解了指针是如何通过引用和修改地址来操作变量的。
接下来,我进行了一个指针数组的实验。
我创建了一个包含多个整型变量的数组,并定义了一个指向数组的指针。
通过对指针进行加减操作,我可以访问数组中的不同元素。
这个实验展示了指针和数组之间的密切关系,并帮助我更好地理解了C语言中数组的原理。
我还进行了一个指针和函数的实验。
我定义了一个带有指针参数的函数,并在主函数中调用了这个函数。
通过传递指针作为参数,我可以实现对变量的直接修改,而不需要通过返回值来传递结果。
这个实验使我意识到使用指针参数可以提高程序的效率和灵活性。
最后,我进行了一个动态内存分配的实验。
我使用malloc函数动态地分配了一块内存,并通过指针进行访问和操作。
通过释放内存,我可以避免内存泄漏问题。
这个实验教会了我如何使用指针来管理内存,确保程序的健壮性和效率。
通过这些实验,我对C语言中的指针有了更深入的理解。
指针在C语言中扮演着重要的角色,掌握了指针的使用技巧和原理,能够提高程序的效率和功能。
我相信通过不断实践和学习,我的指针技能将得到进一步的提升。
《指针》C语言实验报告

《指针》C语言实验报告
C语言实验报告《指针》学号:__________ 姓名:
__________ 班级:__________ 日期:__________
指导教师:__________ 成绩:__________
实验五指针
一、实验目的
1、掌握指针的概念、会定义和使用指针变量
2、掌握指向数组的指针变量
3、掌握字符串指针的使用
二、实验内容
1、输入3个字符串,按由小到大的顺序输出。
(习题10.2)
2、写一函数,求一个字符串的长度。
在main函数中输入字符串,并输出其长度。
(习题10.6)
3、完善程序,要求使用函数功能:将一个数字字符串转换成一个整数(不得调用C语言提供的将字符串转换为整数的函数)。
例如,若输入字符串“-1234”,则函数把它转换为整数值-1234。
#include
#include
long fun(char xp)
填写程序
void main
char s[6];
long n;
printf(“Enter a string: ”); gets(s);
n=fun(s);
printf(“%ld ”,n);
三、实验步骤与过程
四、程序调试记录。
实验7 指针及其运算

实验七指针及其运算实验目的理解指针的概念,会定义和使用指针变量,掌握指针的运算规则,学会使用数组的指针和指向数组的指针变量。
要点提示1.变量在内存单元的地址称为该变量的“指针”。
2.指针变量是用来存放其它变量地址的变量。
3.指针变量定义的一般形式:类型标识符*指针变量名;4.指针运算符&(取变量地址运算符)和*(取值运算符)是互逆的运算符,右结合。
++,--,+,- 运算符是按地址计算规则进行的。
5.用指针作为函数参数,可以实现“调用函数改变变量的值,在主调函数中使用这些改变的值。
6.数组的指针是指数组的起始地址(首地址),数组元素的指针是指数组元素的地址。
数组名代表数组的首地址,是地址常量。
实验内容1.指针变量的说明,初始化和使用。
2.指针作为函数参数。
3.数组的指针和指针数组的指针变量的说明和使用4. 数组名作为函数参数实验步骤读懂并输入程序,完成填空后输出结果,(下面程序中的中文注释可以不输入)1. 输入a和b两个整数,按先大后小的顺序输出。
算法提示:不交换变量的值,而是交换两个指针变量的值,使p1指向较大的数,p2指向较小的数。
#include<iostream>using namespace std;main(){int *p1,*p2, 【】;/* 变量说明语句*/int a, b;cout<<"\n Please input a and b:";cin>>a>>b;p1=&a;p2=&b;if (a<b){ p=p1; p1=p2; p2=p;} /* p1和p2变量的值进行交换*/cout<<"max=”<<【】<<”min="<<【】<<endl;}程序运行结果:Please input a and b: 12 34【】2.输入三个整数,按由小到大的顺序输出。
实验1-7——精选推荐

第3章实验安排实验1 C实验环境与C程序初步一、目的和要求1.熟悉C程序运行环境。
2.初步了解运行一个C程序的过程(编辑、编译、连接和运行)。
3.通过运行和模仿编写简单的C程序,初步了解C源程序的结构和特点。
二、实验内容1.熟悉计算机中安装的C编译集成环境,新建一个C文件,输入下面的程序,编译并执行。
学习运行程序的过程,并分析运行结果。
#include <stdio.h>void main( ){int a=2,b=3,c;c=a+b;printf("sum=%d\n",c);}2.输入下面的程序,改正错误,并对其进行编译、链接和运行。
#include <stdio.h>void mian( ){printf("This is a C program.\n');}3.理解下面程序的功能,编译并运行程序。
输入两个整数,分析并验证程序的运行结果。
#include <stdio.h>int sum(int x,int y){int z;z=x+y;return(z);}void main( ){int a,b,c;scanf("%d%d",&a,&b);c=sum(a,b);printf("sum=%d\n",c);}提示:①这是一个包含自定义函数sum( )的程序。
②注意scanf( )函数的数据输入格式,输入的两个整数之间可以用空格或者回车或者制表符隔开。
4.编写一个程序,输出以下信息:********************Hello everyone!********************提示:本题可以使用一个或三个输出函数printf( )来实现输出三行信息。
要注意的是printf( )函数一次可以输出多个数据或字符,“\n”用来表示回车换行。
5.编写一个程序,输出图4.1中的图形。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
《C语言程序设计》实验报告实验序号:7 实验项目:指针
一、实验目的及要求
1、通过实验掌握指针的定义和使用指针变量;
2、掌握使用指针对数组和字符串进行操作;
3、掌握函数中指针类型参数的使用;
4、要求采用指针方法完成。
二、实验设备(环境)及要求
使用Turbo C 或Visual C++ 6.0;windows系列操作系统的环境。
三、实验内容与步骤
1.输入运行下面这个程序,观察并分析结果:
#include "stdio.h"
void main()
{
int a[]={2,3,4,5,6};
int *p1;
char *p2="computer\n";
p1=a;
printf("%d\n",p1+2);
printf("%d\n",*(p1+2));
p1=a+2;
printf("%d\n",p1+2);
printf("%d\n",*(p1+2));
printf(p2+2);
printf("%s",p2+2);
}
运行结果截图:
2.以下程序调用invert 函数按逆序重新放置a 数组中的值,a 数组中的值在main 函数中读入,请填空。
#include "stdio.h"
void invert(int *s,int i,int j)
{
int t;
if(i<j)
{
t=*(s+i);
*(s+i)=__ *(s+j) __;
*(s+j)=t;
invert(s,__ t ___,j-1);
}
}
void main( )
{
int a[10],i;
for(i=0;i<10;i++) scanf("%d",_ &a[i] _____);
invert(a,0,10-1);
for(i=0;i<10;i++)
printf("%d ",a[i]);
printf("\n");
}
运行结果截图:
3.以下程序段的功能是轮流输出a、b中的字符串(先输出a中的字符串,且各输出5次),请填空。
void main( )
{
char a[80],b[80],*p;
int i;
gets(a);
gets(b);
for(i=0;i<10;i++)
{
if(i%2= =0) ___p=a_ ___;
else ___ p=b _____;
puts(p);
}
}
运行结果截图:
4.定义一个可以保存10个整型数的一维数组,用数组初始化的方法将10个数据(3,7,9,8,5,4,3,1,0,2)赋值到数组,用指针操作数组依次输出这十个数,再以逆序输出这十个数。
运行结果截图:
5.从键盘输入的字符串有若干个数字字符,编写程序,用移动指针的方法将其中的数字字符取出(按自左向右的顺序)并组成一个整数,例如输入的字符串为12ab345c,则组成的整数为12345。
运行结果截图:
6.【附加题】写一个函数,实现两个字符串的比较。
即写一个自己的strcmp1函数,函数的原型为:int strcmp1(char *p1,char *p2)
设p1指向字符串s1,p2指向字符串s2。
要求当s1=s2时,返回值为0;若s1不等于s2,返回它们二者第一个不同字符的ASCⅡ码差值(如”BOY”与”BAD”,第二个字母不同,”O”与”A”之差为79-65=14)。
如果s1>s2,则输出正值,如果s1<s2,则输出负值。
)
运行结果截图:
四、分析与讨论
对上机实践结果进行分析,上机的心得体会。
成绩
五、教师评语
签名:
日期:
附源程序清单:
1.
2.
3.
4.#include <stdio.h>
void main( )
{
int a[10]={3,7,9,8,5,4,3,1,0,2};
int*p=a,i; for(i=0;i<10;i++)
printf("%d ",*(p+i));
printf("\n");
for(i=9;i>=0;i--)
printf("%d ",*(p+i));
printf("\n");
}
5.#include<stdio.h>
void main()
{
char a[20],*p,b[20];
int i,j=0;
p=a;
scanf ("%s",a);
for (i=0;i<20;i++)
if (*(p+i)>='0'&&*(p+i)<='9')
b[j++]=*(p+i);
for (i=0;i<j;i++)
printf ("%c",b[i]);
printf ("\n");
}
6.。