函数和指针程序设计(二)

原创 2012年03月22日 13:18:21

实验七  函数和指针程序设计(二)

一.实验目的

1. 掌握函数的操作方法;

2. 掌握指针、指针数组访问方式的程序设计。

二.实验环境

1. 硬件:PII以上计算机;

2. 软件:Windows、Visual C++ 6.0;

3. 其它:一张软盘或者U盘等可移动的存储设备。

三.实验内容

练习1.用指针变量的处理方法编写一个程序,功能为读入一组(10个)数据后,逆向输出。

程序要求:

运行结果示例:

练习2.指针变量的处理方法编写一个程序,功能为将数组s(共10个元素,由随机数生成)中的数据位置两两对倒,并输出结果。

程序要求:程序中对数组的处理全部使用指针方式。

运行结果示例:

练习3.用指针变量的处理方法编写一个子函数,功能为从键盘读入一个已经排好序的数组(共10个数),再输入一个数,将此数按次序规律将它插入到数组中后输出结果。

函数要求:

实参为指针变量,形参为数组名,且形式为:void insert(int x[ ],int m);

其中:形参m为要插入的数据;函数无返回值。

运行结果示例:

练习4.用指针变量的处理方法编写一个函数,功能为把读入的一维数组(10个数据)中的所有奇数放在另一个数组中,并输出新数组的内容。

函数要求:

实参为指针变量;形参为指针变量,且形式为:int select(int *p, int*q);

其中:指针p用来接收原数组(的地址),指针q用来接收新数组(的地址);函数返回新数组元素的个数。

提示:两个数组全部在主函数中定义。

运行结果示例:

练习5.用指针变量的处理方法编写一个程序,功能为将一维数组s(数组元素的个数和数值均由用户即时输入的值决定)中的数据进行逆置,并输出结果。

程序要求:使用两个指针,指针p从数组首部向后移动,指针q从数组尾部与之同步向前移动。

运行结果示例:

练习6.编写一个程序,其中包含一个子函数,功能为删除字符串中指定的某个字符,并显示删除后的字符串。

子函数要求:

形式为:voiddelete_string(char str[],char ch);

运行结果示例:

指定的程序测试数据:

 

 

 

 

练习一:

#include<iostream.h>

voidmain()

{

inta[10],*p;

for(p=a;p<(a+10);p++)cin>>*p;

for(;p>a;)cout<<*(--p)<<"  ";

cout<<endl;

}

 

练习2:

#include<iostream.h>

#include<stdio.h>

voidmain()

{

       int sow(int n);

       int a[10],i,t;

       int *p=a;

       printf("原数组:");

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

              cin>>*p++;

       printf("调整后:");

       p=a;

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

              if(i%2==0)

              {

                     t=a[i];

                     a[i]=a[i+1];

                     a[i+1]=t;

              }

              for(p=a;p<(a+10);p++)

                     cout<<*p<<"";

              cout<<endl;

}

 

练习3:

#include<iostream.h>

#include<stdio.h>

voidmain()

{

       void insert(int x[ ], int m);

       int a[11],*p=a,i,m;

       cout<<"输入10个数组:"<<endl;

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

              cin>>*p++;

       cout<<"要插入的数值:";

       cin>>m;

       p=a;

       insert(a,m);

       cout<<"插入数据后的结果:";

       for(i=0;i<11;i++,p++)

              cout<<*p<<"";

       cout<<endl;

}

voidinsert(int x[ ], int m)

{

       int i,j;

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

              if(m<x[i])

              {

                     for(j=9;j>=i;j--)

                            x[j+1]=x[j];

                     x[j+1]=m;

                     i=10;

              }

              return;

}

 

练习4:

#include<iostream.h>

inta[10],b[10];

voidmain()

{

       int select(int *p, int *q);

       int i,*p=a,*q=b,c;

       cout<<"输入10个数组元数:"<<endl;

       for(p=a,i=0;i<10;i++)

              cin>>*p++;

       cout<<"挑选后的新数组:";

       p=a;

       c=select(a,b);

       for(q=b;q<(b+c);q++)

              cout<<*q<<"";

       cout<<endl;

}

intselect(int *p, int *q)

{

       int i,w=0;

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

              if(a[i]%2!=0)

              {*q=a[i];q++;w++;}

              return(w);

}

 

 

练习5:

#include<iostream.h>

voidmain()

{

       void ivn(int *x,int n);

       int a[20],i,m;

       cout<<"输入数组元数的个数m:"<<endl;

       cin>>m;

       cout<<"输入数组的"<<m<<"个元数值:"<<endl;

       for(i=0;i<m;i++)cin>>a[i];

       cout<<endl;

       ivn(a,m);

       cout<<"数组逆值后的结果:";

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

              cout<<a[i]<<"";

       cout<<endl;

}

voidivn(int *x,int n)

{

       int *p,temp,*q=(x+n-1),m=(n-1)/2;

       for(p=x;p<=(x+m);p++,q--)

       {

              temp=*p;

              *p=*q;

              *q=temp;

       }

       return;

}

 

 

