[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 701- 801- 2chのread.cgiへ]
Update time : 06/11 11:18 / Filesize : 195 KB / Number-of Response : 805
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

C言語なら俺に聞け(入門篇) Part 21



1 名前:デフォルトの名無しさん mailto:sage [2007/11/07(水) 06:24:18 ]
C言語の入門者向け解説スレです。
・C++言語はスレ違いです。
・分からない事をなるべく詳しく書いて下さい。
・ソースコードを晒すと答えやすくなるかもしれません。
・質問者は最初にその質問をした時のレス番号を名前欄に書いて下さい。

前スレ
C言語なら俺に聞け(入門篇) Part 20
pc11.2ch.net/test/read.cgi/tech/1192455273/

教えて欲しいのではなく丸投げしたいならこちらへ
C/C++の宿題を片付けます 99代目
pc11.2ch.net/test/read.cgi/tech/1194262698/

51 名前:デフォルトの名無しさん mailto:sage [2007/11/08(木) 20:34:16 ]
それ整数型だろ。

52 名前:デフォルトの名無しさん mailto:sage [2007/11/08(木) 23:29:45 ]
実数演算だと0で割っても止まらないんだよな
0で割ってるのに気がつかなくてはまったことがある

53 名前:デフォルトの名無しさん mailto:sage [2007/11/09(金) 00:32:25 ]
2
1
0
-1
-2
というテキストファイルinput.txtをscanfを使ってリダイレクトで、
scanf.exe<input.txt >output.txt
というようにして読み込みたいのですが、
for(i=0;i<100;i++){
scanf("%d",&c[i]);
tmp=i;
if(c[i]==EOF){
break
}
として、ファイルの終端まで読もうとすると、-1の行までしか読み込みません。
-2まで読み込んでファイルの終端で読み込みを完了させるにはどうしたらよいのでしょうか?
scanfとリダイレクトは絶対使わなければならないので、そこ以外を変更することで対処したいのです。

54 名前:デフォルトの名無しさん mailto:sage [2007/11/09(金) 00:41:59 ]
それはたまたまEOFの値が-1だったというだけだろう。
scanfの戻り値を見ろ。あるいはscanf後にfeof(stdin)を見るという手も使えると思う。

55 名前:デフォルトの名無しさん mailto:sage [2007/11/09(金) 05:47:16 ]
>>53
EOFとの比較は、「ほにゃららの場合はEOFになる」と明記されたものと行います。
例えばfgetc()のリターン値とか。

56 名前:デフォルトの名無しさん mailto:sage [2007/11/09(金) 13:55:01 ]
double *dp;
dp=(double*)malloc(sizeof double);
コンパイル通らないよ
どうすればいい

57 名前:デフォルトの名無しさん mailto:sage [2007/11/09(金) 13:59:32 ]
sizeof (double)

sizeof *dp


58 名前:デフォルトの名無しさん mailto:sage [2007/11/09(金) 14:00:36 ]
ども

59 名前:デフォルトの名無しさん mailto:sage [2007/11/09(金) 14:01:33 ]
(double)



60 名前:デフォルトの名無しさん [2007/11/09(金) 14:39:24 ]
巡回セールス問題を解くプログラムを順列を用いて書きたいのですけど
for(i = 0; i < n; i++) used[i]=NO;
perm(0);

return(0);
}

void perm(int d)
{
int i,j;
int b[MAXN];
int s = adj[a[0]][a[n-1]];

if(d == n){
for(i = 0; i < n-1; i++){
s+=adj[a[i]][a[i+1]];
}
}

else {
for (i = 0; i < n; i++) {
if (used[i] == NO) {
a[d] = i;
used[i] = YES;
perm(d + 1);
used[i] = NO;
}
}
}
}
これだけだとただの列挙になってしまいます
最小値だけをだすにはどうしたらいいでしょうか?

61 名前:デフォルトの名無しさん mailto:sage [2007/11/09(金) 19:05:00 ]
>>54>>55
ありがとうございます。
ちょっと詳しくしらべてみます。

