C言語の初心者ですが

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

C言語の初心者ですが

#1

投稿記事 by 初心者 » 15年前

まだC言語を習い始めたばかりのものですが、教科書に書いてあった課題が
解けません...

問題はこういうものですが↓


#include <stdio.h>

■factor(■)
{
int i;
long p;
p = 1L;
for (i = 2; i <= n; i++) p = p * (long)i;
■;
}

void main(void)
{
int n, r, c;
printf("n = "); scanf("%d", &n);
printf("r = "); scanf("%d", &r);
c = (int)(factor(n) / factor(r) / factor(n-r));
printf("nCr = %d\n", c);
}

というプログラムなのですが、黒い四角の記号「■」が僕が埋めるべき空欄です。
以下が僕自身の回答ですが、ぜんぜんわかりません;;



#include <stdio.h>

int factor(int i)
{
int i;
long p;
p = 1L;
for (i = 2; i <= n; i++) p = p * (long)i;
■;
}

void main(void)
{
int n, r, c;
printf("n = "); scanf("%d", &n);
printf("r = "); scanf("%d", &r);
c = (int)(factor(n) / factor(r) / factor(n-r));
printf("nCr = %d\n", c);
}

ですが、正直なんでそういう風に埋めたのかもあまり分かっていません。
正しい答えがわかれば、そこから自分で調べて理解することができると思うので、
ぜひ正しい回答をお願いいたします。

たかぎ

Re:C言語の初心者ですが

#2

投稿記事 by たかぎ » 15年前

まずはお約束ですので...
[flash 600,100]http://dixq.net/flash/kiyaku4.swf[/flash]

softya

Re:C言語の初心者ですが

#3

投稿記事 by softya » 15年前

質問に答えるために幾つかお願いがあります。スムーズに回答するために必要な事柄ですのでぜひお願いします。
 ・ 使用している環境やコンパイラ(VisualC++2008ExpressEdition等)、自分が習っている言語の規格(CにもC89やC99など幾つか規格があります)を教えて下さい。
 ・ 自分はどこまで理解しているのか、学校ではどこまで習ったのか明確にして下さい。
 ・ ソースコードは< pre>と< /pre>のタグで囲んで下さい。
 詳しくはこの掲示板の使い方をご覧ください→ http://dixq.net/board/board.html

たかぎ

Re:C言語の初心者ですが

#4

投稿記事 by たかぎ » 15年前

> ぜひ正しい回答をお願いいたします。

何をしたいのかが分かりませんが、とりあえず正しいプログラムにしてみました。
#include <stdio.h> 

int main(void) { return 0; }
#define main hoge
#define n p
int factor() 
{ 
    int i; 
    long p; 
    p = 1L; 
    for (i = 2; i <= n; i++) p = p * (long)i; 
    return 1; 
} 

void main(void) 
{ 
    int n, r, c; 
    printf("n = "); scanf("%d", &n); 
    printf("r = "); scanf("%d", &r); 
    c = (int)(factor(n) / factor(r) / factor(n-r)); 
    printf("nCr = %d\n", c); 
}
動作については、どうなるのが正しいのか不明ですので、関知していません。

むん

Re:C言語の初心者ですが

#5

投稿記事 by むん » 15年前

質問者さんは正しく質問を書いたほうがいいですよ。
これだけではなんなので、
#include <stdio.h> 

int factor(int 1L); 
{ 
    int i; 
    long p; 
    p = 1L; 
    for (i = 2; i <= n; i++) 
              p = p * (long)i; 
    return ■; 
} 

void main(void) 
{ 
    int n, r, c; 
    printf("n = "); scanf("%d", &n); 
    printf("r = "); scanf("%d", &r); 
    c = (int)(factor(n) / factor(r) / factor(n-r)); 
    printf("nCr = %d\n", c); 
}
一つだけ■で囲んでいますが、そこは関数内で計算した結果を返せばいいだけなので
すぐにわかると思います。main文で関数に値を渡していることがわかるので、
factorの関数ではpに渡している値を代入していることがわかります。

全部教えるのはなんなので、あと一つは自分で考えてください。といっても
答えを教えているようなものですが、まぁあっているかはわかりませんが。

Dixq (管理人)

Re:C言語の初心者ですが

#6

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

例え話をします。以下の文章を読んで下さい。


目の桿体は光を、錐体は色を感知するもので、目に入る光によってその特性は変化する。桿体、錐体ともに一度化学反応をすると、再び反応可能な状態に復帰するまで一定の時間が必要である。


突然変な事を言ってすみません。
いきなり突拍子もない文章を読むと意味が理解できなかったのではないでしょうか?
国語力の高い人じゃないと、一度読んで、もう一度読み返してしまうのではないかと思います。

人間は脳に情報が入ってくると、その「仕分け」作業が完了しないと、記憶出来ず、結果として理解出来ないそうです。
ですから「これからこんなデータが来ますよ」と脳に信号を送っておかないと理解がスムーズにできないわけですね。

何か多い文章の冒頭にはよく「概要」とか「要旨」がくっついていると思いますが、
それは本体の情報を読まなくても理解させる為だけでなく、
これから読む人の脳にスムーズにデータが入るように用意されているものなんですね。

・・と長い前置きはこれ位にして・・。

要するに、これ位のソースコードは見たらわかるだろうと自分は思ったとしても、
「ソースコードの概要としてはこんな処理をするものです」と一言あるかないかで、
すごくこちら側の読めるスピードが変わります。
ですから、自分がしたい事は何で、ソースコードがある場合、そのソースコードの概要を一言添えて頂けるとありがたいです。

ではまずどこが解らないかを明確にしていきましょう。
もっと簡単なプログラムから考えてみます。
int abc( int n ){
    if( n==1 )
        return 2;
    else
        return 0;

}

int main(){
    printf("%d",abc(■));
    return 0;
}
このプログラムで「2」を表示させるには■に何をいれたらいいでしょうか?

さかまき

Re:C言語の初心者ですが

#7

投稿記事 by さかまき » 15年前

1番目の■(以後(1)) は関数factorの返値のタイプ。
2番目の■(以後(2)) は関数factorの引数(タイプと変数)。
3番目の■(以後(3)) は関数factorの返値。
を記述すればよいです。

(2)のタイプは簡単ですね。実際にfactorを使っている所をみればいいから。
(2)の変数はfactor内で使用されている変数で定義されていないものを探せばよい。
コンパイラが教えてくれるから実際はもっと簡単。
(3)が判れば(1)はおのずと決まってくるので、問題は(3)。
何をするプログラムかが明示的に示されていないので
何を返しても問題無い事になります。結果で割り算しているので、0は
まずいかなとは思いますが、そんな事はfactorさんには責任はないですね。

printf("nCr = %d\n", c); から、nCrを計算する為に必要な関数だと予想されるので
きっと、long pを返す関数なんだろうと予想されます。
という事で、答えが推測されますが、何をするプログラムかが明記されていないので
答えはいくつもありますね。

たかぎ

Re:C言語の初心者ですが

#8

投稿記事 by たかぎ » 15年前

ところでこの質問者さんは、熟練のプログラマーまで昇進した、常連の「初心者」さんでしょうか?
あるいは、"常連の"初心者さんの名を語る偽物でしょうか?

閉鎖

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