练习6

法一:

#include<stdio.h>

#include<string.h>

#include<iostream.h>

voidmain()

{

       void delete_string(char str[],char ch);

       char a[20],c;

       printf("input orignalstring:");

       gets(a);

       cout<<endl;

       printf("input char <todelete>:");

    c=getchar();

       cout<<"the string afterdelete:";

       cout<<endl;

       delete_string(a,c);

       puts(a);

       cout<<endl;

}

voiddelete_string(char str[],char ch)

{

       int i,j;

       for(i=j=0;str[i]!='\0';i++)

              if(str[i]!=ch)

                     str[j++]=str[i];

              str[j]='\0';

}

 

法二:

#include"iostream.h"

#include<string.h>

void main()

{

char line[80];

char ch;

int i,j;

int len;

cout<<"Input originalstring:";

cin.getline(line,80);

cout<<"Input char <todelete>:";

cin>>ch;

i=0;

while(line[i]!='\0')

{while(line[i]!='\0'&&line[i]!=ch)i++;

len=strlen(line);

for(j=i;j<len-1;j++)

line[j]=line[j+1];

line[j]='\0';}

cout<<"The string afterdelete:"<<line<<endl;

}

 

 

 

《C语言及程序设计》实践项目——指针及其运算

返回:贺老师课程教学链接  C语言及程序设计初步  【程序阅读题】写出以下程序运行的结果,上机对照结果后,解释其过程。(注意用手画内存变化过程,而不要仅凭大脑思考。)#include int mai...
  • sxhelijian
  • sxhelijian
  • 2015年01月09日 07:44
  • 2182

函数指针作为函数参数,实现冒泡排序的升序排序和降序排序

#include #define N 10//定义数组元素个数 int Ascending(int a,int b);//升序排列的函数声明 int Descending(int a,int b);...
  • weichanjuan3
  • weichanjuan3
  • 2015年07月15日 09:43
  • 1476

《C语言及程序设计》实践参考——字符串处理函数

返回:贺老师课程教学链接  实践要求【项目4-字符串处理函数】指针是神奇的,指向整型的指针int *p1,可以操作整型数组int a[];指向字符型的指针char *p2,可以操作字符数组(字符串)c...
  • sxhelijian
  • sxhelijian
  • 2015年05月01日 08:19
  • 1538

百度2016研发工程师笔试题(一)+详解

1.软件项目存储于/ftproot,允许apache用户修改所有程序,设置访问权限的指令?A.chmod apache-R/ftproot B.chmod apache/ftproot C.chgrp...
  • hitxueliang
  • hitxueliang
  • 2016年08月02日 09:09
  • 1547

C/C++程序设计学习笔记二:C语言的函数中,如何使用指针交换两个数的值,深入理解指针

使用外部函数交换两个变量的值,一个再简单不过的事情,但是在C/C++中,正确实现该功能反应了你对指针和引用等重要知识的掌握程度。本文列举了几种常见的写法,其中前三种是错误的,后两种是正确的。第四种使用...
  • xueyushenzhou
  • xueyushenzhou
  • 2014年08月22日 14:55
  • 5112

程序设计基石与实践系列之C语言函数指针基础

英文出处:Dennis Kubes:Basics of Function Pointers in C本文写的非常详细,因为我想为初学者建立一个意识模型,来帮助他们理解函数指针的语法和基础。如果你不讨厌...
  • utimes
  • utimes
  • 2015年12月18日 23:01
  • 2033

再开一篇关于C++程序设计基核心之一:引用,指针,符号优先级,函数参数传递

http://zhidao.baidu.com/link?url=mfGNT59IIvC4nQJ2R8f6Y74Lzdq30PVDAbFD79-6a9nB5rzuxzLHK602RWMtO0xKwIX...
  • u011978022
  • u011978022
  • 2015年06月18日 23:40
  • 451

C程序设计笔记6-8章 数组/函数/指针

[ TOP ]数组定义 int a[3]={1,2,3}二维数组内存中二维数组的排放是线性的 int a[2][3]={{1,3,4},{2,4,6}}字符数组字符串即字符数组。 对于定义了长度但...
  • kofforever
  • kofforever
  • 2017年01月06日 11:39
  • 108

C/C++程序设计——指针与函数

在一个函数内部用指针访问代替对象直接访问、代替数组和字符串访问,实际意义并不大。指针最重要的应用是作为函数参数,它使得被调函数除了返回值之外能够将更多的运算结果返回到主调函数中,即指针是函数参数传递的...
  • phnumber
  • phnumber
  • 2015年12月03日 23:03
  • 471

函数的指针、大程序设计的基本事项

不知道大家有没有试过这样的一件事情,输出一个函数的地址或者main的地址。大家可能会感到好奇,这也可以输出?答案是可以的大家可以这自己的电脑试一下这样的一件事情,printf("%p",main),输...
  • ZCMUCZX
  • ZCMUCZX
  • 2017年01月02日 22:49
  • 166
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:函数和指针程序设计(二)
举报原因:
原因补充:

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