关闭

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

标签: stringinsertdeleteinputwindowsc
247人阅读 评论(0) 收藏 举报
分类:

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

一.实验目的

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;

}

 

 

 

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:27674次
    • 积分:848
    • 等级:
    • 排名:千里之外
    • 原创:63篇
    • 转载:0篇
    • 译文:0篇
    • 评论:2条
    文章存档
    最新评论