2024-11-04 04:16:23
C语言实现并行求和算法:
1、问题描述
将数组A均匀划分成m个片段,每个数组片段最多有(n+m-1)/m 个元素。每个数组片段分别由一个线程负责局部求和,最后这些部分和加起来就得到数组中所有元素的总和。
2、代码书写
3、注意事项
C语言中不允许动态数组类型。例如: int n;scanf("%d",&n);int a[n]; 用变量表示长度,想对数组的大小作动态说明,这是错误的。这里使用malloc 向系统申请分配指定size个字节的内存空间。void* 类型可以强制转换为任何其它类型的指针。
void类型转换
malloc返回类型是 void* 类型:这并不是说该函数调用后无返回值,而是返回一个结点的地址,该地址的类型为void,即一段存储区的首址,其具体类型无法确定,只有使用时根据各个域值数据再确定。可以用强转的方法将其转换为别的类型。
向系统申请10个连续的int类型的存储空间,用指针pi指向这个连续的空间的首地址。并且用(int*)对malloc的返回类型进行转换,以便把int类型数据的地址赋值给指针pi。
例如:
int *pd=NULL;
pi=(int *)malloc(N*sizeof(int)).