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)).
先说个题外话,您认为k=add(i,j)比k=i+j简单吗? 回到正题,问题出在scanf,改成scanf("%d%d", i, j);就可以了。如果不改,那么你输入就应该这样(例如):3,5。输出结果:8。也就是说,你必须在输入时输入两个数,并且以“,”隔开。还有个问题,你的getchar不会使程序暂停,因为输入队列中的“\"传入了getchar,你可以再加一个getchar,或者先清空输入队列,用scanf输入函数使之停顿。也可以,或者改用system("pause")暂停程序。
我知道了~
LZ
你代码中sum=sum+expt(n);错了
应该是sum=sum+expt(i);吧
要是按你这样写,当n=1是sum=expt(1)+expt(1)=3+3=6
所以没有你预期的结果
#includestdio.h
#includestdlib.h
int sum(int a,int b)
{
return a+b;
}
int main ()
{
int x,y;
while(scanf("%d %d",x,y) != EOF)
printf("%d\n",sum(x,y));
return 0;
}
#includestdio.h
int sum(int n)
{
int i=0,s=0;
while(i=n)
{
s=s+i;
i++;
}
return s;
}
int main()
{
int n;
printf("请输入要累积的数:");
scanf("%d",n);
sum(n);
printf("累加的结果为%d",sum(n));
return 0;
}
扩展资料:
使用函数的优势:
C语言程序鼓励和提倡人们把一个大问题划分成一个个子问题,对应于解决一个子问题编制一个函数,因此,C语言程序一般是由大量的小函数而不是由少量大函数构成的,即所谓“小函数构成大程序”。
这样的好处是让各部分相互充分独立,并且任务单一。因而这些充分独立的小模块也可以作为一种固定规格的小“构件”, 用来构成新的大程序。
参考资料来源:百度百科-C语言
int qiuhe(int *arry) //求和函数 和最大不能超过int,如果需要不受限制,则要改进存储方式
{
int sum=0;
for(;*arry!='\0';arry++){
sum+=*arry;
}
return sum;
}