複数の引数について

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

複数の引数について

#1

投稿記事 by OP » 14年前

勉強中にわからなくなって質問することにしました。このコード↓がなぜ3825になるのかわかりません。
もしわかる人がいましたら返信お願いします。

コード:

#include <stdio.h>

int sum(int,int);

int main(void)
{
	sum(50,100);
	return 0;
}

int sum(int min,int max)
{
	printf("%d\n",(min + max) * (max - min + 1) / 2);
	return 0;
}

アバター
沖 滉均
記事: 237
登録日時: 14年前
住所: K県F市

Re: 複数の引数について

#2

投稿記事 by 沖 滉均 » 14年前

返答する前に、まず質問させてください。
OPさんは何をされたいんでしょう?
どういう結果を望んでいるのでしょうか?
There is no royal road to learning.
codeタグで指定できる言語
画像

OP

Re: 複数の引数について

#3

投稿記事 by OP » 14年前

このコードは3825を出すのですがですが、なぜそうなるのかわかりません。
こうなるまでの

コード:

int sum(int min,int max)
{
	printf("%d\n",(min + max) * (max - min + 1) / 2);
	return 0;
}
ここの部分がわからないので、教えていただけるとありがたいです。

アバター
Tatu
記事: 445
登録日時: 14年前
住所: 北海道

Re: 複数の引数について

#4

投稿記事 by Tatu » 14年前

(50+100)*(100-50+1)/2が計算できないという意味でしょうか?

アバター
沖 滉均
記事: 237
登録日時: 14年前
住所: K県F市

Re: 複数の引数について

#5

投稿記事 by 沖 滉均 » 14年前

引数がどのように入っているのかがわからないのでしょうか…
計算そのものがわからないのでしょうか…
なぜ数値が出力(表示)されるかがわからないのでしょうか…
上記のどれがわかりませんか?

コード:

#include <stdio.h>
 
int sum(int,int);
 
int main(void)
{
    sum(50,100);	// ←ここで第1引数に50、第2引数に100を入力
    return 0;
}

// mainで呼び出す際にsum(50, 100)としているので
// min = 50, max = 100が入る
int sum(int min,int max)
{
    printf("%d\n",(min + max) * (max - min + 1) / 2);
    // (50+100)×(100-50+1)÷2=150×51÷2=3825
    // "%d\n"←符号付10進数+改行
    return 0;
}
[追記]
sum関数が何を行っている関数かわからないという意味ならば
min~maxまでの和を求める関数ですね
最後に編集したユーザー 沖 滉均 on 2011年8月31日(水) 16:46 [ 編集 1 回目 ]
There is no royal road to learning.
codeタグで指定できる言語
画像

白い時空
記事: 18
登録日時: 14年前
住所: 埼玉県さいたま市

Re: 複数の引数について

#6

投稿記事 by 白い時空 » 14年前

多分、
min + (min+1) + (min+2) + ・・・・・ + (max-1) + max
を求めてます。

50 + 51 + 52 + ・・・・・ + 99 + 100 = 3825
になります。

OP

Re: 複数の引数について

#7

投稿記事 by OP » 14年前

3825になりました!!minとmaxの代入を間違ってたみたいです!!返信をしてくれた皆様ありがとうございました!!

アバター
Tatu
記事: 445
登録日時: 14年前
住所: 北海道

Re: 複数の引数について

#8

投稿記事 by Tatu » 14年前

書き込んでいくらなんでもこれはないだろうと思って調べてみたら
http://homepage3.nifty.com/mmgames/c_guide/11-02.html
に同じコードがのっていました。

アバター
沖 滉均
記事: 237
登録日時: 14年前
住所: K県F市

Re: 複数の引数について

#9

投稿記事 by 沖 滉均 » 14年前

解決にチェックされていますが、ちょっと待ってください。

そもそも、疑問点がよくわかりません。
OP さんが書きました:3825になりました!!minとmaxの代入を間違ってたみたいです!!
最初の質問に書かれたコードの時点で3825になっています。

今回に限らず、本当に理解できたのだろうか?
と心配になります

元の疑問点(わからないこと)について、どのように解決したのかを書くようにしていただけないでしょうか?
There is no royal road to learning.
codeタグで指定できる言語
画像

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 14年前
住所: 東海地方
連絡を取る:

