程序填空,程序运行结果

下面程序运行的结果是?

#include 
using namespace std;
class Demo
{ 
    public:
        Demo(){data=1;}
        Demo(int d):data(d){ }
        void setData(int d){data=d;}
        int getData(){return data;}
        
     private:
        int data;
};
int main()
{
    Demo array[6]={10,20,30},*pa=array+5;
    pa->setData(pa->getData()+15);
    while(pa>array)
    {  
       int d=(pa--)->getData();
       pa->setData(d+pa->getData());
       cout<getData()<<'.';
    }
    return 0;
}

运行结果是什么,这个程序是怎样运行的?

基于Monster 组和GPT的调写:

img


这个程序首先定义了一个名为Demo的类,该类包含一个私有数据成员data和一些公共成员函数。

在主函数中,定义了一个名为array的Demo类型的数组,数组的前三个元素分别被初始化为10、20和30,后三个元素没有被初始化,因此它们将使用默认构造函数初始化为1。

还定义了一个名为pa的Demo指针,它被初始化为array+5,即指向数组中的最后一个元素。

接下来,pa->setData(pa->getData()+15)语句将最后一个元素的数据值设置为16(即1+15)。

然后,程序进入while循环。在循环中,首先执行pa--操作,将pa指针指向数组中的下一个元素。然后,将该元素的数据值存储在d变量中。

接下来,pa->setData(d+pa->getData())语句将该元素的数据值设置为其自身的值加上其前一个元素的数据值。

最后,cout<getData()<<'.';语句输出该元素的数据值,并在其后面添加一个句点。

循环执行5次,分别输出17.18.48.68.78.,最后程序返回0。

不知道你这个问题是否已经解决, 如果还没有解决的话:
  • 你可以参考下这个问题的回答, 看看是否对你有帮助, 链接: https://ask.csdn.net/questions/265841
  • 这篇博客也不错, 你可以看下数组指针和指针数组,行指针列指针
  • 除此之外, 这篇博客: 并行计算——实验七:串行计算数组求和并行计算数组求和以及两者时间比较中的 实验七:串行计算数组求和并行计算数组求和以及两者时间比较 部分也许能够解决你的问题, 你可以仔细阅读以下内容或者直接跳转源博客中阅读:

    一.目的:
    学习send,receive,bcast的用法,理解并行计算的优势
    二.内容:
    编写代码分别进行并行计算,串行计算的数组求和以及记录所耗时间
    三,步骤:
    编写串行计算源程序,编译执行
    在这里插入图片描述
    在这里插入图片描述

    编写并行计算源程序,编译执行后通过实验二的方式执行(此处采用命令行方式)
    在这里插入图片描述

    四.程序:
    串行:
    #include<stdio.h>
    #include
    #include<time.h>

    void init_array(int a[],int n)
    {
    for(int i=0;i<n;i++)
    a[i]=i%20+1;
    }
    int main(int argc, char *argv[])
    {
    clock_t start,end;
    double duration;
    int *a;
    a=new int [100000000];
    int n;
    int m_sum=0;
    int i;
    printf(“请输入计算数的个数:\n”);
    scanf("%d", &n);
    init_array(a,n);
    start=clock();
    for (i = 0; i < n; i++)
    {
    m_sum += a[i];
    }
    end=clock();
    duration=(double)(end-start)/CLOCKS_PER_SEC;
    printf(“sum:%d\n”,m_sum);
    printf(“总占用时间:%f\n”,duration);
    }
    并行:
    #define MPICH_SKIP_MPICXX
    #include<stdio.h>
    #include
    #include<mpi.h>
    #include<time.h>
    void init_array(int a[],int n)
    {
    for(int i=0;i<n;i++)
    a[i]=i%20+1;
    }

    int main(int argc, char *argv[])
    {
    int myid, numprocs, source;
    MPI_Status status;
    clock_t start,end;
    double duration;
    int i;
    int *a=new int [100000000];
    int m_sum=0;
    int sum=0;
    init_array(a,100000000);
    MPI_Init(&argc, &argv);
    MPI_Comm_rank(MPI_COMM_WORLD, &myid);
    MPI_Comm_size(MPI_COMM_WORLD, &numprocs);
    int arraynum = 100000000 / numprocs;
    for (i = myid * arraynum; i < myid * arraynum + arraynum; i++)
    {
    sum += a[i];
    }
    if (myid != 0)
    {
    MPI_Send(&sum, 1, MPI_INT, 0, 99, MPI_COMM_WORLD);
    printf(“I am %d process.I send the sum[%d] %d\n”, myid, myid, sum);
    }
    else
    {
    start=clock();
    m_sum += sum;
    printf(“I am %d process.the sum[%d] %d\n”, myid, myid, sum);
    for (source = 1; source < numprocs; source++)
    {
    MPI_Recv(&sum, 1, MPI_INT, source, 99, MPI_COMM_WORLD, &status);
    m_sum += sum;

    		printf("I am process %d.I receive sum[%d] from process %d and the sum is %d.\n", 			myid, source, source,sum);
    	}
    }
    if(myid==0)
    {
    	printf("sum:%d\n", m_sum);
    	end=clock();
    	duration=(double)(end-start)/CLOCKS_PER_SEC;
    	printf("总占用时间:%f\n",duration);
    }
    MPI_Finalize();
    

    }

    五.结果:
    命令行:
    串行计算结果如下图:
    在这里插入图片描述

    并行计算结果如下图:
    在这里插入图片描述

    六.分析与收获:
    并行计算是指同时使用多种计算资源解决计算问题的过程,是提高计算机系统计算速度和处理能力的一种有效手段。它的基本思想是用多个处理器来协同求解同一问题,即将被求解的问题分解成若干个部分,各部分均由一个独立的处理机来并行计算。并行计算系统既可以是专门设计的、含有多个处理器的超级计算机,也可以是以某种方式互连的若干台的独立计算机构成的集群。通过并行计算集群完成数据的处理,再将处理的结果返回给用户。
    并行计算具有时间上的并行,即能在同一时间内完成多个进程数据的处理,相比之下,串行计算只能使用一个进程,难以在短时间内处理完这些数据,因此,在大数据处理中,并行计算具有高效率的优越性,这一点串行计算无法做到。

  • 您还可以看一下 李志辉老师的微信小程序开发从入门课程课程中的 对批量上传函数进行模块封装?小节, 巩固相关知识点

如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^