2012年(106)
分类: C/C++
2012-05-08 00:46:09
实验八 指针程序设计(二)
一.实验目的
1. 掌握指针的基本概念与操作方法;
2. 掌握字符指针、指针函数访问方式的程序设计。
二.实验环境
1. 硬件:PII以上计算机;
2. 软件:Windows、Visual C++ 6.0;
3. 其它:一张软盘或者U盘等可移动的存储设备。
三.实验内容
练习1.用指针变量的处理方法编写一个程序,功能为统计某一字符在字符串“This is a c/c++ program.”中出现的次数。
要求:程序中不得出现数组。
运行结果示例:
练习2.用指针变量的处理方法编写一个程序,其中包含一个子函数,功能为将字符串s中的字符c1用字符c2替换。
子函数形式为:void replace(char *str,char c1,char c2);
运行结果示例:
练习3.用指针数组的处理方法编写一个程序,其中包含一个子函数,功能为从键盘输入四个字符串,找出其值最小的一个字符串。
子函数形式为:int min(char *p[],int n);
(其中:n为字符串的个数,子函数返回值为最小字符串的指针数组元素的下标)
运行结果示例:
练习4.编写一个程序,其中包含一个子函数,功能为统计一个字符串在另一个字符串中出现的次数。要求:
l 子函数形式为:int strat(char *a,char*sub);
l 主函数中使用函数指针变量的方式调用子函数;
运行结果示例:
练习5.利用随机数生成一个M*M的二维数组(数据在0~20范围),以4*4矩阵为例:
⑴ 分别以上三角和下三角形式显示矩阵;
子函数形式:void out(int *p[]);
⑵ 求出矩阵两条对角线上所有元素之和;
子函数形式:void add(int *p[]);
⑶ 将矩阵的第一行与最后一行对应元素交换位置存储,并输出新矩阵的结果。
子函数形式:void exchange(int *p[]);
程序要求:程序中对数组的处理全部使用指针数组方式。
运行结果示例:
*练习6.编写一个程序,其中包含一个子函数,功能为将a,b两个字符串中共有的字符存储至数组c中并输出。要求:
l 子函数形式为:void seek(char *a,*b,*c);
指定测试数据:
练习1:
#include"iostream.h"
#include"stdio.h"
void main()
{
chara,*p;
inti=0;
p="Thisis a c/c++ program.";
cout<<"字符串为:";
printf("%s\n",p);
cout<<"输入字符:";
cin>>a;
for(;*p!='\0';p++)
if(*p==a)i++;
cout<<"字符"<出现的次数:"<
}
练习2:
#include"iostream.h"
#include"stdio.h"
#include"string.h"
void main()
{
void replace(char *str,char c1,char c2);
char s[80],c1,c2;
printf("输入字符串:"); gets(s);
cout<<"输入被替换字符:";cin>>c1;
cout<<"输入新字符:";cin>>c2;
replace(s,c1,c2);
printf("新的字符串:%s\n",s);
}
voidreplace(char *str,char c1,char c2)
{
char *p=str;
for(;*p!='\0';p++)
if(*p==c1)*p=c2;
}
练习3:
#include"stdio.h"
#include"string.h"
void main()
{
intmin(char *p[],int n);
chars[4][30],*p[4]=s[0];
inti,m;
for(i=0;i<4;i++)
gets(p[i]);
m=min(p,4);
printf("最小的字符串为:%s",p[m]);
}
intmin(char *p[],int n)
{
intn=0,j;
for(j=0;j<3;j++)
{
if(strcmp(p[j],p[j+1])<0) n=j;
elsen=j+1;
}
return(n);
}
练习4:
#include
#include
#include
int strat(char *a,char *sub)
{
char*p1=a,*p2=sub;
inti=0,j,k,m;
m=strlen(p2);
while(*p1!='\0')
{
if(*p1==*p2)
{
for(j=0,k=0;*(p1+j)!='\0',*(p2+k)!='\0';)
{
if(*(p1+j)==*(p2+k))
{
k++;
j++;
}
else
break;
}
if(k==m)
i++;
p1++;
}
else
p1++;
}
returni;
}
void main()
{
chara[20],b[20],*p1=a,*p2=b;
printf("输入字符串1:");
gets(a);
printf("输入字符串2:");
gets(b);
cout<<"n="<
}
练习5:
#define M 4
#include
#include
#include
#include
void out(int *p[])
{
inti,j;
cout<<"上三角形式:"<
for(i=0;i
{
for(j=0;j<=i;j++)
cout<<*(p[i]+j)<
cout<
}
cout<<"下三角形式:"<
for(i=0;i
{
for(j=0;j
cout<
for(j=i;j
cout<<*(p[i]+j)<
cout<
}
}
void add(int *p[])
{
inti,sum=0;
for(i=0;i
sum+=*(p[i]+i);
for(i=M-1;i>=0;i--)
sum+=*(p[i]+i);
if(M%2==1)
sum=sum-*(p[(M-1)/2]+(M-1)/2);
cout<<"对角线之和为:"<
}
void exchange(int *p[])
{
inti,j,t;
for(i=0;i
for(j=0;j
{
t=*(p[i]+j);
*(p[i]+j)=*(p[M-1-i]+j);
}
cout<<"新矩阵为:"<
for(i=0;i
{
for(j=0;j
cout<<*(p[i]+j)<
cout<
}
cout<
}
void main()
{
inta[M][M],*p[M]={a[0],a[1],a[2],a[3]},i,j;
srand(time(NULL));
cout<
for(i=0;i
{
for(j=0;j
{
*(p[i]+j)=rand()%20;
cout<<*(p[i]+j)<
}
cout<
}
out(p);
add(p);
exchange(p);
cout<
}
练习6:
#include
#include
void seek(char *a,char *b,char *c)
{
inti,j;
char*p1=a,*p2=b,*p3=c;
for(;*p1!='\0';p1++)
for(i=0;*(p2+i)!='\0';i++)
if(*p1==*(p2+i))
{
*p3=*p1;
p3++;
}
*p3='\0';
for(p3=c;*p3!='\0';*p3++)
for(i=1;*(p3+i)!='\0';i++)
{
if(*p3==*(p3+i))
{
j=i;
for(;*(p3+j)!='\0';j++)
{
*(p3+j)=*(p3+j+1);
*(p3+j)='\0';
}
}
}
}
void main()
{
chara[10],b[10],c[10],*p1=a,*p2=b,*p3=c;
printf("输入字符串a:");
gets(a);
printf("输入字符串b:");
gets(b);
seek(p1,p2,p3);
cout<<"包含共有字符的字符串c:"<
}