1 :
デフォルトの名無しさん:
こんなとこで聞く前にママに聞けよ、まずは
2 :
デフォルトの名無しさん:04/06/19 21:43
2?
3 :
デフォルトの名無しさん:04/06/19 21:44
ママじゃなくてパパに聞け。弟がいたら弟に聞け。妹がいたら犯せ。
今、大猿はそれどころではないようで。
がおー
8 :
デフォルトの名無しさん:04/06/20 11:45
再帰関数の意味がよくわかりません。
どういうときに使うものなのでしょうか?
9 :
デフォルトの名無しさん:04/06/20 11:46
11 :
キグナス氷河:04/06/20 12:09
>>8 具体的にはツリー型掲示版に使われるよママン
>>キングス氷河
あまりツリー型掲示板についてわからないのですが、
CGIで作られていて、どうてきにHTMLを作成するときに
再帰関数を使っているってことでしょうか?
掲示板に限らず、ツリー構造を操作するときは再帰関数がよく使われる。
14 :
デフォルトの名無しさん:04/06/20 16:49
15 :
デフォルトの名無しさん:04/06/20 18:36
>>8 自分自身を呼び出すような関数の事よ、ボウヤ。
抜け出す条件とスタックオーバーフローに気をつけるんですよ。
>>15 スタックオーバーフローを起こさない永続的な再帰って可能なの?
サンプルコードがあったらおせーて
プ
>>16 AUTO変数の領域の確保にスタックを使わないコンパイラを使うのさ
>>18 ママには絶対分からなさそうなディープさが・・・
>>16 foo(int i){ while(i){ foo(0); } }
22 :
デフォルトの名無しさん:04/06/21 05:30
>>1 再帰なんかめったに使わないから知らなくてもいいよ
まあ折れなんかペイントルーチン制作以来再帰なんてつかってないから。
再帰処理の代行手段はいっぱいあるし
23 :
デフォルトの名無しさん:04/06/21 09:06
__stdcallってなんでしょうか?
WinProcの前のCALLBACKとかいうキーワードを調べてたら見つかりました。
>>23 関数の呼び出し方法の1種で、他に__cdecl(デフォルト)、__fastcall __pascal __thiscallなんかがある。
興味がなかったら後は読み飛ばして。
__cdecl
何も指定しないとコレになる。引数は右側のものから置く。
関数を呼び出した側が引数のメモリの開放を行うので可変個引数が扱える。
__pascal
関数自体が引数のメモリの開放を行うので、__cdeclよりやや実行ファイルのサイズが小さくなる。
しかし関数名は全て大文字に変換されてしまう。これだけ引数を左側のものから置いていく。
__stdcallが無い時代のWinAPIに使われていた。
__stdcall
__pascalの同様に引数が置かれているメモリの開放を自分自身で(呼ばれた側の関数で)行うので、
これも__cdeclよりやや実行ファイルのサイズが小さくなる。
しかし__pascalと違い関数の大文字小文字はそのままなのでhogeとHOGEというような関数名でも混在できる。
他は__cdeclと同じく引数は右側のものから置く。
__fastcall
__stdcallの機能に加え引数の1部をレジスタに置くので__stdcallよりも早くなる可能性がある。けどなぜか使われていない。
__thiscal
(C++)クラスのメンバ関数用なんで好き勝手に指定するものではない。__stdcallに加えthisポインタをレジスタに置く。
可変個引数の場合、__cdeclに加え最後にthisポインタを置く。
ちなみに__stdcallがなかった頃は#define PASCAL __pascalとなっていたが、
今は#define PASCAL __stdcallとなっているので注意。
ママは賢いなぁ
僕のおしりにプーさん、ムーニーマンのプーさん、
世界で一番好きなんだー
29 :
デフォルトの名無しさん:04/06/30 10:09
printf("hoge");
みたいな感じで文字列を受けとるようにする函数を定義したいとき,
引数の型はなんにしたらいいんだ?
char*
31 :
デフォルトの名無しさん:04/06/30 13:44
「函数」と書きたいだけの厨房がここにまできたか。
学部2年生ってとこかな
>>31 ここだから来れるんだよ
甘えたい年頃だろ
>>31 C言語ならオレに聞けスレの隔離スレだから何でもOK
37 :
デフォルトの名無しさん:04/07/17 09:41
printfに使える%sとか%dの特殊な記号について教えてください。
ほかにどんなものがありますか?
特殊な使い方とかありますか?
38 :
デフォルトの名無しさん:04/07/17 09:44
39 :
デフォルトの名無しさん:04/07/17 14:00
40 :
デフォルトの名無しさん:04/11/22 10:45:21
%
`%' 一文字が出力される。変換される引数は無い。完全な変換の記法で表すと `%%' である。
argcは「コマンドラインのパラメータの数+1」の整数です. 1足してあるのは,プログラムを実行したコマンド自体も含まれるためです.
これは,配列argvの大きさになっています.
argv[0], argv[1], ... は
argv[0] プログラムファイルのパスの文字列へのポインタ
argv[1] 1番目のコマンドライン引数の文字列へのポインタ
argv[2] 2番目のコマンドライン引数の文字列へのポインタ
... ...
のようにコマンドライン引数の文字列へのポインタが納められた配列になっています.
44 :
デフォルトの名無しさん:04/12/11 22:32:48
教えてください。
入力した文字列を格納した配列のポインタを戻したいんですけど、警告がでました。
警告1:プロトタイプ宣言のない関数'input'の呼び出し。(関数 main)
警告2:コードは効果をもたない。(関数 main)
警告3:問題のあるポインタの変換。(関数 input)
ソース↓
#include <stdio.h>
#define MAX 256
char *input();
void main()
{
*input();
}
char *input()
{
char s[MAX];
printf("COMMAND:");
scanf("%s", s);
return s;
}
つーか答える気もないくせに人のことばっか気にしてんな!
お前ら、何様だよ!
いっつもいっつもくだらないことばっか言いやがってよー
ちゃんと働けよ!暇人が!
真剣に答えてくれる人にはすいません。
そうゆう人にはマジで感謝してます。
>>45 うっせハゲ
うっせハゲ
うっせハゲ
うっせハゲ
うっせハゲ
>>44 #include <stdio.h>
#define MAX 256
char *input(void);
int main(void)
{
printf("%s\n", input());
return 0;
}
char *input(void)
{
static char s[MAX];
printf("COMMAND:");
scanf("%s", s);
return s;
}
48 :
デフォルトの名無しさん:05/02/15 03:51:58
49 :
25の妹:2005/04/10(日) 18:42:00
>>25 >引数は右側のものから置く。
おにいちゃん、スタックという主語が入ってないから何の説明なのか意味不明だよ。
恥ずかしいからもうちょっと本とか読んで勉強してよね。
50 :
デフォルトの名無しさん:2005/04/10(日) 18:42:21
24でしたorz
51 :
デフォルトの名無しさん:2005/04/13(水) 19:08:16
誰か教えて!
コーディングする上でルールってあると思うんだけど、そのルールが書いてある本とかある?
例えば、staticを勝手に使うとか、関数の型を勝手に変更とか。
(これってほんとにダメなのかは知らない)
お前の例えが意味不明なのだが。
53 :
デフォルトの名無しさん:2005/04/13(水) 20:13:29
すまん。
でも、他に例えようがない…。
諦めます。
ありがとうございました。
日本人じゃないかもな
>>51 staticを勝手に使うとか、関数の型を勝手に変更とかしたソースとはどんなものなのか見せろ。
>>51 わからないことがあったらママに聞くのよ。
関数の名前はプロジェクト、システム、プログラム、作成者の頭文字を並べて、
ハイフンで区切った後、使った順に三桁の番号を振るのよ。
で、できた関数名は台帳に忘れずに記入しておきなさいね。わかった?
>>56 ハイフン…
COBOL かよ!!ママン!
コボルた水は、また汲めばイイ・・
鳥なき里のコーボル
>>57 そうよ。C 言語の C は COBOL の C なのよ。
Hello World を書く時もママのように書きなさい。
#define PROCEDURE main()
#define DIVISION
PROCEDURE DIVISION
{ printf("Hello World\n");}
>>60 そんなコードじゃ COBOL にはみえん
第一C言語としても不完全
全然ダメだ。
社会に出て出直してこい専業主婦めが
62 :
初心者:2005/04/14(木) 16:08:10
はじめまして
3次元の画像処理を行いたいのですが、Cで3次元はどのように展開していけばよいのでしょうか?
2次元でしかしたことがなくて、聞く人もいなくて困っています。
よろしくお願いします。
64 :
初心者:2005/04/14(木) 16:30:38
>>64 ママに聞け
ママに聞く気がないならスレ違い
ネタスレでムキになっている自称初心者は羽材
>>62 まー。三次元に興味を持ったって聞いて、ママ嬉しいわ。
三次元って二次元に毛が生えたようなものだと思えばいいのよ。
まあ、その毛が気持ち悪いって思うかも知れないけど、
ママも生えているって思って克服してね。
ママCでDirectX使ってると面倒でせつなくなってくるよ
68 :
デフォルトの名無しさん:2005/04/18(月) 01:34:06
何が面倒なのか列挙してごらんボウヤ
69 :
デフォルトの名無しさん:2005/04/18(月) 19:05:51
>>67 そんな坊やはOpenGLでも使っておきなさい
70 :
デフォルトの名無しさん:2005/04/18(月) 19:06:49
>>62 僕ちゃんはボクセルでよちよちちたいのでしゅか?
71 :
デフォルトの名無しさん:2005/05/15(日) 12:11:04
すみません、2つの文字列を読みこむのがわかりません。
char a[100], b[100];
scanf(%s,%s",&a,&b);
としたいのですが。
最初のaの配列のほうにコンマもふくめてはいってしまいます。
これをうまく回避するためにはどうすればいいんでしょうか。
おねがいいたします。
コンマじゃなくてスペースにすれば解決
>>72 ありがとうございまzす、スペースだとOKでした。
ただ、どうしてもコンマをつかうばあいんはなにか方法ないのでしょうか?
1回別の配列にいれて、ifでコンマを見分けて2つの配列に分配とかしか方法はないのでしょうか?
aを多めにとってgetsかfgetsで読み込んでstrtokで切るとか
>>74 なるほどStrtokですね。ありがとうございます。
勉強になります。もう一度組み直してみます、
>>73 scanf("%99[^,],%99[^,]", & a, & b);
%sの場合も%99sとした方が安全。
つーか、そもそもfgets()してsscanf()がお勧め。
>>74 gets()を薦めるな。strtok()を薦めるな。知識がないなら回答するな。
>>75 Strtokではない、strtokだ。
>>76 より細かいご指摘ありがとうございます。
%99s、fgets()してsscanf()の使いかたをより詳しく勉強してみます。
74さんの方法がだめな理由もさぐってみます。
方法はたくさんありますが、まずい方法など奥ふかく、たいへん参考になります。
78 :
デフォルトの名無しさん:2005/06/30(木) 22:38:03
C言語のアルゴリズムの宿題なのですが、よく分からないので教えてください。
入力に応じて2分探索木を作成し、走査順を表示しながら最大値と最小値を求めるプログラムを作成しなさい。
走査順に表示するとは、探索の過程で訪れる頂点の要素の値を出力しながら走査が実行されることである。
最大値を求める関数と、最小値を求める関数を別々に作成しなさい。
2分探索木だけなら自分でもわかるのですが、最大最小をどのように求めればいいのかがいまいち分かりません。
よろしくお願いします。
79 :
デフォルトの名無しさん:2005/06/30(木) 22:50:26
どこかにA言語と、B言語に詳しいママいないかな?
>>78 最大・最小の要素の値を取っといて、各ノード毎の要素と比較してとっかえればええやんけ。
二分探索木の最大最小ノードって、左の果てと右の果てじゃね?
82 :
デフォルトの名無しさん:2005/07/02(土) 12:50:32
>>81 YES
こんなもん考えるまでもないと思うんだがねぇ
授業聞いてないんじゃないか
そもそもA言語なんてあるのか?
A言語ってALGOLのこと?
おまいらちゃんとママみたいに語ってください
87 :
デフォルトの名無しさん:2005/07/03(日) 11:40:46
俺のかあちゃんはヤンママだったのでこんなかんじでした (;´д⊂ヽ
88 :
デフォルトの名無しさん:2005/07/03(日) 12:47:45
Ada
89 :
デフォルトの名無しさん:2005/07/03(日) 17:12:46
,. '"´  ̄  ̄  ̄ ` 、
/ \
, ' / , ,ィ \ ヽ
/ , ' / // | i、 ヽヽ ',
,' ./ / // 〃 .| l ヽ .ヽヽ ヽ ',
,' / / / / // 〃 |l i i__i ,ヽ i l. l
l/ i l / 7´/ `ヽ! 'l| ̄ l l !l ', ! ! | ,へヽ
. ハ l ! i / /,.=、! / , =il、 ! .l i l/ `ヽ\
i いl i / 〃J;;;::iト / イiJ;;;;::iヾ l i i/ \ヽ
!/Yヽi l. '' ヾ-'::| |::-':ソ ' / // \ヽ
/ i il l ,,,,-=‐'' i ‐=- ,,,/ // / / /
! l ヽヘ r ─ 、 /r‐ ' 、 / //
/ヽ l ヾゝ ., t  ̄`} / ⌒丶、 ヽ/ .//
/ ヽ ヽヽ ヽ ` ー --‐ ´ }ー- 、 } / '
ゝ, フ il \ \ {__ } (
`ー─→、 \ \_,.、_、___,.{´ ~` / (⌒
/ー‐‐ 、\ \_,ノ ./  ̄T{ /
{ } ヽ,__, -く__ / {__/
ゝ.,___,ノ ゝ,ヽ//-! ノ
`ー‐‐''
>>78だめでしょ、人様に迷惑掛けちゃ。
上げてしまった…。鬱。
91 :
デフォルトの名無しさん:2005/07/03(日) 21:12:23
n個の整数が入っている配列aを見て、その中の最大値をmaxに、最小値をminに、平均値をaveに
返す関数max_min(int a[],int n,int *max,int *min,int *ave)を作成せよ。関数が正しく動くこと
を確認するメインプログラムも作成すること。
#include <stdio.h>
#include <float.h>
void max_min(int a[],int n,int *max,int *min,int *ave);
main()
{
int a[]={21,45,67,7,88,9999,123};
int max=0,min=0,ave=0;
int n=7;
max_min(a[],n,&max,&min,&ave);
printf("max=%d min=%d ave=%d\n",max,min,ave);
}
void max_min(int a[],int n,int *max,int *min,int *ave)
{
int i;
for(i=0;i<n;i++){
if(a[i]>=*max)*max=a[i];
if(a[i]<=*min)*min=a[i];
*ave+=a[i]; }
}
と書いたのですが、動きませんでした。何がいけないのか
ご指導ください。お願いします
min=10000
*ave /= n;
void max_min(int a[],int n,int *max,int *min,int *ave)
{
int i;
*max = *min = a[0];
for(i=1;i<n;i++){
if(a[i]>=*max)*max=a[i];
if(a[i]<=*min)*min=a[i];
*ave+=a[i]; }
*ave /= n;
}
94 :
91:2005/07/03(日) 21:54:53
>>92 ああ!なるほど。ありがとうございます。あと
syntax error before ']' token と9行目に出てしまうのですが
これはどう直せばいいのでしょうか?
max_min(a,n,&max,&min,&ave);
96 :
91:2005/07/03(日) 22:22:30
ありがとうございます。
>>93 >>94 助かりました。
ナゾなんですけど、a[]じゃなんで間違いなんですか?
配列aを渡すならa[]としたほうがいいような気がするのですが・・・
char *a;
と
char* b;
は一緒なんでしょうか?
同じ。
char* a, b;
は
char *a, b;
になるからそこだけ注意
>>97 char と * と a それぞれがトークン
char*a でもよし
近くにあってもトークン
なーんちゃったりして
>>96 いい子は配列なんて渡そうと思っちゃ駄目よ。
一個ずつにするか、あとはどこに配列があるかを渡すかどっちかにしなさい。
void main(){
struct zzz{
char[] s1;
int x;
}
zzz[char[]] xxx;
xxx["yyy"].s1 = "aaa";
printf(xxx["yyy"].s1);
}
104 :
デフォルトの名無しさん:2005/07/07(木) 15:59:31
c言語で1000以下の素数を二つ足し合わせて1000になるプログラムってどうすればいいんですか?わかる方いましたらお願いします。できるだけ初心者でも理解できるものでお願いします。
malti - kayo!
a multi data
107 :
デフォルトの名無しさん:2005/07/07(木) 18:55:43
すいません。書き込みしたりするのは初めてだったものでマナーをしらなくて。今後は気をつけます。ほかのとこでも謝ってきます。
>>104 まーマルチちゃんお行偽が悪いわね。
まあ、大目にみてあげるわ。出来るだけ初心者でもと言ったら、
やっぱり全部手計算で求めて印刷するというのが王道かしら。
1000 までだったら 1 日あれば全部チェックできるわよね。
こんなプログラムでどうかしら?
#include <stdio.h>
main(){
int data[]={3,17,23,29,47,53,59,71,89,113,137,173,179,191,227,239,
257,281,317,347,353,359,383,401,431,443,479,491,0};
int i;
for(i=0;data[i]!=0; i++)printf("%d, %d\n",data[i],1000-data[i]);
}
どお、時間はかかるけど簡単でしょ。
109 :
デフォルトの名無しさん:2005/07/07(木) 19:06:35
C言語に関する質問です
char var[][];
func(char** ptr){
}
という関数がある場合、func()の内部で、varの配列の中身(var[0][1]など)を
printf()で出力するには、どう記述すればよいのですか?
110 :
デフォルトの名無しさん:2005/07/07(木) 19:13:10
すいません。今度から本当に気をつけます。確かにわかりやすいです。ですが、出来れば素数は分かってない状態からの方がいいんです。ってあんなことしたのに失礼なこと言ってすみません。
>>109 そのfuncへvarは渡せない。
少なくとも最初以外の次元の要素数は決定している必要がある。
最初の次元は引数で渡す必要がある。
char var[N][2];
func(char ptr[][2], size_t n);
あるいはforを回すか。
113 :
109:2005/07/07(木) 19:24:30
>111
ありがとうございます。
では、
char var[5][5];
func(char** ptr){
}
という場合はどうでしょうか?
それと、Javaのように、var.length のようなことはできますか?
>>110 せっかくママが計算してあげたのにだめなの?しょうがない子ね。
でも、そんなわがまま言って、本当にコンピュータに素数を計算させて大丈夫なの?
初心者に素数の計算なんかわかんないんじゃないの?ママは心配だわ。
素数の計算の仕方を言ってみなさい。その通り作ってあげるから。
115 :
デフォルトの名無しさん:2005/07/07(木) 21:40:51
ですます口調が思わず大声で「アナルーーー!」って叫んじまうくらいウザい
>>113 コンパイルしてみれば?
実験は自分でするもんだ。
>それと、Javaのように、var.length のようなことはできますか?
出来ない。
117 :
デフォルトの名無しさん:2005/07/07(木) 22:42:04
わざわざありがとうございます。えっとエラトステネスの篩ってやつでまず2以外の2の倍数を消去して、次に3以外の3の倍数を。って感じで残った数の中から最小の数の倍数だけ消去してくってやつです。
それはちょっとググればたくさんサンプルがみつかるわよ
>>117 てか、そのage改行無しレスは、素数1000の宿題マルチしたお前だろ?
>>119 せっかくママ黙ってたのに…
パパには内緒よ
121 :
デフォルトの名無しさん:2005/07/07(木) 23:22:45
>>119 そうですよ。マナーをしらなくてしちゃったけど答えてもらえたので続けさせてもらいました。
>>118 確かにたくさんあったんですけど、どんなのがいいのかなと思ったんで質問させてもらいました。
釣りだろ? でなければとんでもない阿呆だ。
>>121 お前、間違ってもソフト開発業界には来るなよ。
いや、煽ってるんじゃない。お前のためだ。
その調子だと入社1年でクビか鬱メンヘル行きは間違いない。
来るわけねーだろ
>>113 それもだめ。
2次元配列はポインタのポインタにはならない。
var.lengthなんてCにはない。
C++ならstd::vectorとかboost::arrayやboost::multi_arrayにそんなのがあるけど。
>>113 struct foo bar[] = {
{...},
{...},
{...},
};
size_t length = sizeof(bar) / sizeof(*bar);
int foz[5];
length = sizeof(foz) / sizeof(*foz);
>>117 まー。マルチちゃんみんなに嫌われてママ困っちゃうわ。
みんなと仲良くしてね。
2の倍数、3の倍数の後が書いてなかったので、初心者にもわかり易いように、
効率が最悪のプログラムを作ってみたわ。
どーかしら。
#include <stdio.h>
main(){
int kazu[1001]={0};
int i,j;
for(i=2;i<=31;i++)for(j=2;i*j<=1000;j++)kazu[i*j]=1;
for(i=3;i<500;i+=2)if(kazu[i]+kazu[1000-i]==0)printf("%d, %d\n",i,1000-i);
return 0;
}
ピンチになった時は素数を数えると落ち着くって神父さんが言ってた
129 :
デフォルトの名無しさん:2005/07/09(土) 15:36:19
落ち着けッ!素数を数えて落ち着くのだッ!
1872173…1872953…
落ち着かん!
>>113 これなら渡せるわよ。
int func(char (*value)[])
{
・・・
}
メル欄と口調の違いに(ry
このスレはママ口調じゃないとダメなのよグゥ
ギャグマンガよ
C言語って何のヘッダもインクルードしなくても
printf()とか使えるじゃないですか。
それってコンパイラが暗黙の了解で何かしてるからなんですか?
>>135 Cでは見たことない関数も呼び出せるようになっている。
ただし、型チェックなどが省略されるのでちゃんとヘッダをインクルードすべき。
(それでもprintfは可変個引数だから型チェックはされないけどな。)
>>135 なるほど。そういうことでしたか。
ありがとうございます。
>>136 いや、printf()も第一引き数はちゃんとチェックされる筈だぞ。
そういう話じゃないだろ
140 :
デフォルトの名無しさん:2005/10/02(日) 00:39:25
141 :
デフォルトの名無しさん:2005/10/02(日) 20:01:01
宿題は宿題スレへどうぞ
>>141 まあ、変なこと言う子ねぇ……
C言語のプログラムはぜーんぶ関数なのよ。だいじょうぶよ。
144 :
デフォルトの名無しさん:
洩れのしってるママは美人だw