C语言实现并行求和算法:
1、问题描述
将数组A均匀划分成m个片段,每个数组片段最多有(n+m-1)/m 个元素。每个数组片段分别由一个线程负责局部求和,最后这些部分和加起来就得到数组中所有元素的总和。
2、代码书写
3、注意事项
C语言中不允许动态数组类型。例如: int nscanf("%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)).
//我想你大概是新手吧#include
void
main()
{
int
a,b,c,d
scanf("%d%d",&a,&b)//输入数据
c=a+b//求两数之和
d=a-b//求两数之差
printf("%d,%d\n",c,d)//输出结果
}
用C语言实现1+2+3+…+10
初始化
代码段:
int i,s1=0,s2=0,s3=0
使用for语句实现:
代码段:
for(i=1i<=10i++)//for语句部分
{
s1+=i
}
printf("s1=%d\n",s1)
使用while语句实现:
代码段:
i=1
while(i<=10) //while语句部分
{
s2+=i
i++
}
printf("s2=%d\n",s2)
使用do..while语句实现:
i=1
do//do..while语句部分
{
s3+=i
i++
}while(i<=10)
printf("s3=%d\n",s3)
运行结果:
S1=55
S2=55
S3=55
结果运行都是正确的
整体代码如下:
#include<stdio.h>
void main()
{
int i,s1=0,s2=0,s3=0
for(i=1i<=10i++)//for语句部分
{
s1+=i
}
printf("s1=%d\n",s1)
i=1//while语句部分
while(i<=10)
{
s2+=i
i++
}
printf("s2=%d\n",s2)
i=1//do..while语句部分
do
{
s3+=i
i++
}while(i<=10)
printf("s3=%d\n",s3)}