Re: 複数の引数について

#10

投稿記事 by softya(ソフト屋) » 14年前

私もOPさんは中途半端な理解のまま進んでいる気がしていたので、ちゃんと説明するクセを付けたほうが良いと思います。
出来るだけ最初の状況と解決に至った状況を細かく説明してみてください。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

OP

Re: 複数の引数について

#11

投稿記事 by OP » 14年前

すいません・・・できるだけがんばってみます。

OP

Re: 複数の引数について

#12

投稿記事 by OP » 14年前

こういった3825になるのがわからない場合はどういう風に問題を書けばいいのでしょうか?

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 14年前
住所: 東海地方
連絡を取る:

Re: 複数の引数について

#13

投稿記事 by softya(ソフト屋) » 14年前

ここで分からないポイントは、OPさんにとって何なのかを説明してください。
あと何が分かったんでしょうか? 分かったというのは他の人に説明できる状態のことを言います。今その状態ですか?
それと前に提案した日本語に書き換える法は実践していないのですか?その形で書いてもらってもかまいませんよ。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

OP

Re: 複数の引数について

#14

投稿記事 by OP » 14年前

やってみます!!

コード:

#include <stdio.h> //含む<stdio.h>

int sum(int,int);

int main(void)
{
	sum(50,100); //代入 50をmin100をmax
	return 0;
}

int sum(int min,int max) //minとmaxを使う
{
	printf("%d\n",(min + max) * (max - min + 1) / 2); //文字列を表示 計算して3825
	return 0;
}

アバター
沖 滉均
記事: 237
登録日時: 14年前
住所: K県F市

Re: 複数の引数について

#15

投稿記事 by 沖 滉均 » 14年前

沖 滉均 さんが書きました:引数がどのように入っているのかがわからないのでしょうか…
計算そのものがわからないのでしょうか…
なぜ数値が出力(表示)されるかがわからないのでしょうか…
上記のどれがわかりませんか?
先ほどあげた内容ですが、この質問には答えられますか?

四則演算の順序がわからないですとか、+-*/などの記号の意味が分からないですとか色々ありますよね
There is no royal road to learning.
codeタグで指定できる言語
画像

OP

Re: 複数の引数について

#16

投稿記事 by OP » 14年前

なるほど!
私がわからなかったのは多分、sumがminとmaxに代入しているのかどうかわからなかったんだと、思います。

アバター
沖 滉均
記事: 237
登録日時: 14年前
住所: K県F市

Re: 複数の引数について

#17

投稿記事 by 沖 滉均 » 14年前

OP さんが書きました:sumがminとmaxに代入しているのかどうかわからなかったんだと、思います。
代入しているわけではありません。
「また、わからなかったんだと思います」ということは「何がわからなかったのかわかりません」ということでしょうか?
softya(ソフト屋) さんが書きました:最初の状況と解決に至った状況を細かく説明してみてください
また、こちらについても説明してみてください。
現状は解決に至った状況は何も書かれていません。
There is no royal road to learning.
codeタグで指定できる言語
画像

OP

Re: 複数の引数について

#18

投稿記事 by OP » 14年前

う~ん・・・まずいまだにわからないことを説明したいと思います。

コード:

#include <stdio.h> //ここは<stdio.h>を含むということでしょうか。

int sum(int,int); //わかりません…

int main(void) //わかりません…
{
	sum(50,100); min,maxに50と100を渡している二でしょうか?
	return 0;
}

int sum(int min,int max) //minとmaxを使いますよーという宣言でしょうか?
{
	printf("%d\n",(min + max) * (max - min + 1) / 2); //文字列を表示 ここはちゃんと計算できました。
	return 0;
}
こんなところでしょうか。ちょっとわからないところはありますが・・・・。

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 14年前
住所: 東海地方
連絡を取る:

Re: 複数の引数について

#19

投稿記事 by softya(ソフト屋) » 14年前

つまり、分かったという話は計算が分かったと言うことでしょうか?

あと分からないと書かれていることは1章と11章に全て書かれています。
もう一度読みなおして日本語化を丁寧にやってみてください。
説明済みの部分も説明がすごく不足しています。

例えば
//minとmaxを使いますよーという宣言でしょうか?
型はなんでしょうか?
普通の変数宣言となにが違うのでしょうか?

