实验十一  指 针(二)
一、实验目的
1.掌握指针变量的定义与引用。
2.掌握指针与变量、指针与数组的关系。
3.掌握用数组指针作为函数参数的方法。
4.掌握字符指针和字符串的使用。
二、实验内容
1.阅读、调试、运行程序,比较阅读的结果和运行的结果。
(1)
#include <stdio.h>
int b=2;
int func(int *a)
{ b+=*a; return(b); }
void main()
{
int a=2,res=2;
res+=func(&b);
printf("%d\n",res);
}
(2)
#include<stdio.h>
void main()
{ static char a[]="Language",b[]="programe";
  char *p1,*p2; int k;
  p1=a;p2=b;
  for(k=0;k<=7;k++)
    if(*(p1+k)==*(p2+k))
      printf("%c",*(p1+k));
}
(3)
#include<stdio.h>
void main()
{ int x[5]={2,4,6,8,10},*p,**pp;
  p=x;
  pp=&p;
  printf("%d,",*(p++));
  printf("%d\n",**pp);
}
(4)
#include<stdio.h>
int  sub(int *s);
void main()
{ int i,k;
  for(i=0;i<4;i++)
    { k=sub(&i);
      printf("%2d",k);
    }
  printf("\n");
}
int  sub(int *s)
{static int t=0;
t=*s+t;
return t;
}
(5)
#include<stdio.h>
#define N 5
int fun(char *s,char a,int n)
{ int j;
  *s=a; j=n;
  while(*s<s[j]) j--;
  return j;
}
void main()
{ char c[N+1];
  int i;
  for(i=1;i<=N;i++) *(c+i)='A'+i+1;
  printf("%d\n",fun(c,'E',N));
}
(6)
#include<stdio.h>
void main()
{ char a[80],b[80],*p="aAbcdDefgGH";
  int i=0,j=0;
  while(*p!='\0')
  { if(*p>='a'&&*p<='z')
          { a[i]=*p;i++;}
    else { b[j]=*p;j++;}
    p++;
  }
  a[i]=b[j]='\0';
  puts(a);puts(b);
}
(7)
#include<stdio.h>
void main()
{int a[3][3]={1,2,3,4,5,6,7,8,9},*p[4],**q=p;
for(int i=0;i<3;i++)
    p[i]=&a[i][0];
for( i=0;i<3;i++)
    printf("%4d",*(*(q+i)+i));
}
2. 完善程序,并调试运行
(1)下面程序是判断输入的字符串是否是“回文”(顺读和倒读都一样的字符串,如level)。
#include<stdio.h>
#include <string.h>
void main()
{char s[81],*p1,*p2;
int n;
gets(s);
n=strlen(s);
p1=s;
p2=      ;
while(      )
{if(*p1!=*p2) break;
else
{p1++;      ;}
}
if(p1<p2) printf("no\n");
else printf("yes\n");
}
(2)以下程序通过指针数组p和一维数组a构成如下所示的二维数组的左下半三角结构,然后输出。
1
6  7
11  12  13
16  17  18  19
21  22  23  24  25
#include <stdio.h>
void main()
{int a[15],*p[5],i,j,in,n;
for(i=0;i<5;i++)
{in=i*(i+1)/2;
p[i]=    ;}
for(i=0;i<5;i++)
{n=1;
  for(j=0;j<=i;j++)
  {*(p[i]+j)=    ;
  n++;
  }
}
for(i=0;i<5;i++)
{for(j=0;    ;j++)
  printf("%-4d",p[i][j]);
printf("\n");}
}
(3)下面程序的功能是输出一个字符中以某个字符开始的子字符串。
#include "stdio.h"
char * find(    , char c)
{char *p=s;
while(*p!=c&&*p!='\0') p++;
   ;}
void main()
{char a[81],c,*p;
scanf("%s\n",a);
c=getchar();
p=    ;
puts(p);
}
(4)下面程序是按逆序输出各字符串。
#include "stdio.h"
void main()
{char *str[]={"Pascal","C language","Basic","Coble"};
char     ;
int k;
p=str+3;
for(k=0;k<4;k++)
    printf("%s\n",    );}
3. 修正程序,并调试运行
(1)
下面程序的功能是输出数组b中的10个元素。
#include "stdio.h"
void main()
{int b[10]={1,2,3,4,5,6,7,8,9,10},k;
/********found********/
for(k=0;k<10;k++,b++)
/********found********/
  printf("%4d",*b);
}
(2)
本程序的功能是输出二维数组中每行最大的元素。
#include "stdio.h"
void main()
{int a[4][4],*s[4],i,j;
for(i=0;i<4;i++)
    for(j=0;j<4;j++)
        scanf("%d",&a[i][j]);
for(i=0;i<4;i++)
/********found********/
{s[i]=a+i;
  for(j=1;j<4;j++)
      if(*s[i]<a[i][j])
/********found********/
          s[i]= a[i][j];
}
for(i=0;i<4;i++)
/********found********/
    printf("%4d",s[i]);
}指针与二维数组

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。