質問

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
Yuhiwa

質問

#1

投稿記事 by Yuhiwa » 2年前

この問題をコンパイルしたら、0としか出てこないので、すべてを合計したいのですが、どうしたらいいでしょうか?
23:40までに回答をお願いしてもいいでしょうか>

コード:


#include<stdio.h>
#define LEN 5

void array_sumof(int *vc,int no,int *psum);

int main(void){
	int ary[LEN];
	int i, sum=0;
	
	printf("整数を%d回入力してください。\n",LEN);
	for(i=0;i<LEN;i++){
		printf("[%d]> ",i); scanf("%d",&ary[i]);
	}
	
	array_sumof(&ary[i],LEN,&sum);
	
	printf("合計 : %d\n",sum);
	
	return 0;
}

void array_sumof(int *vc,int no, int *psum){
	
	int i;
	for(i=0;i<no;i++){
		psum+=*vc;
	}
}

Yuhiwa
記事: 11
登録日時: 2年前

Re: 質問

#2

投稿記事 by Yuhiwa » 2年前

出来れば返信を多くお願いします。

※今日中の課題の為

Yuhiwa
記事: 11
登録日時: 2年前

Re: 質問

#3

投稿記事 by Yuhiwa » 2年前

見てくれた人でコンパイルして、0にならない方法がわかる方い教えていただけると助かります。

アバター
みけCAT
記事: 6734
登録日時: 13年前
住所: 千葉県
連絡を取る:

Re: 質問

#4

投稿記事 by みけCAT » 2年前

0にならないようにするには、psum ではなく、psum「が指している変数」を書き換えるようにするといいと思います。

コード:

void array_sumof(int *vc,int no, int *psum){
	
	int i;
	for(i=0;i<no;i++){
		// psumを書き換える
		// psum+=*vc;
		// psumが指している変数を書き換える
		*psum+=*vc;
	}
}
また、配列の先頭要素 *vc を no 回足すのではなく、配列の各要素 vc[i-no] を足すようにしたほうがよさそうですね。
オフトピック
「今日中」に間に合わないようにするために待ったのではなく、単に質問を見たタイミングが遅かっただけです。
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

Yuhiwa
記事: 11
登録日時: 2年前

Re: 質問

#5

投稿記事 by Yuhiwa » 2年前

ありがとうございます。でもまだ0になります。
みけCAT さんが書きました:
2年前
0にならないようにするには、psum ではなく、psum「が指している変数」を書き換えるようにするといいと思います。

コード:

void array_sumof(int *vc,int no, int *psum){
	
	int i;
	for(i=0;i<no;i++){
		// psumを書き換える
		// psum+=*vc;
		// psumが指している変数を書き換える
		*psum+=*vc;
	}
}
また、配列の先頭要素 *vc を no 回足すのではなく、配列の各要素 vc[i-no] を足すようにしたほうがよさそうですね。
オフトピック
「今日中」に間に合わないようにするために待ったのではなく、単に質問を見たタイミングが遅かっただけです。

box
記事: 2002
登録日時: 13年前

Re: 質問

#6

投稿記事 by box » 2年前

コード:

#include <stdio.h>

#define LEN (5)

void array_sumof(int *vc, int no, int *psum);

int main(void)
{
    int ary[LEN], i, sum=0;

    printf("整数を%d回入力してください。\n", LEN);
    for (i = 0; i < LEN; i++) {
        printf("[%d]> ", i); scanf("%d", &ary[i]);
	}

    array_sumof(ary, LEN, &sum);
    printf("合計 : %d\n", sum);
    return 0;
}

void array_sumof(int *vc, int no, int *psum)
{
    int i;

    for (i = 0; i < no; i++) {
        *psum += vc[i];
	}
}
バグのないプログラムはない。
プログラムは思ったとおりには動かない。書いたとおりに動く。

アバター
みけCAT
記事: 6734
登録日時: 13年前
住所: 千葉県
連絡を取る:

Re: 質問

#7

投稿記事 by みけCAT » 2年前

Yuhiwa さんが書きました:
2年前
ありがとうございます。でもまだ0になります。
合計が0になるような入力を与えると、0になりますね。
https://wandbox.org/permlink/D9vuxLtdErngiuIM
オフトピック
訳:検証して正しい合計が出ることを確認しているので、「0になる」とだけ言われても原因はわかりかねます。
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

Yuhiwa
記事: 11
登録日時: 2年前

Re: 質問

#8

投稿記事 by Yuhiwa » 2年前

皆さんありがとうございます!
解決しました。

返信

“C言語何でも質問掲示板” へ戻る