用C语言怎么编一个求和的程序?

Python020

用C语言怎么编一个求和的程序?,第1张

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)).

先获取数组长度,然后用for循环,从数组中获取值进行累加求和。

#include

#include

int main()

{

int n

int val

int * a

int sun = 0, i

printf("请输入数组的长度:")

scanf("%d", &n)

printf("\n")

a = (int *)malloc(n * sizeof(int))//为数组a动态分配内存

for(i = 0i <ni++)

{

printf("请输入数组的第%d个元素的值:", i+1)

scanf("%d", &val)

printf("\n")

a[i] = val

}

for (i = 0i <ni++)

{

sun+=a[i]//sun+=a[i]相当于sun=sun+a[i]

}

printf("sun = %d\n",sun)

free(a)//释放a动态分配的内存

return 0

}

扩展资料:

一个数组中的所有元素具有相同的数据类型(在C、C++、Java、pascal中都这样。但也并非所有涉及数组的地方都这样,比如在Visual Foxpro中的数组就并没这样的要求)。当然,当数据类型为 Variant 时,各个元素能够包含不同种类的数据(对象、字符串、数值等等)。可以声明任何基本数据类型的数组,包括用户自定义类型和对象变量。

如果要用户输入的是一个数组,一般是用一个循环,但是在输入前也需要固定数组的大小。

compact跟变长数组没有太大的关系,也应该用不到变长数组。因为一般的传数组到函数中就是传数组的地址和元素的个数的,那只是一个提示,不是要求。

参考资料来源:百度百科-数组

用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)}