62 名前:デフォルトの名無しさん mailto:sage [2007/11/10(土) 00:00:54 ]
struct Point {
int *x;
int y;
};
にして
p = (struct Point *)malloc( sizeof(struct Point) *10 );
p->x=(int *)malloc(sizeof(int)*10);
とメモリを確保したら
p[0〜9].x[0〜9] のメモリが確保されているということですよね。

p[1].x = 10;
とやったらxに10が入ると思ったのですが入らないのはなんでですか?

63 名前:デフォルトの名無しさん mailto:sage [2007/11/10(土) 00:03:00 ]
逆ピラミッドを描きたいのですが、どうしてもできません

#include <stdio.h>

int main(void)
{
int a,i,j;

printf("何段ですか? ");
scanf("%d",&a);

for(i=1;i<=a;i++){
for(j=1;j<=i-1;j++)

putchar(' ');

for(j=1;ここの部分がわかりません;j++)

putchar('*');

putchar('\n');

}
return(0);
}

助言をお願いします


64 名前:デフォルトの名無しさん mailto:sage [2007/11/10(土) 00:03:44 ]
62はわかりました
p[1].x[1] = 10;
こう入れないとだめなんですね

んで、 p[0].x[0] = 10;
だと表示ができるのですが
p[1].x[1] = 10;
だとエラーが出てしまいます。なんででしょうか

65 名前:デフォルトの名無しさん [2007/11/10(土) 00:21:11 ]
>>62,64
p = (struct Point *)malloc( sizeof(struct Point) *10 );
ここでp10個分、p[10]が確保されてるので
for(i = 0;i < 10;i++) p[i]->x = (int *)malloc(sizeof(int)*10);
で各xには別のx[10]分を確保

66 名前:デフォルトの名無しさん mailto:sage [2007/11/10(土) 00:22:29 ]
>>64
もし>>62の通りのプログラムなら、p[0]のxしか確保されてない
p->x=(int *)malloc(sizeof(int)*10); //p->xはp[0].xと同義

全てのpについてxを確保するなら以下のように繰り返しを使う
for(i=0; i<10; ++i){
p[i].x=(int *)malloc(sizeof(int)*10);
}

67 名前:デフォルトの名無しさん mailto:sage [2007/11/10(土) 00:23:47 ]
プログラムのことではないのですが、お尋ねしたいことがあります。
このたび仕事でC言語のソース解析を行うことになったのですが、コードリーディングのために便利なツールなどは無いでしょうか?
コード中の関数や構造体をダブルクリックすると、定義してあるソースまでジャンプしてくれたりしたら助かるのですが


よろしくお願いいたします

68 名前:デフォルトの名無しさん mailto:sage [2007/11/10(土) 00:24:10 ]
つまり
p[0].x[0〜9]が確保されていて
p[1].xは確保されていなかったわけですね。

ありがとうございます。頭がスッキリニッコリ
ということは解放するときは
for(int i=0;i<10;i++)
free(p[i].x);
free( p );
こういう風にせんといかんわけですね。

69 名前:デフォルトの名無しさん mailto:sage [2007/11/10(土) 00:26:36 ]
>>67
VisualStudioは、右クリックから定義へ移動って機能があるけど、Cでちゃんと動くかはわからない。



70 名前:デフォルトの名無しさん mailto:sage [2007/11/10(土) 00:29:10 ]
>>69
それなりに動く。
たまにどのシンボルか選べってなることもあるけど。

71 名前:デフォルトの名無しさん mailto:sage [2007/11/10(土) 00:30:21 ]
>>68
doxygenというのがあるよ
ttp://www.fides.dti.ne.jp/~oka-t/doxygen.html#sample
こんな感じでクラスや関数間の関係を可視化してくれる。

導入方法はここから
ttp://skazami.web.infoseek.co.jp/tools/Graphviz_Doxygen.htm


