Q:請建立C語言的sumTwoArray()函數傳入2個整數陣列的參數(可以不同尺寸),然後使用指標方式計算和傳回2個陣列的總和
這個習題我想了一陣子都想不出該怎麼寫,有高手能給個範例嗎?
附上我自己寫的原始碼:
#include <stdio.h>
#define len 3
void sumTwoArray(int *,int *);
int main()
{
int x[len]={1,2,3};
int y[len]={5,6,7};
sumTwoArray(x,y);
return 0;
}
void sumTwoArray(int *x,int *y){
int i,x[i],y[i],a,b,r;
int *ptr_a = &x[i], *ptr_b = &y[i];
for (i=0;i<len;i++){a = *ptr_a++;}
for (i=0;i<len;i++){b = *ptr_b++;}
r = a+b;
printf("%d",r);
}
另外請問我寫的原始碼哪裡有問題呢?感謝!
你確定你的程式能夠編譯嗎?今天真是長見識了,竟然有這種寫法 @@
int x[i], y[i] 這是什麼 @@
不需要另外再用ptr_a去接資料吧,
而且題目要你"傳回"總和,應該是要傳回到main再輸出吧
(雖然不看原始碼結果一樣,但老師一定會看原始碼)
其實沒必要用a, b, r,如果是要全部加起來,直接用r就可以了,
而且一定要初始化(一陣子沒寫C++了,剛剛忘了初始化程式就跑出錯誤了,C#都會自動幫你初始化)
好了前言完了,接下來講重點了,
函式不要用void,將數值回傳到main再輸出,所以函式的結尾應該是 return r;
x[i], y[i]的定義拿掉(書本上沒有這種東西吧,而且你已經傳入int *x,為什麼又定義一個 *x)
ptr_a跟ptr_b也可以拿掉了,這叫多此一舉,而且定義的地方也錯了,在上面定義你根本不知道i是多少(預設應該是-xxxxxxxxxxxx)
要先初始化 r = 0;
後面兩個迴圈可直接用r
(原本那個是什麼,你可能要重新學一下C語言的基礎)
r += x[i];
r += y[i];
已經寫的很完整了,完整的原始碼就不附上了,自己改吧
我覺得你應該從基礎的東西重新學起
#include <stdio.h>
#define len 3
void sumTwoArray(int *,int *);
int main()
{
int x[len]={1,2,3};
int y[len]={5,6,7};
sumTwoArray(x,y);
return 0;
}
void sumTwoArray(int *x,int *y){
int i,a,b,r = 0;
int *ptr_a = &x[i], *ptr_b = &y[i];
for (i=0;i<len;i++)
{
a = *ptr_a++;
b = *ptr_b++;
r = r+a+b;
printf("Loop:%d a=%d b=%d after add to r , r becomes %d\n", i+1, a, b, r);
}
printf("%d",r);
}
#include<stdio.h>
int sumTwoArray(int *x,int *y){
int z=0;
for(int i=0;i<3;i++){
z=x[i]+y[i]+z;
}
return z;
}
int main (){
int x[]={1,2,3};
int y[]={9,8,6};
printf("%d\n",sumTwoArray(x,y));
return 0;
}