C言語なら俺に聞け(入門編)Part 75
■ このスレッドは過去ログ倉庫に格納されています
★前スレ
C言語なら俺に聞け(入門編)Part 74
http://hibari.2ch.net/test/read.cgi/tech/1290857610/
★過去スレ
http://makimo.to:8000/cgi-bin/search/search.cgi?q=%82b%8C%BE%8C%EA%82%C8%82%E7%89%B4%82%C9%95%B7%82%AF&andor=AND&sf=0&H=&view=table&D=tech&shw=5000
★教えて欲しいのではなく宿題を丸投げしたいだけなら
↓宿題スレ↓へ行ってください。
C/C++の宿題片付けます 144代目
http://hibari.2ch.net/test/read.cgi/tech/1291471791/
★C++言語については避けてください。C++対応明記スレへどうぞ
★分からない事をなるべく詳しく書いて下さい。
★ソースコードを晒すと答えやすくなるかもしれません。
# 抜粋/整形厳禁、コンパイラに渡したソースをそのまま貼ること
# サイズが大きい場合は宿題スレのアップローダ等を利用してください
★開発環境や動作環境も晒すと答えが早いかもしれません。
★質問者は最初にその質問をした時のレス番号を名前欄に書いて下さい。
0153デフォルトの名無しさん
2010/12/21(火) 12:33:250154デフォルトの名無しさん
2010/12/21(火) 15:57:59規格レベルで話せない奴に限って「K&Rを馬鹿にする奴は…ブツブツ」とか言う
0155デフォルトの名無しさん
2010/12/21(火) 16:03:160156デフォルトの名無しさん
2010/12/21(火) 16:21:11どっちも見苦しいな
0157デフォルトの名無しさん
2010/12/21(火) 16:23:340158デフォルトの名無しさん
2010/12/21(火) 17:25:38****
***
**
*
このように表示するプログラムを書いているのですが、ここからどうしてもできません
どなたか教えていただけないでしょうか
#include<stdio.h>
int main(void)
{int n,i,j;
printf("三角形の一辺の長さを入れなさい.\n");
scanf("%d",&n);
for(i=1;i<=n;i++){
for(j=1;j<=i;j++)printf("*");
printf("\n");
}
}
0159デフォルトの名無しさん
2010/12/21(火) 17:27:54にはどうすればいいですか?
例えば、5345の中には5が2つある。みたいなのです。
0160デフォルトの名無しさん
2010/12/21(火) 17:59:450161デフォルトの名無しさん
2010/12/21(火) 18:03:29ばーーーーーーか
0162デフォルトの名無しさん
2010/12/21(火) 18:05:37for(i = n; i > 0; i--) {
for(j = 0; j < i; j++) printf("*");
printf("\n
0163デフォルトの名無しさん
2010/12/21(火) 18:20:2510で割った余りを数えていく
0164デフォルトの名無しさん
2010/12/21(火) 18:58:18sprintf()で文字列にして、文字として数える。
0165デフォルトの名無しさん
2010/12/21(火) 18:59:140166デフォルトの名無しさん
2010/12/21(火) 19:06:43[7]文字列の比較 の2番目のプログラムで質問です
forの条件式でi < len + 1となっているのでif (i == len + 1)にはなることはないように思えます
このプログラムは文字列を比較するプログラムとして機能するのでしょうか?
0167デフォルトの名無しさん
2010/12/21(火) 19:11:390168デフォルトの名無しさん
2010/12/21(火) 19:12:20機能するかどうかは動かして試してみればいいじゃん。
ヒントを書いておくと、文字列の一致とは長さも一致している必要があるってこと。
0169デフォルトの名無しさん
2010/12/21(火) 19:25:06うーん、まぁまぁですね。
0170デフォルトの名無しさん
2010/12/21(火) 19:31:180171デフォルトの名無しさん
2010/12/21(火) 19:35:19ありがとう!
0172デフォルトの名無しさん
2010/12/21(火) 19:49:18i++でiが12になってからi < len + 1で比較され、12(i)<12(len+1)と条件を満たさなくなり
i=12の状態でfor文を抜けるということでいいんでしょうか?
条件満たすi=11の段階でfor文を抜けると思っていました
0173デフォルトの名無しさん
2010/12/21(火) 20:10:55いえいえ
0174デフォルトの名無しさん
2010/12/21(火) 20:13:090175デフォルトの名無しさん
2010/12/21(火) 20:43:550176デフォルトの名無しさん
2010/12/21(火) 21:12:21すぐパソコンに向かってプログラミングしようとする
常識的に考えてフローチャートつくるのが先だろ。
話変わるがソースコードからフローチャートに変換できるツールってない?
自筆で図描くのめんどくさい
0177デフォルトの名無しさん
2010/12/21(火) 21:27:15書くべきはデータフローだろ
0178デフォルトの名無しさん
2010/12/21(火) 22:22:17for (A; B; C)
ABCBCB…
0179デフォルトの名無しさん
2010/12/21(火) 22:51:13K&R はダメだったけど
ANSI でもっとダメになった
C99 でさらに追い打ち
上のほうの人たちが C の何がいいのかをまるでわかっておらず
枝葉末節のために醍醐味をまき散らすように捨て続けてきた
スタック構造をダイレクトに書けるのはいいことで register 渡しまであったのはあれでよかったし
lint は lint で独自の差別化を競えたはずで芽を摘まれなければ今ごろ頼もしかっただろうし
const はせっかく新設までしといて逆がないから write only な論理をきれいに書けないままだし
void* も文法を汚してまで新設しといて予想外に使えないやつだった
long long は待望だったけど 0b や数値定数の空白継続は結局なし
auto 配列の初期化だの可変配列みたいないらんものを大量にマンダトリーにしちまいやがった
0180デフォルトの名無しさん
2010/12/21(火) 23:39:31どのようにプログラムすればいいですか?
プログラムの例を載せてもらえると助かります。
0181デフォルトの名無しさん
2010/12/21(火) 23:41:370182デフォルトの名無しさん
2010/12/21(火) 23:44:27{
char moji[]="aiueoaiueoaiueo";
int i,count=0;
for(i=0;moji[i]!='\0';i++){
if(moji[i]=='a'){
//aをカウント
count++;
}
}
printf("aは%d個でつ",count);
}
ばっちりでつ
0183デフォルトの名無しさん
2010/12/21(火) 23:47:03int charCount(const char* s, char ch)
{
if (*s == '\0')
return 0;
return (*s == ch) + charCount(s + 1, ch);
}
int main()
{
const char* s = "qwertyanxa";
printf("%d\n", charCount(s, 'a'); /* 'a'の個数を数える */
printf("%d\n", charCount(s, 't'); /* 't'の個数を数える */
return 0;
}
0184デフォルトの名無しさん
2010/12/21(火) 23:48:370185デフォルトの名無しさん
2010/12/21(火) 23:55:36すげぇな。再帰的にカウントしてるなんてとてもじゃないけど思いつかない
カウントする対象の文字が全角だったらどうなるの
0186デフォルトの名無しさん
2010/12/21(火) 23:57:40スタックの心配はしなくていいか。
0187デフォルトの名無しさん
2010/12/22(水) 00:04:13{
if (*s == 0) return 0;
return charCountSub((*s == ch) + count, s + 1, ch);
}
int charCount(const char* s, char ch)
{
return charCountSub(0, s, ch);
}
スタックが心配なときは末尾再帰にすれば。
0188デフォルトの名無しさん
2010/12/22(水) 00:05:51よくみたらバグってるな。まあいいか。
0189デフォルトの名無しさん
2010/12/22(水) 00:07:44最近C言語とやらを勉強しだしておれにはこのスレ心強すぎる
0190デフォルトの名無しさん
2010/12/22(水) 00:08:18!!(*s == ch)
こうしなくていいっけ
0191デフォルトの名無しさん
2010/12/22(水) 00:12:270192デフォルトの名無しさん
2010/12/22(水) 00:19:23Cだけじゃなく関数型言語もやってみな
0193デフォルトの名無しさん
2010/12/22(水) 00:45:500194デフォルトの名無しさん
2010/12/22(水) 00:51:45関数型言語を勉強するのにオススメは何?
0195デフォルトの名無しさん
2010/12/22(水) 00:58:020197デフォルトの名無しさん
2010/12/22(水) 01:13:050198デフォルトの名無しさん
2010/12/22(水) 07:12:50スタック領域が飽和状態になって違う領域(ヒープ?)にはみ出てしまうという意味ですか。
初心者の俺には専門用語すぎてカオスすぎる
0199デフォルトの名無しさん
2010/12/22(水) 07:15:510200デフォルトの名無しさん
2010/12/22(水) 07:20:13そのスタック領域をオーバーした先はヒープ領域で間違いないですか
0201デフォルトの名無しさん
2010/12/22(水) 07:22:08すたっくとひーぷのぽいんたがれんぞくしているとはかぎらない
そもそもひーぷというものがないかもしれない
0202デフォルトの名無しさん
2010/12/22(水) 07:24:260203デフォルトの名無しさん
2010/12/22(水) 08:56:34コンソール画面を右上の×で閉じてしまったらメモリって解放されないですよね?
じゃあこの×を押したときに、解放するようにしたいのですが、
良い方法ないでしょうか?
WINAPIを使ったウィンドウのプログラムなら余裕なんですが、コンソールプログラムだと
方法がわかりません。
0204デフォルトの名無しさん
2010/12/22(水) 09:02:14本当に解放されない?
0205デフォルトの名無しさん
2010/12/22(水) 09:03:530206デフォルトの名無しさん
2010/12/22(水) 09:06:59自動的に解放されるのでしょうか?
>>205
つまり、scanfとかで停止させている場合、その関数のエラーを
ウィンドウを閉じたと判断して、終了処理させるということですか?
0207デフォルトの名無しさん
2010/12/22(水) 09:50:24C言語なんてマイナー言語誰も使ってないよw
0208デフォルトの名無しさん
2010/12/22(水) 10:09:460209デフォルトの名無しさん
2010/12/22(水) 11:10:550210デフォルトの名無しさん
2010/12/22(水) 11:31:200211デフォルトの名無しさん
2010/12/22(水) 11:31:40環境はVC++です。
{
float length=100;
float length2=200;
float lenlen=length-length2;
if(lenlen>=0){
return false;
}
return true;
}
なぜかfalseが帰ってきてしまいます。
0より小さいはずなのに
ちなみにlenlen>0としたら正常に動きました。
よろしくお願いします。
0212デフォルトの名無しさん
2010/12/22(水) 11:38:57どーせ書いた処理そのままのせてないんだろう
そんで実際の処理ではlenlenが0になってるんだろう
じっさいのコードでif分岐の直前にlenlenを出力してみたらどうだ?
0213デフォルトの名無しさん
2010/12/22(水) 11:40:22別のところで未初期化のポインタ使って何か書き込んでないか?
0214デフォルトの名無しさん
2010/12/22(水) 11:42:45馬鹿なんだから省略とかしちゃだめだよ
ちゃんと全部載せないと
0215デフォルトの名無しさん
2010/12/22(水) 11:48:27正常に動作してたのに別のところで勘違いしてたみたいでした。
すいませんm(_ _)m
0216デフォルトの名無しさん
2010/12/22(水) 11:50:400217デフォルトの名無しさん
2010/12/22(水) 12:15:03プロセスが終了したら動的にとってきたメモリも解放されると思うけど。
0218デフォルトの名無しさん
2010/12/22(水) 14:38:07特別に許してやるよ
感謝しろww
0220デフォルトの名無しさん
2010/12/22(水) 15:23:310221デフォルトの名無しさん
2010/12/22(水) 15:29:400222215
2010/12/22(水) 15:58:280223デフォルトの名無しさん
2010/12/22(水) 16:30:010224デフォルトの名無しさん
2010/12/22(水) 16:49:140225デフォルトの名無しさん
2010/12/22(水) 18:05:42あるんでしょうか?わざわざ別に作る必要ないですよね。
0226デフォルトの名無しさん
2010/12/22(水) 18:21:430227デフォルトの名無しさん
2010/12/22(水) 18:22:45非常に小規模な開発なら、その通り
0228デフォルトの名無しさん
2010/12/22(水) 18:28:36具体的に教えろ。
ひとつのプログラムを複数の c ファイルで構成するような場合に有用となります。
0230デフォルトの名無しさん
2010/12/22(水) 19:20:300231デフォルトの名無しさん
2010/12/22(水) 19:23:52説明できないんだ!?w
ばーか。w
0232デフォルトの名無しさん
2010/12/22(水) 19:28:180233デフォルトの名無しさん
2010/12/22(水) 19:29:00意味がわかりません。
具体例を教えてください。
具体例のわかりやすさは異常。
0234デフォルトの名無しさん
2010/12/22(水) 19:29:120235デフォルトの名無しさん
2010/12/22(水) 19:29:33stdio.h
0236デフォルトの名無しさん
2010/12/22(水) 19:30:130237デフォルトの名無しさん
2010/12/22(水) 19:33:47みんな引っかかってくれてありがとうww
0238デフォルトの名無しさん
2010/12/22(水) 19:35:37どこが釣りなのか教えてくれ
ヘッダファイルをどういうときに使うのか説明できないだろ
0239デフォルトの名無しさん
2010/12/22(水) 19:43:400240デフォルトの名無しさん
2010/12/22(水) 19:46:100241デフォルトの名無しさん
2010/12/22(水) 19:50:100242デフォルトの名無しさん
2010/12/22(水) 20:21:250243デフォルトの名無しさん
2010/12/22(水) 22:15:450244デフォルトの名無しさん
2010/12/22(水) 23:35:260245デフォルトの名無しさん
2010/12/22(水) 23:50:58その時点でスタック領域がオーバーして実行できなくなるが
これを解消するにはメモリを増設することが考えられますが
他に手はないですか
0246デフォルトの名無しさん
2010/12/22(水) 23:59:59メモリ増設してもムリじゃないか?
0247デフォルトの名無しさん
2010/12/23(木) 00:05:040248デフォルトの名無しさん
2010/12/23(木) 00:07:22スタック領域をオーバーするような大きな配列はstaticつけるといいかもね。
0249デフォルトの名無しさん
2010/12/23(木) 00:28:040250デフォルトの名無しさん
2010/12/23(木) 01:19:330251デフォルトの名無しさん
2010/12/23(木) 02:10:17ギリギリ取れるサイズだな。
0252デフォルトの名無しさん
2010/12/23(木) 02:13:03■ このスレッドは過去ログ倉庫に格納されています