72 名前:デフォルトの名無しさん mailto:sage [2007/11/10(土) 00:30:59 ]
>>71のは>>67へ向けたもの

73 名前:デフォルトの名無しさん mailto:sage [2007/11/10(土) 00:59:10 ]
構造体に不定の配列を定義して、後で配列の最大値を設定するにはどうしたらよいでしょうか?
例えば…

struct{
foo[]
};

で、配列の使用時に

foo[bar]; (barは最大値)

という風にしたいのですが…

それとも構造体の定義時にあらかじめ余裕をもって配列を定義してしまう方がいいですか?

74 名前:デフォルトの名無しさん mailto:sage [2007/11/10(土) 01:15:34 ]
malloc。
良く分からないなら、あらかじめ定義した方が良いだろうね。

75 名前:デフォルトの名無しさん [2007/11/10(土) 01:23:53 ]
>>67
秀丸エディタにそういう機能あるよ。

76 名前:デフォルトの名無しさん mailto:sage [2007/11/10(土) 01:48:32 ]
>>74
ありがとうございます。

正直よくわからないので、助言どおり余裕を持って最初に定義してしまうことにします…すんません。

77 名前:デフォルトの名無しさん mailto:sage [2007/11/10(土) 05:16:10 ]
>>63
for(i = a;i >= 1;i--){
for(j = a - i;j > 0;j--) putchar(' ');
for(j = i * 2 - 1;j > 0;j--) putchar('*');
putchar('\n');
}
最初のをfor(i=1;i <= a;i++)で上下反転。


