iT邦幫忙

0

C語言: 指標+陣列的一個習題

  • 分享至 

  • xImage

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

另外請問我寫的原始碼哪裡有問題呢?感謝!

weiclin iT邦高手 4 級 ‧ 2017-05-27 18:24:36 檢舉
有一點好像沒人提到: (可以不同尺寸)
這個很重要, 也是很常見的基本用法
你的函式應該長成類似這樣: sumTwoArray(int *x, size_t xSize, int *y, size_t ySize)
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中
0
小魚
iT邦大師 1 級 ‧ 2017-05-27 09:05:09

你確定你的程式能夠編譯嗎?今天真是長見識了,竟然有這種寫法 @@
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];
已經寫的很完整了,完整的原始碼就不附上了,自己改吧
我覺得你應該從基礎的東西重新學起

小魚 iT邦大師 1 級 ‧ 2017-05-27 11:47:08 檢舉

補充一下,看題目好像是說要用指標(不懂這題目在做什麼),如果一定要指標,要在迴圈裡面跑,最重要你要知道為什麼,要不然知道答案也沒有用

for (i=0;i<len;i++)
{
	int *ptr_a = &x[i]; 
	a += *ptr_a;
}

另外有試過這樣也可以,這可能比較接近你原先寫的

int *ptr_a = x; 
for (i=0;i<len;i++)
{
	a += *ptr_a++;
}
0
海綿寶寶
iT邦大神 1 級 ‧ 2017-05-27 17:14:51
#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);
}
小魚 iT邦大師 1 級 ‧ 2017-05-28 00:31:58 檢舉

這樣子的確可以,
不過我覺得把ptr_a = &x[i]改成ptr_a = &x[0]
可能初學者比較看得懂,雖然是一樣的結果

小魚 iT邦大師 1 級 ‧ 2017-05-28 12:43:18 檢舉

海綿寶寶大大,我實際試過,你這樣是行不通的,
應該改成這樣(至少i要改,因為會用到)
int i = 0,a = 0,b = 0,r = 0;

0
kl666666
iT邦見習生 ‧ 2018-03-27 21:18:02

#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;
}

我要發表回答

立即登入回答