2012年(106)
分类: C/C++
2012-05-08 00:49:59
实验九 指针程序设计(三)
一.实验目的
1. 掌握指针的基本概念与操作方法;
2. 掌握指针、指针函数访问方式的程序设计。
二.实验环境
1. 硬件:PII以上计算机;
2. 软件:Windows、Visual C 6.0;
3. 其它:一张软盘或者U盘等可移动的存储设备。
三.实验内容
练习1.编写一个程序,其中包含一个子函数,功能为比较两个字符串,将长的那个字符串的首地址作为子函数的返回值,然后在主函数中输出。要求:
l 子函数形式为:char *fun(char*s1,char *s2);
运行结果示例:
练习2.编写一个程序,功能为读入多个正整数(以输入-1作为结束标志),输出其中的最大值、最小值。
l 要求:所有数据均不得使用整型变量,而全部使用malloc( )函数。
l 提示:申请创建3个空间,分别用一个指针加以指向(例如:int*p,*max,*min;)。
练习3.编写一个程序,其中包含一个子函数,功能为:产生n个0~20之间的随机数,调整数据排列顺序,使得所有的奇数排在非奇数之前,然后输出。
要求:
l 存储随机产生的一组数据时,不得使用数组,而使用calloc( )函数;
l 子函数负责调整数据顺序,函数形式为:int rearrange(int *s,int n);
其中n是数据的总个数,子函数返回奇数的个数。
l 程序中对数据的处理全部使用指针方式。
运行结果示例:
练习4.编写一个程序,其中包含一个子函数,功能为将字符串s2中所有未出现在s1中的字母添加到s1的末尾,然后输出。要求:
l 子函数形式为:char *addat(char *s1,char*s2);即:使用指针型函数的方式定义子函数,函数返回值为字符串s1的地址。
运行结果示例:
练习5.编写一个程序,其中包含一个子函数,功能为统计一个字符串在另一个字符串中出现的次数。要求:
l 子函数形式为:int strat(char *a,char*sub);
l 主函数中使用函数指针变量的方式调用子函数;
运行结果示例:
*练习6.编写一个实现串通配符匹配的函数pattern_index( ),其中的通配符只有”?”,它可以和任一字符匹配成功。例如,pattern_index( “?re”,”thereare”)返回的结果是2。要求:
l 子函数形式为:int pattern_index(char *a,char *sub);
练习1:
#include"stdio.h"
#include"iostream.h"
#include"string.h"
void main()
{
char*fun(char *s1,char *s2);
char*s1,*s2;
char*p;
printf("输入s1字符串:");
gets(s1);
cout<
printf("输入s2字符串:");
gets(s2);
cout<
p=fun(s1,s2);
printf("较长的字符串为:%s",p);
}
char *fun(char *s1,char *s2)
{
intm,n;
m=strlen(s1);
n=strlen(s2);
if(m>n)return(s1);
elsereturn(s2);
}
练习2:
#include"iostream.h"
#include"stdio.h"
#include"stdlib.h"
void main()
{
int*p,*max,*min;
inti;
p=(int*)malloc(sizeof(float));
max=(int*)malloc(2);
min=(int*)malloc(2);
printf("输入一组正整数(以-1结束):\n");
cin>>*p;
*max=*p;
*min=*p;
for(i=0;;i )
{
cin>>*p;
if(*p==-1)break;
if(*p>*max)*max=*p;
if(*p<*min)*min=*p;
}
cout<<"最大值:"<<*max<
cout<<"最小值:"<<*min<
}
练习3:
#include"iostream.h"
#include"stdio.h"
#include"stdlib.h"
void main()
{
intrearrange(int *s,int n);
intn,*s,i,m;
printf("");
cin>>n;
s=(*int)calloc(n,sizeof(int));
printf("");
for(i=0;i
{
*s=rand() ;
cout<<*s;
}
m=rearrange(s,n);
printf("%s\n",s);
cout<<""<
}
int rearrange(int *s,int n)
{
int
for(i=0;i
{
if(*(s i)%2!=0)
{
t=*(s i);
for(j=0;j
m=0;
*(s m)=t;
m ;
}
练习4:
#include"iostream.h"
#include"stdio.h"
void main()
{
char*addat(char *s1,char *s2);
charstr1[80],str2[80];
char*s1=str1,*s2=str2;
cout<<"输入字符串s1:";gets(s1);
cout<
cout<
}
char *addat(char *s1,char *s2)
{
char*p=s1;
for(;*s2!='\0';)
{
for(;*s1!='\0';s1 )
{
if(*s1==*s2)break;
else*s1=*s2;
}
*(s1 1)='\0';
s2 ;
}
return(p);
}