78 名前:デフォルトの名無しさん [2007/11/10(土) 10:33:24 ]
こんな図形をFor文で作れといわれたんですが・・
まったくワカリマセン(´・ω・`)・・どなたか助けてください
↓こんなの
***
**
*

79 名前:デフォルトの名無しさん mailto:sage [2007/11/10(土) 10:39:04 ]
>>78
宿題スレ池

#include <stdio.h>
#define N 3
int main()
{
char i, j;
for (i = 0; i < N; i++) {
for(j = N; j > i; j--) {
printf("*");
}
printf("\n");
}
return 0;
}



80 名前:78 [2007/11/10(土) 10:43:36 ]
>79さん
ありがとうございます

そうさせていただきます・・w

81 名前:デフォルトの名無しさん [2007/11/10(土) 11:47:01 ]
質問です。
今C言語の勉強をしていて、Cpadというエディターで書いたあとにコンパイルして
実行ボタンを押して実行しています。
コマンドプロンプトが表示されて、処理が実行されますが一回で終わってしまいます。
例えば「ある数をscanfして、それに2を加えた数をprintfする」というプログラムのとき
結果が出力されたあとに、またscanfに戻るって何度もプログラムを続けることってできないですか?
説明下手ですが、宜しくお願いします。

82 名前:デフォルトの名無しさん mailto:sage [2007/11/10(土) 11:49:57 ]
>>81
for(;;) {
  scanf(・・・);
  printf(・・・);
}


83 名前:デフォルトの名無しさん mailto:sage [2007/11/10(土) 12:02:25 ]
>>82
ありがとうございます。それで指定した数までは終了しないようになりました。


#include <stdio.h>
int main(void)
{
int i, j,a;
printf("数を入力して\n");
for (i = 0; i < 10; i++) {

scanf("%d",&j);
a=5+j;
printf("%d\n",&j);
}
return 0;
}


何入力しても結果が3928になるのはなぜなんだろう…

84 名前:デフォルトの名無しさん mailto:sage [2007/11/10(土) 12:04:31 ]
>>83
a の値を表示させてないからじゃないかな

85 名前:デフォルトの名無しさん mailto:sage [2007/11/10(土) 12:04:37 ]
> printf("%d\n",&j);

86 名前:デフォルトの名無しさん mailto:sage [2007/11/10(土) 12:08:30 ]
>>84->>85
迅速なレスありがとうございます。
間違っていました…。
でも今度は結果が3926が出力されるようになりました。
今日手探りで色々入れたので、もしかしたら環境の問題なのかもしれません。
ちょっと色々試してみます。ありがとうございました。


87 名前:デフォルトの名無しさん mailto:sage [2007/11/10(土) 12:10:42 ]
>>86
printf("%d\n", a); // & はいらない

88 名前:デフォルトの名無しさん mailto:sage [2007/11/10(土) 12:32:05 ]
struct RGB{
int r,g,b;
}

という構造体を

struct RGB *color;
color = (struct RGB *)malloc( sizeof(struct RGB) *10 );
と10個作って、各要素を足して4で割るということを続けていきたいのですが

(color[0]+color[1])/4
という感じに、構造体同士を足したりできるのでしょうか?


89 名前:デフォルトの名無しさん mailto:sage [2007/11/10(土) 12:36:29 ]
>>88
ムリ。



90 名前:デフォルトの名無しさん mailto:sage [2007/11/10(土) 12:41:57 ]
それだと
(color[0].r+color[1].r)/4
(color[0].g+color[1].g)/4
(color[0].b+color[1].b)/4
としないといかんわけですか。


91 名前:63 mailto:sage [2007/11/10(土) 13:09:39 ]
>>77
お答え頂ありがとうございました。
ずっと悩んでいたので、やっとスッキリすることができました。

92 名前:デフォルトの名無しさん mailto:sage [2007/11/10(土) 13:32:08 ]
再帰を習ったのですが理解できなくて、自分なりに、ネットとかで調べて、
再帰の概念は何となく分かったのですが、いざプログラムとなると…。
例えば、構造体を
struct node{
int a;
struct node *r;
struct node *l;
};
と定義し、
引数を二分探索木の根のアドレスとし、二分探索木の最小の値を持つ節点の
アドレスを返す関数minを作成。
1 struct node *min(struct node *t){
2 struct node *m = (struct node *)NULL;
3 if(t != (struct node *)NULL){
4 if(t->l == (struct node *)NULL)
5 m = t;
6 else
7 m = min(t->l);
8 }
9 return m;
10 }
と書いてあるのですが、どういう手順で実行されるのかと、7行目で、
なぜ変数に関数を代入してるのかも意味が解りません。

93 名前:デフォルトの名無しさん mailto:sage [2007/11/10(土) 13:47:26 ]
関数を代入してるんじゃない
関数を実行した戻り値を代入しているんだ

94 名前:92 mailto:sage [2007/11/10(土) 14:28:06 ]
>>93
レスありがとうございます。
関数を代入しているわけではなく、関数の戻り値を代入しているのですね。
なぜ、戻り値を代入しているのですか?

3行目は、二分探索木の有無の判定で、無い場合は、そのままNULLを
返して終了。
4〜5行目は、左部分木が無ければ、根が最小値なので、最小値の節点の
アドレスを入れる変数であるmに根のアドレスであるtを代入して、
それを返して終了。
なので、7行目以外は解るのですが、7行目はどういう処理をしてる
のですかね?

95 名前:デフォルトの名無しさん mailto:sage [2007/11/10(土) 14:35:53 ]
>>94
tがNULL→NULLを返す
t->lがNULL→tが最小なのでtを返す
それ以外→t->lから始まる二分木で最小の物を返す

ok?

96 名前:デフォルトの名無しさん mailto:sage [2007/11/10(土) 14:42:11 ]
      ○
    ○┘└○
   ○┘○┘└○
  ○┘  ・・・┘└・・・
 ○┘

97 名前:92 mailto:sage [2007/11/10(土) 15:24:02 ]
>>95
はい、そこまでは解っています。どういう処理と言うか、tがNULLでなく、
t->lもNULLでない場合にどういう手順で動いてるかが解らなくて。

tがNULLでなく、t->lもNULLでない場合を考えたとして、
>>96さんの図で言えば、一番左下に位置している○が最小ですよね。
そして、一番左下の○まで来て、さらに再帰呼び出しをすると、
3行目のif(t != (struct node *)NULL)で条件に一致せずに、
9行目のreturn m;に進んで、ここで、どうなるんですか?
2行目でstruct node *m = (struct node *)NULL;としているので、
戻り値は、このアドレスになって、7行目のm = min(t->l);で、mに
代入しても、最小値のアドレスになりませんよね…

98 名前:デフォルトの名無しさん mailto:sage [2007/11/10(土) 15:44:58 ]
>>97
if(t->l == (struct node *)NULL)
に引っかかって
m = min(t->l);
が実行されずに
m=t
が実行されるので
if(t != (struct node *)NULL){
が偽になるのは再帰ではなく外から呼び出した場合だけ

99 名前:92 mailto:sage [2007/11/10(土) 16:00:46 ]
>>98
確かに一番左下を再帰呼び出しした時に、
if(t->l == (struct node *)NULL)にひっかかるので、
一番左下の○まで来て、さらに再帰呼び出しされる事は、ないですね。
となると、
if(t->l == (struct node *)NULL)
に引っかかって
m=t
が実行されて、
次は
return m;
ですよね?
このreturn m;で、メイン関数に返されて終了ってことですかね?
それだと、
m = min(t->l);
じゃなくて、
min(t->l);
で十分じゃないですか?
何のために、m = min(t->l);としているのですか?



100 名前:デフォルトの名無しさん mailto:sage [2007/11/10(土) 16:19:20 ]
自分で考えてみたんですがちょっと分からないので
教えてください。

学校でユークリッドの互除法によって最大公約数を出すプログラムを
作ったんですが、これは2つの数の最大公約数を求めるものですよね。
もし3つとか6つとかの数の最大公約数を求めるんだったらどうプログラムするのが
一番なのでしょうか?ユークリッドを工夫すれば出来るでしょうか。

101 名前:デフォルトの名無しさん mailto:sage [2007/11/10(土) 16:22:55 ]
>>99
メイン関数に返るのではなく呼び出した関数の呼び出した位置に返るのだよ
つまりmin(t->l)が実行されたあとにその戻り値がmに代入されてreturn mで戻り値となりそれが更に・・・
てな具合で呼び出した順を逆にたどるために各階で戻り値を返す必要があるわけだ

102 名前:デフォルトの名無しさん mailto:sage [2007/11/10(土) 16:26:51 ]
>>100
数学板の方が適切だと思われ。

103 名前:デフォルトの名無しさん mailto:sage [2007/11/10(土) 16:40:34 ]
>>100
まさかとは思うけど、複数の数の最大公約数の求め方を知らないという話じゃないよね?
ユークリッド互除法より最適なアルゴリズムはないのか、という話だよね?

104 名前:デフォルトの名無しさん mailto:sage [2007/11/10(土) 16:58:45 ]
>>100
int gcd(int a, int b); // 引数で与えられた2数の最大公約数を返す関数
があるとして
gcd(a, gcd(b, c));
なら…

105 名前:92 mailto:sage [2007/11/10(土) 17:34:55 ]
>>101
なるほど、だからm = min(t->l);と言う様にmに代入しているのですね。
完全に理解できました。

アドバイスして下さった方、本当にありがとうございました。

106 名前:デフォルトの名無しさん [2007/11/10(土) 21:13:15 ]
等比数列の和の求め方のソースコードを載せてください。(初項a,公比r,項数nとする)

107 名前:デフォルトの名無しさん mailto:sage [2007/11/10(土) 21:20:43 ]
それは宿題スレ向き

分投げじゃなくて、少しは考えよう

108 名前:デフォルトの名無しさん mailto:sage [2007/11/10(土) 21:21:23 ]
>>106
丸投げは宿題スレへ
pc11.2ch.net/test/read.cgi/tech/1194262698/l50

109 名前:デフォルトの名無しさん mailto:sage [2007/11/10(土) 21:52:01 ]
void foo( double* yuv, double* s1, double* w1, unsigned int size, unsigned int inc )
{
int i;

for ( i = 0 ; i < size / 2 ; i++ ) {
double d0 = *yuv;
double d1 = yuv[inc];
*s1 = ( d0 + d1 ) * sqrt( 2 ) / 2;


すいません、初歩的な質問なのですが
double yuvは1次元のポインタなのですが
double d0 = *yuv;
double d1 = yuv[inc];
のd0が何をやっているのか教えてください。
1次元の配列で *yuvとしたときに、どこを指しているのかわからなくて



110 名前:デフォルトの名無しさん [2007/11/10(土) 22:13:24 ]
等比数列の初項a,公比r、項数nをキーボードから入力して、
それらを画面に表示して最後にそれらの総和を表示する。
ただしa,rは実数値とする。

111 名前:デフォルトの名無しさん mailto:sage [2007/11/10(土) 22:17:07 ]
>>109
*yuv は yuv[0] と同じ意味



112 名前:デフォルトの名無しさん mailto:sage [2007/11/10(土) 22:22:48 ]
yuv[0] = *(yuv + 0) = *yuv

113 名前:デフォルトの名無しさん mailto:sage [2007/11/10(土) 22:31:13 ]
>>111-112
ありがとうございます。理解できました。

114 名前:デフォルトの名無しさん mailto:sage [2007/11/10(土) 23:54:23 ]
2^(3/2)って関数でかくとどうなりますか?
2^(1/2)や3^(1/2)なら sqrt(2.0)やsqrt(3.0)だとわかるのですが。

pow( sqrt(2.0),3 )になるのでしょうか?

115 名前:デフォルトの名無しさん mailto:sage [2007/11/10(土) 23:55:49 ]
pow( 2.0, 1.5 );

116 名前:デフォルトの名無しさん mailto:sage [2007/11/10(土) 23:55:52 ]
素直にpow(2, 3 / 2)でよろしかろ。

117 名前:デフォルトの名無しさん mailto:sage [2007/11/10(土) 23:56:53 ]
そのままで良かったんですねw
ありがとございます

118 名前:デフォルトの名無しさん mailto:sage [2007/11/10(土) 23:56:54 ]
いいえ

119 名前:デフォルトの名無しさん mailto:sage [2007/11/10(土) 23:57:15 ]
おっといけねぇ。pow(2, 3. / 2)だね。



120 名前:デフォルトの名無しさん [2007/11/11(日) 00:19:30 ]
FFTで振幅が正確に得られないときはどうするの?
numerical recipeのコード使ってるんだけど、
同じ振幅で別周波数の時系列入れてもスペクトルの
大きさが違うんです。
周波数の適当なビンで積分しても違いがあるどうしてかな。
コードはいじってないよ。

121 名前:デフォルトの名無しさん mailto:sage [2007/11/11(日) 00:28:07 ]
>>120
入力波形を正弦波にしてサンプリング周波数の 1/(2^n) にしてもそうなる?

122 名前:デフォルトの名無しさん [2007/11/11(日) 01:55:42 ]
超初心者な質問だけど、よろしく。

俺は情報科の1年なんだけど、
大学でやってるCを自宅でもやりたいと思ってるんだけど、
そういうのを自宅でやるのはどうすればいいの?
できれば無料でやりたいんだけど、
そんなソフトをインストールすればいいのか教えてください。

123 名前:デフォルトの名無しさん mailto:sage [2007/11/11(日) 01:58:27 ]
学校で使ってるOSとかコンパイラは何?

124 名前:122 [2007/11/11(日) 02:02:02 ]
>>123
OSはXPです。
コンパイラ・・・ってなんだろ?
emacsとかktermとか使ってますけど。

125 名前:デフォルトの名無しさん mailto:sage [2007/11/11(日) 02:05:55 ]
コンパイラはソースコードから実行ファイルを作るプログラム

126 名前:デフォルトの名無しさん mailto:sage [2007/11/11(日) 02:07:08 ]
そのレベルで環境構築は無理だよ。素直に学校の先生に聞いてみよう。

127 名前:デフォルトの名無しさん mailto:sage [2007/11/11(日) 02:08:38 ]
>>124
gccは使ってる?

128 名前:122 [2007/11/11(日) 02:28:58 ]
すみません、やっぱり今の俺には
自宅で環境整えるのは難しいみたいですね・・・。
今度聞いてみます。
こんな時間にありがとうございました。

129 名前:デフォルトの名無しさん mailto:sage [2007/11/11(日) 02:37:20 ]
いや、やること自体は難しくないよ。先生に聞けば普通に解決すると思う。



130 名前:デフォルトの名無しさん mailto:sage [2007/11/11(日) 02:41:18 ]
>>128
学校と同じものを揃えたいんでしょ?
とりあえず学校で何を使ってるかを調べるだけでおk

131 名前:デフォルトの名無しさん [2007/11/11(日) 03:25:58 ]
これってどこがダメなんですかね?
0が出力されてしまいます…
初心者ですみませんがよろしくです.

#include <stdio.h>

main()
{
 int i, k, sum;

 sum = 0;

 do{
  printf("正の整数kを入力して下さい:");
  scanf("%d", &k);
 }while(!(k>0));

 for(i = 1; i > k; i++){
  sum += i*i*i;
 }

 printf("kまでの自然数の3乗の和は%d", sum);
}

132 名前:デフォルトの名無しさん mailto:sage [2007/11/11(日) 03:28:54 ]
>>131
i に注目。

133 名前:デフォルトの名無しさん [2007/11/11(日) 03:34:37 ]
>>132
レスありがとうございます.
でも,ちょっとわかんないです^^

134 名前:デフォルトの名無しさん mailto:sage [2007/11/11(日) 03:37:53 ]
>>133
そういうときには、取り敢えずsumを更新した次の行に(その下にある)printf()の行をコピーしてみよう。
それを実行しても未だ問題点が見つからないようなら、きっと注意力不足か適正不足だと思うよ。

135 名前:デフォルトの名無しさん mailto:sage [2007/11/11(日) 03:58:31 ]
>>131
不等号の向きが逆。

136 名前:デフォルトの名無しさん [2007/11/11(日) 04:03:45 ]
>>134
レスありがとうございます.
sum += i*i*i;
の下にprintfを入れてみたけど,そこの分のprintfが実行されてなさそう…
ってことは,for自体が実行されてないんですかね?

137 名前:デフォルトの名無しさん [2007/11/11(日) 04:24:04 ]
若干スレ違いかもしれないですが・・・

Borland C++ Compiler 5.5
Borland Turbo Debugger 5.5
BCC Developer
を使ってC言語を勉強してるのですが、最近BCC Developerがよくバグります。
プログラムはちゃんと書けてるのに、いざコマンドプロンプトを開くと「問題が発生したため〜〜を終了します。」
と出てきて、そこで終わってしまいます。
こういうのって開発環境を変えた方が良いんでしょうか??

138 名前:デフォルトの名無しさん mailto:sage [2007/11/11(日) 05:05:52 ]
コマンドプロンプトを開いて何をしたらそのエラーが出る?
コマンドプロンプトを開くだけで出るならBCCは関係ないが。

139 名前:137 [2007/11/11(日) 05:36:06 ]
>>138
レスありがとうございます。
コマンドプロンプト開くだけなら全然大丈夫なんですが
長時間(っていっても2時間とかそんなもん)プログミングしてるとよくエラーになります。
同じプログラムでもちゃんと出力できるときとそうでないときがあっていまいち原因が分からないです。



140 名前:137 [2007/11/11(日) 06:21:33 ]
ごめんなさい。自己解決できました。


141 名前:デフォルトの名無しさん mailto:sage [2007/11/11(日) 10:01:08 ]
>>136
そのとーり。>>135も指摘しているが、for文の条件判断のところの意味をよく理解しておくこと。

142 名前:デフォルトの名無しさん [2007/11/11(日) 10:03:44 ]
>>121

>入力波形を正弦波にしてサンプリング周波数の 1/(2^n) にしてもそうなる?

はい。純粋に周波数がf,f1,f2...の正弦波をFFTにかけています。
規格化の方も分かってます。


143 名前:86 [2007/11/11(日) 11:13:09 ]
昨日質問した者ですが、やはり足し算などをすると出力がおかしいみたいです。
このようになるのですが間違っている部分ありますか?
www.imgup.org/iup500370.png
宜しくお願いします。

144 名前:デフォルトの名無しさん mailto:sage [2007/11/11(日) 11:17:49 ]
>>143
printf("%d\n", d); // & いらない

145 名前:86 mailto:sage [2007/11/11(日) 11:21:45 ]
>>144
昨日も同じレスもらってたのに気付きませんでした…。
今やったらできました。「&」でしたか…
ありがとうございました!!

146 名前:デフォルトの名無しさん mailto:sage [2007/11/11(日) 11:44:53 ]
市ねよ &d

147 名前:デフォルトの名無しさん mailto:sage [2007/11/11(日) 11:53:20 ]
>>135 >>141
レスありがとうございました.
forの条件判断は,反復の終了条件ではなく,継続条件なのですね.
つまり,その条件が偽になったら終了と.
つまらない質問に答えていただき,ありがとうございました.

148 名前:デフォルトの名無しさん mailto:sage [2007/11/11(日) 13:19:24 ]
ちょっと質問させてください。3つの数の最大公約数を
求めるプログラムしてたんですが、下記のこれでもいけますかね?
#include<stdio.h>
#include<stdlib.h>
#define n 3
int main(void
{
int kazu[n];
int i=0, c,num;
while(i < n){
printf("入力 %d < ", i+1);
scanf("%d", &kazu[i]);
i++;
}
for(i=1; i< n; i++){
while(kazu[i] != 0){
c = kazu[i];
kazu[i] = kazu[0] % kazu[i];
kazu[0] = c;
}
}
printf("gcd = %d\n",kazu[0]);

return 0;
}

149 名前:デフォルトの名無しさん mailto:sage [2007/11/11(日) 15:18:26 ]
被って申し訳ありませんが質問させてください

#include <stdio.h>
#define INPUT_CNT 3
int main(void)
{
int num[INPUT_CNT];
int cnt;
for(cnt = 0 ; cnt < INPUT_CNT ; cnt++)
{
printf("Input number%d : ",cnt+1);
scanf("%d",&num[cnt]);
}
printf("(");
for(cnt = 0 ; cnt < INPUT_CNT ; cnt++)
{
printf("%d +",num[cnt]);
}
printf(")");
printf("\n");
return 0;
}
出力結果
Input number : 10
Input number : 20
Input number : 30
(102030)
↑102030の間に+を表示させるにはどうしたら良いですか?



150 名前:デフォルトの名無しさん mailto:sage [2007/11/11(日) 15:23:40 ]
初歩的な質問ですみません。
printfの変換仕様のフィールド幅の部分をマクロで
置き換えたいんですが、方法はありますでしょうか?
printf("値: %05d\n", number);
を、
define FIELD 5
printf("値: %0FIELDd\n", number);
といった感じに。(↑上手く動作しません。)↓はコンパイルできませんでした。
printf("値: %0"FIELD"d\n", number);

ちなみに、コンパイラはgccです。よろしくおねがいします。

151 名前:デフォルトの名無しさん mailto:sage [2007/11/11(日) 15:26:59 ]
>>149
僕がやったところ、下記のような出力結果になってますよ。

Input number1 : 10
Input number2 : 20
Input number3 : 30
(10 +20 +30 +)







[ 続きを読む ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<195KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef