おまいら!今日からC言語を学んでいくぞー!
■ このスレッドは過去ログ倉庫に格納されています
0001ポポ素 ◆Qgm8RFT0/.
2005/09/24(土) 03:54:3026歳フリーター、パソコン歴インターネット歴は6年
しかしそれ以外の事は何もできにゃーい…
というわけで今日から参考書を買ってがんばります!
今まさに私みたいに、これからCを勉強するぞって人いたら
よろしくね
0159デフォルトの名無しさん
2005/09/26(月) 18:00:15returnという関数の呼び出しに見えてしまうから気持ち悪いと言う説が濃厚
その他Lispとは違うんだから括弧は少なくしろと言う説もある
0160デフォルトの名無しさん
2005/09/26(月) 18:01:08全部につける人も普通にいるし。
return (a + b);
みたいな計算結果返すんだったらつけたくなるなな
べつにあんま気にしなくてもいいと思うよー。
0161デフォルトの名無しさん
2005/09/26(月) 18:03:050162デフォルトの名無しさん
2005/09/26(月) 18:04:06retarn 0; //構文エラー
retarn(0); //リンクエラー
0163デフォルトの名無しさん
2005/09/26(月) 18:05:33良い意見有難う御座います。
すごく参考になってやる気でますよ(^^;
0164デフォルトの名無しさん
2005/09/26(月) 18:07:10参考にさせて頂きますよ(`・ω・´)
0165デフォルトの名無しさん
2005/09/26(月) 18:15:33int main(void)
{
int i,goukei,heikin;
goukei=0;
heikin=0;
for(i=1;i<=50;i++){
goukei=goukei+i;
heikin=goukei/i;
}
printf("1〜50までの和は%dです\n",goukei);
printf("平均は%dです\n",heikin);
return0;
}
できた〜(゜ー゜;Aアセアセ
今度は完璧だぜ!( ´ー`)
0166デフォルトの名無しさん
2005/09/26(月) 18:19:16空白をいれましょう。
でないと、コンパイラが[retun]と[0]なのか、
[return0]という変数などなのか、迷います。
0167デフォルトの名無しさん
2005/09/26(月) 18:20:37をループのそと(うしろ)に
0168デフォルトの名無しさん
2005/09/26(月) 18:22:03もともとタブが入ってて書き込んだ段階で消えただけじゃね?
0169167
2005/09/26(月) 18:22:50heikin=goukei/50;
ね。
平均は整数値でいいの?
0170デフォルトの名無しさん
2005/09/26(月) 18:22:56for文からは出すんだ!
0171デフォルトの名無しさん
2005/09/26(月) 18:24:03hentai=gouki/i;
に見えた
0172デフォルトの名無しさん
2005/09/26(月) 18:24:08ガウスの法則って知ってる?
1から100000000でも真面目に足すの?
それに平均を毎回求める必要ないんじゃ?最後の一回だけで。
0173デフォルトの名無しさん
2005/09/26(月) 18:25:010174デフォルトの名無しさん
2005/09/26(月) 18:25:23そうでしたか…難しい('A`)
>>167
そうした方が処理回数が減るからという事だからですか?
>>168
自分のミスですた…orz
0175デフォルトの名無しさん
2005/09/26(月) 18:25:31goukei = goukei + iはgoukei += iとするべき
おそらく作成者の意図はgoukeiにiを加算したいのであってgoukei+iをgoukeiに代入したい訳ではないから
あと、左辺値に副作用があったり、マクロだった場合にどんな動作するか考えるの面倒だからこの記述になれるほうが良い
0176デフォルトの名無しさん
2005/09/26(月) 18:33:12平均はdobleかflotのがいいんですね!!
>>170
for文難しいですよ…
>>171
ワラタw
>>172
応用力というものが足りない事にきずきましたよ('A`)
>>175
高度な意見なので分からない事がありますが、加算するときは
そのようにするのですね!!有難う御座います
0177デフォルトの名無しさん
2005/09/26(月) 18:33:13処理回数が減るってのはもちろんだけど、
“計算しなくてもいいものは計算しない”は基本中の基本だからね。
平均なんて最後にまとめて計算すればいい話であって
50回計算する意味はないでしょ?
毎回表示したいとか、そういう理由があれば別だけど。
0178デフォルトの名無しさん
2005/09/26(月) 18:35:20なるほどそういう事ですか!
短く分かりやすいプログラムにしろという訳ですね
勉強してきます(゚∀゚)
0179デフォルトの名無しさん
2005/09/26(月) 18:38:11という事で、もう一度作り直してください
0180デフォルトの名無しさん
2005/09/26(月) 18:43:14予想外のフリが…Σ(゚д゚;) ヌオォ!?
ですがプログラムのコピーになってしまうので、
また新しい関数で何か作ってみるので判定して下さい!!
よろしくお願いします<(_ _*)>
では勉強してきまつ
0181デフォルトの名無しさん
2005/09/26(月) 18:44:37じゃぁ、1+3-5+7-9+11-13+・・・
を50回計算した合計を出力するプログラムを。
0182デフォルトの名無しさん
2005/09/26(月) 18:46:45やってみます!!
が…む、難しい予感が…
数学苦手だった〜('A`)
0183デフォルトの名無しさん
2005/09/26(月) 18:49:32じゃあ、ヒントだ
1 3 5 7 9 11 13...これは+2づつ増えている
a=1の時a *= -1を繰り返し実行すると1,-1,1,-1となる
0184デフォルトの名無しさん
2005/09/26(月) 18:51:29なんとなく分かってきましたよ(`・ω・´)
0185デフォルトの名無しさん
2005/09/26(月) 19:13:45みんなガンガレ!
0186デフォルトの名無しさん
2005/09/26(月) 19:15:56int main(void)
{
int i,goukei;
goukei=0;
for(i=1;i<=50;i++)
{
if(goukei==4*i){
goukei+=goukei+i;
}
else if{
i=i*(-1);
goukei+=goukei+i;
}
printf("%d\n",goukei);
return 0;
}
うおぉぉぉ〜むちゃくちゃ怪しいプログラムになってしまた
見にくいですが判定をお願いします…('A`)
0187186
2005/09/26(月) 19:18:31なんつ〜もん晒してんだ漏れは…_| ̄|○
0188デフォルトの名無しさん
2005/09/26(月) 19:44:57#include <stdio.h>
int main(void)
{
int i,goukei;
goukei=0;
for(i=1;i<=50;i++)
{
if(goukei==4*i+1){
i=i*(-1);
goukei+=goukei+i;
}
else{
goukei+=goukei+i;
}
printf("%d\n",goukei);
return 0;
}
できたかも!!(`∀´)
0189デフォルトの名無しさん
2005/09/26(月) 19:58:57最初の1と3が共に正の数だからうまく交互に行いにくいな。
>>188
エラーが出た。中カッコがいくつか足りない。
0190デフォルトの名無しさん
2005/09/26(月) 20:04:08エラーですか…そうなんですよ符号を考えるのが
難しいんですよ。
0191190
2005/09/26(月) 20:06:350192デフォルトの名無しさん
2005/09/26(月) 20:18:11合計に加える値とループのカウンタは別にしても良い
ちなみに元のままだとelse以下がおかしい
0193デフォルトの名無しさん
2005/09/26(月) 20:21:20えっ 1を入れないで50回じゃないの?
0194189
2005/09/26(月) 20:22:23変数aのトレース付き。
#include <stdio.h>
void main()
{
int a=1, i, total=1;
for(i=0; i<49; i++){
if(a >= 0){
a += 2;
printf("%d ", a);
total += a;
a *= -1;
}
else{
a -= 2;
printf("%d ", a);
total += a;
a *= -1;
}
}
printf("合計=%d\n", total);
}
0195190
2005/09/26(月) 20:23:25>合計に加える値とループのカウンタは別にしても良い
この見極めが難しいですね!(´・ω・)
>ちなみに元のままだとelse以下がおかしい
これはやはりfor文の括弧を付けていないせいですよね?
0197デフォルトの名無しさん
2005/09/26(月) 20:32:09まず、どんなことから始めれば?
0198デフォルトの名無しさん
2005/09/26(月) 20:33:44#include <stdio.h>
int main()
{
int i, total=1, n=3, f=1;
for (i=0; i<49; i++) {
total += n*f;
n+=2;
f*=-1;
}
printf("%d\n", total);
return 0;
}
これだけでいいよふな
0199デフォルトの名無しさん
2005/09/26(月) 20:35:28よく見ると他にも間違ってるな、意図を推察して直してやるとこんな感じか?
else以下が違うんじゃなくて条件自体がまずいな
7:if(goukei==4*i+1){ → if((i & 1)==1) {
8:i=i*(-1); → 要らない
9:goukei+=goukei+i; → goukei += 2 * i;
12:goukei+=goukei+i; → goukei -= 2 * i;
0200デフォルトの名無しさん
2005/09/26(月) 20:39:16まずなんの言語を学びたいかじゃないかな…
あ、ここに書き込んでるってことはCかな?
0202189
2005/09/26(月) 20:45:51プログラムの打ち方なんて人それぞれだって。
藻前の個性的なコードとてちゃんと動作すれば何ら問題ないし。むしろ、処理追ってみて少し楽(ry
>>198
3からは計算で求めたかったんで。といっても1を代入してる時点でもう駄目だなorz
0203190
2005/09/26(月) 20:54:03動作するようにガンバリます!
いろいろ見てくださってありがとう御座いました
C言語は意外と面白いと思えただけでもとてもよかったです。
0204デフォルトの名無しさん
2005/09/26(月) 20:56:26int main()
{
int i, total=1;
for (i=1; i<50; i++) {
total += (i*2+1) * ((i%2) ? 1 : -1);
}
printf("%d\n", total);
return 0;
}
符号も絶対値も i から求めたい…
0205189
2005/09/26(月) 21:06:24コツとしてはTabキーで字下げをすること。{}のペアや範囲が分かりやすくなって全体的に読みやすくなる。(2chに書く時はスペースに直す必要有
メモ帳なんかは改行すると字下げが解除されるから、他のエディタを使うことをお勧めする。
0207189
2005/09/26(月) 21:47:49という訳で俺から一つ。
整数を5つ入力し、それを数値の多い順にソートするプログラムを作成。
ヒント:3重ネスト
0208デフォルトの名無しさん
2005/09/26(月) 22:02:44#include <stdio.h>
int main()
{
printf("%d\n", (1-2*25));
return 0;
}
0209デフォルトの名無しさん
2005/09/26(月) 22:08:572*25=50
1-50=-49
0210デフォルトの名無しさん
2005/09/26(月) 22:15:11>>42 HelloWorld!を出しやがれ
>>44 1から50までの和
>>46 ファイルから読み込み大きい数から並べて
>>52 物体が通る軌跡を求めろ
>>106 まずは字句解析と行こうか
>>181 じゃぁ、1+3-5+7-9+11-13+・・・を50回
>>207 ソートするプログラム
■インデントする方法
・メモ帖・秀丸・VSなどの、エディタの置換機能を使います
・& nbsp; (←&とnの間スペースを削ってくれ)を書き込むとスペースに変換されます
・タブやスペースを& nbsp;に置換して書き込むとインデントが整います
▼コツ
・タブを置換したい場合はエディタ上のタブをコピーして検索窓でペーストします
・スペースを置換したい場合はインデントに利用している単位(2,4,8個など)をまとめて
置換すると最小限で済みます。
2ちゃんねるの文字数制限にひっかかる場合は試してみてください。
0211デフォルトの名無しさん
2005/09/26(月) 22:16:46違うのか?
0212デフォルトの名無しさん
2005/09/26(月) 22:22:05+3 1回目
-5 2回目
+7 3回目
-9 4回目
+11 5回目
-13 6回目
1回目と2回目を足したら-2
3回目と4回目を足したら-2
というふうに奇数回目とその次の数を足せば-2になる
全部で50回計算するので奇数回目と偶数回目を足したものが25個ある
つまり-2が25個ある
よって-2*25
もともと1があるので
1+(-2*25)
=1-2*25
0213デフォルトの名無しさん
2005/09/26(月) 22:22:59自動変換
ギコナビかな
0214デフォルトの名無しさん
2005/09/26(月) 22:38:320215デフォルトの名無しさん
2005/09/26(月) 22:40:32スペース・タブを&nbsp;に変換するプログラムを作ったらどうだ
0216デフォルトの名無しさん
2005/09/26(月) 22:43:07&を使えばいい。
0217デフォルトの名無しさん
2005/09/26(月) 23:31:24char[] nbsp;
pchar = &nbsp;
とかだとスペースになっちまうなw
0218デフォルトの名無しさん
2005/09/26(月) 23:49:580219デフォルトの名無しさん
2005/09/26(月) 23:51:350220デフォルトの名無しさん
2005/09/27(火) 00:11:440221デフォルトの名無しさん
2005/09/27(火) 00:19:240222デフォルトの名無しさん
2005/09/27(火) 00:26:29先生、それは課題でしょうか?
もう少し詳しくお願いします
0223デフォルトの名無しさん
2005/09/27(火) 01:26:00>スペース・タブを&nbsp;に変換するプログラム
" "
0224デフォルトの名無しさん
2005/09/27(火) 01:26:55遅くなってしまったが、次は構文解析だな
以下のBNF生成規則にそった代入文のパーサを作る
<代入文> := 名前 = <式>
<式> := <式> + <項> | <式> + <項> | <項>
<項> := <項> * <要素> | <項> / <要素> | <要素>
<要素> := ( <式> ) | 名前 | 定数
解析結果は<代入文>をルートとする木構造とし、<演算子, 被演算子1, 被演算子2>のノードで出力する
被演算子がノードになる場合はN(ノード番号)を出力する
0225デフォルトの名無しさん
2005/09/27(火) 01:28:13うまく書けなかったのでもう一度書きます
& a m p ; ってどういう効果ですか?
0226デフォルトの名無しさん
2005/09/27(火) 01:28:54ゲームとかもっとあがってないか? 出題
0227デフォルトの名無しさん
2005/09/27(火) 01:29:570228デフォルトの名無しさん
2005/09/27(火) 01:31:47アンド
0229デフォルトの名無しさん
2005/09/27(火) 01:42:06いきなりファイル関係をいじるのは難しいかもしれない。ファイルの読み込みは必須だけど、書き出す処理はやめて画面に出力でもかまわない。
猫でもわかる(ryのC++講座にprintfやputsでファイルに出力する方法が書いてある。
ソースファイル中のHTML特殊文字をエスケープするプログラムを作成する。
・起動したらファイル名を入力
・&はamp、<はlt、>はgt、[半角スペース]はnbsp。タブ(\t)は4文字の半角スペースとする。
例 <→<
・出力するファイル名は、ソースファイル名+".txt"。
参考
・ソースを丸ごとメモリに読み込まない。長いソースでは問題が起こる。1文字ずつ読み込んで書き出す。読み出した文字はchar型の値に代入する。
余裕があれば
・Windows環境だと2バイト文字に問題がある。2バイト文字の上位8ビット(=1バイト)が0x90より大きいなら下位8ビットはエスケープしないこと。
ちなみにchar型やbyte型の大きさは1バイト。つまり、次に読み出す文字のエスケープ判定をしなければOK。
・入力されたファイル名が正しいか(ファイル名に使えない文字がないか)調べる。
・出力するファイル名がすでに存在しないか調べる。
・上書きするか中断するか選ばせるのも手。yなら上書き、nなら中断、それ以外ならループ。
・"や'もエスケープする。
・エスケープした文字数をカウントしたり、出力したバイト数を計算したりして、出力後結果を表示。
ヒント
fopen fclose fgetc(要キャスト) fputc fprintf
0230デフォルトの名無しさん
2005/09/27(火) 01:47:02×0x90より大きい
〇0x80から0x9F、0xE0から0xFF
0231デフォルトの名無しさん
2005/09/27(火) 01:54:02ここを参考にするといい
ttp://www9.plala.or.jp/sgwr-t/lib/fgetc.html
0232デフォルトの名無しさん
2005/09/27(火) 01:55:04人vs人のやつ。
0233デフォルトの名無しさん
2005/09/27(火) 02:03:40そんな難しくない方
たてよこななめに並んでいるかどうかを判定する、ってのがこのプログラムのキモ
0234デフォルトの名無しさん
2005/09/27(火) 02:16:52それが問題かー。どうやって判定するべきか・・・。
0235デフォルトの名無しさん
2005/09/27(火) 02:22:58碁やオセロならまだしも、TicTacToeぐらいなら力業でif分並べたって8回の判定で済むんだし。
ループを使って横判定、縦判定、で最後に手動で斜め判定が一番楽かな?
0236デフォルトの名無しさん
2005/09/27(火) 02:24:30・3×3の配列を作る --- 例) int tbl[3][3];
・○は1、×は2、何も置いてない所は0 とかってする
・指定した場所に置く時に0かどうか判断して、置けるなら置く
・たてよこななめのどれかで3つ並んだかどうかチェック
・まだ空きが有るかつどちらも3つ並んでなければ、場所指定に置く所から繰り返し
って感じ
0237デフォルトの名無しさん
2005/09/27(火) 04:48:28○×ゲームつくりました
0238まとめ
2005/09/27(火) 05:29:49解きたい→うp
出したい→うp
■今までに出された問題
>42 HelloWorld!を出しやがれ
>44 1から50までの和
>46 ファイルから読み込み大きい数から並べて
>52 物体が通る軌跡を求めろ
>106 まずは字句解析と行こうか
>124 神経衰弱、ブラックジャック
>125 ぷよぷよ
>126 ブロック崩し、インベーダ
>129 ジャンケンゲーム
>181 じゃぁ、1+3-5+7-9+11-13+・・・を50回
>207 ソートするプログラム
>215 スペース・タブを に変換
>224 次は構文解析だな
>229 HTML特殊文字をエスケープ
>236 ○×ゲームをつくれ
■インデントする方法
・ を書き込むとスペースに変換されます
・タブやスペースを に置換して書き込むとインデントが整います
・メモ帖・秀丸・VSなどの、エディタの置換機能を使います
▼コツ
・タブを置換したい場合はエディタ上のタブをコピーして検索窓でペーストします
・スペースはインデント単位(2,4,8個など)でまとめて置換すると単独のスペースを無視できます
・ギコナビなら自動変換機能があります。
0239デフォルトの名無しさん
2005/09/27(火) 05:38:19ジョーカー除いて台札は4×13=52枚
&sp; 種類が4(スペード,ハート,ダイヤ,クラブ)
&sp; 数字が13(A,2,3,...,10,J,Q,K)
0240デフォルトの名無しさん
2005/09/27(火) 05:39:510241デフォルトの名無しさん
2005/09/27(火) 05:44:00私も入門書を読み終わったところなのですが
http://www.loses.org/software/xaav.htm
このソースが全然読めません
読めないというか意味すら分かりません
ここで始めてる皆さんは分かるのでしょうか?
0242デフォルトの名無しさん
2005/09/27(火) 05:51:05の事かな?
> X Window System
> MonaFont
こーゆー環境で動かすもんだ、って以外に特に難しいプログラムでは無いと思うが
初心者にはきついな
0243241
2005/09/27(火) 05:53:58http://www.loses.org/download/xaav-0002.tgz
こっちです
0244デフォルトの名無しさん
2005/09/27(火) 05:57:06読めないと言われてもなぁ。
とりあえずプログラミング言語ってのは英語や日本語のような自然言語と同じで
文法が分かったって単語が分からなきゃ読めないわけよ。
入門書っていうのは、いわゆる基礎単語と文法の基礎をやっているようなもんで
終わったからといっても、実用アプリのソースを読むには両方不足してるからな。
そのソースはそこまで煩雑な文法は使ってないから、初心者でもXのAPIマニュアル片手に
順番に追っていけば読めると思うよ。時間はかかるかもしれんけど。
0245デフォルトの名無しさん
2005/09/27(火) 06:26:540247デフォルトの名無しさん
2005/09/27(火) 06:43:23とりあえずいくつか指針を。
・どこから読めばいいか分からない→とりあえずmain関数から
・関数やパラメータの意味が分からない→APIリファレンスを読むか、ユーザ定義関数なら関数を読む
・プログラムそのものが読めない(whileって何だよ、char*って何、etc...)→入門書を読み直す
0248デフォルトの名無しさん
2005/09/27(火) 07:21:01昨日今日はじめた人間のレベルじゃねえぞ
0249デフォルトの名無しさん
2005/09/27(火) 07:34:130250デフォルトの名無しさん
2005/09/27(火) 08:12:06・XWindow/XLibの知識がないとちんぷんかんぷん。
・getopt()という過去の癖のある解析関数を使っている辺りがこれまた馴れを要する。
・コードの使い回しなのか、明らかに手の違うコードが混在している。
・malloc()に対するfree()がない場合があるなど資源の管理が無頓着。
・fprintf()/puts()を連続して使うような手抜きも。つーか、統一しろや。
・'0'と書かずに48と書くようなアナクロコードも。
まぁ素人が参考にするようなコードじゃないね。
0251デフォルトの名無しさん
2005/09/27(火) 08:27:180252デフォルトの名無しさん
2005/09/27(火) 09:47:500253デフォルトの名無しさん
2005/09/27(火) 11:12:020254デフォルトの名無しさん
2005/09/27(火) 11:24:520255デフォルトの名無しさん
2005/09/27(火) 11:41:35ヨクワカル、ソノキモチ
0256デフォルトの名無しさん
2005/09/27(火) 11:47:490257デフォルトの名無しさん
2005/09/27(火) 12:33:01焦らずマターリ。
意味不明でも本をボーッと眺めていると、数か月もすれは自然に分かるよ。
0258デフォルトの名無しさん
2005/09/27(火) 12:34:27今if文終わってfor文行くとこぐらいじゃね?
■ このスレッドは過去ログ倉庫に格納されています