实验十一 指 针(二)
一、实验目的
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小时内删除。
发表评论