指针程序设计(二)

原创 2012年03月22日 13:20:00

实验八  指针程序设计(二)

一.实验目的

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<<"字符"<<a<<"出现的次数:"<<i<<endl;

}

 

练习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<iostream.h>

#include<stdio.h>

#include<string.h>

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="<<strat(p1,p2)<<endl;

}

 

练习5:

#define M 4

#include<iostream.h>

#include<time.h>

#include<iomanip.h>

#include<stdlib.h>

void out(int *p[])

{

       inti,j;

       cout<<"上三角形式:"<<endl;

   for(i=0;i<M;i++)

       {

              for(j=0;j<=i;j++)

                     cout<<*(p[i]+j)<<setw(6);

              cout<<endl;

       }

       cout<<"下三角形式:"<<endl;

       for(i=0;i<M;i++)

       {

              for(j=0;j<i;j++)

                     cout<<setw(8);

              for(j=i;j<M;j++)

                     cout<<*(p[i]+j)<<setw(6);

              cout<<endl;

       }

}

void add(int *p[])

{

       inti,sum=0;

       for(i=0;i<M;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<<"对角线之和为:"<<sum<<endl;

       }

void exchange(int *p[])

{

       inti,j,t;

       for(i=0;i<M;i++)

              for(j=0;j<M;j++)

              {

                     t=*(p[i]+j);

                     *(p[i]+j)=*(p[M-1-i]+j);

              }

       cout<<"新矩阵为:"<<endl;

       for(i=0;i<M;i++)

       {

              for(j=0;j<M;j++)

                     cout<<*(p[i]+j)<<setw(6);

              cout<<endl;

       }

       cout<<endl;

}

void main()

{

       inta[M][M],*p[M]={a[0],a[1],a[2],a[3]},i,j;

       srand(time(NULL));

       cout<<M<<"*"<<M<<"矩阵的内容:"<<endl;

       for(i=0;i<M;i++)

       {

              for(j=0;j<M;j++)

              {

                     *(p[i]+j)=rand()%20;

                     cout<<*(p[i]+j)<<setw(6);

              }

              cout<<endl;

       }

       out(p);

       add(p);

       exchange(p);

       cout<<endl;

}

 

练习6:

#include<iostream.h>

#include<stdio.h>

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:"<<c<<endl;

}

 

C程序设计语言--指针与数组(一)

关于这方面的文章,网上早就有人总结的非常完整了,但是还是想从自己的角度去分析下。     指针是一种保存变量地址的变量。在ANSI C中使用类型void*(指向void的指针)代替char *作为通用...
  • yusiguyuan
  • yusiguyuan
  • 2013年10月04日 10:03
  • 1247

指针【C语言程序设计】

一.实验目的: 1.掌握变量的指针使用方法 2.掌握通过指针传递数组的方法 3.  掌握指针与数组和函数编程的应用方法 4.学习和掌握基本的递归的程序设计方法   二、...
  • gnosed
  • gnosed
  • 2017年10月31日 16:26
  • 120

基于MCP2515的Linux CAN总线驱动程序设计(二)

转自http://blog.csdn.net/leesheen/article/details/8770560 1. 前言         CAN(Controller Area ...
  • qwaszx523
  • qwaszx523
  • 2017年02月17日 14:25
  • 552

程序设计与算法 第八、九周测验

程序设计与算法 第八、九周测验
  • xiewen99
  • xiewen99
  • 2016年09月27日 17:56
  • 833

使用C指针的几个基本注意点 [李园7舍_404]

相关笔记:C指针和堆空间、C malloc()实际分配空间大小。 在C中,使用动态分配的形式使用堆内存空间。涉及“动态内存分配函数(malloc)”,“动态内存释放函数(free)...
  • misskissC
  • misskissC
  • 2013年12月05日 14:47
  • 2415

2016年团体程序设计天梯赛-初赛 - 到底有多二 - Java

一个整数“犯二的程度”定义为该数字中包含2的个数与其位数的比值。如果这个数是负数,则程度增加0.5倍;如果还是个偶数,则再增加1倍。例如数字“-13142223336”是个11位数,其中有3个2,并且...
  • qq_34594236
  • qq_34594236
  • 2016年06月05日 09:18
  • 968

《最优化方法及其Matlab程序设计》马昌凤 部分习题答案

第12章 序列二次规划法 6.用SQP方法的Matlab程序求解下列优化问题: (1) %%% 目标函数 f(x) %%%%%%%%%%% function f=f1(x) % f=-pi*x(...
  • lyc_daniel
  • lyc_daniel
  • 2015年09月28日 11:19
  • 4039

《C语言程序设计》指针篇<二>

通过指针引用多维数组 如何理解二维数组元素的地址? 要知道,这本书用了整整两页的内容来讲解这方面的知识,从这里足以看出来理解通过指针来引用二维数组是一件比较麻烦的事情,但是我认为理解并不难。 什么...
  • qq_34202958
  • qq_34202958
  • 2016年03月19日 13:59
  • 127

程序设计基石与实践之C语言指针Point

指针变量与指针变量的声明理解指针的第一步是在机器级上观察指针表示的内容。大多数现代计算机都将内存分割为字节(byte),每个字节可以存储8位的信息每个字节都有唯一的地址( address)。用来和内存...
  • utimes
  • utimes
  • 2013年04月20日 09:50
  • 1804

基于MCP2515的Linux CAN总线驱动程序设计(三)

1. 前言         上篇文章介绍了使用SPI子系统设计的基于MCP2515的Linux CAN总线驱动程序,这篇文章主要介绍MCP2515的字符设备驱动功能函数的实现。 2. 硬件设计 ...
  • yuzhenchao1980
  • yuzhenchao1980
  • 2017年03月07日 21:40
  • 267
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:指针程序设计(二)
举报原因:
原因补充:

(最多只允许输入30个字)