おまいら!今日からC言語を学んでいくぞー!パート2
■ このスレッドは過去ログ倉庫に格納されています
0001ポポ巣 ◆Qgm8RFT0/.
2005/10/07(金) 07:23:58あたいのスペックは
26歳フリーター、パソコン歴インターネット歴は6年
しかしそれ以外の事は何もできにゃーい…
というわけで今日から参考書を買ってがんばります!
今まさに私みたいに、これからCを勉強するぞって人いたら
よろしくね!!!
前スレが一杯になりそうなので新しく作りました☆
今日でC言語歴約2週間です^^;
簡単な文字の表示はできるようになったんですが
進むペースは亀さん並に遅いので、ゆっくり見守ってね(><。)
もっと容量のいい頭がほしいー(><。)
0232デフォルトの名無しさん
2005/10/13(木) 00:58:06http://hs.or.tp/php/uploader/up/code061.c
0233デフォルトの名無しさん
2005/10/13(木) 01:50:18まじめにcに取りかかろうと思ってます。
0234デフォルトの名無しさん
2005/10/13(木) 01:52:150235デフォルトの名無しさん
2005/10/13(木) 02:02:46ほい、無だレスすまそ。これもだけど…。
0236デフォルトの名無しさん
2005/10/13(木) 02:55:20unsigned long fib(unsigned long n){
if(n<=1) return 1;
return fib(n-2)+fib(n-1);
}
こうだが...かなり遅い
0237デフォルトの名無しさん
2005/10/13(木) 04:26:14必要に「なるかもしれない」ことに心を奪われてはいけません。
このようなことを YAGNI と呼びます。
これは、「You aren't going to need it (将来必要に『ならない』)」の頭文字です。
明日のために今日作業したことが無駄になるより、明日必要なことは明日行えばよいのです。
(今日の金は、明日の金より価値があるということを覚えておいてください)
今与えられている課題に関する要求を満たすために必要なこと「だけ」をする、と言うことです。
必要かどうか未だ分からないものを作りこまない、を覚えておきましょう。
0238デフォルトの名無しさん
2005/10/13(木) 04:30:34初心者というのは得てして要求仕様そのものが満足されてないから問題なんじゃまいか
0239デフォルトの名無しさん
2005/10/13(木) 04:47:48w
0240デフォルトの名無しさん
2005/10/13(木) 10:06:09仕様とは密着しすぎでも乖離しすぎでも、悪い
#あぁYAGNIなんてぇ単語を言い出す奴がいるから脊髄反射レスしちまった
0241デフォルトの名無しさん
2005/10/13(木) 11:13:390242デフォルトの名無しさん
2005/10/13(木) 14:48:360243デフォルトの名無しさん
2005/10/13(木) 17:33:57なにそのDr.Mari○
0244デフォルトの名無しさん
2005/10/13(木) 20:19:37「拡張性を過度に考慮する」、「汎用性を過度に考慮する」のは時間と金の無駄です。
だけど、それは程度の問題です。
でも少なくとも上の問題でフラグを使うというのはありえません。というか、フラグなんて極力使わない方がよい。
「この程度ならフラグの方がわかりやすい」とか言ってる奴に限って独りよがりなプログラムを書く・・・
「そんな読みにくいプログラムわかるのは書いたお前だけだよ」というまわりの声に気付かない・・・
YAGNIなんて拡張性や汎用性を過度に考慮できるようになってから知ればいい。
0245デフォルトの名無しさん
2005/10/14(金) 02:49:210246144
2005/10/14(金) 17:48:03#include <stdio.h>
#include <ctype.h>
//英字または終端文字まで進めたポインタを返します
char *forward_space_to_alpha(char *text)
{
while (*text != '\0')
{
if (isalpha(*text))
{
break;
}
text++;
}
return text;
}
//スペースまたは終端文字まで進めたポインタを返します
char *forward_apha_to_space(char *text, int *mojisuu)
{
*mojisuu=0;
while (*text != '\0')
{
if (isspace(*text))
{
break;
}
text++;
(*mojisuu)++;
0247デフォルトの名無しさん
2005/10/14(金) 17:48:42return text;
}
int main()
{
char *text="this is a pentium44444";
int tangosuu;
int mojisuu;
tangosuu=0;
mojisuu=0;
while (*text != '\0')
{
text=forward_apha_to_space(text, &mojisuu);
printf("%d文字\n", mojisuu);
tangosuu++;
text=forward_space_to_alpha(text);
}
printf("単語%d個\n", tangosuu);
return 0;
}
0248デフォルトの名無しさん
2005/10/14(金) 19:22:08textがスペースから始まった場合の動作がおかしいからまた怒られるよ。
0249デフォルトの名無しさん
2005/10/14(金) 19:29:50問題文の
>単語はスペースで区切られている
から先頭や最後にスペースは無いものと考えました
0250デフォルトの名無しさん
2005/10/14(金) 19:36:580251デフォルトの名無しさん
2005/10/14(金) 19:37:51フリーでもいいし、買ってきてもいい。
0252デフォルトの名無しさん
2005/10/14(金) 19:38:06参考書・ページを探す
0253デフォルトの名無しさん
2005/10/14(金) 19:39:27このスレのまとめはこちら
http://gamdev.org/w/?%5B%5B%A4%AA%A4%DE%A4%A4%A4%E9%A1%AA%BA%A3%C6%FC%A4%AB%A4%E9C%B8%C0%B8%EC%A4%F2%B3%D8%A4%F3%A4%C7%A4%A4%A4%AF%A4%BE%A1%BC%A1%AA%5D%5D
http://gamdev.org/w/?%5B%5B%A4%AA%A4%DE%A4%A4%A4%E9%A1%AA%BA%A3%C6%FC%A4%AB%A4%E9C%B8%C0%B8%EC%A4%F2%B3%D8%A4%F3%A4%C7%A4%A4%A4%AF%A4%BE%A1%BC%A1%AA%A5%D1%A1%BC%A5%C82%5D%5D
0254デフォルトの名無しさん
2005/10/14(金) 19:56:30>>252参考書買おうと思うんですけど、オススメなのありますか?
>>252さんがオススメなのでいいです。
他の人もお願いします。
0255デフォルトの名無しさん
2005/10/14(金) 20:32:58でも、もっと短く簡潔に書けますよ?
0256デフォルトの名無しさん
2005/10/14(金) 21:27:11(元の問題から外れるけど)やっぱり・・・
フィボナッチは再帰を使っちゃダメだ。
無駄が多すぎる。計算も遅い。
/*指定回数だけフィボナッチ数列を計算し、
出力するプログラム*/
#include <stdio.h>
int main(void)
{
unsigned long i, j, k;
int n, m;
printf("指定回数だけフィボナッチ数列を計算し出力します\n\
何回計算しますか? :");
0257デフォルトの名無しさん
2005/10/14(金) 21:28:06if(n <= 0) {
return 0;
} else {
j = 0;
m = 0;
for (i = 1;m <= n;j = k) {
printf("%10d\n",i);
k = i;
i = i+j;
++m;
}
}
return 0;
}
0258デフォルトの名無しさん
2005/10/14(金) 21:28:41小数を入力したときの問題とか、
何回も計算できるようにループを付けたりとか、
桁あふれの部分とか、
機能を充実させて下さいな。
0259デフォルトの名無しさん
2005/10/14(金) 21:35:360260デフォルトの名無しさん
2005/10/14(金) 23:27:41んー、>>214は末尾再帰だから別に良いのでは?
常識的なコンパイラなら最適化かければ普通のループと同じで無駄もないし、計算も遅くならないし
0261デフォルトの名無しさん
2005/10/14(金) 23:29:510262デフォルトの名無しさん
2005/10/15(土) 00:02:00式は自然数の加算・減算。
どう?
0263デフォルトの名無しさん
2005/10/15(土) 00:39:31例えばSEND+MORE=MONEYを解くとか?
それだと手作業で解を得るのと総当りのプログラムのどっちが早いかなw
私としては、abcd * e = fghij を解いてみてもらいたいが。
0264デフォルトの名無しさん
2005/10/15(土) 00:43:530265デフォルトの名無しさん
2005/10/15(土) 00:45:19ちょっと趣向を変えて、ポインタじゃなくてインデックス変数を使ってプログラムを書いてみよう。
つまり、text[idx]とかidx++で文字列にアクセスする。*textとかtext++はしない。
練習にはいいかと。
0266デフォルトの名無しさん
2005/10/15(土) 02:22:06こんな感じでどうでしょうか?
式の長さはヌル文字含めて256文字まで。1つの数字は10ケタまでです。
(本当は21億まででチェックするんだろうけど)
エラーチェックしてないので、式の途中に数字、+、-、=以外があると困ります。
1+2+3-4= みたいな感じで入力受付します。最後は必ずイコールで。
直したほうがいい所があったらアドバイスお願いします。
#include <stdio.h>
#include <ctype.h>
#define SIZE 256
#define PLUS 1
#define MINUS -1
int sampling(char *src);
int main()
{
char input[SIZE] = {'\0'};
fgets(input, SIZE - 1, stdin);
printf("%d\n", sampling(input));
return 0;
}
/*
0267デフォルトの名無しさん
2005/10/15(土) 02:22:52int sampling(char *src)
{
char temp[11] = {'\0'};
int i;
int flag;
switch (*src)
{
case '+':
flag = PLUS;
src++;
break;
case '-':
flag = MINUS;
src++;
break;
case '=':
return 0;
break;
default:
flag = PLUS;
break;
}
for (i = 0; isdigit(*src) && i < 11; i++)
{
temp[i] = *src;
src++;
}
return (atoi(temp) * flag) + sampling(src);
}
0268デフォルトの名無しさん
2005/10/15(土) 03:42:32unsigned long fib(unsigned long n){
static unsigned long v[50]={0};
if(n<=1) return v[0]=v[1]=1;
return ((v[n-2])?v[n-2]:(v[n-2]=fib(n-2)))+((v[n-1])?v[n-1]:(v[n-1]=fib(n-1)));
}
かるくハヤイ
0269ポポ素 ◆Qgm8RFT0/.
2005/10/15(土) 06:23:20先生方に質問があるので宜しくデス(><)/
#include <stdio.h>
#include <conio.h>
int main() {
int a,b;
int *p,*q;
p=&a;
q=&b;
printf("a,bを入力してくれよ\n");
scanf("%d %d",p,q);
printf("a=%d,b=%d\n",*p,*q);
printf("a+b=%d\n",*p+*q);
printf("なんかおして\n");
getch();
printf("終わり");
return 0;
}
aとbに
激しい桁の数字をいれたら
例えばaに56456464645646222、bに54564444455555555555555555
をいれたら
a=8021902,b=1
ってなってa+bが計算されるわけなんだけど
intの容量をオーバーする数字をいれたら
なんでこんなことになるの?
スルーで先に進んでいいのかな
0270デフォルトの名無しさん
2005/10/15(土) 10:51:15変数は型によって入る値に限界がある。
charは-128~127、shortは-32768~32767といった感じ。intでも入って10桁。
これを超えるとオーバーフロー(桁溢れ)が起こって全く違うの数値になる。
しかしもうポインタか。早さ的にもやる気が感じられるな。
0271デフォルトの名無しさん
2005/10/15(土) 10:53:07最大値を過ぎたってことは最小値の側になる、っちゅーことだね
・最大値を超えないように入力する
か
・もっと大きい整数を扱える型を使う(今時のコンパイラならlong longとか...)
・整数型をあきらめる(doubleとかにする)
しかないんだよね...
0272デフォルトの名無しさん
2005/10/15(土) 11:27:03今ぐぐってやったんだけど、なんか起動してくれない
0273デフォルトの名無しさん
2005/10/15(土) 11:31:350274252
2005/10/15(土) 11:41:08俺はやさしいCから始めた。絵付きの説明がしっかりしてて入門書としては最適だと思う。
読破した後は多少難い本もいけるから、独習Cとか個人の解説ページらへんが妥当かと。本格目指すならK&Rは必読。
ttp://www.amazon.co.jp/exec/obidos/ASIN/4320026926/
ーーーーーーーーーーーここから余談ーーーーーーーーーーー
大切なのは出来るだけ多くの本を読む事、読むだけでなくサンプルプログラムや練習問題を打つ事、ノート(テキスト)を作って大切な事を書いておく。
練習問題ならこのスレで問題出るし、過去のものはwikiに載ってる(>>5)
後は自分で何も見ずにプログラムを打つ事とか。乱数とか覚えると軽いゲームが作れるから
数当てゲーム製作→条件(当たり外れ・大小)作成→ヒント機能追加→CPU追加(思考ルーチン作成)
とやると意外と面白い。というか、俺がそれに熱中して時間を忘れた事がある。
それと最後。質問できる相手とか協力できる仲間を探す。
入門書なんて分からない内は投げてしまいがちだし、独りで黙々とやるのも寂しい。仲間を探して互いに協力しあうのが最良の勉強法(まあ、それが出来れば誰も苦労しないんだが…
それぞれ違う視点からモノ見れるから、ソースの書き方やバグ発見にはとても有効。そして何より、独りよがりの考えになりにくい。
ここは仲間意識とかそういうのは無い方だから、もし探すならメーリングリスト(ML)とかいいかも。いい所があったら俺も逝くわ。
0275デフォルトの名無しさん
2005/10/15(土) 11:45:32http://www.borland.co.jp/cppbuilder/freecompiler/
BCpad
http://hp.vector.co.jp/authors/VA017148/
BCC Developerもあるけど、
makeやリンクの概念がわからない人は、cpadのがとっつきやすい。
http://www.hi-ho.ne.jp/jun_miura/bccdev.htm
0276デフォルトの名無しさん
2005/10/15(土) 12:01:24私には、どちらかと言うと単なるリファレンスだと思います。
周辺知識の無いプログラミング初心者には難しすぎるし、
ある程度書けるようになってポインタとかも例外的な使い方を覚えれば、
わかりきったこともかなりあるし、「読む」ほどじゃないと思うんですよね。
0277デフォルトの名無しさん
2005/10/15(土) 12:01:590278ポポ巣 ◆Qgm8RFT0/.
2005/10/15(土) 12:03:05intの桁数をオーバーして入力したら
どうなるのかとおもって試したら
まったく違う数字がでたので、なんでこの数字に?と悩んでおりました
回答ありがとうございます!先生方!
この表示される数値に意味はないんよね?
オーーバーしたから変な数字になったって感じで
理解しておけばいいのかな
0279ポポ巣 ◆Qgm8RFT0/.
2005/10/15(土) 12:06:46ttp://www.borland.co.jp/cppbuilder/freecompiler/bcc55steps.html
ここ無料だよ
あたいはここのコンパイラつかっとる(^^)/
0280デフォルトの名無しさん
2005/10/15(土) 12:25:58基本的に意味は無い。
参考までに言っとくと、型の最大値を上回ると今度は桁の最小値に逝くようになってる。
例:short型に最大値の32767を代入、それに1を加えると最小値の-32768になる(初めから32768を代入しても結果は同じ
つまり、269の結果は↑の様な事を何度も繰り返して出てきた値
0281デフォルトの名無しさん
2005/10/15(土) 12:27:420282デフォルトの名無しさん
2005/10/15(土) 12:39:21ありがとうございます。今やってみたんですが、freecommandcompiler
ってやつですか?これ開こうとすると黒い画面が出てきて、一瞬にして
消えちゃうんですがなんでかわかります?ちなみに別のサイトからそこに行き着いて、
ユーザー登録なしでダウンロードしました
0283デフォルトの名無しさん
2005/10/15(土) 12:43:24使い方を調べるのも学ぶうちだ
誰かに質問する前にまずは自分で調べろ
0284デフォルトの名無しさん
2005/10/15(土) 12:50:070285デフォルトの名無しさん
2005/10/15(土) 13:23:490287デフォルトの名無しさん
2005/10/15(土) 13:30:530288デフォルトの名無しさん
2005/10/15(土) 14:15:060289デフォルトの名無しさん
2005/10/15(土) 14:57:12きっびしー。時間がさらさらと流れてゆくふーーー
>>287
おお!!なんですかこれは?黒い画面が出てきてかけそうな感じ!
これでいいの?これがコンパイラ???
0290デフォルトの名無しさん
2005/10/15(土) 15:00:08ちょっとすんげぇ簡単なプログラムさらしてくれない?
なんかホームページに書いてたコンパイルの方法やってもできない。
0291デフォルトの名無しさん
2005/10/15(土) 15:12:35これで
0292デフォルトの名無しさん
2005/10/15(土) 15:17:24KWSK
0293デフォルトの名無しさん
2005/10/15(土) 15:28:27同意。
プログラムの使い方も解らないレベルで言語の勉強をしても身に付かないと思われ。
>>289
もう少しぱちょこんの勉強をしてから出直した方がいい。
そのほうが最終的に近道だと思うぞ。
0294デフォルトの名無しさん
2005/10/15(土) 15:42:02でも、漏れもN88BASICからCを勉強しはじめたとき、
コンパイルやリンクのやり方とかよくわかんなかった。
そういうものの操作とプログラミング自体は、また別のような気がするから、
とにかく操作に詳しい入門書をよく読むことだよな。
コマンドプロンプトの使いかたもよくわからない人は、
HSPあたりから始めるのがよい気がする。
http://www.onionsoft.net/hsp/
0295仕様書無しさん
2005/10/15(土) 15:42:130296デフォルトの名無しさん
2005/10/15(土) 15:46:180297デフォルトの名無しさん
2005/10/15(土) 15:46:450298デフォルトの名無しさん
2005/10/15(土) 15:47:280299デフォルトの名無しさん
2005/10/15(土) 15:50:22そういう言葉使いをしていると本当に性根が腐りますよ。
これまでのすべての積み重ねが今のあなたなのですから。
0300デフォルトの名無しさん
2005/10/15(土) 15:59:080301デフォルトの名無しさん
2005/10/15(土) 15:59:37コマンドプロンプトがわからないからと言ってHSPを勧めるのもどうかと思う。
0302254
2005/10/15(土) 17:30:40それから読んでみますね。
しかし、結構たかいんですね。でも、買って見ますね。
友達にいってもやるって行ってくれそうに無いなぁ…。
そのときはここに居るみんなが友達だ!
0303デフォルトの名無しさん
2005/10/15(土) 17:31:55どうしても無理がある。
0304デフォルトの名無しさん
2005/10/15(土) 18:59:58漏れはCの初心者本は一切読んでない。
問題は多くの本を読むことではなく、如何に本から情報を漏れなく読み取るかだと思う。
つまり、一冊の本から読み取れる量が少ないからたくさん読まなければならないんでないか?
</余談>
0305デフォルトの名無しさん
2005/10/15(土) 19:03:41読んだ本教えて
0306デフォルトの名無しさん
2005/10/15(土) 19:33:35漏れは、猫でも分かるを買った。
0307デフォルトの名無しさん
2005/10/15(土) 19:56:0210年くらい前だけど、記述評論社のすぐわかるC/C++という本を読んで勉強した。
この一冊以外は入門書は読んでない。
この本、解りやすく書いてあるのはいいんだが、当時のPC-9801とボーランドの
Turbo Cにべったり依存した内容なので、あまり今の人には勧められない。方言が強くてね。
この本で覚えたことを当たり前だと思って組んでいたプログラムを他人に見せて
えらく驚かれた記憶があるよ。
#include <pc98.h>ってなんだよ、とかw
0308デフォルトの名無しさん
2005/10/15(土) 19:59:500309デフォルトの名無しさん
2005/10/15(土) 20:13:36いや、確かにぱちょこんも必要かもしれんが、大学の授業でいるからそうも言ってらんねんだ。
>>294Cが必要なんです。
コマンドプロンプトはわからないけどコンパイルのやり方ぐらいはちょっとはわかるんだ。
ただ、大学ってやつはなぜかマックだからウィンドウズじゃわかんねぇーんだよぉ。
マックにあたるターミナルがウィンドウズでどれなのか教えてよ。
周りの俺の友だちに負けたくないんだまじ頼む。
0310304
2005/10/15(土) 20:32:09>マックにあたるターミナル
それがコマンドプロンプト(DOSプロンプト)。若干乗りは違うが、まぁ似たもんだ。
#その違いが気になり始めたらCygwinをインストールすればいい。
>>305
Cの本で買ったのは、K&RとAsciiから出てたDOSプログラミングの本。
会社で拾い読みしたのが、藤原の翁の診断室にパズル本。
C++の本ではEffectiveC++のみ。
#勿論マニュアル、WebSiteは除く。
リクエストがあれば言語歴と書籍歴を纏めてもいいけど参考にはなりそうもないね。
0311デフォルトの名無しさん
2005/10/15(土) 21:02:18式を再帰処理していくって方向は合ってると思います。
もうちょっとエラー処理やら入力に自由が有ると良いけど。
あとは乗除算や括弧のサポートなんか入れていくと
面白くなっていきますよ。余裕有れば数学関数とかも。
この手問題はコンパイラ、インタプリタの基礎技術なんで
字句解析、構文解析、でググれば色々夢が広がるかと。
exprコマンドのソース読んでみるのも良いかと思います。
0312デフォルトの名無しさん
2005/10/15(土) 21:27:33> マックにあたるターミナルがウィンドウズでどれなのか教えてよ。
WindowsXPだったら、
「スタート」→「すべてのプログラム」→「アクセサリ」→「コマンドプロンプト」
で出てくる。
GUIしか知らない人は、意外と見つけにくいのかもw
0313デフォルトの名無しさん
2005/10/15(土) 21:59:59俺は、『Cの絵本』で今現在勉強中。
ただ、俺の場合は大学の講義の副読本だったから、全くの独学の人に薦められるかは分からん。
0314デフォルトの名無しさん
2005/10/15(土) 22:25:55あれ、そーなんだ?コンパイルしようとしたらできなかったから別物かと思った。
わかったもっぺんやってみるよ。ほんとうにありがとう!
0315デフォルトの名無しさん
2005/10/15(土) 22:28:470316デフォルトの名無しさん
2005/10/15(土) 22:36:24> あれ、そーなんだ?コンパイルしようとしたらできなかったから別物かと思った。
bccにパスが通ってないかもしれん。
とりあえずフルパスを書いて、
C:\borland\bcc55\Bin\bcc32 hogehoge.c
とかやってミソ。
0317デフォルトの名無しさん
2005/10/15(土) 22:55:12フルパスが入力される。もちろんどんなファイルでもできる。
0318デフォルトの名無しさん
2005/10/16(日) 00:01:00http://gamdev.org/w/?%5B%5B%A4%AA%A4%DE%A4%A4%A4%E9%A1%AA%BA%A3%C6%FC%A4%AB%A4%E9C%B8%C0%B8%EC%A4%F2%B3%D8%A4%F3%A4%C7%A4%A4%A4%AF%A4%BE%A1%BC%A1%AA%5D%5D
過去ログ
0319デフォルトの名無しさん
2005/10/16(日) 00:08:190320デフォルトの名無しさん
2005/10/16(日) 00:12:57うーわかんねぇ。すいませんせっかく教えてもらってんのに。
というわけで直接見てください。
一応本にあるとおりにやってみました
#include <stdio.h>
int main(void)
{
printf("bigmac\n");
return 0;
}
をexamine.cで保存
そしてコマンドプロンプトで
gcc -o examine examine.c
ってうってコンパイルしようとしたら
gccは内部コマンドまたは外部コマンド、操作可能なプログラムまたはバッチ
ファイルとして認識されていませんってでました。なんのこっちゃ抹茶に紅茶
0321デフォルトの名無しさん
2005/10/16(日) 00:16:30の部分を
C:¥borland¥bcc55¥Bin¥bcc32
に置き換えてやってみれ
0322デフォルトの名無しさん
2005/10/16(日) 00:23:250323デフォルトの名無しさん
2005/10/16(日) 00:28:060324デフォルトの名無しさん
2005/10/16(日) 00:29:14大変だな、おい。
0325デフォルトの名無しさん
2005/10/16(日) 00:30:190326デフォルトの名無しさん
2005/10/16(日) 00:31:58オマイさんはいったい何処にbccをインスコしたのかと
0327デフォルトの名無しさん
2005/10/16(日) 00:36:10C:\borland\bcc55\Bin\bcc32.exeってファイルがあるのかどうかを確認したほうがいいな
0328デフォルトの名無しさん
2005/10/16(日) 00:37:00ファイルの確認もできない悪寒
0329304
2005/10/16(日) 00:38:39世代的にパソコンと同時にワンボードマイコンに触れた世代なもんで、
cをやる頃には何十人もの人間をダンプリストと格闘させる原因を作る側にはなっていた。
だがしかし、当時basicやアセンブラの初心者本なんて存在さえしていなかった。
0330デフォルトの名無しさん
2005/10/16(日) 00:45:470331デフォルトの名無しさん
2005/10/16(日) 00:54:40■ このスレッドは過去ログ倉庫に格納されています