C語言實(shí)現(xiàn)并行求和算法:
成都創(chuàng)新互聯(lián)公司專注于定南企業(yè)網(wǎng)站建設(shè),響應(yīng)式網(wǎng)站設(shè)計,商城網(wǎng)站建設(shè)。定南網(wǎng)站建設(shè)公司,為定南等地區(qū)提供建站服務(wù)。全流程按需定制制作,專業(yè)設(shè)計,全程項目跟蹤,成都創(chuàng)新互聯(lián)公司專業(yè)和態(tài)度為您提供的服務(wù)
1、問題描述
將數(shù)組A均勻劃分成m個片段,每個數(shù)組片段最多有(n+m-1)/m 個元素。每個數(shù)組片段分別由一個線程負(fù)責(zé)局部求和,最后這些部分和加起來就得到數(shù)組中所有元素的總和。
2、代碼書寫
3、注意事項
C語言中不允許動態(tài)數(shù)組類型。例如: int n;scanf("%d",n);int a[n]; 用變量表示長度,想對數(shù)組的大小作動態(tài)說明,這是錯誤的。這里使用malloc 向系統(tǒng)申請分配指定size個字節(jié)的內(nèi)存空間。void* 類型可以強(qiáng)制轉(zhuǎn)換為任何其它類型的指針。
void類型轉(zhuǎn)換
malloc返回類型是 void* 類型:這并不是說該函數(shù)調(diào)用后無返回值,而是返回一個結(jié)點(diǎn)的地址,該地址的類型為void,即一段存儲區(qū)的首址,其具體類型無法確定,只有使用時根據(jù)各個域值數(shù)據(jù)再確定。可以用強(qiáng)轉(zhuǎn)的方法將其轉(zhuǎn)換為別的類型。
向系統(tǒng)申請10個連續(xù)的int類型的存儲空間,用指針pi指向這個連續(xù)的空間的首地址。并且用(int*)對malloc的返回類型進(jìn)行轉(zhuǎn)換,以便把int類型數(shù)據(jù)的地址賦值給指針pi。
例如:
int *pd=NULL;
pi=(int *)malloc(N*sizeof(int)).
先說個題外話,您認(rèn)為k=add(i,j)比k=i+j簡單嗎? 回到正題,問題出在scanf,改成scanf("%d%d", i, j);就可以了。如果不改,那么你輸入就應(yīng)該這樣(例如):3,5。輸出結(jié)果:8。也就是說,你必須在輸入時輸入兩個數(shù),并且以“,”隔開。還有個問題,你的getchar不會使程序暫停,因為輸入隊列中的“\"傳入了getchar,你可以再加一個getchar,或者先清空輸入隊列,用scanf輸入函數(shù)使之停頓。也可以,或者改用system("pause")暫停程序。
我知道了~
LZ
你代碼中sum=sum+expt(n);錯了
應(yīng)該是sum=sum+expt(i);吧
要是按你這樣寫,當(dāng)n=1是sum=expt(1)+expt(1)=3+3=6
所以沒有你預(yù)期的結(jié)果
#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("請輸入要累積的數(shù):");
scanf("%d",n);
sum(n);
printf("累加的結(jié)果為%d",sum(n));
return 0;
}
擴(kuò)展資料:
使用函數(shù)的優(yōu)勢:
C語言程序鼓勵和提倡人們把一個大問題劃分成一個個子問題,對應(yīng)于解決一個子問題編制一個函數(shù),因此,C語言程序一般是由大量的小函數(shù)而不是由少量大函數(shù)構(gòu)成的,即所謂“小函數(shù)構(gòu)成大程序”。
這樣的好處是讓各部分相互充分獨(dú)立,并且任務(wù)單一。因而這些充分獨(dú)立的小模塊也可以作為一種固定規(guī)格的小“構(gòu)件”, 用來構(gòu)成新的大程序。
參考資料來源:百度百科-C語言
int qiuhe(int *arry) //求和函數(shù) 和最大不能超過int,如果需要不受限制,則要改進(jìn)存儲方式
{
int sum=0;
for(;*arry!='\0';arry++){
sum+=*arry;
}
return sum;
}