您好,欢迎访问三七文档
实验八:指针及其应用班级:学生姓名:李林学号:20141060101一、实验目的1、掌握指针的概念2、掌握指针变量的定义和基本使用方法3、掌握使用指针操作数组元素的方法4、掌握使用指针操作字符串的方法二、知识要点1、变量的直接访问和间接访问的概念2、指针和指针变量的概念3、简单变量的指针及指向简单变量的指针变量的定义、赋值及使用4、数组的指针及指向数组的指针变量的定义、赋值及使用5、字符串的指针及指向字符串的指针变量的定义、赋值及使用三、实验预习(要求做实验前完成)1、写出一个C语句,使得指针变量u指向变量x:2、写出一个C语句,输出“指针变量p指向的整型变量”的值:3、把“指针变量u所指向的变量”的值变为40,其语句是:4、定义三个变量,其中x1是整型变量;y1、y2是指向整数的指针变量:5、若有语句:chart[20]=“abcdefgh”,*p;则使p指向字符串的第一个字符的语句是:四、实验内容(以下题目要求使用指针方法完成)1、已知一个整数数组x[4],它的各元素值分别为3、11、8和22。使用指针表示法编程序,求该数组各元素之积。#includestdio.h#includestdlib.hintmain(){intx[4]={3,11,8,22};int*p=&x,ji=1,i;for(i=0;i4;i++){ji=ji*(*p);p++;}printf(%d\n,ji);return0;}2、编写程序,输入10个整数至一数组,将其中最小的数与第一个数对调,把最大的数与最后一个数对调。(要求输出对调前后的数组)#includestdio.h#includestdlib.hvoidha(int*p,intn){inti;for(i=0;in;i++)scanf(%d,&*(p+i));}voidna(int*p,intn){inti,*x,*y;x=y=p;for(i=1;in;i++){if(*x*(p+i))x=p+i;if(*y*(p+i))y=p+i;}i=*y;*y=*p;*p=i;i=*x;*x=*(p+n-1);*(p+n-1)=i;}voidse(int*p,intn){inti;for(i=0;in;i++)printf(%d,*(p+i));}voidmain(){inta[10];printf(请用空格分隔输入的数字\n);ha(a,10);na(a,10);se(a,10);printf(\n);}3、编写程序,复制一个字符串到字符数组x中,要求在复制时删除其中的数字字符。输出x数组。(x数组中不能含有数字字符)#includestdio.h#includestdlib.hvoidmystrcpy(char*a,char*b,char*c){inti;for(i=0;i100;i++){if((*a='0')&&(*a='9')){*c=*a;}else*b=*a;a++;b++;c++;}}intmain(){chara[100],b[100],c[100];gets(a);mystrcpy(a,b,c);puts(b);return0;}4、编写参数为指针变量的函数del,功能是删除字符串中的*号。要求在主函数中定义数组a,b,输入字符串给数组a,调用del删除*号后存放在数组b中,输出b数组。#includestdio.h#includestdlib.hvoiddel(chars1[100],chars2[100]){char*p,*q;gets(s1);p=s1;q=s2;while(*p!='\0'){if(*p!='*'){*q=*p;q++;}p++;}}intmain(){chars1[100],s2[100];del(s1,s2);puts(s2);return0;}5、编写参数为指针变量的函数,功能是将数组元素按输入顺序逆置存放,要求在主函数中输入数组元素的值,在主函数中输出逆置后的数组。#includestdio.h#includestdlib.hvoidshe(chars1[100],chars2[100]){char*p,*q,*h;gets(s1);h=p=s1;q=s2;while(*p!='\0'){p++;}while(p!=h){*q=*(p-1);q++;p--;}puts(s2);}intmain(){chars1[100],s2[100];she(s1,s2);return0;}6、编写参数为指针变量的函数fun,功能是交换两个数组中的对应元素。已知数组a元素值分别为10,20,30,40,数组b元素值分别为1,2,3,4,要求在主函数中输出交换后的a和b数组。#includestdio.h#includestdlib.hvoidfun(inta[4],intb[4]){int*p,*q,*h,i;intc[4];p=a;q=b;h=c;for(i=0;i4;i++){*(h+i)=*(p+i);*(p+i)=*(q+i);*(q+i)=*(h+i);}for(i=0;i4;i++){printf(%d,a[i]);}printf(\n);for(i=0;i4;i++){printf(%d,b[i]);}}intmain(){inta[4]={10,20,30,40},b[4]={1,2,3,4};fun(a,b);return0;}7、利用动态内存分配的方法,输入一个班的学生某门功课的成绩,人数由用户指定,输出全班平均分以及最高分和最低分。#includestdio.h#includestdlib.h#includestring.hintmain(){inti,num,count=0,ave,max=0,min=0;printf(请输入人数:\n);scanf(%d,&num);int*p=(int*)malloc(num*sizeof(int)),*q;q=p;for(i=0;inum;i++){scanf(%d,p);p++;}p=q;max=min=*p;for(i=0;inum;i++){if(max*p){max=*p;}if(min*p){min=*p;}count=count+*p;p++;}ave=count/num;free(p);printf(平均分为%d\n,ave);printf(最高分为%d\n,max);printf(最低分为%d,min);return0;}五、实验结果(要求写出运行界面及输出的运行结果)六、实验小结
本文标题:实验报告8
链接地址:https://www.777doc.com/doc-6446918 .html