您好,欢迎访问三七文档
c语言·指针实验四指针程序设计【实验目的】通过实验让学生掌握各类指针的定义与引用、指针作为函数参数的应用、字符指针的应用、函数指针的应用。【实验要求】使用指针来完成变量的引用,编写程序将指针作为参数进行传递,理解指针的含义。【实验课时】8【实验内容】1.通过指针变量求三个变量中的最大值和最小值。#include#includevoidmain(){inta,b,c,*pmax,*pmin;clrscr();printf(Pleaseinputthreenumbers:\n);scanf(%d,%d,%d,&a,&b,&c);if(ab)/*使pmax指向a,b中大的数,pmin指向a,b中小的数*/{pmax=/**//**/;pmin=/**//**/;}else{pmax=/**//**/;pmin=/**//**/;}if(c*pmax)pmax=/**//**/;/*使pmax指向变量a,b,c中最大的数*/if(c}2.输入3个整数,按照从小到大的次序输出。#include#includevoidmain(){inta,b,c;int*pa=&a,*pb=&b,*pc=&c,*temp;clrscr();printf(Pleaseinputthreenumbers:\n);scanf(%d,%d,%d,&a,&b,&c);if(*pa*pb){/**//**/;}/*使pa指向a,b中小的数*/if(*pa*pc){/**//**/;}/*使pa指向a,b,c中最小的数*/if(*pb*pc){/**//**/;}/*使pb指向a,b,c中次小的数*/printf(%d,%d,%d\n,*pa,*pb,*pc);}运行结果如下:Inputthreeintegersn1,n2,n3:34,21,25↙Now,theorderis:21,25,343.将输入的10个整数存入一数组a中,然后输出数组元素中的最大值与次最大值。#include#includevoidmain(){inta[10],i,*p;int*pmax,*pnmax;clrscr();/**//**/;/*使指针变量p指向数组a*/printf(Pleaseinputarraya:\n);for(i=0;i{printf(inputa[%d]:,i);scanf(%d,/**//**/);}/*用指针变量p表示数组元素地址*/if(p[0]p[1])pmax=p,pnmax=p+1;elsepmax=p+1,pnmax=p;for(i=2;iif(*pmax{/**//**/;}/*将pmax指向数组最大值元素*/elseif(*pnmax/*将pnmax指向数组次最大值元素*/printf(max=%d,nmax=%d\n,*pmax,*pnmax);}/*输出最大值与次最大值*/4.将输入的10个整数存入一数组a中,输入待查找的x,输出x在数组a中的位置,若数组a中没有值为x的元素,则输出“notfound”;#include#includevoidmain(){inta[10],i,x,*p;clrscr();/**//**/;/*使指针变量p指向数组a*/printf(Pleaseinputarraya:\n);for(i=0;i{printf(inputa[%d]:,i);scanf(%d,/**//**/);}/*用指针变量p表示数组元素地址*//*以下使用顺序查找*/printf(inputthedatatobelocated:);scanf(%d,&x);for(i=0;iif(x==/**//**/)break;/*用指针变量p引用数组元素*/if(i==10)printf(%disnotfound.\n,x);elseprintf(%dina[%d].\n,x,/**//**/);}/*输出找到的数组元素位置*/5.将输入的10个整数存入一数组a中,按从小到大的次序输出。#include#includevoidmain(){inta[10],i,j,k,temp,*p;clrscr();p=a;/*使指针变量p指向数组a*/printf(Pleaseinputarraya:\n);for(i=0;i{printf(inputa[%d]:,i);scanf(%d,p+i);}/*用指针变量p表示数组元素地址*//*以下使用冒泡法排序*/for(i=9;i=1;i--){/**//**/;/*k为每轮比较范围的终止元素下标*/for(j=0;jif(/**//**/)/*用指针变量p引用数组元素*//**//**/}printf(Outputarrayaaftersorted:\n);/*输出排序结果*/for(i=0;iprintf(%d,p[i]);/*用指针变量p引用数组元素*/printf(\n);}6.将输入的10个整数存入一数组a,按输入顺序的逆序存放,并输出。#include#includevoidmain(){inta[10],i,temp,*p,*p1,*p2;clrscr();p=a;/*使指针变量p指向数组a*/printf(Pleaseinputarraya:\n);for(i=0;i{printf(inputa[%d]:,i);scanf(%d,p+i);}/*用指针变量p表示数组元素地址*/printf(Outputarraya:beforeinvert:\n);/*输出原始数组*/for(i=0;iprintf(%d,p[i]);/*用指针变量p引用数组元素*/printf(\n);for(i=0;i{p1=/**//**/;p2=/**//**/;/*p1指向交换的左元素,p2指向交换的右元素*/temp=*p1;*p1=*p2;*p2=temp;}/*交换p1,p2指向的元素值*/printf(Outputarraya:afterinvert:\n);/*输出逆序存放后的数组*/for(i=0;iprintf(%d,/**//**/);/*用指针变量p引用数组元素*/printf(\n);}7.将输入的二维数组a[3][3]先输出再进行转置。并输出转置后的矩阵。/*用指向数组元素的列指针变量实现*/#include#includevoidmain(){inta[3][3],*p,i,j,t;clrscr();;printf(\nInputmatrix:\n);for(i=0;iscanf(%d%d%d,&a[i][0],&a[i][1],&a[i][2]);printf(origin,matrix:\n);/*输出原始矩阵*/for(i=0;iprintf(%d%d%d\n,a[i][0],a[i][1],a[i][2]);/**//**/;/*设置指针p指向数组a*/for(i=0;ifor(j=0;j{/**//**/}printf(Now,matrix:\n);/*输出转置后矩阵*/for(i=0;iprintf(%d%d%d\n,a[i][0],a[i][1],a[i][2]);}8.将输入的二维数组a[3][3]先输出再进行转置。并输出转置后的矩阵。/*用指向由3个元素组成的一维数组的行指针变量实现*/#include#includevoidmain(){inta[3][3],(*p)[3],i,j,t;clrscr();;printf(\nInputmatrix:\n);for(i=0;iscanf(%d%d%d,&a[i][0],&a[i][1],&a[i][2]);printf(origin,matrix:\n);/*输出原始矩阵*/for(i=0;iprintf(%d%d%d\n,a[i][0],a[i][1],a[i][2]);/**//**/;/*设置指针p指向数组a*/for(i=0;ifor(j=0;j{/**//**/}printf(Now,matrix:\n);/*输出转置后矩阵*/for(i=0;iprintf(%d%d%d\n,a[i][0],a[i][1],a[i][2]);}9.输入一4×4的矩阵,然后实现:(1)输出各行元素中的最大值及其所在的位置;(2)输出所有元素中的最小值;(3)分别输出主对角线和副对角线上元素的和。#include#includevoidmain(){inta[4][4];inti,j,(*p)[4];intlmax,loc,min;intmt=0,st=0;clrscr();/**//**/;/*设置指针p指向数组a*/for(i=0;ifor(j=0;jscanf(%d,/**//**/);/*输入二维数组a*/printf(origin,matrix:\n);/*输出原始矩阵*/for(i=0;iprintf(%d%d%d%d\n,a[i][0],a[i][1],a[i][2],a[i][3]);min=p[0][0];/*假设第0行0列元素最小*/for(i=0;i{/**//**//*假设第i行0列元素是第i行最大的,并用loc变量记录其列下标*/for(j=0;j{if(lmax/**//**/if(minp[i][j])/**//**/}printf(lineof%d:max=%5din%2d\n,i,lmax,loc);/*输出各行的最大值及位置*/}printf(min=%d\n,min);/*输出最小值*/for(i=0;i{mt+=p[i][i];/*计算主对角线元素和*/st+=/**//**/;/*计算副对角线元素和*/}printf(mt=%d,st=%d\n,mt,st);}10.实现gets()函数的功能。#include#includevoidmain(){charstr[81];char*p=str;clrscr();while(/**//**/);/*将从键盘上输入的一个字符送给p指针所指向的数组元素存储*//*并判断其是否为’\n’字符,若不是,p后移,继续下一次的存储和判断*/*p='\0';puts(str);}11.编程实现输入一行文字,找出其中大写字母、小写字母、空格、数字及其他字符各有多少。#includevoidmain(){intupper=0,lower=0,digit=0,space=0,other=0,i=0;char*p,s[80];clrscr();printf(Inputstring:);while(/**//**/)i++;/*将从键盘上输入的一个字符送给数组元素存储*//*并判断其是否为’\n’字符,若不是,i++,继续下一次的存储和判断*/p=/**//**/;/*使指针变量p指向字符数组s*/while(/**//**/)/*若当前字符指针所指向的数组元素值不为’\n’*/{if(('A'elseif(('a'elseif(*p=='')space++;elseif(('0'elseother++;/**//**/;}printf(upperercase:%d\n,upper);printf(lowerercase:%d\n,lower);printf(digit:%d\n,digit);printf(space:%d\n,space);printf(other:%d\n,other);}运行结果:Inputstring:Todayis2021/1/1↙upperercase:1lowerercase:6digit:6space:2other:212.利用字符指针把字符串s1从第m个字符开始的剩余的所有字符复制到字符串s2。#include#includevoidmain(){chars1[20],s2[20];char*from=s1,*to=s2;intm;clrscr();printf(Inputstring:);/**//**/;/*从键盘上输入一字符串给s1字符数组存储*/printf(pleaseinputm:);scanf
本文标题:c语言·指针
链接地址:https://www.777doc.com/doc-7845577 .html