あるいは、
sum(50,100); min,maxに50と100を渡している二でしょうか?
sumについての説明は?
もし、int sum(int min,int max)がint sum(int max,int min)ならどうなりますか?
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

OP

Re: 複数の引数について

#20

投稿記事 by OP » 14年前

ちょっと調べてきます!!

OP

Re: 複数の引数について

#21

投稿記事 by OP » 14年前

調べてきました!!

コード:

#include <stdio.h>

int sum(int,int); //sum関数のint型の変数intに数値を格納

int main(void)
{
	sum(50,100); //後のminとmaxに50と100を代入
	return 0;
}

int sum(int min,int max) //後の計算にminとmaxを使うということを宣言
{
	printf("%d\n",(min + max) * (max - min + 1) / 2); //ここは普通に計算、3825に
	return 0;
}

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 14年前
住所: 東海地方
連絡を取る:

Re: 複数の引数について

#22

投稿記事 by softya(ソフト屋) » 14年前

いえ、全然違います。
その上説明が消えている所があります。

コード:

#include <stdio.h> ←説明がありません。
 
int sum(int,int); //sum関数のint型の変数intに数値を格納 ←プロトタイプ宣言に関する説明を確認。
 
int main(void) ←1章を確認。
{
    sum(50,100); //後のminとmaxに50と100を代入 ← かなり説明不足です。
    return 0;
}
 
int sum(int min,int max) //後の計算にminとmaxを使うということを宣言 ← 説明に成っていません。あと私の書いた「たとえば」、「あるいは」の答えがありません。
{
    printf("%d\n",(min + max) * (max - min + 1) / 2); //ここは普通に計算、3825に ← 計算順番についてもっと説明してください。printfについても書いてください。
    return 0;
}
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

OP

Re: 複数の引数について

#23

投稿記事 by OP » 14年前

私はまだ質問するにまでも知識が達していなかったみたいです…。
みなさんの返信をもとにもう少しsum関数やmain関数を調べてこようと思います。

アバター
沖 滉均
記事: 237
登録日時: 14年前
住所: K県F市

Re: 複数の引数について

#24

投稿記事 by 沖 滉均 » 14年前

次の質問を書かれていますが、ここはこのままで良いのでしょうか?
softyaさんの最後の質問にも答えておりませんね。
OP さんが書きました:私はまだ質問するにまでも知識が達していなかったみたいです…。
みなさんの返信をもとにもう少しsum関数やmain関数を調べてこようと思います。
この答えは出たのでしょうか?
それとも諦めてしまったのですか?

早く先に進みたいのはわからなくもありません
そして、しつこく説明してくださいと言われるのも気持ちの良いものではないでしょう

ですが、質問する→なんか解決したと思う→次やってみよう
これではいつまで経ってもOPさんがCを覚えることはできません
There is no royal road to learning.
codeタグで指定できる言語
画像

アバター
Dixq (管理人)
管理人
記事: 1662
登録日時: 14年前
住所: 北海道札幌市
連絡を取る:

Re: 複数の引数について

#25

投稿記事 by Dixq (管理人) » 14年前

int sum(int,int);
で書いている説明が逆です。
これはプロトタイプ宣言と言って、こういう関数がプログラム内にありますよーという宣言です。
実際に定義しているのは
int sum(int min,int max)
からの部分ですね。
これはmain関数よりsum関数が下にあるから必要になる物です。
sum関数とmain関数を逆に書いてみて下さい。プロトタイプ宣言は必要ありません。

また、必要無くてもあって差支えないものなので、このファイルにはこんな関数がありますよ、ということを示すためにプロトタイプ宣言をまとめて最初に書いたりします。
そして「sum関数のint型の変数intに数値を格納」となっていますが、intは予約語なので、変数名に使えません。
int, intなのですから、カンマがついており、意味が区切られています。変数名が省略してあるだけで、int型の変数が存在するということを示しています。

#include <stdio.h>

の説明は今の時点では難しいようなので、「C言語の書き初めに書くおまじない」位の解釈でも良いと思いますが、
他の基本的なことは、沖さん達も言っているようにきちんと一つ一つ確実に抑えて行かないと、この先ずっと困る事になってしまいます。
頑張って分からないことをつぶしていきましょう。

閉鎖

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