C++实验13

本文介绍了三个关于C++指针的实际应用场景,包括利用指针输入数组并计算总和及平均值、通过指针实现两个数组的交集查找以及利用指针与字符串处理实现回文检查,有助于理解指针的基本操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、指数输入数

#include<iostream>
using namespace std;
void main()
{
    int a[10];
    int *p=a;
    int i=0,sum=0;
    while(i<10)
    {
        cin>>*(p+i);
        sum=sum+*(p+i);
        i++;
    }
    for(i=0;i<10;i++)
    {
        cout<<*(p+i)<<'\t';
    }
    cout<<endl;
    cout<<"sum="<<sum<<'\t'<<"ave="<<sum/10.0;
}

二、指针求交集

#include<iostream>
using namespace std;
void creat2array(int *p1,int *p2)
{
    cout<<"请输入第一个数组,-1结束:\n";
    int n;
    for(int i=0;;i++)
    {
        cin>>n;
        if(n==-1)
            break;
        else
            *(p1+i)=n;
    }//该方法创建的数组末尾依然是0

    cout<<"请输入第二个数组,-1结束:\n";
    for(int i=0;;i++)
    {
        cin>>n;
        if(n==-1)
            break;
        else
            *(p2+i)=n;
    }
}
void findinter(int *p1,int *p2,int *p3)
{
    int k=0;
    for(int i=0;i<10;i++)
    {
        if(*(p1+i)==0)
            break;
        for(int j=0;j<10;j++)
        {
            if(*(p2+j)==0)
                break;
            if(*(p1+i)==*(p2+j))
            {
                *(p3+k++)=*(p2+j);
                break;
            }
        }
    }
}
void printsigle(int *p)
{
    for(int i=0;i<10;i++)
    {
        if(!*(p+i))
            break;
        cout<<*(p+i)<<'\t';
    }
    cout<<endl;
}
void print(int *p1,int *p2,int *p3)
{
    cout<<"a[]=";
    printsigle(p1);
    cout<<"b[]=";
    printsigle(p2);
    cout<<"c[]=";
    printsigle(p3);
}
void main()
{
    int a[10]={0},b[10]={0},c[10]={0};
    int *p1=a, *p2=b, *p3=c;
    creat2array(p1,p2);
    findinter(p1,p2,p3);
    printsigle(p3);
    //for循环用于除p3中重复的交集,如(1 1 1 3)和(1 3 5)按照上述计算会得到(1 1 1 3)
    for(int i=0;i<10&&*(p3+i);i++)    //等于0时结束,否则死循环
        for(int j=i+1;j<10;j++)
        {
            if(*(p3+i)==*(p3+j))
            {
                for(int k=j;k<9;k++)    
                    *(p3+k)=*(p3+k+1);
                i=i-1;         //退后i,防止(1 1 1 3)只变成(1 1 3)
                break;         //跳出内层循环,也很重要
            }
        }
    print(p1,p2,p3);
}

三、回文

#include<iostream>
#include<string>
using namespace std;
//string a;
//char *p=&a[0];
//string 类用指针的方法
void main()
{
    string b;
    char a[40];
    cin.get(a,40);
    int n=strlen(a);

    cout<<n;
    char *p1,*p2;
    p1=&a[n-1];
    p2=p1+1;
    while(true)
    {
        *p2++=*p1--;
        if(p1==a)
        {
            *p2=*p1;
            break;
        }
    }
    *(p2+1)='\0';
    cout<<a;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值