ページ 11

初心者なので宜しくお願いします。

Posted: 2008年12月03日(水) 22:04
by カン
・問題
1+2+3+4+・・・と数字を加算していき、加算結果が300を超えたら処理を終えるプログラムを作成しなさい。

上記の問題なのですが、よくわかりません。よろしくお願いします。

Re:初心者なので宜しくお願いします。

Posted: 2008年12月03日(水) 22:25
by 初級者
何がわからないのでしょうか。

1)問題の意味がわからない
2)問題の意味はわかるが、手で計算できない
3)問題の意味はわかり、手で計算できるが、どうプログラミングするかがわからない
4)問題の意味はわかり、手で計算でき、どうプログラミングするかもわかるが、C言語のソースが書けない


よろしくお願いします、とは、答えをくださいという意味でしょうか。

Re:初心者なので宜しくお願いします。

Posted: 2008年12月03日(水) 23:39
by 通りすがり
とりあえず規約くらい読みましょう。
質問の仕方がわからないならテンプレを使いましょう。

Re:初心者なので宜しくお願いします。

Posted: 2008年12月03日(水) 23:49
by conio
まず、プログラムがどのようになるのか考えてみましょう。

・1,2,3,4と、加算する値は1ずつ増加。
・加算結果を格納する変数が必要。
・合計が300を超えない間、加算する値を1ずつ増やし、合計に足す。(ループ)
0  + 1 =  1
1  + 2 =  3
3  + 3 =  6
6  + 4 = 10
10 + 5 = 15 

プログラムにすると大体こんな感じです。(一例)
日本語で書いてある部分をプログラムにすれば完成です。
------------------------------------------------
#include<stdio.h>

int main(void){

int x = 0,sum = 0; 

while(/*条件:加算結果が300以下*/){

/*sumにxを足す。(例:sum += x)*/
/*xの値を1増やす。*/

}
printf("x = %d,sum =%d\n",x,sum);

return(0);
} 
---------------------------------------------------

ついでに、1~10までの値を足すプログラムは下記の通りです。(一例)
参考にでもしてみて下さい。

-------------------------------------------------------
int main(void){
	
	int i,sum=0;

	for(i = 0; i <= 10; i++){
       printf("sum(%2d) +  i(%2d) =%d\n",sum,i,i + sum);
       sum += i;
	}
	printf("0から%dまでの合計は%dです\n",i,sum);

	return(0);
}
-----------------------------------------------------------

Re:初心者なので宜しくお願いします。

Posted: 2008年12月04日(木) 00:21
by 組木紙織
質問が良く分かりませんが、
詳細は勝手に解釈して作ってみました。
int i;
int main(void)
{
	++i;
	return i*(i+1)/2<300?main():0;
}

Re:初心者なので宜しくお願いします。

Posted: 2008年12月04日(木) 09:30
by non
組木紙織さん
これってあってます?mainの戻り値ってどうやって出力するんでしたっけ?
やり方教えてください。(DOSで)
return i*(i+1)/2<300?main()+i:0;
にしたいとこだけど、グローバルだからまずいんじゃないでしょうか?
一度、autoに代入しないと。

Re:初心者なので宜しくお願いします。

Posted: 2008年12月04日(木) 09:43
by 組木紙織
main()の戻り値は0ですよ。
だって何を返すのか条件はないんですから。

iはグローバルなので初期値は必ず0になります。
よって初期化は必要ないです。

main()の戻り値の出力の仕方は忘れました。
たしか、バッチファイルを作ってあげればよかったような、よくなかったような、、、、。

Re:初心者なので宜しくお願いします。

Posted: 2008年12月04日(木) 09:55
by non
>だって何を返すのか条件はないんですから。
なるほどですね。でも、合計を出してあげれるようにしました。
int i=0;
int main(void)
{
	int n=++i;
	return i*(i+1)/2<=300?main1()+n:0;
}

Re:初心者なので宜しくお願いします。

Posted: 2008年12月04日(木) 12:19
by non
このバッチで動きました。
echo %errorlevel%

Re:初心者なので宜しくお願いします。

Posted: 2008年12月04日(木) 19:52
by 組木紙織
nonさんに習って合計を返すようにしてみました。
引数渡したら正しく動きませんが、引数は意識的にしないと渡さないと思うので、
これでもいけるかと。
int main(int argc, char * argv[/url])
{
	return argc*(argc+1)/2<=300?main(argc+1,argv)+argc:0;
}

Re:初心者なので宜しくお願いします。

Posted: 2008年12月05日(金) 21:46
by カン
解決しました・4

Re:初心者なので宜しくお願いします。

Posted: 2008年12月05日(金) 22:26
by Dixq (管理人)
このままコピペで出したら絶対先生に自分でやってないことばれると思います。
もし自力で解けたなら、そのコードを提示してもらえませんか?
これでは他の方の参考になりませんので・・。

また、もしよくわからないけど解った事にしたということなら、
わからない事を伝え、頑張って解決してみましょう。