C言語なら俺に聞け(入門編)Part 64
レス数が1000を超えています。これ以上書き込みはできません。
★前スレ
C言語なら俺に聞け(入門編)Part 63
http://pc12.2ch.net/test/read.cgi/tech/1270909823/
★過去スレ
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++室 Ver.72【環境依存OK】
http://pc12.2ch.net/test/read.cgi/tech/1267775473/
とか
★教えて欲しいのではなく宿題を丸投げしたいだけなら
↓宿題スレ↓へ行ってください。
C/C++の宿題片付けます 135代目
http://pc12.2ch.net/test/read.cgi/tech/1269438098/
★C++言語についてはなるべく聞かないでください。C++対応明記スレへどうぞ
★分からない事をなるべく詳しく書いて下さい。
★ソースコードを晒すと答えやすくなるかもしれません。
# 抜粋/整形厳禁、コンパイラに渡したソースをそのまま貼ること
# サイズが大きい場合は宿題スレのアップローダ等を利用してください
★開発環境や動作環境も晒すと答えが早いかもしれません。
★質問者は最初にその質問をした時のレス番号を名前欄に書いて下さい。
0002デフォルトの名無しさん
2010/05/15(土) 00:27:45の>>976じゃ上手くいったのに、>>977で上手くいかないのは
何故でしょうか?
>>977で
実行するとアルファベット代入という表示がでてきて
Aと代入したら、数値を代入する間もなくA+10=Kとかいう
実行が勝手にされます。どうしてでしょうか?
0003デフォルトの名無しさん
2010/05/15(土) 01:23:401つめのscanf()に対する入力時に、
A\n
と入力すると、2文字分の入力となるので、2つめのscanf()は入力を求めずに返る。('\n'は改行)
その結果、
i = 'A';
input = '\n';
となる。ASCIIコードにおいて、
'\n' == 10
0004デフォルトの名無しさん
2010/05/15(土) 01:30:02書いてるやつは、入力と数値変換が一挙にできて簡単だろ程度のことしか考えてないんだろうけど
初心者、はまりまくりじゃん。
使いこなせばどうこう言う奴いるけど、労力かけて、scanf()の癖のある挙動をマスターしても、
初心者向けのテキストを卒業したら、そんなもんまず使わないしな。
0005デフォルトの名無しさん
2010/05/15(土) 15:44:120006デフォルトの名無しさん
2010/05/15(土) 16:16:30gcc -ansi -pedantic
0007デフォルトの名無しさん
2010/05/15(土) 16:20:300008デフォルトの名無しさん
2010/05/15(土) 16:40:06「はじめるの遅いね。バカは死ね」ってこと?
0009デフォルトの名無しさん
2010/05/15(土) 16:40:29gcc -pedantic test.c
gcc -std=c99 -pedantic -ansi test.c
ありがとうございました。
0010デフォルトの名無しさん
2010/05/15(土) 16:59:09人生豊かなヤツは趣味なんてたくさんある。
始める時期なんて関係ないよ。
0012デフォルトの名無しさん
2010/05/15(土) 17:07:470013デフォルトの名無しさん
2010/05/15(土) 17:39:08-std=c99 と -ansi を両方指定して意味があるのか
-ansi って -std=c89 の意味でしょ
0014デフォルトの名無しさん
2010/05/15(土) 17:42:190015デフォルトの名無しさん
2010/05/15(土) 21:04:02教えてエロいひと!
int x = a == b == c;
ってかくとまず(a == b)が評価されてその結果のboolが==cと評価されるようですね。
いっぽう
int x = a && b && c;って書くと
aがfalseならその時点で評価やめ。
っていう違いくらいですか?
0016デフォルトの名無しさん
2010/05/15(土) 21:04:52いまわかった。
0017デフォルトの名無しさん
2010/05/15(土) 21:47:110018デフォルトの名無しさん
2010/05/16(日) 00:00:370019デフォルトの名無しさん
2010/05/16(日) 01:43:08各教科の点数を入力して、各教科へのコメントと、全教科の合計と平均を出すプログラミングを作りたいです!
int a,b,c,d,e;
printf("英語の点数を入力してください\n");
scanf("%d",&a);
if(a==1)
printf("さすが\n");
else if(a<40);
printf("ひどい\n");
printf("数学の点数を入力してください\n");
scanf("%d",&b);
if(a==1)
printf("さすが\n");
else if(a<40);
printf("ひどい\n");
printf("国語の点数を入力してください\n");
scanf("%d",&c);
if(a==1)
printf("さすが\n");
else if(a<40);
printf("ひどい\n");
•
•
•色々省略
と長くなってしまうのですが、短くしたいのですがどうすればいいですか?
繰り返してる部分を一つもにできますか?
0020デフォルトの名無しさん
2010/05/16(日) 01:45:42配列を使う
0021デフォルトの名無しさん
2010/05/16(日) 01:46:38すいません、初心者なのでまったくわかりません
詳しくお願いします。
0022デフォルトの名無しさん
2010/05/16(日) 01:49:45>int a,b,c,d,e;
>printf("英語の点数を入力してください\n");
>scanf("%d",&a);
>if(a==100)
>printf("さすが\n");
>else if(a<40);
>printf("ひどい\n");
>printf("数学の点数を入力してください\n");
>scanf("%d",&b);
>if(d==100)
>printf("さすが\n");
>else if(d<40);
>printf("ひどい\n");
>printf("国語の点数を入力してください\n");
>scanf("%d",&c);
>if(c==100)
>printf("さすが\n");
>else if(c<40);
>printf("ひどい\n");
>•
>•
>•色々省略
0023デフォルトの名無しさん
2010/05/16(日) 01:55:32最近、各教科の点数をキーボードから入力して、何か計算する
プログラムの質問が多いけど、なんなのこれ
テーマからして学校の授業かなにかなのかね?
そうなら学校で聞け
そうでないなら、こんな意味の無いプログラムやるな
0024デフォルトの名無しさん
2010/05/16(日) 01:56:02#include<stdio.h>
#define SUBJECT_NUM 5
int main(void)
{
int i, total=0;
double average;
int score[SUBJECT_NUM];
char *subject_name[SUBJECT_NUM]={"英語", "数学", "国語", "理科", "社会"};
for(i=0;i<SUBJECT_NUM;i++)
{
printf("%sの点数を入力してください\n", subject_name[i]);
scanf("%d", &score[i]);
if(score[i]==100) printf("さすが\n");
else if(score[i]<40) printf("ひどい\n");
}
for(i=0;i<SUBJECT_NUM;i++) total+=score[i];
average=(double)total/SUBJECT_NUM;
printf("合計 %d 平均 %.1f\n", total, average);
return 0;
}
0025デフォルトの名無しさん
2010/05/16(日) 03:03:43俺の場合は、学校課題ではないし、習ってもいない。
ただたんに練習だ!
意味がないからやめろ?はぁ?
お前にとっては意味がないかもしれないが、俺にしてみたら、プログラミングを覚える糧になるから必要なんだよ!お前にとっては意味がなくても、他の人には意味をなすものが世の中には沢山あるんだよ!
0026デフォルトの名無しさん
2010/05/16(日) 03:05:22ゴミレスしかできない馬鹿はほっとけばいいよ
0027デフォルトの名無しさん
2010/05/16(日) 03:09:040028デフォルトの名無しさん
2010/05/16(日) 03:17:500029デフォルトの名無しさん
2010/05/16(日) 10:56:55int main(void)
{
int a;
int b;
printf("問題数を入力してください:"); scanf("%d", &a);
printf("正解数を入力してください:"); scanf("%d", &b);
printf("問題数%d 正解数%d 正解率%.2f\n", a , b , (double)(b/a) * 100);
return(0);
}
正解率を求めたいんですけど、0%になって出来ません。
どこが間違っていますか?
問題数は121
正解数は93です。
0030デフォルトの名無しさん
2010/05/16(日) 10:58:23scanf("%d%*c", &b);
0031デフォルトの名無しさん
2010/05/16(日) 11:02:22(double)b / a * 100
0032デフォルトの名無しさん
2010/05/16(日) 11:06:13てかデバッガの使い方調べろよ。計算結果を段階的に表示すればどこでおかしくなってるか分かるだろ。
0033デフォルトの名無しさん
2010/05/16(日) 11:09:35アホだw
0034デフォルトの名無しさん
2010/05/16(日) 11:10:46正解率出ました ()付けちゃ駄目だったんですね・・
0035デフォルトの名無しさん
2010/05/16(日) 11:20:50((double)b/a) * 100とか。
>>33
駄レスするよりはアホじゃないと思うけどなぁ
0036デフォルトの名無しさん
2010/05/16(日) 11:21:480037デフォルトの名無しさん
2010/05/16(日) 11:53:20>>29の質問に対して>>30って答えるヤツがアホじゃないのかよw
0038デフォルトの名無しさん
2010/05/16(日) 12:11:320039デフォルトの名無しさん
2010/05/16(日) 12:20:39やってることはあるていどわかるんですが、解説を付けてもらえませんでしょうか?
0040デフォルトの名無しさん
2010/05/16(日) 12:22:34>>30みたいなアホになるぞw
0041デフォルトの名無しさん
2010/05/16(日) 12:27:46これはひどい
0042デフォルトの名無しさん
2010/05/16(日) 12:30:02#include <stdio.h>
int main(void)
{
float a;
float b;
printf("問題数を入力してください:"); scanf("%f", &a);
printf("正解数を入力してください:"); scanf("%f", &b);
printf("問題数%.0f 正解数%.0f 正解率%.2f\n", a , b , b/a * 100);
return(0);
}
0043デフォルトの名無しさん
2010/05/16(日) 12:33:080044デフォルトの名無しさん
2010/05/16(日) 12:36:41本は買ってあるんですが、
for文の使い方が、いまいちわかりません
int i;
for(i=1;i<6;i++)だと1から5までですけどこれを数字じゃなくて、5教科にしたいんです。英語から社会までみたいに。この場合はどのようにやれば良いか、解説付きで教えてください、お願いします。
0045デフォルトの名無しさん
2010/05/16(日) 12:41:54自然に出来るようになってるだろ
0046デフォルトの名無しさん
2010/05/16(日) 12:44:09変換指定で小数点以下だけを表示したい場合ってどうするんですか?
全然考えても分かりません・・・
0047デフォルトの名無しさん
2010/05/16(日) 12:56:47printf("%0.4f",37.7367);
わかんね
004830
2010/05/16(日) 13:01:22printf("%f",a-(int)a);
0049デフォルトの名無しさん
2010/05/16(日) 13:21:000は表示していいの?
0050デフォルトの名無しさん
2010/05/16(日) 13:51:17それよりも駄レスをするほうがアホってことなんじゃないかと
0051デフォルトの名無しさん
2010/05/16(日) 13:55:26明らかに無駄かつ、問題の答えになってないものをアホだと指摘するのは駄レスじゃない。
どちらかと言えば>>35の後半部分の方がよっぽど駄レス。
ついでに言えば結合順序がわかってないと思われる前半の括弧も無駄w
0052デフォルトの名無しさん
2010/05/16(日) 13:55:50無理です。enumを使っても分かりにくくなるだけ。
それから、初心者だから分からないということですよね。
学校の課題であるなら、今の授業進度についていけていないということになります。
今までの課題および授業のテキストを復習してください。
学校の課題ではないのなら、もう少し簡単なところを勉強してみてはいかがですか。
0053デフォルトの名無しさん
2010/05/16(日) 13:57:46彼は乗算部の括弧を外すことに抵抗があるのかと思ったので、
該当部の括弧を外す必要は必ずしもなく、キャスト対象を変更すればよいという意味のレスをしたつもりだよ
0054デフォルトの名無しさん
2010/05/16(日) 13:59:220055デフォルトの名無しさん
2010/05/16(日) 14:00:190056デフォルトの名無しさん
2010/05/16(日) 14:01:230は表示しません
0057デフォルトの名無しさん
2010/05/16(日) 14:01:460058デフォルトの名無しさん
2010/05/16(日) 14:06:21それだと変換指定じゃ無理じゃないかな。
0059デフォルトの名無しさん
2010/05/16(日) 14:07:23いつもの人か。夜まで粘着する予定ですか?
0060デフォルトの名無しさん
2010/05/16(日) 14:09:030061デフォルトの名無しさん
2010/05/16(日) 14:11:400062デフォルトの名無しさん
2010/05/16(日) 14:14:290063デフォルトの名無しさん
2010/05/16(日) 14:16:06配列の各要素に点数を入力し、都度すごいとか評価をして、最後に平均を出しています。
0064デフォルトの名無しさん
2010/05/16(日) 14:17:44どの解説が欲しいのかわからないけど。とりあえず。
>char *subject_name[SUBJECT_NUM]={"英語", "数学", "国語", "理科", "社会"};
subject_name[0] に "英語"
subject_name[1] に "数学"
subject_name[2] に "国語"
subject_name[3] に "理科"
subject_name[4] に "社会" が入る。
>scanf("%d", &score[i]);
点数を入力。
この後のif文で、100なら"さすが"、40未満なら"ひどい"と表示。
0065デフォルトの名無しさん
2010/05/16(日) 14:18:47それぐらいはわかってます
0066デフォルトの名無しさん
2010/05/16(日) 14:22:4161です
ありがとうございます!
とてもわかりやすいです。モヤモヤがとれました!
65誰?
0067デフォルトの名無しさん
2010/05/16(日) 14:24:460068デフォルトの名無しさん
2010/05/16(日) 14:27:37わかりました
0069デフォルトの名無しさん
2010/05/16(日) 14:28:310070hello world
2010/05/16(日) 14:29:0966です
トリップってなんですか?
名前ですか?
68誰?
0071デフォルトの名無しさん
2010/05/16(日) 14:29:23それがわからないからモヤモヤなんだろ。
0072hello world
2010/05/16(日) 14:30:24charのあとの*っねなんですか?
0073デフォルトの名無しさん
2010/05/16(日) 14:32:30どんだけ悲惨な人生送ってきたんだろうな。
0074デフォルトの名無しさん
2010/05/16(日) 14:35:57ポインター型の宣言
char a; // char型の変数aの宣言
char *b; // charへのポインター型の変数bの宣言
char *c[]; // charへのポインターの配列cの宣言
0075hello world
2010/05/16(日) 14:43:37完全には理解できませんが*だけよ違いでこんなにも意味が違うんですね。
2ちゃんは、誰が誰に言っているかがわかりずらいですね
0076デフォルトの名無しさん
2010/05/16(日) 17:57:380077デフォルトの名無しさん
2010/05/16(日) 19:03:54char b[]="aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa";
char c[]="bbbbbbbbbbbbbbbbbbbbbbbbb";
unsigned short aa=hash(a);
unsigned short bb=hash(b);
unsigned short cc=hash(c);
任意の文字列に対応した数を(0〜0xFFFFの範囲で)得る関数 hash() を書け
例:
unsigned short hash(char* s)
{
unsigned short a=0;
int i=0;
while (s[i]!='\0') {
a+=(unsigned short)s[i];
i++;
}
return(a);
}
これだと hash("abc") と hash("aad")が同じ数になる。 なるべく数の重複は避けたい。
処理が高速で、かつ、数の重複が起きにくくなるように上記の関数を書き直せ
0078デフォルトの名無しさん
2010/05/16(日) 19:26:52#include <stdlib.h>
unsigned short hash(char* s)
{
unsigned short a=0;
int i=0;
unsigned seed=0;
srand(0);
while (s[i]!='\0') {
srand(rand(s[i]));
i++;
}
return(rand()/0xffff);
}
007978
2010/05/16(日) 19:27:570080デフォルトの名無しさん
2010/05/16(日) 21:04:51その hash() 関数だと、2つのスレッドで平行処理した場合に
エラーがでる可能性があるかもしれません。
hash()関数を1000回、2つのスレッドで平行に使用してみる
http://codepad.org/WHFeip2X
実行結果:
AAAのただしいハッシュ値=[18141]
BBBのただしいハッシュ値=[32333]
err:AAA=[27531]
err:AAA=[27531]
err:BBB=[15226]
err:AAA=[16181]
err:AAA=[27497]
err:BBB=[9702]
err:AAA=[3402]
err:BBB=[15226]
err:AAA=[16181]
err:BBB=[6886]
err:AAA=[28210]
err:BBB=[19267]
err:AAA=[25650]
008178
2010/05/16(日) 21:32:46こんな感じで。
pthread_mutex_t mtx = PTHREAD_MUTEX_INITIALIZER;
unsigned short hash(char* s)
{
unsigned short a=0;
int i=0;
unsigned seed=0;
int h = 0;
pthread_mutex_lock(&mtx);
srand(0);
while (s[i]!='\0') {
srand(rand()*s[i]);
i++;
}
h = rand()%0xffff;
pthread_mutex_unlock(&mtx);
return h;
}
008278
2010/05/16(日) 21:34:43srand(rand()*s[i]);
は
srand(rand()+s[i]);
の方が良いと思います。
前者だと、s[i]が0の場合、全ておなじになってしまうので。
0083デフォルトの名無しさん
2010/05/16(日) 21:55:08{
hash("AAA"); printf("%d\n",rand());
hash("AAA"); printf("%d\n",rand());
hash("AAA"); printf("%d\n",rand());
hash("BBB"); printf("%d\n",rand());
hash("BBB"); printf("%d\n",rand());
hash("BBB"); printf("%d\n",rand());
}
実行結果
828805346
828805346
828805346
746277705
746277705
746277705
ある文字列のハッシュ値を得た直後に rand() を呼び出すと、常に同じ乱数値が返ってくる。
という副作用が気になりました。
0084デフォルトの名無しさん
2010/05/16(日) 21:59:11という典型例
本人は自身満々ぽいけど
0085デフォルトの名無しさん
2010/05/16(日) 22:03:43乱数が欲しかったら、rand()の前に、現時刻で系列を初期化したら?
0086デフォルトの名無しさん
2010/05/16(日) 22:04:36あんまり >>78を真に受けちゃダメ
あれ、どうみても適当に乱数とか交えてゴチャゴチャ計算しただけだから
ハッシュの計算なら、暗号関連でいっぱい実装例があるから
そっちを参考にした方がいい(そのまま実装しなくて、参考にする程度で
いいと思うけど)
008778
2010/05/16(日) 22:12:32普通のハッシュ関数使えるなら、そっちの方がいいと思うよ。
0088デフォルトの名無しさん
2010/05/16(日) 22:17:37相手にするな
0089デフォルトの名無しさん
2010/05/16(日) 22:19:200090デフォルトの名無しさん
2010/05/16(日) 23:39:39とてもユニークだし、おもしろいアイディアだと思います。
ユニークな方法を試せば、多少の問題が現れるのは当然ですが、
問題があれば、そのつど修正してけばいいだけだと思います。プログラムは暫近的に書いていけばいいとストラウストラップも言ってた。
0091デフォルトの名無しさん
2010/05/16(日) 23:55:070092デフォルトの名無しさん
2010/05/17(月) 01:33:14やwwめwwろwww
0093デフォルトの名無しさん
2010/05/17(月) 07:18:050094デフォルトの名無しさん
2010/05/17(月) 21:21:09↓↓実行↓↓
10001
01010
00100
01010
10001
0095デフォルトの名無しさん
2010/05/17(月) 21:28:34int main(void)
{
int a[5][5] = {0}, i;
for(i=0; i<5; i++) a[i][i] = a[i][4-i] = 1;
return 0;
}
0096デフォルトの名無しさん
2010/05/17(月) 21:38:50{
for(int i=0; i<5; i++)
for(int j=0; i<5; i++)
a[i*5+j] = (i == 4-j || i == j) ? 1 : 0;
return 0;
}
0097デフォルトの名無しさん
2010/05/17(月) 21:40:23ひどすぎるw
0098デフォルトの名無しさん
2010/05/17(月) 22:31:52{0,0,1,0,0,},{0,1,0,1,0,},{1,0,0,0,1,},};
int main(){
for(;0;);
return 0;
}
0099デフォルトの名無しさん
2010/05/17(月) 22:38:10int *p = 1;
何が違うんですか?
0100デフォルトの名無しさん
2010/05/17(月) 22:42:05何も違わない。
ついでに書くと int * p = 1; も同じ。
0101デフォルトの名無しさん
2010/05/17(月) 22:53:22それは駄目なんです
0102デフォルトの名無しさん
2010/05/17(月) 22:55:17同じだよ。
蛇足だけど、
その場合、int型の*pではなく、int型へのポインタのpに1が入るから、
後々、恐らく不幸なことが起きるよ。
0104デフォルトの名無しさん
2010/05/17(月) 23:07:09ポインタに 1 を代入しているのが問題。
大抵の環境ではアドレス 1 には割り込みベクタテーブルがあり、OS によって
保護されていてアクセス違反となり、プログラムが異常終了する可能性が高い。
0105デフォルトの名無しさん
2010/05/18(火) 00:57:50> 大抵の環境ではアドレス 1 には割り込みベクタテーブルがあり
> 大抵の環境ではアドレス 1 には割り込みベクタテーブルがあり
0106デフォルトの名無しさん
2010/05/18(火) 00:59:55ユーザプログラムのアドレス1に割り込みテーブルは無いだろうJK
あと、アドレス1にintでアクセスすると境界エラーになる可能性が高い。
x86は、ならないけど
0107デフォルトの名無しさん
2010/05/18(火) 01:00:03#include <stdio.h>
int main(void)
{
int i,j,n;
printf("奇数を入力:");
scanf("%d",&n);
for (i=0;i<n;i++)
{
for (j=0;j<n;j++)printf((((i-j)==0)||((i+j)==(n-1)))?"1":"0");
printf("\n");
}
return 0;
}
0108デフォルトの名無しさん
2010/05/18(火) 01:04:25int main(void)
{
for(int i=0; i<1; i++){
puts("10001");
puts("01010");
puts("00100");
puts("01010");
puts("10001");
}
return 0;
}
0109デフォルトの名無しさん
2010/05/18(火) 01:06:400110デフォルトの名無しさん
2010/05/18(火) 01:13:03int main(void)
{
int a[5][5];
int *p = a;
int i;
for(i = 18157905; i > 0; i >>=2) *p++ = n%2;
return 0;
}
0111デフォルトの名無しさん
2010/05/18(火) 01:16:01int main(void)
{
for(int i=0; i<1; i++){
int array[5][5] = {1,0,0,0,1,0,1,0,1,0,0,0,1,0,0,0,1,0,1,0,1,0,0,0,1};
puts("10001");
puts("01010");
puts("00100");
puts("01010");
puts("10001");
}
return 0;
}
0112デフォルトの名無しさん
2010/05/18(火) 01:17:45ひどすぎるw
0113デフォルトの名無しさん
2010/05/18(火) 01:23:42for(i = 18157905; i > 0; i /=2) *p++ = n%2;
若しくは
for(i = 18157905; i > 0; i >>=1) *p++ = n%2;
だ。
0114デフォルトの名無しさん
2010/05/18(火) 01:25:010115デフォルトの名無しさん
2010/05/18(火) 02:40:070116デフォルトの名無しさん
2010/05/18(火) 04:06:320117デフォルトの名無しさん
2010/05/18(火) 04:55:090118デフォルトの名無しさん
2010/05/18(火) 04:57:130119デフォルトの名無しさん
2010/05/18(火) 10:56:160120デフォルトの名無しさん
2010/05/18(火) 13:38:200121デフォルトの名無しさん
2010/05/18(火) 14:52:180122デフォルトの名無しさん
2010/05/18(火) 15:18:040123デフォルトの名無しさん
2010/05/18(火) 15:54:41そうでもないのかな。
0124デフォルトの名無しさん
2010/05/18(火) 18:12:55一通りそれらを理解したうえで、次の段階に進む際の定番やオススメの教科書みたいなものがあったら教えて下さい。
0125デフォルトの名無しさん
2010/05/18(火) 18:37:51そうこうしてるうちにデータ構造とかアルゴリズムとか気になってくるだろう。
0126デフォルトの名無しさん
2010/05/18(火) 18:45:530127デフォルトの名無しさん
2010/05/18(火) 18:52:51カニハン先生の「プログラミング作法」
原書は "The Practice of Programming"
012899
2010/05/18(火) 21:07:35結局、どっちでもおkってことか?
変わりはないんでしょ
「int* i, j, k, l;」と
「int *i, *j, *k, *l;」は違う意味だよな
0129デフォルトの名無しさん
2010/05/18(火) 21:08:24うん違う意味になるね
0130デフォルトの名無しさん
2010/05/18(火) 21:54:55(int*) i, j, k, l; とすればよい
0131デフォルトの名無しさん
2010/05/18(火) 22:41:100132デフォルトの名無しさん
2010/05/18(火) 23:46:190133デフォルトの名無しさん
2010/05/18(火) 23:48:120134デフォルトの名無しさん
2010/05/18(火) 23:55:000135デフォルトの名無しさん
2010/05/18(火) 23:55:550136デフォルトの名無しさん
2010/05/18(火) 23:58:280137デフォルトの名無しさん
2010/05/19(水) 00:22:430138デフォルトの名無しさん
2010/05/19(水) 00:41:120139デフォルトの名無しさん
2010/05/19(水) 00:59:270140デフォルャgの名無しさん
2010/05/19(水) 01:00:030141デフォルトの名無しさん
2010/05/19(水) 01:13:210142デフォルトの名無しさん
2010/05/19(水) 01:28:37test_c < test.txt
みたいな感じでtest.txtの内容をtest_c.cのscanfなどで読み込むことを
何て言うんだっけ?
0143デフォルトの名無しさん
2010/05/19(水) 01:29:210145デフォルトの名無しさん
2010/05/19(水) 02:11:330146デフォルトの名無しさん
2010/05/19(水) 02:39:01http://codepad.org/FFvyekfG
0147デフォルトの名無しさん
2010/05/19(水) 03:03:20#include <stdio.h>
void main()
{
typedef int* int_ptr;
int_ptr a, b, c;
int aa=10;
int bb=20;
int cc=30;
a = &aa;
b = &bb;
c = &cc;
printf("ptr[%p]=[%d], ptr[%p]=%d, ptr[%p]=%d\n",a,*a, b,*b, c,*c);
}
0148デフォルトの名無しさん
2010/05/19(水) 07:33:29void main() (笑)
0149デフォルトの名無しさん
2010/05/19(水) 10:58:04void main < main < int main
0150デフォルトの名無しさん
2010/05/19(水) 16:39:37秀丸
0151デフォルトの名無しさん
2010/05/19(水) 16:44:02初歩的質問
ライブラリ関数のstdio.hって関数の宣言だけですよね?
それならばその本体はどこのあるの?
0152デフォルトの名無しさん
2010/05/19(水) 16:47:220153デフォルトの名無しさん
2010/05/19(水) 16:49:11notepad++
タダだし・・・ってかVC++じゃだめなの?
0154デフォルトの名無しさん
2010/05/19(水) 17:18:33つ libc
すでにコンパイル済の状態で、ライブラリとして提供される。
0155デフォルトの名無しさん
2010/05/19(水) 17:19:47環境にもよるけどlibc.soとかに。
0156デフォルトの名無しさん
2010/05/19(水) 17:20:42Windowsだとmsvcrt.dllにでもはいってるのかな
0157デフォルトの名無しさん
2010/05/19(水) 17:35:58リンク時にランタイムのリンケージが選べる:
スタティックリンクだと .LIB に、ダイナミックリンクだと dll に実装体が居る
0158デフォルトの名無しさん
2010/05/19(水) 18:02:21Xyzzy
0159デフォルトの名無しさん
2010/05/19(水) 18:38:34俺流
0160デフォルトの名無しさん
2010/05/19(水) 19:38:34を満たす最大の整数ってどうやって求めるんですか?
0161デフォルトの名無しさん
2010/05/19(水) 19:47:360162デフォルトの名無しさん
2010/05/19(水) 19:51:28>>156
151
thenks a lot.
0163デフォルトの名無しさん
2010/05/19(水) 19:52:17thanks a lot.
0164デフォルトの名無しさん
2010/05/19(水) 20:22:44then ks a lot
0165デフォルトの名無しさん
2010/05/20(木) 01:03:090166デフォルトの名無しさん
2010/05/20(木) 01:11:230167デフォルトの名無しさん
2010/05/20(木) 01:32:420168デフォルトの名無しさん
2010/05/20(木) 03:06:14ありがとうございます
0169デフォルトの名無しさん
2010/05/20(木) 03:15:37うむ。頑張りな。ふっ。
0170デフォルトの名無しさん
2010/05/20(木) 03:22:50どこがいけないのでしょうか?
int c,end=0;
while(1){
printf("*****MENU*****\n");
printf("A:ゲーム\n");
printf("B:音楽\n");
printf("C:表計算\n");
printf("X:終了\n");
printf("**************\n");
printf("------>\n");
while(1){
c=getchar();
if(c != '\n')
break;
}
switch(c){
省略
case'X':
case'x':
end == 1;
break;
default:
printf("\n不正な入力です\n\n");
break;
}
if(end == 1)
break;
}
0171デフォルトの名無しさん
2010/05/20(木) 03:26:150172デフォルトの名無しさん
2010/05/20(木) 07:18:12??
0173デフォルトの名無しさん
2010/05/20(木) 07:32:060174デフォルトの名無しさん
2010/05/20(木) 08:02:050175デフォルトの名無しさん
2010/05/20(木) 08:30:42printf( "%lf", d );
みたいなことをするときに「0.10000」じゃなくて、「0.1」とだけ書きたい。
けどケツのゼロを捨てる書式の指定方法なんてあったか?
0176175
2010/05/20(木) 08:33:38小数点以下の桁数はわからんので、
printf( ".1%lf", d );
のようなことでは不十分なのです
0177デフォルトの名無しさん
2010/05/20(木) 08:50:090178デフォルトの名無しさん
2010/05/20(木) 09:17:47二文字で解決されるとは!
助かったthx
0179デフォルトの名無しさん
2010/05/20(木) 14:31:21うん
0181デフォルトの名無しさん
2010/05/20(木) 18:24:22こんなんでどうだろうか?
http://codepad.org/Pq6tH9AZ
0182デフォルトの名無しさん
2010/05/20(木) 18:28:390183デフォルトの名無しさん
2010/05/20(木) 18:29:11printf("%g\n", ... );
はどうだろうか?
http://codepad.org/xYroUg5r
0184デフォルトの名無しさん
2010/05/20(木) 18:31:460186デフォルトの名無しさん
2010/05/20(木) 18:33:52すまん。
0187デフォルトの名無しさん
2010/05/20(木) 19:20:00http://codepad.org/Q47oumZS
0188デフォルトの名無しさん
2010/05/20(木) 19:51:16scanf本体の仮引数がポインタで受けるようになっているので&つけることで実引数・仮引数の双方の型を合わせるため、でいいですか
0189デフォルトの名無しさん
2010/05/20(木) 19:54:28アドレス渡さないと変数に結果入れらんないよね
void foo(int n) { ... }
int a;
foo(a);
で foo 内部で a に値を入れられないのと同じ理屈
0190デフォルトの名無しさん
2010/05/20(木) 22:24:21int b,c;
a/bの商を求めてcに代入する際に、
コンパイルはできても注意(double型がint型で〜)と出てきてしまうのですが、
これを消す方法はありますか?
0191デフォルトの名無しさん
2010/05/20(木) 22:31:58#define ROW 3
#define COLUMN 4
int main(void)
{
double a[ROW][COLUMN];
int i, j;
printf("%d行%d列の行列の各要素を入力してもらいます\n", ROW, COLUMN);
for ( i = 0 ; i < ROW ; i++)
{
printf("第%d行の要素を入力して下さい>>>", i+1);
for ( j = 0 ; j < COLUMN ; j++)
{
scanf("%lf", &a[i][j]);
}
}
printf("各要素の値は次の通りです\n");
for ( i = 0 ; i < ROW ; i++)
{
for ( j = 0 ; j < COLUMN ; j++)
{
printf("a[%d][%d]=%f\t", i+1, j+1, a[i][j]);
}
printf("\n");
}
return 0;
}
0192デフォルトの名無しさん
2010/05/20(木) 22:37:39#define ROW 3
#define COLUMN 3
int main(void)
{
double a[ROW][COLUMN]={ {1, 2, 3}, {5, 6, 7}, {9, 10, 11} };
double b[ROW][COLUMN]={ {1.1, 2.2, 3.3}, {5.5, 6.6, 7.7},
{10.1, 11.1, 12.2} };
double c[ROW][COLUMN];
int i, j;
printf("行列Aと行列Bの和は次の通りです\n");
for ( i = 0 ; i < ROW ; i++)
{
for ( j = 0 ; j < COLUMN ; j++)
{
c[i][j] = a[i][j] + b[i][j];
printf("%8.3f", c[i][j]);
}
printf("\n");
}
return 0;
}
***************************************************************
上の2つのプログラムを参考にして、N×N行列AとBをキーボードから入力し、行列A、行列B、及び行列AとBの積ABを出力するプログラムを作成する
よろしくお願いしますorz
0193デフォルトの名無しさん
2010/05/20(木) 22:48:17http://codepad.org/Wtgf7r1r
答えがあるかもしれない範囲を、上と下をちょっとずつせまくしてって、だんだん答えのある範囲がせまくなってったら、さいごには答えになるんじゃないかな〜? って思いついたので
ためしてみたら、なんか7.~~~~って数字でた。たしざんとかして確かめてみたら199.999999~~ってなった。200よりちいさい。よかった
0194デフォルトの名無しさん
2010/05/20(木) 23:22:520195デフォルトの名無しさん
2010/05/20(木) 23:43:39char str[] =""; を
printf("%s",str);とすると、
画面には何も出力されない、という結果になります。
これと同じことをchar型変数で行うことは可能でしょうか?
char c = ''; /*何かを代入*/
printf("%c",c);とした時画面に何も(スペースさえも)表示されない
という処理を行いたいのです。
0196デフォルトの名無しさん
2010/05/20(木) 23:46:260197デフォルトの名無しさん
2010/05/20(木) 23:49:380198デフォルトの名無しさん
2010/05/20(木) 23:50:08ええとすみません、実はファイル出力したいのです。
形式がCSVで,区切りなのですが、char型を1文字だけ出力する部分で
,c, もしくは ,, こう出力したいのです。
, , こうはしたくないのです。
0199デフォルトの名無しさん
2010/05/20(木) 23:50:26一般的にはムリ。
条件を限定するなら手段があるのかもしれない。
0200デフォルトの名無しさん
2010/05/20(木) 23:52:06ってことはそういうロジックでどうぞ、となるんだけど、悩んでるってことはそうでもないのかな
0201デフォルトの名無しさん
2010/05/20(木) 23:56:48何がはいっていたら、というよりも
printfの引数としても、何も表示されない値があれば知りたいのです
>>199
やはり難しいですか…ありがとうございます。
>>200
char型の中身が出力可能な値であれば、出力用文字列に連結して…といった方法でしょうか
たしかにこれでも結果的に意図する処理は可能となります
0202デフォルトの名無しさん
2010/05/20(木) 23:58:29んだから、もしその値があったとして、いつその値を使うの?
常に空も、常に出力もダメなんでしょ?
0203デフォルトの名無しさん
2010/05/20(木) 23:58:55char c = 0;
printf("%c", c);
0204デフォルトの名無しさん
2010/05/20(木) 23:59:28だめよそれ。
./a.out > foo.dat
として内容をみてみればいい
0205デフォルトの名無しさん
2010/05/21(金) 00:03:41char c;
c = 0;
sprintf(outbuf, "%c", c);
printf("%s", outbuf);
c = 'a';
sprintf(outbuf, "%c", c);
printf("%s", outbuf);
0206デフォルトの名無しさん
2010/05/21(金) 00:04:08例えば前後に別の文字リテラルが出力されたとして、その間を詰めたい時に
使いたいです
0207デフォルトの名無しさん
2010/05/21(金) 00:06:030208デフォルトの名無しさん
2010/05/21(金) 00:08:53サンプルコードまでつけて頂いて、ありがとうございます。
文字列に格納してから出力するのが一番簡単でしょうか
その方法でやってみようと思います
>>207
はい、できれば。といっても、2〜3行ソースが増えるだけなんですけどね
0209デフォルトの名無しさん
2010/05/21(金) 00:10:390210205
2010/05/21(金) 00:12:11と思わんでもないが、納得したならそれでいいや。
階層によっては>>205の方が楽に進むこともあるだろし。
0211デフォルトの名無しさん
2010/05/21(金) 00:14:50だから何もしなければいい。
カンマを打つロジックは必ず通るだろうから。
0212デフォルトの名無しさん
2010/05/21(金) 00:26:15横着してました。その方向でいこうと思います。
>>211
すみません勘違いしてました。そういう意味ですか。
ありがとうございます。
0213デフォルトの名無しさん
2010/05/21(金) 00:29:04一番速く処理できてバグの入り込む余地も全く無い完全な形。
やらんでいいことはやらないっていう、良い意味での手抜きはどんどんするべきだ。
0214デフォルトの名無しさん
2010/05/21(金) 00:30:17printf(c?"%c":"",c);
0215デフォルトの名無しさん
2010/05/21(金) 00:52:11真理だな。
0216デフォルトの名無しさん
2010/05/21(金) 01:38:00http://codepad.org/wz1ntxB5
Nは入力させるようにしてしまった。#defineさせたかったんだろうね。。
こんなんでも一応うp
0217デフォルトの名無しさん
2010/05/21(金) 01:47:060218デフォルトの名無しさん
2010/05/21(金) 01:47:36のりかかった船なので作り直した
http://codepad.org/zol3iRyi
0219デフォルトの名無しさん
2010/05/21(金) 01:52:19うむ
良きに計らえ
0220デフォルトの名無しさん
2010/05/21(金) 07:04:29ありがとうございました。
0221デフォルトの名無しさん
2010/05/21(金) 08:20:56いえいえ
0222194
2010/05/21(金) 09:56:55#define COLUMN 4
void in(double (*data)[COLUMN], char name){ int i, j;
printf("%d行%d列の行列%cの各要素を入力してもらいます\n", COLUMN, COLUMN, name);
for ( i = 0 ; i < COLUMN ; i++) {
printf("第%d行の要素を入力して下さい>>>", i+1);
for ( j = 0 ; j < COLUMN ; j++)
scanf("%lf", &data[i][j]);
}
printf("各要素の値は次の通りです\n");
for ( i = 0 ; i < COLUMN ; i++) {
for ( j = 0 ; j < COLUMN ; j++)
printf("%c[%d][%d]=%f\t", name, i+1, j+1, data[i][j]);
printf("\n");
}
}
int main(void) { int i, j, k;
double a[COLUMN][COLUMN], b[COLUMN][COLUMN], c[COLUMN][COLUMN];
in(a, 'A');
in(b, 'B');
printf("行列Aと行列Bの積は次の通りです\n");
for ( i = 0 ; i < COLUMN ; i++) {
for ( j = 0 ; j < COLUMN ; j++) {
c[i][j] = 0.0;
for ( k = 0 ; k < COLUMN ; k++)
c[i][j] += a[i][k] * b[k][j];
printf("%8.3f", c[i][j]);
}
printf("\n");
}
return 0;
}
0223デフォルトの名無しさん
2010/05/21(金) 11:59:41ワロタww
マジで>>125みたいな奴ほど害になる年長者は居ないわ。
0224デフォルトの名無しさん
2010/05/21(金) 18:43:10本を読むのは必要条件だが、十分条件ではない。
0225デフォルトの名無しさん
2010/05/21(金) 18:48:520226デフォルトの名無しさん
2010/05/21(金) 18:53:500227デフォルトの名無しさん
2010/05/21(金) 18:54:33結局は身につかないと思うけど。
0228デフォルトの名無しさん
2010/05/21(金) 18:55:41読んだことにより、書ける可能性が発生する、とは思うけれども、それを上達というかどうかは微妙。
読んでも書けないようではね。
0229デフォルトの名無しさん
2010/05/21(金) 18:57:29・読むだけでも上達するし、実際効率がいい、レベルアップには必須、ただし全く書かないと上達しない
・未経験SE(または唯一日本固有のSEw)のスーパー勘違いがうざい
もうこれでいいだろ喧嘩すんなよ
0230デフォルトの名無しさん
2010/05/21(金) 18:59:060231デフォルトの名無しさん
2010/05/21(金) 19:12:030232デフォルトの名無しさん
2010/05/21(金) 19:26:480233デフォルトの名無しさん
2010/05/21(金) 20:11:54それはコードを読んで、でしょ?
本なりドキュメントなりを読むことで得られる知識なくして上達はありえないよね。
そういう意味で必要条件と書いているんだろうけど、その知識を得ること自体は上達に含まれないのか?ということ。
0234デフォルトの名無しさん
2010/05/21(金) 20:13:310235デフォルト
2010/05/21(金) 20:26:20大学の課題ではないのですが、参考書に載っている説明・解説だけでは自分だけでは理解不能なので教えてください。
参考書に載っている文体を変えずに書きます
�@次のプログラムの#####のところを埋めて、3人の点数を入力すると平均点を出力するプログラムを作ってみよう♪
int score[5];
int i;
float sum, average;
for( i = 0; i<=4; i = i+1) {
#####
}
for( i = 0; i<=4; i = i+1) {
#####
}
#####
�A �@の枠組みを用いて、3人の点数を入力すると最高点を出力するプログラムを作ってみよう♪
�B10個の値 x[0]〜x[9] を入力して、x[0]〜x[9]の中に偶数があれば「○」と表示し、偶数がなければ「×」と表示するプログラムを作ろう!!!
(複数偶数があったとしても「○」と表示するのは1回だけにしてみましょう。)
配列、for、ifを用いればできると書かれているのですが平均点が0になったりちんぷんかんぷんです。。。
助けてください。
0236デフォルトの名無しさん
2010/05/21(金) 20:48:10int score[5];
int i;
float sum, average;
for( i = 0; i<=4; i = i+1) {
##### 点数の入力
}
for( i = 0; i<=4; i = i+1) {
##### 平均点の算出
}
##### 平均点を出力
という意図の問題だと思うけどそこは間違えてない?
0になったりするソースを載せてみるといいよ
0237デフォルトの名無しさん
2010/05/21(金) 20:55:173人の点数なのに5人分のデーターあるぞ
0238デフォルト
2010/05/21(金) 20:56:01二つ目の平均点を算出するところなのですが、何度やっても0点やマイナスなったりするのですが。。。
0239デフォルト
2010/05/21(金) 21:05:07タイプミスです。
0240デフォルトの名無しさん
2010/05/21(金) 21:07:320241デフォルト
2010/05/21(金) 21:14:14一応自分が書いたプログラミングはこんな感じです。
#include<stdio.h>
int main(void){
int score[5];
int i;
float sum,average;
for(i=0; i<=4; i=i+1){
printf("成績を入力してください。");
scanf("%d",&score[i]);
}
sum =0;
for(i=0; i<=4; i=i+1){
sum += score[i];
}
average =0;
average = sum / 5;
printf("平均点は%d",average);
return 0;
}
0242デフォルトの名無しさん
2010/05/21(金) 21:19:370243デフォルトの名無しさん
2010/05/21(金) 21:19:510244デフォルトの名無しさん
2010/05/21(金) 21:27:09あと %d じゃない
printf("平均点は%lf",average)
0245デフォルトの名無しさん
2010/05/21(金) 21:30:02笑
0246デフォルトの名無しさん
2010/05/21(金) 21:30:37printf("成績を入力してください。");
scanf("%d",&score[i]);
}
この部分って問題ないの?scanfの悪癖にはまって以来使わなかった記憶が。。
0247デフォルトの名無しさん
2010/05/21(金) 21:38:16printf("%g", averate);
http://codepad.org/nokvbVQ5
0248デフォルトの名無しさん
2010/05/21(金) 22:33:14これって型が違うと警告でない?
sum += (float)score[i];
とキャストした方がいいと思うよ。出力結果は変わらないけど、何の値を扱っているか
必ず意識するのが、経験上バグが少なくなるから
>>246
最近はコマンドラインで入力するプログラムは作らないけど、入力は文字列で
受け付けて、atof() 等で変換するのが良かったと記憶している。
0249デフォルトの名無しさん
2010/05/21(金) 23:00:21#include <stdio.h>
int main(void){
double a;
short n;
int i, j , k;
n = -15;
a = (double)87654/5 + (double)n;
printf("a = %f\n", a);
return 0;
}
↑これはコンパイルできたのに、全く同形の 次書き込み続きます
0250デフォルトの名無しさん
2010/05/21(金) 23:01:55#include <stdio.h>
int main(void){
double a;
short n;
int i, j , k;
n = -15;
a = (double)87654/5 + (double)n;
printf("a = %f\n", a);
return 0;
}
がコンパイルできないんですが・・・・どういうことでしょう?
本当に困ってます。
まじでわからないんですが・・・・
ちなみに改行 行間まで一緒です。
ただカーソルを段落で移動させると動き方が違うんでうしょね
あ余計なこといったかな、とにかく何が原因だろ。
0251デフォルトの名無しさん
2010/05/21(金) 23:04:37全角空白が二箇所ある
0252デフォルトの名無しさん
2010/05/21(金) 23:11:35コンパイラにパスが通ってないとか。
なんかエラーくらい出てないの?
0253デフォルトの名無しさん
2010/05/21(金) 23:17:04睨んでるのは数字、数字が全角か半角とかかなぁ?
全角空白?何それwwいきなりラスボス級の試練とか・・・
見えない全角空白どうやって確認ww
やっぱりコピペとかはやめたほうがいいかな・・・
0254デフォルトの名無しさん
2010/05/21(金) 23:19:500255デフォルトの名無しさん
2010/05/21(金) 23:20:38何を言っているかよく分からないが、後者のコードには全角空白が含まれている
0256デフォルトの名無しさん
2010/05/21(金) 23:26:040257デフォルトの名無しさん
2010/05/21(金) 23:26:43Okw 俺がエラメみても分かんないから貼ります
pen.c: In function `main':
pen.c:6: error: stray'129\' in program
pen.c:6: error: stray '@' in program
pen.c:11: error: strary '\129' in program
pen.c:11: error: strary'@' in program
pen.c:16:2: error: warning: no newline at end of file
おそらく全角半角だろどうせwww
0258デフォルトの名無しさん
2010/05/21(金) 23:27:43やり方教えてちょんwww
0259デフォルトの名無しさん
2010/05/21(金) 23:30:29全角半角です。本当にありがとうございました。
0260デフォルトの名無しさん
2010/05/21(金) 23:34:25(1)
short n;
の行末の全角空白を削除する。
(2)
a = (double)87654/5 + (double)n;
の行頭の全角空白を削除する。
0261デフォルトの名無しさん
2010/05/21(金) 23:37:36ありがとうwwwwww
これでやっと4つめいける・・・・・・
これだけで1週間考えたからなw何か
目に滲んでくるわw
0262デフォルトの名無しさん
2010/05/21(金) 23:43:28サクラエディタやeclipseは全角空白は □ と表示される。他は知らん
0263デフォルトの名無しさん
2010/05/21(金) 23:53:56union {
unsigned asInt[2];
double asDouble;
};
int n;
asDouble = (double)k + 0.5;
n = 1054 - (asInt[LE] >> 20); // little endianなら1,big endianなら0
return n;
}
これがうまく理解できません><
優しく解説してくれるエロい人はいませんか?
0264デフォルトの名無しさん
2010/05/21(金) 23:54:40どのコンパイラで警告出るの?
0265デフォルトの名無しさん
2010/05/22(土) 00:11:19指数部を見ると下から何桁まで利用しているかがわかるので、
それを使って先頭に0が何個必要かを求めてる
0266デフォルトの名無しさん
2010/05/22(土) 00:14:451.文字列を入力
2.取り除く文字を入力
3.文字を取り除いて表示
というプログラムなのですが、2の行う段階で止まってしまいます。
解説お願いします。
0267デフォルトの名無しさん
2010/05/22(土) 00:17:53- scanf("%*c%c",c);
+ scanf("%*c%c",&c);
0268デフォルトの名無しさん
2010/05/22(土) 00:24:580270デフォルトの名無しさん
2010/05/22(土) 06:41:260271デフォルトの名無しさん
2010/05/22(土) 12:52:28でもいいかえれば 他人が作成したコードを見ることにかわりはないんだから、結局本なんて買わずネットで調査すればいいじゃんかと。
0272デフォルトの名無しさん
2010/05/22(土) 12:57:380273デフォルトの名無しさん
2010/05/22(土) 15:46:19rnd = rand(10)
これでいいんでしょうか
0274デフォルトの名無しさん
2010/05/22(土) 15:47:24どうなってますか。unsigned charをcharにしたらうまくいったんですがどうなってますか。
{
system("echo 111 > test_1.txt");
unsigned char* p_uc;
p_uc = new unsigned char[10];
FILE* fp_uc;
if((fp_uc = fopen("test_1.txt", "r")) == NULL){
printf("file open error line:%d\n", __LINE__);
exit(0);
}
int i=0;
while((p_uc[i++] = fgetc(fp_uc)) != EOF){ ; }
}
0275デフォルトの名無しさん
2010/05/22(土) 15:55:45assert(static_cast<unsigned char>(EOF) != EOF):
0276デフォルトの名無しさん
2010/05/22(土) 15:56:55rand() % 10 + 1
(int)((double)rand() * 10 / ((double)RAND_MAX + 1)) + 1
前者の方が速いが、僅かに偏ったり、場合によって周期が短くなったりすることがある
後者の方が遅いが、どんな場合でも安心して使える
0277デフォルトの名無しさん
2010/05/22(土) 15:59:24EOF は負の数だから unsigned char に代入した時点で値が変わる。正しく比較できない。
そのため、無限ループになって配列範囲外にアクセスしている。
0278デフォルトの名無しさん
2010/05/22(土) 16:00:040279デフォルトの名無しさん
2010/05/22(土) 16:03:54とりあえず以下で回避できました。
int temp_c;
while((temp_c = fgetc(fp_uc)) != EOF){
p_uc[i++] = temp_c;
}
0280デフォルトの名無しさん
2010/05/22(土) 16:39:11int main(void)
{
int a, b;
scanf("%d%d" &a, &b);
return 0;
}
これコンパイルできなかったんですが・・・
どこらかどうみても
どこも間違ってるとこないような・・
どこが間違ってるんでしょう?
0281デフォルトの名無しさん
2010/05/22(土) 16:43:270282デフォルトの名無しさん
2010/05/22(土) 16:43:290283デフォルトの名無しさん
2010/05/22(土) 16:47:33**省略**
for(int j=0;j<7;j++){
block_cnt[j]=block_cnt[j]-1*BLOCK_TATE/ch.shot_cnt;
if(block_cnt[j]<=0){
block_cnt[j]=0;
}
}
コンパイルはできました。
BLOCK_TATE は 20 、 ch.shot_cnt は 40 です。
block_cnt[j]はdoubleで宣言したのですが、なぜ block_cnt[j] の値が減らないのかを教えてください。
-1*BLOCK_TATE/ch.shot_cnt を -1 に変えればちゃんと減るのですが・・・。
またできれば対応策もお願いします。
0284デフォルトの名無しさん
2010/05/22(土) 16:50:040285デフォルトの名無しさん
2010/05/22(土) 16:57:12- scanf("%d%d" &a, &b);
+ scanf("%d%d", &a, &b);
>>281-282
おちつけ
0286デフォルトの名無しさん
2010/05/22(土) 17:04:19280ですがいや意味わかりません・・・
+ -ってなんですか?
この前はscanfで組んだプログラムできたんですが・・
どこが間違ってますか?
0287デフォルトの名無しさん
2010/05/22(土) 17:06:450288デフォルトの名無しさん
2010/05/22(土) 17:10:13後者も偏りは出るだろ。
最大値が10の倍数でもないかぎり。
偏りを無くしたかったら振り直し法を使うしかないよ。
0289デフォルトの名無しさん
2010/05/22(土) 17:59:11この本は必須だからな。
まず基礎を固めないと、その上に何を積み重ねても無駄無駄。
0290デフォルトの名無しさん
2010/05/22(土) 18:31:37intでperioikoiと perioikoinとperioikoron
を変数名にして
perioikoi = 1
perioikoin =1で
perioikoron = perioikoi+perioikoinを実行したら
4ってなるんですけど何でですか?
0291デフォルトの名無しさん
2010/05/22(土) 18:34:550292デフォルトの名無しさん
2010/05/22(土) 18:38:54頼むから作ってくれ・・・
他のこと指摘されそうで怖い。頼む
0293デフォルトの名無しさん
2010/05/22(土) 18:42:26指摘されたら怖いとか、意味がわからん。
問題の原因が知りたいんじゃないのか?
0294デフォルトの名無しさん
2010/05/22(土) 18:52:580295デフォルトの名無しさん
2010/05/22(土) 19:02:00こですが・・・・
#include<stdio.h>
int main(void)
}
int perioikoi, perioikoin, perioikoron;
perioikoi = 1;
perioikoron =1;
perioikoron = perioikoi + perioikoin;
printf("%d\n", perioikoron);
return 0;
}
実行したら4になります
0296デフォルトの名無しさん
2010/05/22(土) 19:02:57#include<stdio.h>
int main(void)
}
int perioikoi, perioikoin, perioikoron;
perioikoi = 1;
perioikoinn =1;
perioikoron = perioikoi + perioikoin;
printf("%d\n", perioikoron);
return 0;
}
実行したら4になります
何故でしょうか?
試しに誰か作ってください・・・・・・
0297デフォルトの名無しさん
2010/05/22(土) 19:03:18何が4ってなるんだよ。
0298デフォルトの名無しさん
2010/05/22(土) 19:04:55おまえそれ実行してないだろ。コンパイルすらとおらねぇよ。
0299デフォルトの名無しさん
2010/05/22(土) 19:05:43間違えた こうです
#include<stdio.h>
int main(void)
}
int perioikoi, perioikoin, perioikoron;
perioikoi = 1;
perioikoin =1;
perioikoron = perioikoi + perioikoin;
printf("%d\n", perioikoron);
return 0;
}
誰かまじで試しにつくって・・・
perioikoiじゃなくても
piru pirumon pirumonia
でもOK
0300デフォルトの名無しさん
2010/05/22(土) 19:06:450301デフォルトの名無しさん
2010/05/22(土) 19:07:34同じ形式で作ってはってくれませんか?
0302デフォルトの名無しさん
2010/05/22(土) 19:07:42ここにもう一度書くんじゃなくて、コピペしろ
いいか、コピペだ
0303デフォルトの名無しさん
2010/05/22(土) 19:07:510304デフォルトの名無しさん
2010/05/22(土) 19:08:390305デフォルトの名無しさん
2010/05/22(土) 19:09:03まずあれだね変数がみんな似てて見にくいよ
perioikoinが定義されていない
0306デフォルトの名無しさん
2010/05/22(土) 19:09:180307デフォルトの名無しさん
2010/05/22(土) 19:10:510308デフォルトの名無しさん
2010/05/22(土) 19:12:230309デフォルトの名無しさん
2010/05/22(土) 19:12:48まず int main(void)下の } を { にしろ。話はそれからだ
0310デフォルトの名無しさん
2010/05/22(土) 19:13:080311デフォルトの名無しさん
2010/05/22(土) 19:13:26そう言ったらコピペしてくれなくなるかもしれないじゃん
0312デフォルトの名無しさん
2010/05/22(土) 19:13:56コピペしなよ
0313デフォルトの名無しさん
2010/05/22(土) 19:14:37おちょくってない。
a,b,cはchar型っぽいのでやめとく
ryu ken begaでやってみた
#include<stdio.h>
int main(void)
{
int ryu, ken, bega;
ryu = 1;
ken = 1;
bega = ryu + ken;
printf("%d\n", bega);
return 0;
}
実行したけど4になる・・・・何故?
誰かやってくれませんか?
0314デフォルトの名無しさん
2010/05/22(土) 19:15:510315デフォルトの名無しさん
2010/05/22(土) 19:16:34> 誰かやってくれませんか?
↓ここ使え。
http://codepad.org/
0316デフォルトの名無しさん
2010/05/22(土) 19:16:37さっきコピペしてなかったのを見るに、コード隠してるだろ
0317デフォルトの名無しさん
2010/05/22(土) 19:21:390319デフォルトの名無しさん
2010/05/22(土) 19:25:57古い実行ファイルのまま(んでそいつが4を出す)なんだろ。
0320デフォルトの名無しさん
2010/05/22(土) 19:27:370321デフォルトの名無しさん
2010/05/22(土) 19:44:09ryu=printf(〜〜〜〜)
ken=printf(〜〜〜〜)
bega=ryu+ken
printf(bega)
本当はprintf ryu kenの中身が1になるような
計算の値を変数にいれてるんだ。で実行したら
1
1
2+2=4
になる。
どうやっても
1
1
2+2=4
となる。
どこから2がでてきた・・・
0322デフォルトの名無しさん
2010/05/22(土) 19:44:39#define で20から20.00にしたら解決した
どもでした。
0323デフォルトの名無しさん
2010/05/22(土) 19:44:480324デフォルトの名無しさん
2010/05/22(土) 19:45:09嘘ばっかじゃねーかw
0325デフォルトの名無しさん
2010/05/22(土) 19:45:32ryu
ken
の値も表示しろ
0326デフォルトの名無しさん
2010/05/22(土) 19:46:35最後までコピペしないのな
教えてもらう気0だろ
0327デフォルトの名無しさん
2010/05/22(土) 19:48:43そうなんですか?
printfの値そのものを変数にしたいんだよ・・・
printfで
printf()=10とでてきた10そのものの値を
変数 int perioikoi
perioikoi= printf()
みたいにしてperioikoiは10であるようにしたい
どうすれば・・・
0328デフォルトの名無しさん
2010/05/22(土) 19:50:440329デフォルトの名無しさん
2010/05/22(土) 19:50:58C言語でおk
0330デフォルトの名無しさん
2010/05/22(土) 19:51:25> どうすれば・・・
>>291
0331デフォルトの名無しさん
2010/05/22(土) 19:53:20色々な値をそのつど変数としたい。
0332デフォルトの名無しさん
2010/05/22(土) 19:54:19C++ならprintfをオーバーロードして参照を返すようにしてやればできるけど、Cなら難しいね。
0333デフォルトの名無しさん
2010/05/22(土) 19:55:07もしかして
int x = printf("1");
で x が 1 になると思ってるの?
0334デフォルトの名無しさん
2010/05/22(土) 19:56:080335デフォルトの名無しさん
2010/05/22(土) 19:56:09例が悪いぞ
0336デフォルトの名無しさん
2010/05/22(土) 19:56:22思ってた。
実際それがしたい。
0337デフォルトの名無しさん
2010/05/22(土) 19:57:220338デフォルトの名無しさん
2010/05/22(土) 19:58:13printf("%d\n", x);
でいいだろ1行は無理じゃない?しようと思ったこともないわ
ていうかたぶん可読性が落ちるからやめろ
0339デフォルトの名無しさん
2010/05/22(土) 19:58:14使う関数の仕様ぐらい調べてから使えよ。
で、それなら sprintf() して strtol() すればいいんじゃね?
文字列出力する前に数値で計算したほうがいいと思うけど。
0340デフォルトの名無しさん
2010/05/22(土) 19:59:07実は判別式条件のプログラム作ってるんです。
ちなみに関大理工ねw
あんまり難しい事書くと、高学歴のくせに生意気だと思われるのが
恥ずかしかったんで・・・
0341デフォルトの名無しさん
2010/05/22(土) 19:59:270342デフォルトの名無しさん
2010/05/22(土) 19:59:560343デフォルトの名無しさん
2010/05/22(土) 20:00:11判別しき何で別に1とは限らないんですよ・・・
2かもしれんし,10,9かもしれん。
無茶いってすいません
0344306
2010/05/22(土) 20:00:340345デフォルトの名無しさん
2010/05/22(土) 20:01:24int x = (判別式);
printf("%d\n",x);
はだめなのか?
0346デフォルトの名無しさん
2010/05/22(土) 20:01:38聞かれもしないのに自分で高学歴とか言い出すあたり、救いようのないアホだな。
0347デフォルトの名無しさん
2010/05/22(土) 20:01:56printfに与えたパラメータを他の式でも使えばいいんじゃないの。
0348デフォルトの名無しさん
2010/05/22(土) 20:04:40それだ!!!!!!!!!!
わざわざ代入するならprintfで出す必要ないんだ・・・
馬鹿すぎた・・・
ありがとう・・・・
0349デフォルトの名無しさん
2010/05/22(土) 20:04:53正直アホらしいが。
0350デフォルトの名無しさん
2010/05/22(土) 20:05:450351デフォルトの名無しさん
2010/05/22(土) 20:05:58int x
〜
printf (〜);
return x
}
0352デフォルトの名無しさん
2010/05/22(土) 20:06:05よかったな。
0353デフォルトの名無しさん
2010/05/22(土) 20:06:08C言語のソースを貼ればいいのに
0354デフォルトの名無しさん
2010/05/22(土) 20:09:38本間に感謝してる。
パソコン初心者っていうカススレだと絶対埃がどうのこうの言われて
相手にされてないはず・・・・
ここお気に入りに登録しといた。
また質問する。貰うばっかりですまんけど
答えてることで精神が充実する人がいるなら^^
0355デフォルトの名無しさん
2010/05/22(土) 20:11:590356デフォルトの名無しさん
2010/05/22(土) 20:12:000357デフォルトの名無しさん
2010/05/22(土) 20:27:28お前みたいなのが関大とか関大も落ちぶれたもんよ....
0358306
2010/05/22(土) 20:34:530359デフォルトの名無しさん
2010/05/22(土) 20:50:25int main(void)
{
int a,perioikoi;
printf("数字を入力して下さい。:");
scanf("%d",&a);
printf((a)?"%d\n":"終わり。\n",perioikoi=a);
return 0;
}
こんなの想像してたw
0360デフォルトの名無しさん
2010/05/22(土) 22:02:20printf("%d\n", ryu = 1);
printf("%d\n", ken = 1);
printf("%d\n", bega = ryu + ken);
0361デフォルトの名無しさん
2010/05/22(土) 22:05:210362デフォルトの名無しさん
2010/05/22(土) 22:13:000363デフォルトの名無しさん
2010/05/22(土) 22:22:56どんだけ修正しても最終的に
このエラーメッセージが一つ出てきます。
これが出ても実行されて成功するのですが、これでなくするためには
どうしたらいいですか?
0364デフォルトの名無しさん
2010/05/22(土) 22:25:34ソースの最後の行で改行する
0365デフォルトの名無しさん
2010/05/22(土) 22:26:420366デフォルトの名無しさん
2010/05/22(土) 22:35:07newline …改行
at end of file …ファイルの終わりに
訳して「ソースの最後の行に改行がありません」
0367デフォルトの名無しさん
2010/05/22(土) 22:40:190368デフォルトの名無しさん
2010/05/22(土) 22:46:14意味分からん
ソースの最後を改行コードにしろってwarningだろ
0369デフォルトの名無しさん
2010/05/22(土) 22:48:37コンパイラを変える
0370デフォルトの名無しさん
2010/05/22(土) 22:58:250371デフォルトの名無しさん
2010/05/22(土) 23:02:150372デフォルトの名無しさん
2010/05/22(土) 23:07:390373デフォルトの名無しさん
2010/05/22(土) 23:17:040374デフォルトの名無しさん
2010/05/22(土) 23:20:19改行の無いのは行未満なんだよ。
改行はセパレーターじゃなくてターミネーターなんだよ。
「最後の行に改行を付ける」だと、
1行目\n2行目\n行未満[EOF]
↓
1行目\n2行目\n\n行未満[EOF]
こうなるわけだ。
0375デフォルトの名無しさん
2010/05/22(土) 23:28:350376デフォルトの名無しさん
2010/05/22(土) 23:31:330377デフォルトの名無しさん
2010/05/22(土) 23:39:130378デフォルトの名無しさん
2010/05/22(土) 23:50:29int main(void)
{
double x;
scanf("%lf\n", &x);
return 0;
}
これ実行すると、xにしか代入しないという設定なのに
実行してたとえば3と入れると次の行も出てくるんですか・・・
で次の行に何か数字入れたら終わり・・
どういうことでしょうか?別に
double x, y;
("%d\n", &x, &y);としたわけじゃないのに・・
0379デフォルトの名無しさん
2010/05/23(日) 00:07:380380デフォルトの名無しさん
2010/05/23(日) 00:08:53\nなんているのか?
scanfなんてつこうたことないから、分からんが
0381デフォルトの名無しさん
2010/05/23(日) 00:09:050382デフォルトの名無しさん
2010/05/23(日) 00:41:04・・・でも今度は実行すると
#include <stdio.h>
int main(void)
{
double x;
scanf("%lf", &x);
printf("%d\n", x+100);
return 0;
}
xに何代入しても必ず0になります。
何故でしょうか?
0383デフォルトの名無しさん
2010/05/23(日) 00:44:54%d じゃなくて %f で表示
0384デフォルトの名無しさん
2010/05/23(日) 00:47:550385デフォルトの名無しさん
2010/05/23(日) 00:48:59最近、浮動小数の時も %d にするのが流行ってるの?
あと %lf を使おう
0386デフォルトの名無しさん
2010/05/23(日) 00:49:040387デフォルトの名無しさん
2010/05/23(日) 00:49:26入門者がそんなレベルの質問してたらスレがいくつあっても足りないんだよ
0388デフォルトの名無しさん
2010/05/23(日) 00:51:230389デフォルトの名無しさん
2010/05/23(日) 00:51:40「質問する前に、自分でなんとか調べる癖をつけろよ」なんて書き込みの方が余程無駄。
ここで調べてるんだろ。答える気がないなら書き込むなアホ。
そんな書き込みしてたらスレがいくつあっても足りないんだよ。ドアホ。
0390デフォルトの名無しさん
2010/05/23(日) 00:54:01%lfってなんでそんなにつよいん
0391デフォルトの名無しさん
2010/05/23(日) 00:55:05人の時間を使っていることを意識しろよ。
0392デフォルトの名無しさん
2010/05/23(日) 00:55:46釣られんなドドアホ。
0393デフォルトの名無しさん
2010/05/23(日) 00:56:52がっこうのせんせいにでんわするのがはやいですよ^^
0394デフォルトの名無しさん
2010/05/23(日) 00:57:45Ω ΩΩ< な、なんだってー!!
俺も院の先輩に言われたわwww
0395デフォルトの名無しさん
2010/05/23(日) 01:01:50そういう誤解をしている人は入力変換指定子を半分も理解できていない場合が多い
出力時と比べてはるかに高機能なんだけどな
0396デフォルトの名無しさん
2010/05/23(日) 01:36:22scanfのgがfと同一だからさ
0397デフォルトの名無しさん
2010/05/23(日) 02:00:58関数bbbは int 型の引数を受け取るが
int a;
int b;
int c;
bbb(3, a,b,c);
これを
long long a;
long long b;
long long c;
bbb(3, a,b,c);
long long 型の引数を受け取るように改造しろ
0398デフォルトの名無しさん
2010/05/23(日) 02:38:53で、scanfでfを使うように覚えてしまって、出力でもfを使ってしまうと。
lfの流れとまるで同じなんだな
0399デフォルトの名無しさん
2010/05/23(日) 07:42:32この後pを使ってnewで確保した領域のサイズを得るにはどうしたらいいですか
0400デフォルトの名無しさん
2010/05/23(日) 08:05:05*をつけるとその実体
&をつけるとそのアドレスを示すことは理解してます。
以下の場合、最後のreturnは何をなぜ&をつけているのか説明していただけませんか?
------------------
struct test{
int x;
}TEST, *PTEST;
PTEST pT;
pT = XXX(); // XXX関数はpT(アドレス)に適応したアドレスを返すとする
return &pT->x; //&をつける
--------------------
ここで
------------------
struct test{
int x;
}TEST, *PTEST;
PTEST pT;
pT = XXX(); // XXX関数はpT(アドレス)に適応したアドレスを返すとする
return pT->x; //&を外す
--------------------
&を外すと、C2220: warning treated as error - no 'object' file generatedエラーが出ます
なぜなのでしょうか?
0401デフォルトの名無しさん
2010/05/23(日) 08:12:050403デフォルトの名無しさん
2010/05/23(日) 08:17:02int *p = new int[hensu];
だよね?
結論から言うと、pから確保したサイズを得ることはできない。
hensuを保持しておかなければならない。
0404400
2010/05/23(日) 08:22:27この質問は終了します。
ソースコードよく読んでないだけでした。すいません
0405デフォルトの名無しさん
2010/05/23(日) 08:22:45関数の戻り値がPTESTであれば、返すのはpTであるはず。
関数のメンバを参照しているとき、その型はメンバの型となる。
struct test{
int x;
}TEST hoge;
とあったときに
hogeの型 TEST
&hogeの型 TEST *
hoge.xの型 int
&hoge.x→&(hoge.x)の型 int *
0406400
2010/05/23(日) 08:24:32すいません
PLONG AAA()
{
PTEST pT;
pT = XXX(); // XXX関数はpT(アドレス)に適応したアドレスを返すとする
return &pT->x;
}
となっているだけで、PLONG型にあわせてるだけでした。
中身だけ見てたために勘違いしてました。
ほんとに申し訳ない
0407デフォルトの名無しさん
2010/05/23(日) 11:46:08>printfで出力された値をほかの式で使うにはどうしたらいんですか?
の意味が良くわからないんですよ。違った角度から説明してもらえませんか?
0408407
2010/05/23(日) 11:49:540409デフォルトの名無しさん
2010/05/23(日) 12:41:08例えばFizzBuzzとかこれだけだし。
#include <stdio.h>
int main(void)
{
int i;
for (i=1;i<101;i++)printf((i%3)?((i%5)?"%d\n":"Buzz\n"):((i%5)?"Fizz\n":"FizzBuzz\n"),i);
return 0;
}
0410デフォルトの名無しさん
2010/05/23(日) 12:49:06::malloc_usable_size()@malloc.h
C言語ならもっと別の方法が2, 3あるけどC++は不便だな
0411デフォルトの名無しさん
2010/05/23(日) 12:51:48そういう処理系依存のものは
そう断りを入れて、環境と合わせて紹介するようにしてくれ
0412デフォルトの名無しさん
2010/05/23(日) 12:54:45{
char *addr;
addr = malloc(160);
return addr;
}
解析中に上記のようなコードみつけたんですが、mallocをオーバーラップして意味あるんですか
0413デフォルトの名無しさん
2010/05/23(日) 12:56:20最近、条件演算子でも覚えたのか
iの行方はいかに、()と\nが冗長だな
はい次のかたどうぞ
0414デフォルトの名無しさん
2010/05/23(日) 12:56:222回も5で割るのは無駄だと直感的にわかろうよ
0415デフォルトの名無しさん
2010/05/23(日) 12:56:220416デフォルトの名無しさん
2010/05/23(日) 12:56:270417デフォルトの名無しさん
2010/05/23(日) 12:58:28>>414
2回書いた方が速度的にも速い
0418デフォルトの名無しさん
2010/05/23(日) 12:59:30それはわかるんだけどmallocして使い終わったらfreeで返さないといけないでしょう。
これ絶対リークするよ
0419デフォルトの名無しさん
2010/05/23(日) 13:00:08FREE_BUF があればいいんじゃない
0420デフォルトの名無しさん
2010/05/23(日) 13:11:44returnした後はaddr領域がメモリから消えてしまう。
mallocで割り当てた領域をGET_BUFの戻り値として返しているか心配です
0421デフォルトの名無しさん
2010/05/23(日) 13:13:02それは心配ない
解析とかいうレベルに到達していないね
0422デフォルトの名無しさん
2010/05/23(日) 13:14:24int a;
a = 1;
return a;
}
でちゃんと1が返されるのか、
と心配しているのと同じ事だな
GET_BUFの戻り値をちゃんと受けて、それをちゃんとfreeしてるなら、リークしない
0423デフォルトの名無しさん
2010/05/23(日) 13:16:220424デフォルトの名無しさん
2010/05/23(日) 13:17:37何年やってもダメなもんはダメなんだよ
0425409
2010/05/23(日) 13:23:33カッコなくてもよかったかw
短いと思って一つずつ\n付けたがprintf("\n");の方がよかったのかな。
iは101だけどなにかまずい?
0426デフォルトの名無しさん
2010/05/23(日) 13:34:46{
free(addr);
}
0427デフォルトの名無しさん
2010/05/23(日) 13:36:53あれは、まず解答を紙に書かなくちゃいけない。
なぜなら基本的な文法が頭に入っているかどうかチェックするため。
これだけ単純な問題でいちいち実際にコンパイルが通るか、実行して結果を確認しているようでは
生産性は上がらない。プロとしては失格。
次に制限時間があること。
時間内に仕様通りのプログラムが書けるかどうか、仕事管理能力を見る。
重要なのはこの2点。「基礎知識があること。締め切りを守ること。」
コードがエレガントかどうか、速いかどうかはここでは採点されない。あくまでも試験問題だからね。
出題者の意図を推し量ることができるってのも社会人として重要なスキルだよ。
0428デフォルトの名無しさん
2010/05/23(日) 13:43:29速くてエレガントなら評価は高い
0429デフォルトの名無しさん
2010/05/23(日) 13:51:47たぶん、速度やらを見るためのアルゴリズム系の問題は別に出されることが多いんじゃないか?
処理系やデータ構造にも依存してくるし
0430デフォルトの名無しさん
2010/05/23(日) 13:56:25これはあくまでも「問題が解けたか、解けなかったか」でふるい落とすための物でしょ
「応募者の99%はコードが一切書けないことに頭を悩ませた」、その結果の産物なんだし
プログラマーとして優秀かどうか以前を見極めるための問題なんだから
0431デフォルトの名無しさん
2010/05/23(日) 14:04:43何も思わない担当者はどうかと思う
0432デフォルトの名無しさん
2010/05/23(日) 14:04:45解けない奴を無条件にふるいにかけるだけでしょ
0433デフォルトの名無しさん
2010/05/23(日) 14:06:56今時そのまま出す担当者はいないと思うけど
0434デフォルトの名無しさん
2010/05/23(日) 14:07:38この問題しってたのか、ぐらいにしか思われなかったり
0435デフォルトの名無しさん
2010/05/23(日) 14:08:100436デフォルトの名無しさん
2010/05/23(日) 15:29:44凝ったことをやろうとしてうっかりミスで自滅さえしなきゃ
0437デフォルトの名無しさん
2010/05/23(日) 15:41:120438デフォルトの名無しさん
2010/05/23(日) 15:41:120439デフォルトの名無しさん
2010/05/23(日) 15:43:47速度気にするならprintfを使わないトコからはじめてくれよ
0440デフォルトの名無しさん
2010/05/23(日) 15:44:040441デフォルトの名無しさん
2010/05/23(日) 15:44:180442デフォルトの名無しさん
2010/05/23(日) 15:58:20n%5を変数に入れて使い回した方が速かった
0443デフォルトの名無しさん
2010/05/23(日) 16:11:140444デフォルトの名無しさん
2010/05/23(日) 18:17:26#include <stdio.h>
int main(void)
{
int i,a[]={167,2,85,223,169,167,0,191,0,21,0,191,168,0,0,0,94,0,27,159,167,94,0,76,94,168,48,74,43};
for(i=0;i<sizeof(a)/4;i++)printf("%c",a[i]-127);printf("\n\n");
return 0;
}
0445デフォルトの名無しさん
2010/05/23(日) 19:08:490446デフォルトの名無しさん
2010/05/23(日) 20:27:56たいしたものでないので気にしないでw
0447デフォルトの名無しさん
2010/05/23(日) 20:43:57int main(void)
{
char key[] = "A52A2245332A252B435B2222A2B2A2A23A2C32A3B5B2222A52B43532A2352C23A52A2246D2A3533B35K2A4D22A3224A45D2C25B2A32A5D2C25D4A26C4A1";
char *p = key;
int i, c, b = 1;
while(*p)
{
c = 0;
for(i = 0; i < 8; i++)
{
if(*p == '0')
{
if(!*++p)
break;
b = !b;
}
c <<= 1;
c += b;
if((*p)-- == 'A')
*p = '0';
if(*p >= 'A')
b = !b;
}
if(c)
putchar(c);
}
return 0;
}
0448デフォルトの名無しさん
2010/05/23(日) 20:45:10このコード実行してしまったんですが大丈夫ですか?
0449デフォルトの名無しさん
2010/05/23(日) 21:22:070450デフォルトの名無しさん
2010/05/23(日) 22:22:11codepadつかえ
0451デフォルトの名無しさん
2010/05/23(日) 23:49:45#include <stdio.h>
int main(void){
char key[] = "A52A2245332A252B435B2222A2B2A2A23A2C32A3B5B2222A52B43532A2352C23A52A2246D2A3533B35K2A4D22A3224A45D2C25B2A32A5D2C25D4A26C4A1";
char *p = key;
int c, i, b = 1;
while(c = *p++){
if(c <= '9'){
c -= '0';
for(i=0; i < c; i++) printf("%c", b+'0');
b = !b;
} else {
switch(c - 'A' + 1){
case 1: // 'A'
if(b) printf("1"); else printf("0");
b = !b; break;
case 2: // 'B'
if(b) printf("10"); else printf("01");
break;
case 3: // 'C'
if(b) printf("101"); else printf("010");
b = !b; break;
case 4: // 'D'
if(b) printf("1010"); else printf("0101");
break;
case 11: // 'K'
if(b) printf("10101010101"); else printf("01010101010");
b = !b; break;
}
}
}
}
0452デフォルトの名無しさん
2010/05/23(日) 23:51:20codepad使え
0453デフォルトの名無しさん
2010/05/23(日) 23:53:25( レ⌒) |\ ( |\)| |/~| ノ ,__√ /7 ∠、 \ . 丶\ _ __
|\_/ /へ_ \) | | | |∠ | |__ | / ! | | |_〜、 レ' レ'
\_./| |/ \ .| |( ̄ _) | ) | | i | へ_,/ ノ ,へ
/ / ̄~ヽ ヽ. | | フ ヽ、 ノ √| | ! レノ | !. \_ ー ̄_,ー~' )
/ /| | | | | |( ノ| |`、) i ノ | | \_ノ ノ / フ ! (~~_,,,,/ノ/
| | | | / / | | . し' ノ ノ | | / / | |  ̄
\\ノ | / / | |___∠-". | | ノ / ノ | /(
\_ノ_/ / (____) し' ノ/ / / | 〜-,,,__
∠-''~ ノ/ (_ノ 〜ー、、__)
0454デフォルトの名無しさん
2010/05/24(月) 00:49:230455デフォルトの名無しさん
2010/05/24(月) 00:50:14なにこれcomウイルス?
0456デフォルトの名無しさん
2010/05/24(月) 02:24:56たとえばどんな構造体ですか?
struct a {
...
};
で定義してください。
0457デフォルトの名無しさん
2010/05/24(月) 11:48:43その文字があるかを求めるプログラムを作りたいんですがどうすればできますか?
0458デフォルトの名無しさん
2010/05/24(月) 11:50:420459デフォルトの名無しさん
2010/05/24(月) 11:53:03どうすればできるかサッパリわからなくて…
0460デフォルトの名無しさん
2010/05/24(月) 11:55:330461デフォルトの名無しさん
2010/05/24(月) 12:03:080462デフォルトの名無しさん
2010/05/24(月) 13:43:31strchr
strstr
0463デフォルトの名無しさん
2010/05/24(月) 15:12:27#include <string.h>
int main(int argc, char ** argv)
{
if (argc < 3) {
fprintf(stderr, "入力が不適切。使用法は割愛\n");
return 1;
}
char ch = argv[2][0];
char const * str = argv[1];
char const * rtn = strchr(str, ch);
if (rtn) {
printf("'%c'は\"%s\"の%d文字目\n", ch, str, rtn - str + 1);
return 0;
}
printf("'%c'は\"%s\"内に見つからない\n", ch, str);
return 0;
} // ちょっとリハビリの積もりで書いた。題意とちょっと違うが別に反省していない。
0464デフォルトの名無しさん
2010/05/24(月) 17:02:46例えば
1回目 13254678
2回目 45678123
見たいな感じです
0465デフォルトの名無しさん
2010/05/24(月) 17:05:16毎回乱数を使って入れ替え。
制約が緩ければ簡単だし、厳しければ難しくなるので、
制約条件をきっちり洗い出すことがなにより肝要。
0466デフォルトの名無しさん
2010/05/24(月) 18:16:21for(int i = 0; i < sizeof(s); i++){
int x = rand()%sizeof(s);
char c = s[x];
s[x] = s[i];
s[i] = c;
}
0467デフォルトの名無しさん
2010/05/24(月) 18:21:48入れ替え回数を sizeof(s) とする根拠をば。
0468デフォルトの名無しさん
2010/05/24(月) 18:30:59sizeof(s)より大きければ無駄(同じ場所を1回以上交換しても混ざり方は変わらない)。
だからsizeof(s)
0469デフォルトの名無しさん
2010/05/24(月) 18:33:49遺伝的アルゴリズムの本読んでも俺の頭ではちんぷんかんぷんだし。
0470デフォルトの名無しさん
2010/05/24(月) 18:35:04http://ja.wikipedia.org/wiki/%E6%93%AC%E4%BC%BC%E4%B9%B1%E6%95%B0
0471デフォルトの名無しさん
2010/05/24(月) 18:35:200472デフォルトの名無しさん
2010/05/24(月) 18:36:24遺伝的アルゴリズムよりはカオス理論とかでググったほうが楽だと思う
単に環境に依存しない再現性のある乱数を作りたいならメルセンヌツイスターとか
0473デフォルトの名無しさん
2010/05/24(月) 18:37:47プログラムでは普通の乱数では解決できないような気がします。俺なんか間違ったこといってますか?
0474デフォルトの名無しさん
2010/05/24(月) 18:38:53あなたのいう「乱数」の定義をしてください
0475デフォルトの名無しさん
2010/05/24(月) 18:39:21ほうほう〆(._.) ぐぐってみる
0476デフォルトの名無しさん
2010/05/24(月) 18:39:45無限の猿定理 - Wikipedia
http://ja.wikipedia.org/wiki/%E7%84%A1%E9%99%90%E3%81%AE%E7%8C%BF%E5%AE%9A%E7%90%86
0477デフォルトの名無しさん
2010/05/24(月) 18:42:350478デフォルトの名無しさん
2010/05/24(月) 18:46:12入れ替え回数を sizeof(s) とすれば、逆に二箇所一対しか交換していないような結果が出にくいのでは。
入れ替え回数を sizeof(s) にすれば一見ばらついているような結果が、たくさんでるだろうが、それはそれで、
「一見ばらついているような結果」しかでない、ある意味偏ったものになりませんか?
要するに、>>466 のアルゴリズムには理論的な根拠が乏しいかと。
0479デフォルトの名無しさん
2010/05/24(月) 18:50:19CPUの手を乱数で処理しようとしているのか。
ある程度の枝刈りを行った上で、候補となる手をいくつか導き、その中から意味のない乱数で選択するのはどうかね
0480デフォルトの名無しさん
2010/05/24(月) 18:50:22全ての箱に対して公平に全ての可能性を与えてるんだけど、それ以上偏りを無くすってどうするの?
0481デフォルトの名無しさん
2010/05/24(月) 18:54:360482デフォルトの名無しさん
2010/05/24(月) 18:54:52「すべての箱に公平な可能性」というのが、逆に偏りを生んでいるのでは?感覚的にいえば、ですが。
12345678 を並べ替えた結果がどれも 1/8! の確率で発生するように組む必要があると思うのです。
0483デフォルトの名無しさん
2010/05/24(月) 18:55:16いや、十分だよ。
入れ替え後、s[0]にはいる要素は
入れ替え前のs[0]〜s[sizeof(s)-1]のどれもがありえて、おのおのの確率は1/sizeof(s)となる。
逆に、増やしたり減らしたりすると、無駄どころか確率が変わってくるから逆にアウト
0484デフォルトの名無しさん
2010/05/24(月) 18:56:12成ってるじゃん。
0485デフォルトの名無しさん
2010/05/24(月) 18:57:02ちなみに、1/8!の確率にならない場合は、用いた乱数自体が偏ってる場合ね。
0486デフォルトの名無しさん
2010/05/24(月) 18:58:55これでもいいけど。
char s[] = "12345678";
for(int i = 0; i < sizeof(s); i++){
int x = rand()%(sizeof(s)-i)+i;
char c = s[x];
s[x] = s[i];
s[i] = c;
}
0487デフォルトの名無しさん
2010/05/24(月) 19:00:35組み合わせは
123
132
213
231
312
321
の6種のみ
>>466 だと全部で x の取り得る値は 3*3*3=27 通りの組み合わせになる
27通りというのは6で割り切れない
つまりいずれかの組み合わせは他よりも高くなってしまう
0488デフォルトの名無しさん
2010/05/24(月) 19:01:44int x = rand()%sizeof(s);
は
int x = rand()%i;
じゃないのか?
0489デフォルトの名無しさん
2010/05/24(月) 19:10:56詰め将棋のソフトやってみたら?
0490デフォルトの名無しさん
2010/05/24(月) 19:33:11これって重複してしまう場合があるんじゃないの?
0491デフォルトの名無しさん
2010/05/24(月) 19:36:36>>488
>>490
もうね、馬鹿は黙ってて!
0493デフォルトの名無しさん
2010/05/24(月) 19:59:02必死だな(笑)
0494デフォルトの名無しさん
2010/05/24(月) 19:59:50必死だな(笑)
0495デフォルトの名無しさん
2010/05/24(月) 20:01:04馬鹿
>>494
馬鹿
0496デフォルトの名無しさん
2010/05/24(月) 20:02:570497デフォルトの名無しさん
2010/05/24(月) 20:04:420498デフォルトの名無しさん
2010/05/24(月) 20:12:19xの出現順 結果
000 -> 312
001 -> 231
002 -> 213
010 -> 321
011 -> 132
012 -> 123
020 -> 231
021 -> 123
022 -> 132
100 -> 321
101 -> 132
102 -> 123
110 -> 312
111 -> 231
112 -> 213
120 -> 132
121 -> 213
122 -> 231
200 -> 132
201 -> 213
202 -> 231
210 -> 123
211 -> 312
212 -> 321
220 -> 213
221 -> 321
222 -> 312
ゆえに 132 213 231 は他に比べて出現確率が高くなる
0499488
2010/05/24(月) 20:14:59123の3要素の場合を考えてみるね。
int x = rand()%sizeof(s);
123 (4/27)
132 (5/27)
213 (5/27)
231 (5/27)
312 (4/27)
321 (4/27)
int x = rand()%i;
123 (1/6)
132 (1/6)
213 (1/6)
231 (1/6)
312 (1/6)
321 (1/6)
前者が偏ってないというのならそれでもいいけど、聞きかじったアルゴリズムはちゃんと検証しよう。
ちょっとした算数の知識でできるんだからさ。
0500488
2010/05/24(月) 20:15:480501デフォルトの名無しさん
2010/05/24(月) 20:18:44ゆえにと言われても。
円周率≒3.1415926535897932384626433832795
ゆえに、円周率を10進数で表すと0が現れない。
とか?
0502デフォルトの名無しさん
2010/05/24(月) 20:20:48総当りの結果に対してその反応ですか。
逆に、もっと試行回数を増やせばそのうちならされるのではないかという考え?
0503デフォルトの名無しさん
2010/05/24(月) 20:21:35ちょwwwあたまわるいwww
0504デフォルトの名無しさん
2010/05/24(月) 20:21:42じゃあ、>>486で。
0505デフォルトの名無しさん
2010/05/24(月) 20:23:21総当りで統計をとって、偏りがあることが明白になり、また偏りのない手法もみつかっているのに、その反応ですか?
0506デフォルトの名無しさん
2010/05/24(月) 20:26:210507デフォルトの名無しさん
2010/05/24(月) 20:29:22あとはバグに気付かず、指摘に対して馬鹿だアホだとわめいてるのが、、複数いたの?もしかして。
0508デフォルトの名無しさん
2010/05/24(月) 20:30:54int x = rand()%i;
だと0除算が起こるんじゃないの?
0509デフォルトの名無しさん
2010/05/24(月) 20:34:450510デフォルトの名無しさん
2010/05/24(月) 20:35:300511デフォルトの名無しさん
2010/05/24(月) 20:37:410512478≠498, 499
2010/05/24(月) 20:38:08いや、これは雑感なんですが、デスマーチプロジェクトの終盤になると、バグをみつけた人間がやたらと偉くなって評価が高くなり、
多少のバグがあるにせよ、こつこつとロジックを積み上げてきた人間を踏み潰してしまうことが多々あるんですよ。
そういう実例を目の当たりにしているので >>506 にちょっと共感しています。
>>491, >>495
崩れてはいけません。
0513デフォルトの名無しさん
2010/05/24(月) 20:41:460514デフォルトの名無しさん
2010/05/24(月) 20:42:420515デフォルトの名無しさん
2010/05/24(月) 20:52:51>>499は俺だけど、別にいいや。
0516デフォルトの名無しさん
2010/05/24(月) 21:01:090517デフォルトの名無しさん
2010/05/24(月) 21:16:54すみません。ちょっと誤解をまねく書き方でしたね。私は >>499 や >>498 のようなしっかりした論拠をもっていない、ただの >>478 という意味でした。
0518デフォルトの名無しさん
2010/05/24(月) 21:33:38ああ、終端文字も入っちゃうね。
これで。
char s[] = "12345678";
for(int i = 0; i < sizeof(s)-1; i++){
int x = rand()%(sizeof(s)-1-i)+i;
char c = s[x];
s[x] = s[i];
s[i] = c;
}
0519デフォルトの名無しさん
2010/05/24(月) 21:33:53ばーーーか。
0520デフォルトの名無しさん
2010/05/24(月) 21:59:250521デフォルトの名無しさん
2010/05/24(月) 22:35:04俺のところがブラックなだけかな。
0522デフォルトの名無しさん
2010/05/24(月) 22:39:320523デフォルトの名無しさん
2010/05/24(月) 23:28:31ありがとうございました
0524デフォルトの名無しさん
2010/05/25(火) 00:08:56for(i=0;<i> って書いてる人が居たんだ
何この表記
0525デフォルトの名無しさん
2010/05/25(火) 00:10:330526デフォルトの名無しさん
2010/05/25(火) 00:13:20河童の顔文字
0527デフォルトの名無しさん
2010/05/25(火) 00:14:08manko
0528デフォルトの名無しさん
2010/05/25(火) 01:02:50どうするんですか?
printf("%d\n",1<y<x-1);でいいんですか?
0529デフォルトの名無しさん
2010/05/25(火) 01:06:200530デフォルトの名無しさん
2010/05/25(火) 01:08:47そのまんま (y > 1) && (y < x - 1) だろ。
そのコードだと (1 < y) < x - 1 になってしまう。
0531デフォルトの名無しさん
2010/05/25(火) 01:18:35あのーもうひとつすいません。グラフ範囲はy>√2かつy<x-1でした。
√使うとコンパイルエラーでるんですが・・・
0532デフォルトの名無しさん
2010/05/25(火) 01:19:450533デフォルトの名無しさん
2010/05/25(火) 01:20:340534464
2010/05/25(火) 01:27:00今起きたら、たくさんレスがついててビックリしました
勉強になりました
0535デフォルトの名無しさん
2010/05/25(火) 01:30:42すげぇwwその機能ww
ありがとうw
まじで助かった。
√は使えないんだね。
0536デフォルトの名無しさん
2010/05/25(火) 01:44:13int num=123;
から
int a[0]=1;
int a[1]=2;
int a[2]=3;
というような具合です
0537デフォルトの名無しさん
2010/05/25(火) 01:45:340538デフォルトの名無しさん
2010/05/25(火) 02:00:14さんくす
0539デフォルトの名無しさん
2010/05/25(火) 02:11:37#include <stdio.h>
int main(void){
float x;
scanf("%e", &x);
printf("%d\n", x >= pow(3,1/2));
return 0;
}
これでxにpow(3,1/2)入れたら偽だった・・何故だ
>=ってあるから等しいときも含まれるので真だろ。何故だ・・・
0540デフォルトの名無しさん
2010/05/25(火) 02:20:51scanf() で式の解釈〜計算などはできない。あと、戻り値チェックしとけ。
0541デフォルトの名無しさん
2010/05/25(火) 02:22:121/2 -> 0 -> 0.
(int)/(int) -> (int) -> (double)
0542デフォルトの名無しさん
2010/05/25(火) 02:34:340543デフォルトの名無しさん
2010/05/25(火) 02:38:190544デフォルトの名無しさん
2010/05/25(火) 02:47:500545デフォルトの名無しさん
2010/05/25(火) 02:54:57しかし一体どういうことでしょうか?floatがまずいのかな?
どうしてもx≧√3において√3の場合真と出したいんだが。
あと戻り値チェックとはなんでしょう?
0546デフォルトの名無しさん
2010/05/25(火) 02:57:500547544
2010/05/25(火) 02:58:410548デフォルトの名無しさん
2010/05/25(火) 03:11:34問題点
(1) float, doubleのような浮動小数同士の等値比較はできないと覚えておくこと。
必ず誤差が発生するため。
どうしてもやりたい場合は、差が0.01以下などの条件に置き換える。
例: fabs(x - pow(3.0, 0.5)) <= 0.01
(2) scanf()での入力は、少数値で入れること。(例:1.7320508)
scanf()は数式を解析しない。
--ここから--
#include <stdio.h>
#include <math.h>
int main(void){
double x;
scanf("%lf", &x);
printf("%d\n", x >= pow(3.0,0.5));
return 0;
}
--ここまで--
0549デフォルトの名無しさん
2010/05/25(火) 03:12:13いったいキーボードから何を入力したのですか?
0550デフォルトの名無しさん
2010/05/25(火) 03:13:51そもそもxに代入するとき分数やpow自体代入できません。
scanfにおいてx,y二つ代入するとき、xにpowや分数を代入すると
yを代入できないまま終わります。これだと√3という境界を
含むように√3を代入できなければ困るのですが・・・・・
誰か分かりますか?
0551デフォルトの名無しさん
2010/05/25(火) 03:16:43pow(3, 1/2);
ではなくて、
pow(3, 0.5);
とか
pow(3, 1.0 / 2.0);
とかく。理由は入門書をみてくだしゃあ。
0552デフォルトの名無しさん
2010/05/25(火) 03:18:11では、キーボードからどういうふうに入力するのを想定しているのですか?
0553544
2010/05/25(火) 03:19:40540 :デフォルトの名無しさん :2010/05/25(火) 02:20:51
>>539
scanf() で式の解釈〜計算などはできない。あと、戻り値チェックしとけ。
0554デフォルトの名無しさん
2010/05/25(火) 03:48:59a[3][3]={ {2,3,7} , {4,6,1}, {5,8,0} }
を
a[3][3]={ {1,2,3} , {4,5,6} , {7,8,0} }
にソートするプログラムを作りたいのですがどのようにすれば作れますか?
具体的には、まず1と2を交換して、3と2を交換して、7と2を交換して・・・という方法です
0555デフォルトの名無しさん
2010/05/25(火) 03:52:410557デフォルトの名無しさん
2010/05/25(火) 03:57:410558デフォルトの名無しさん
2010/05/25(火) 03:57:45「手書きで、紙に鉛筆で書いて求めるなら、どうやってやるかなぁ?」 と考えたら、
たぶん最初に、使っていい数を
1、2、3、4、5、6、7、8
って書いて、
適当に一個選んで、その数字を消して
1、2、3、 、5、6、7、8
その消したところに、最後の数字を持ってきて
1、2、3、8、5、6、7
ってのを何度も繰り返して、だんだん短くしてって
1、6、7、8
最後まで全部使い切ったら終わり。と。
45231678
その手書きの時の考え方を、そのままプログラムにすればいいと思った。
http://codepad.org/sTJSPHtB
0559デフォルトの名無しさん
2010/05/25(火) 03:59:342次元変換しなくても大丈夫です
1次元配列だけで
よろしくお願いします
0560デフォルトの名無しさん
2010/05/25(火) 04:00:550561デフォルトの名無しさん
2010/05/25(火) 04:01:290562デフォルトの名無しさん
2010/05/25(火) 04:02:440563デフォルトの名無しさん
2010/05/25(火) 04:06:360564デフォルトの名無しさん
2010/05/25(火) 04:07:160565デフォルトの名無しさん
2010/05/25(火) 04:08:54宿題は宿題スレで
0566デフォルトの名無しさん
2010/05/25(火) 04:12:270567デフォルトの名無しさん
2010/05/25(火) 04:22:240568デフォルトの名無しさん
2010/05/25(火) 04:25:410569デフォルトの名無しさん
2010/05/25(火) 04:29:52>>540 だろ。
1.0/2.0 = 0.5
1/2 = 0 ... 1
1./2 ?
1/2. ?
0570デフォルトの名無しさん
2010/05/25(火) 04:54:54ただのソートじゃない?
0571デフォルトの名無しさん
2010/05/25(火) 05:04:510572デフォルトの名無しさん
2010/05/25(火) 05:21:24確かに0が最後だとめんどくさい
0573デフォルトの名無しさん
2010/05/25(火) 05:30:32みなさんありがとうございます。そうですね
>>552それが真理ですね・・・√はプログラム上では
無限に少数位が続くから、√3の収束値求めるの無理ですよね。
0574デフォルトの名無しさん
2010/05/25(火) 05:43:010575554
2010/05/25(火) 06:40:25int nu[]={2,8,5,1,7,6,3};
int nu_tmp=0;
for(int i=0;i<8;i++){
if(nu[i]!=i+1){
nu_tmp=nu[i];
for(int j=0;j<8;j++){
if(nu[j]==i+1){
nu[j]=nu_tmp;
}
}
nu[i]=i+1;
}
}
0576デフォルトの名無しさん
2010/05/25(火) 06:51:55ループ回数とか、実行結果とか。
なんか、いろいろ怪しい感じがするけど、大丈夫か?
0577デフォルトの名無しさん
2010/05/25(火) 07:02:12汚いかもしれません・・・
でも、ちゃんと動いてるので
0578デフォルトの名無しさん
2010/05/25(火) 07:24:07気になる点。
(1)配列nu で定義されている要素は7個(nu[0]〜nu[6])だが、forループ内でnu[7]を参照してる。
→nu[7](8個目)は未定義なので、定義した方がよくない?
(2)実行後、配列nuの要素を表示させてみると 1,2,3,4,5,6,7 が入っている。
→定義済みの値(8)が消え、未定義の値(4)が入っている。※論理バグの可能性。
0579デフォルトの名無しさん
2010/05/25(火) 07:27:56int nu[]={2,8,5,1,7,6,3};
じゃなくて
int nu[]={2,8,5,1,7,6,3,4};
でした・・・
見てくれてありがとうございます
0580デフォルトの名無しさん
2010/05/25(火) 11:47:550581デフォルトの名無しさん
2010/05/25(火) 12:33:000582デフォルトの名無しさん
2010/05/25(火) 15:40:41main() {
printf("Hello Wold!!\n");
return 0;
}
0583デフォルトの名無しさん
2010/05/25(火) 16:36:23printf("Hello Wold!!\n");
}
0584デフォルトの名無しさん
2010/05/25(火) 17:01:29//board
int board_x1 = 70+ZAHYOU_2P_X*f;
int board_y1 = 100;
int board_x2 = board_x1+BLOCK_YOKO*7;
int board_y2 = board_y1+BLOCK_TATE*10;
for(f=0; f<2; f++){
//boardの表示
DrawBox(board_x1,board_y1,board_x2,board_y2,black,false);
}
forループの中で使用するboard_x1に加算されたfを反映させるにはどうしたらいいですか?
素直に DrawBox の中で board_x1+ZAHYOU_2P_X*f と書くしかないのでしょうか。
0585デフォルトの名無しさん
2010/05/25(火) 17:01:45同意してやる。
0586デフォルトの名無しさん
2010/05/25(火) 18:02:38→加算されたfとは何に加算されたのか?
forループの中で使用する board_x1に加算されたf を反映させる
→反映させるとは何に反映させるのか?
0587デフォルトの名無しさん
2010/05/25(火) 18:16:17簡単な例で教えてください。大きな枝分かれが3、そこから
枝分かれが5だと。全部で15通りですよね?
switch文で簡単なプログラムをかくとき
caseの数は15個なのか、8個で済むのかどうなんでしょうか?
簡単な例でお願いします
0588デフォルトの名無しさん
2010/05/25(火) 18:18:2415個だな。書くのは面倒だが。
0589デフォルトの名無しさん
2010/05/25(火) 18:23:10switch(a){
case 1:
switch(b){
case 1:break;
case 2:break;
case 3:break;
case 4:break;
default:break;
}break;
case 2:
switch(b){
case 1:break;
case 2:break;
case 3:break;
case 4:break;
default:break;
}break;
default:
switch(b){
case 1:break;
case 2:break;
case 3:break;
case 4:break;
default:break;
}break;
}
0590デフォルトの名無しさん
2010/05/25(火) 18:28:120591デフォルトの名無しさん
2010/05/25(火) 18:28:42え??
8個じゃないんですか?
じゃぁ10×10×10のときは
caseを1000書くんですか??!?
0592デフォルトの名無しさん
2010/05/25(火) 18:29:230593デフォルトの名無しさん
2010/05/25(火) 18:31:001つで十分じゃないですか?
0594デフォルトの名無しさん
2010/05/25(火) 18:32:01caseは729個でいいよ。
0595デフォルトの名無しさん
2010/05/25(火) 18:34:49条件を一つのまとめられて、かつ、swtchを使いたいなら、それでいいんじゃないの
0596デフォルトの名無しさん
2010/05/25(火) 18:35:09fが0と1の時とで1p側と2p側をそれぞれ描画させるため、f=0に1を足す感じです。
それでforループの中のfが0から1になったら board_x1 = 70+ZAHYOU_2P_X*f; を更新させたいんですが・・・。
0597デフォルトの名無しさん
2010/05/25(火) 18:35:47お前みたいのはbreak書き忘れそうだからif文だけ使え
0598デフォルトの名無しさん
2010/05/25(火) 18:43:59こうだろうね。
//board
int board_y1 = 100;
int board_x2 = board_x1+BLOCK_YOKO*7;
int board_y2 = board_y1+BLOCK_TATE*10;
for(int f=0; f<2; f++){
//boardの表示
int board_x1 = 70+ZAHYOU_2P_X*f;
DrawBox(board_x1,board_y1,board_x2,board_y2,black,false);
}
0599デフォルトの名無しさん
2010/05/25(火) 18:57:05ありがとうございました。
forの中で更新すればいいんですね。
int board_x1 = 70+ZAHYOU_2P_X*f;
int board_y1 = 100;
int board_x2 = board_x1+BLOCK_YOKO*7;
int board_y2 = board_y1+BLOCK_TATE*10;
for(f=0; f<2; f++){
board_x1 +=ZAHYOU_2P_X*f;
board_x2 +=ZAHYOU_2P_X*f; //これがないと何故かboard_x2が更新されない
//hako
DrawBox(board_x1,board_y1,board_x2,board_y2,Color,false);
}
これでなんとかボードの座標を書きこむ場所を一箇所にまとめられそうです。
0600デフォルトの名無しさん
2010/05/25(火) 19:00:48かす
0601デフォルトの名無しさん
2010/05/25(火) 19:50:57ランダムな英字のテキストファイルを読み込み、その中の「a」だけをすべて削除して新しいテキストファイルに出力するプログラムが作りたいです。
作ってみたら、コンパイルは通るのですが実行ができません。
助けてください。
0602デフォルトの名無しさん
2010/05/25(火) 19:59:440603デフォルトの名無しさん
2010/05/25(火) 20:02:520604デフォルトの名無しさん
2010/05/25(火) 20:05:58NULL アドレスとその周辺に書き込みしてるから
0605デフォルトの名無しさん
2010/05/25(火) 20:09:24別途 int i; を定義して
while(EOF!=(i=fgetc(fp))) {
if('a'!=i)
fputc(i,fout);
}
とかの方がよくないかひ?
0606デフォルトの名無しさん
2010/05/25(火) 20:10:34Windows ならダブルクリックで OK.
*BSD や犬糞なら
$ ./a.out
で OK.
0607デフォルトの名無しさん
2010/05/25(火) 20:14:06char ch[] = "a" ;とかchar ch = 'a' ;にした方がいいんじゃないかと
0608「水田です」
2010/05/25(火) 20:15:13while(fgets(str,256,fp) != NULL){;
char *f = strstr(str, ch);
if( f != NULL )
*f='\0';
fprintf(fout, "%s", str);
if( f != NULL )
fputs(++f, fout);
}
0609デフォルトの名無しさん
2010/05/25(火) 20:40:03ringo mikanで個数で値段出すというプログラムどうします?
switch複数使ってどうやりますか?個数は1〜3、値段はどちらも
一個一円ということで。
0610デフォルトの名無しさん
2010/05/25(火) 20:47:470611デフォルトの名無しさん
2010/05/25(火) 20:50:22なぜ?
0612デフォルトの名無しさん
2010/05/25(火) 20:55:21int 値段;
int みかんの個数, みかんの値段;
int りんごの個数, りんごの値段;
値段 = みかんの個数*みかんの値段+りんごの個数*りんごの値段;
0613デフォルトの名無しさん
2010/05/25(火) 21:00:45int calc(int ringo, int mikan){
switch(ringo){
case 1: switch(mikan){ case 1: return 2; case 2: return 3; case 3: return 4; }
case 2: switch(mikan){ case 1: return 3; case 2: return 4; case 3: return 5; }
case 3: switch(mikan){ case 1: return 4; case 2: return 5; case 3: return 6; }
}
}
>>612
よく見ろよ。switchの中でswitchを使いたいって言ってるだろ。
switch使わない回答はNGだぜ
0614デフォルトの名無しさん
2010/05/25(火) 21:00:57switch(ringo){
case 1:
switch(mikan){
case 1:nedan = 2; break;
case 2:nedan = 3; break;
case 3:nedan = 4; break;
default:nedan = -1;break;
}break;
case 2:
switch(mikan){
case 1:nedan = 3; break;
case 2:nedan = 4; break;
case 3:nedan = 5; break;
default:nedan = -1;break;
}break;
case 3:
switch(mikan){
case 1:nedan = 4; break;
case 2:nedan = 5; break;
case 3:nedan = 6; break;
default:nedan = -1;break;
}break;
default:nedan = -1;break;
}
0615デフォルトの名無しさん
2010/05/25(火) 21:06:03{
default:
switch(ringo)
{
default: nedan = mikan_nedan * mikan + ringo_nedan * ringo;
}
}
0616デフォルトの名無しさん
2010/05/25(火) 21:07:41#include<stdio.h>
int main(void){
char x; int n;
switch(x){
x = case 'A' : printf("switch(n){
case 1 : printf("%d\n",2*1);break;
case 2 : printf("%d\n",2*2);break;
case 3 : printf("%d\n",2*3);break;
{");}
長すぎますので書けないのでミカン略。
複雑すぎる。でもこれがしたい。お願いします誰か。
0617デフォルトの名無しさん
2010/05/25(火) 21:09:19初期化してないポインタにデータ直接突っ込むのはどうかなと
0618デフォルトの名無しさん
2010/05/25(火) 21:11:34それは冗談で言っているんだよな
0619デフォルトの名無しさん
2010/05/25(火) 21:14:47しかもボクプロのプログラマーです。
0620デフォルトの名無しさん
2010/05/25(火) 21:16:39君はいつもの中学生だよね?
0621デフォルトの名無しさん
2010/05/25(火) 21:20:32簡単に書けるプログラムをわざわざ複雑にする理由はなんなの?
0622デフォルトの名無しさん
2010/05/25(火) 21:21:53int main(void){
double x;
x = (%.20f=M_PI);
printf("%f + %f = %f", x, 1, x + 1);
} これ実行できません・・・
%.20fってのはprintfの中でしかできないんですか?
x = printfとはできないんで、こうするしかないのですが・・・
0623デフォルトの名無しさん
2010/05/25(火) 21:24:130624デフォルトの名無しさん
2010/05/25(火) 21:24:200625デフォルトの名無しさん
2010/05/25(火) 21:25:10>>619は違う人だけど、
char* ch = "a";ってのはchに"a"を入れるってことで、
char ch[] = "a";ってのはchに配列を確保して"a"をいれるってことだと思ったんだ
それとも、同じなのか?
0626デフォルトの名無しさん
2010/05/25(火) 21:26:06いや、構文を理解しないといけないから方法を凝るとかどうでもいい。
使い方を知りたいだけ。簡単にかけようがどうでもいい。
0627デフォルトの名無しさん
2010/05/25(火) 21:27:31一通り入門書読み終わってから独自のことやろうとしろよ。
0628デフォルトの名無しさん
2010/05/25(火) 21:28:31char *ch = ...;
と
char *ch;
*ch = ...;
は全く別物
0629デフォルトの名無しさん
2010/05/25(火) 21:28:36すいません
気をつけます(´・ω・`)
0630デフォルトの名無しさん
2010/05/25(火) 21:29:29変数xとして代入したい。どうしたらいいんですか?
0631601
2010/05/25(火) 21:31:41なんとか実行できるようにはなりました
しかしどうやら同じ行にaがたくさん入っていると最初のaしか削除されないみたいです
>>608もそうでした
どうやってすべてのaを検索し、削除したらいいのでしょうか
0632デフォルトの名無しさん
2010/05/25(火) 21:33:37char *ch = "a";とchar ch[] = "a";は同じってことでいいのか
0633デフォルトの名無しさん
2010/05/25(火) 21:35:13double でも15桁の精度しかないぞ
10桁の場合なら
x-=fmod(x, 1e-10);
0634デフォルトの名無しさん
2010/05/25(火) 21:35:54違うよ
0635デフォルトの名無しさん
2010/05/25(火) 21:41:01じゃあなんでchar *ch = "a";がおかしくないって言えるのさ
0636デフォルトの名無しさん
2010/05/25(火) 21:42:17秘密だよ
0637デフォルトの名無しさん
2010/05/25(火) 21:43:58floatで15ケタならどうしたらいいですか?
何故intの場合
a = 1とかできるのに
floatは
a = (%.15f=M_PI)とできないのですか?
このaを自由に使いたいのに・・・
a = printfとはできないですからね。
0638デフォルトの名無しさん
2010/05/25(火) 21:45:51まあいいや、どっちでも
今までたまたま動いてきたんだろうが
0639デフォルトの名無しさん
2010/05/25(火) 21:46:34もしかして文字列と整数型の区別できてないんじゃない
0640デフォルトの名無しさん
2010/05/25(火) 21:47:08#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(void)
{
system("echo babab > file.txt");
FILE* fp_read = NULL;
if((fp_read = fopen("file.txt", "r")) == NULL){
printf("error!!\n");
exit(1);
}
FILE* fp_write = NULL;
if((fp_write = fopen("afterfile.txt", "w")) == NULL){
printf("error!!\n");
exit(1);
}
int c;
while((c = fgetc(fp_read)) != EOF){
if(c != 'a'){
printf("%c", c);
fputc(c, fp_write);
}
}
fclose(fp_read);fclose(fp_write);
system("cat afterfile.txt");
return 0;
}
0641デフォルトの名無しさん
2010/05/25(火) 21:49:23できてますよ。
intは整数でしょう
floatは実数でしょう。
このままじゃ・・・
float15ケタどうしますか?
0642デフォルトの名無しさん
2010/05/25(火) 21:51:32float の精度は7桁
a=M_PI;
にしたくない理由は何?
0643デフォルトの名無しさん
2010/05/25(火) 21:53:42それは言いたくないです・・
とりあえず桁を設定したいんです。
0644デフォルトの名無しさん
2010/05/25(火) 21:54:28お願いします。
0645デフォルトの名無しさん
2010/05/25(火) 21:56:52> char *ch = "a";とchar ch[] = "a";は同じってことでいいのか
ちがう、が、両方とも思ったように動く。たまたまではない。
0646デフォルトの名無しさん
2010/05/25(火) 21:58:07char *strstr(const char *s1,const char *s2);
constで引数とってるからだと思うよ
0647デフォルトの名無しさん
2010/05/25(火) 22:04:060648デフォルトの名無しさん
2010/05/25(火) 22:05:22戻った先で読むだけで書き換えしなきゃ大丈夫
0649デフォルトの名無しさん
2010/05/25(火) 22:06:17たまたまだよ
>>646
そのconstはstrstrの中で引数はいじられませんよ、ってだけでは
0650デフォルトの名無しさん
2010/05/25(火) 22:13:46(2) >>625について、
char* ch = "a"; は、ポインターchを文字列定数へのポインターで初期化する。(文字列のコピーは発生しない)
char* ch[] = "a"; は、配列chを文字列"a"で初期化する。(文字列のコピーが発生する)
0651デフォルトの名無しさん
2010/05/25(火) 22:17:13char *p = "aaaa";
どこかにある"aaaa"というデータの先頭のアドレスをpに入れる
書き換えはよろしくないので
char const *p = "aaaa";
にするべきだがコンパイラはこのことについてはなにも言ってくれない
char a[] = "bbbb";
aの配列を適切な大きさにとってそこに"bbbb"を書き込む
aを書き換えてももとの"bbbb"には影響しない
0652デフォルトの名無しさん
2010/05/25(火) 22:17:44>char* ch[] = "a"; は、配列chを文字列"a"で初期化する。(文字列のコピーが発生する)
char ch[](ryの間違えかな
>1-651
char ch[1] = "a";の場合はどうなるんですか
0653デフォルトの名無しさん
2010/05/25(火) 22:20:50rand()が11 22 33 44って返してきたら 44 33 22 11と出力する感じで
0654デフォルトの名無しさん
2010/05/25(火) 22:20:570655デフォルトの名無しさん
2010/05/25(火) 22:21:03>char* ch[]
これじゃコンパイラ通らんわな
0656デフォルトの名無しさん
2010/05/25(火) 22:28:58>char ch[](ryの間違えかな
そうだね。
0657デフォルトの名無しさん
2010/05/25(火) 22:31:11何のために?
0658デフォルトの名無しさん
2010/05/25(火) 22:31:52"aaaa"がまず取られるってことか、納得
書き込みしなきゃどっちで書いてもいいか
0659デフォルトの名無しさん
2010/05/25(火) 22:31:55(2) >>625について、
char* ch = "a"; は、ポインターchを文字列定数へのポインターで初期化する。(文字列のコピーは発生しない)
char ch[] = "a"; は、配列chを文字列"a"で初期化する。(文字列のコピーが発生する)
0660デフォルトの名無しさん
2010/05/25(火) 22:33:29一旦どこかに保存する必要がある
あなたの想定している 「バッファ」 以外に保存すればできる
0661デフォルトの名無しさん
2010/05/25(火) 22:38:28とりあえず精度7ケタのfloatで表す方法ないですかねぇ?
0662デフォルトの名無しさん
2010/05/25(火) 22:39:07> char ch[1] = "a";の場合はどうなるんですか
配列に収まらないのでコンパイルエラー
0663デフォルトの名無しさん
2010/05/25(火) 22:40:19得られる値の総数が不明なので予めバッファを確保しておけないのです
>>660
「バッファ」 以外ってなんです?
0664デフォルトの名無しさん
2010/05/25(火) 22:40:41void func(unsigned n) { unsigned r = rand(); if(n != 0) func(n - 1); else return; printf("%lu ", r); }
無理ですた
0665デフォルトの名無しさん
2010/05/25(火) 22:42:560666デフォルトの名無しさん
2010/05/25(火) 22:44:16終りの合図が来るまで総数が不明だからいくつバッファを確保したらいいかわかりません。
0667デフォルトの名無しさん
2010/05/25(火) 22:46:590668デフォルトの名無しさん
2010/05/25(火) 22:48:30a = (%.7e=b)
はだめなのですか?マジレス希望。
0669デフォルトの名無しさん
2010/05/25(火) 22:48:42乱数というのは例えばなんで実際は意味のあるデータのリストなんです。
正順からしかアクセスできない長さ不明のリストを逆順に処理したいんです。
0670デフォルトの名無しさん
2010/05/25(火) 22:50:00いいだけだと思うんだが。まだ知らされてない設定があるのかな。
0671デフォルトの名無しさん
2010/05/25(火) 22:51:21いやいや!バッファを使わないのが最初の設定なんで!
0672デフォルトの名無しさん
2010/05/25(火) 22:52:00他言語に移行しろ
0673デフォルトの名無しさん
2010/05/25(火) 22:52:05リンクドリストツカウイイデス
0674デフォルトの名無しさん
2010/05/25(火) 22:54:10わざわざ確かめちゃったよ
char ch[] = "aaaa";
ch[1] = 'b';
なら、chは"abaa"
char* ch = "aaaa";
ch[1] = 'b';
だと、強制終了
char ch[]ならRAMに割り付けられて、
char* chだとどこに割り付けられてんのか分かんないってことで
脳味噌にQAC掛けた方がいい奴がいるな
0675デフォルトの名無しさん
2010/05/25(火) 22:54:20ちょww
それはまじで簡便、C言語使わないとだめなんで。
趣味でやってるわけじゃないんで。
誰か〜・・・
0676デフォルトの名無しさん
2010/05/25(火) 22:55:11試してみましたか
規格書は読みましたか
0677デフォルトの名無しさん
2010/05/25(火) 22:55:54標準関数使わないで、自作していいなら、それぞれ正順、逆順に
乱数を計算するルーチンを作ればいいだけだけどな。
0678デフォルトの名無しさん
2010/05/25(火) 22:57:55無理つってんだろカス
0679デフォルトの名無しさん
2010/05/25(火) 23:00:48じゃぁ宿題できねぇ・・・
複雑な計算できないじゃん。
0680デフォルトの名無しさん
2010/05/25(火) 23:02:04乱数はどうでもいいんです!
「正順からしかアクセスできない長さ不明のリストをバッファを使わずに逆順に処理する」
このアルゴリズムがあったら知りたいんです!
0681デフォルトの名無しさん
2010/05/25(火) 23:05:53doubleという高精度実数型があるしそっち使ったほうがよくね?
0682デフォルトの名無しさん
2010/05/25(火) 23:06:210683デフォルトの名無しさん
2010/05/25(火) 23:08:11長さ不明でもリストを辿っていくとちゃんと終りが来るんです。安心してください!
0684デフォルトの名無しさん
2010/05/25(火) 23:12:12リストの終わりまでまず空読みして、サイズを求めることだな
0685デフォルトの名無しさん
2010/05/25(火) 23:13:580686デフォルトの名無しさん
2010/05/25(火) 23:13:59それじゃ結局バッファ必要じゃないですか!スカポンタン!
0687デフォルトの名無しさん
2010/05/25(火) 23:14:01配列に代入するまでのテンポラリーのことを指してるのか
配列自体のことを指しているのか
0688デフォルトの名無しさん
2010/05/25(火) 23:15:42勝手にリスト削除したら管理者に怒られるでしょが!
0689デフォルトの名無しさん
2010/05/25(火) 23:16:250690デフォルトの名無しさん
2010/05/25(火) 23:16:34#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct list{
int num;
struct list* prev;
}list;
int main(void){
int nums[10] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
srand((unsigned) time(NULL));
int owari_no_aizu = rand() % 10;
list* p = NULL;
for(int i=0; i<owari_no_aizu; i++){
list* p_tmp = (list*)malloc(sizeof(list));
p_tmp->prev = p;
p_tmp->num = nums[i];
p = p_tmp;
}
while(p!=NULL){
printf("%d,", p->num);
list* p_tmp = p;
p = p->prev;
free(p_tmp);
}
return 0;
}
0691デフォルトの名無しさん
2010/05/25(火) 23:17:240692デフォルトの名無しさん
2010/05/25(火) 23:22:46それ思い切りバッファ使ってるじゃないですか!別の領域作ってデータ保存してるし!
再帰とかでうまいことできないんですか。
int nums[10] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9,-1};
void test( index )
{
if( nums[ index ] == -1 )
{
return;
}
test( index + 1 );
printf( "%d ", nums[ index ] );
}
こんな感じで。
できれば再帰じゃなくてループでうまいこと出来ませんか!
0693デフォルトの名無しさん
2010/05/25(火) 23:24:230694デフォルトの名無しさん
2010/05/25(火) 23:24:230695デフォルトの名無しさん
2010/05/25(火) 23:24:530696デフォルトの名無しさん
2010/05/25(火) 23:25:01だから、空読みだよ
int i = 0;
while(list[i++] != END_OF_LIST);
とか
で、iだかi-1がサイズだからその後に
1番上と1番下をswap
2ry
ってやれば、バッファはlistの要素1個分の変数で済むわけだ
0697デフォルトの名無しさん
2010/05/25(火) 23:26:08> 得られる値の総数が不明なので予めバッファを確保しておけないのです
何のために逆順にするの?
0698デフォルトの名無しさん
2010/05/25(火) 23:26:28環境がミニマムだったり規約でヒープ禁止だったりするじゃないですか!
0699デフォルトの名無しさん
2010/05/25(火) 23:28:22ツリー構造で葉から根に向かって処理するときとかですよ!
ツリー構造ってアクセスは根>葉の順番でしかアクセス出来ないでしょ!
0700デフォルトの名無しさん
2010/05/25(火) 23:29:270701デフォルトの名無しさん
2010/05/25(火) 23:29:45いいですね!でもリストの値書き換えるの禁止でした!すいません!
0702デフォルトの名無しさん
2010/05/25(火) 23:30:49なんか全然無関係の事してるんだがそれ。
> char ch[1] = "a"
がどこにも出てきてないぞ。
>>676
試してない。codepadでやってみたらエラーにならないね。
とりあえず手元にK&RしかないんだがP.273より
> 配列が固定したサイズをもつ場合には、初期値式の数はその配列のメンバーの数を越えてはならない。
0703デフォルトの名無しさん
2010/05/25(火) 23:31:42だったら写し先に逆順で入れてきゃいいだろ
サイズわかったんだから
0704デフォルトの名無しさん
2010/05/25(火) 23:38:07int main(void)
{
int nums[10] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
// owari no aizu
srand((unsigned) time(NULL));
int owari_no_aizu = rand() % 10;
int counter = 0;
int i;
for(i=0; i<owari_no_aizu; i++){
counter++;
}
while(counter > 0){
printf("%d,", nums[counter]);
counter--;
}
return 0;
}
0705デフォルトの名無しさん
2010/05/25(火) 23:38:17int Rand()
{
const int nums[] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9,-1}; // -1が終りの合図
static int index = 0;
return nums[ index ++ ];
}
Rand()で得られる0, 1, 2, 3, 4, 5, 6, 7, 8, 9を
9 8 7 6 5 4 3 2 1 0と表示したいんです。
もちろんnumsの中身はユーザーはわかりません
配列を確保したりnewとかmallocは禁止です!
0706デフォルトの名無しさん
2010/05/25(火) 23:39:28リストに逆順にアクセスしてるやないか!
正順でしかアクセス出来ないと言っとるだろ!
0707デフォルトの名無しさん
2010/05/25(火) 23:40:28"a"は'a'と'\0'だから、問題ないんじゃない?
0708デフォルトの名無しさん
2010/05/25(火) 23:43:12>>664
0709デフォルトの名無しさん
2010/05/25(火) 23:45:25int num;
struct list* next;
}list;
な片方向リンクドリストだとして、先頭を
void func(list* dec){
if(!dec)return;
func(dec->next);
printf("%d,", dec->num);
}
に渡すってのでどうなんだ。リストが長いとそのうちコケるが。
まぁリンクドリストじゃなくて配列でも同じ事できるよな。
0710デフォルトの名無しさん
2010/05/25(火) 23:47:53ドw
0711デフォルトの名無しさん
2010/05/25(火) 23:48:310712デフォルトの名無しさん
2010/05/25(火) 23:48:48>>709
ありがとうございます!
でも再帰の方法は>>692で出しました!
スタックが心配なんでループでうまいこと出来ませんか!?
0713デフォルトの名無しさん
2010/05/25(火) 23:48:560714デフォルトの名無しさん
2010/05/25(火) 23:49:14よく分からんが、精度の高い円周率がほしいということでいいの?
なら計算すればよくね?
0715デフォルトの名無しさん
2010/05/25(火) 23:50:35明白に越えさせてもエラーにならない。
http://codepad.org/Kmcja5MM
0716デフォルトの名無しさん
2010/05/25(火) 23:50:36int Rand()
{
const int nums[] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9,-1}; // -1が終りの合図
static int searched_size;
static int search_size_flg = 0;
int i = 0;
if(search_size_flg == 0){
while(nums[i++] != -1);
searched_size = i - 2; //ぁゃιぃ
search_size_flg = 1;
}
if(searched_size >= 0) return nums[searched_size--];
else return -1;
}
0717デフォルトの名無しさん
2010/05/25(火) 23:55:25きっさまあああああああああああああ!!!
0718デフォルトの名無しさん
2010/05/25(火) 23:56:34>702
ISO/IEC 9899:1999 (E)
6.7.8 Initialization
Semantics
32 EXAMPLE 8 The declaration
char s[] = "abc", t[3] = "abc";
defines ``plain'' char array objects s and t whose elements are initialized with character string literals.
This declaration is identical to
char s[] = { 'a', 'b', 'c', '\0' },
t[] = { 'a', 'b', 'c' };
細かいことだけど、誰も規格書を読んでないという悲しさ
以後、精進せよ
0719デフォルトの名無しさん
2010/05/25(火) 23:58:38ツリー構造の探索は再帰を使ってる?
それならスタック遡るだけでいいよね。(この場合スタックがバッファーなんだろうけど。)
0720デフォルトの名無しさん
2010/05/26(水) 00:00:49>>702のレスはコンパイルエラーになるかどうかが焦点なんじゃないの?
規格で禁止されていることは認識しているようだし。
実際試すとコンパイルエラーにはならないよ(gcc)。
-Werrorつけたら別だけど、そういう話でもないよね。
0721デフォルトの名無しさん
2010/05/26(水) 00:00:49t[4] = "abc";ならt[] = { 'a', 'b', 'c', '\0' };ってことでおkじゃないの?
0722デフォルトの名無しさん
2010/05/26(水) 00:03:080723デフォルトの名無しさん
2010/05/26(水) 00:03:10精度はいらないけどメモリ節約したい場合なんかに使う
数個しか使わないならメモリとか関係ないけど
0724デフォルトの名無しさん
2010/05/26(水) 00:05:05溢れさせなきゃいいのさ
ただしお勧めはできない
0725デフォルトの名無しさん
2010/05/26(水) 00:05:18さすがにそれはおかしい
>702が言っているように初期化子リストの要素数は配列の要素数を超えてはいけないのが原則であるが、>718の場合('\000'がはみ出ている)のみ許される訳でそれ以外は許していない
規格引用しろとか言わないでね
gccなら-pedantic-errors付ければ分かるよ
0726デフォルトの名無しさん
2010/05/26(水) 00:13:330727デフォルトの名無しさん
2010/05/26(水) 00:14:490728デフォルトの名無しさん
2010/05/26(水) 00:19:54精進せよw
0729デフォルトの名無しさん
2010/05/26(水) 00:21:26union {
unsigned char BYTE;
struct {
unsigned char NOV :3;
unsigned char STR4:1;
unsigned char STR3:1;
unsigned char STR2:1;
unsigned char STR1:1;
unsigned char STR0:1;
} BIT;
} TSTR;
としたりしますが、これについて解説お願いします。
メモリにはバイトの領域が確保されますか?
0730デフォルトの名無しさん
2010/05/26(水) 00:22:56再帰で書いてみた、メモリーを使わないで記憶は出来ないという法則。
#include <stdio.h>
int Rand(int *a){
int b;
if(*a != -1){
b = Rand(&a[1]);
printf("%d ", b);
}
return a[0];
}
int main(void){
int a[]={1,2,3,4,5,-1};
int b;
b = Rand(a);
printf("%d ", b);
}
0731デフォルトの名無しさん
2010/05/26(水) 00:24:25BYTE 8ビット
BIT.NOV 3ビット STR4-0 各1ビット
が同じレジスタ
0732デフォルトの名無しさん
2010/05/26(水) 00:25:57ビットフィールドにする利点なんて存在するの?
0733デフォルトの名無しさん
2010/05/26(水) 00:26:15ここの問題2−3かと思ったけど、計算がどうの書いてるから違うか
0734デフォルトの名無しさん
2010/05/26(水) 00:26:47型安全
0735デフォルトの名無しさん
2010/05/26(水) 00:33:52なるほど。わかりました。
変数名のよこの:はなんでしょうか
0736デフォルトの名無しさん
2010/05/26(水) 00:35:290737デフォルトの名無しさん
2010/05/26(水) 00:39:490738デフォルトの名無しさん
2010/05/26(水) 00:41:02ビットフィールド
0739デフォルトの名無しさん
2010/05/26(水) 00:46:16だめじゃん
通信とかの規格絡みの構造体作るときに、怠けられること
まあマクロでいいかな
0740デフォルトの名無しさん
2010/05/26(水) 00:56:120741デフォルトの名無しさん
2010/05/26(水) 00:57:120742デフォルトの名無しさん
2010/05/26(水) 01:00:07コンパイラよりうまく出来るかは分からんが、コンパイラより間違わないわな
0743デフォルトの名無しさん
2010/05/26(水) 01:01:00コンパイラより間違わないわな
0744デフォルトの名無しさん
2010/05/26(水) 01:01:370745デフォルトの名無しさん
2010/05/26(水) 01:02:310746デフォルトの名無しさん
2010/05/26(水) 01:04:540747デフォルトの名無しさん
2010/05/26(水) 01:07:110748デフォルトの名無しさん
2010/05/26(水) 01:17:45ビットフィールドへのアクセスで実際に発生するメモリ読み書きの回数は
実装依存になるんで、 ハードウェアのレジスタに直結してる値を
ビットフィールドにするのは危ない。 よく確認してから使うべき。
0749デフォルトの名無しさん
2010/05/26(水) 01:20:410750デフォルトの名無しさん
2010/05/26(水) 01:54:24そうもいかないのがつらいところだ
0751デフォルトの名無しさん
2010/05/26(水) 02:19:060752デフォルトの名無しさん
2010/05/26(水) 03:18:53毎回、先頭から辿り直せば良いよ。
0753デフォルトの名無しさん
2010/05/26(水) 04:07:13これ↓って、
>char const *p = "aaaa";
これ↓の間違いではないのでしょうか?
const char *p = "aaaa";
0754デフォルトの名無しさん
2010/05/26(水) 04:59:33どっちも一緒だよ
0755デフォルトの名無しさん
2010/05/26(水) 05:25:42そうなんだ。
�d
0756デフォルトの名無しさん
2010/05/26(水) 06:56:30そういう環境ばっかりじゃないんだよ
0757デフォルトの名無しさん
2010/05/26(水) 07:34:020758デフォルトの名無しさん
2010/05/26(水) 09:29:56[2] 問題文 キーボードから読み込んだ整数のうちの偶数の和の計算を続け、もし2回連続して奇数が読み込まれたら、それ以降は奇数のみの和の計算に切り替える。
そして、次に偶数もしくは奇数が2回連続して読み込まれたら、読み込みを中止して偶数の和と奇数の和を表示させる。
[3] 環境
[3.1] OS: Mac
[3.2] コンパイラ名とバージョン: cc
[3.3] 言語: C
[4] 期限: 5月27日
0759デフォルトの名無しさん
2010/05/26(水) 09:31:06宿題スレでやれ
0760デフォルトの名無しさん
2010/05/26(水) 09:59:310761デフォルトの名無しさん
2010/05/26(水) 11:32:25>>760
あ、わからないんだったら、無理して答えなくていいから
0762デフォルトの名無しさん
2010/05/26(水) 12:11:23>>759>>760は引き続き黙ってていいから
0763デフォルトの名無しさん
2010/05/26(水) 12:22:18時間見てびっくりした
0764デフォルトの名無しさん
2010/05/26(水) 15:47:06仕様がよくわからないのですが、下の??に値を入れてもらえます?
Input Number: 2
偶数の和=??、奇数の和=??
Input Number: 3
偶数の和=??、奇数の和=??
Input Number: 3
偶数の和=??、奇数の和=??
Input Number: 3
偶数の和=??、奇数の和=??
Input Number: 2
偶数の和=??、奇数の和=??
Input Number: 3
偶数の和=??、奇数の和=??
Input Number: 3
偶数の和=??、奇数の和=??
0765デフォルトの名無しさん
2010/05/26(水) 16:00:24Input Number: 2
偶数の和=2、奇数の和=0
Input Number: 3
偶数の和=2、奇数の和=0
Input Number: 3(ここから奇数のみの和に切り替え)
偶数の和=2、奇数の和=3
Input Number: 3(奇数が連続したのでここで終了)
偶数の和=2、奇数の和=3
じゃないのかなー
0766デフォルトの名無しさん
2010/05/26(水) 17:33:19インターフェースのデザインとして不格好だと思う。
いくらテキストベースでも、いくら練習問題にしても、操作方法があまりにも直感的でなさすぎる。
まず、使う人間に対して
「今、偶数を入力した」、「今、奇数を入力した」を、
「わざわざ意識しなくても使えるような前提」(プログラムが偶数、奇数の判断をする)
なのにもかかわらず、
処理を切り替えたり、結果を表示する等の『モード変更』の段階では、
使う人間に対して、「自分が入力した数字が偶数なのか?、奇数なのか?」を判断させている。つまり「暗黙に暗算」をさせている。
これは使う上でのストレスになる。
モードの切り替えは偶数、奇数ではなく、「数に関係ない記号」としての00や01を用いるべきだと思う。
(たとえテンキーしか使えない前提であっても)
0767デフォルトの名無しさん
2010/05/26(水) 17:47:11不毛すぎる
0768デフォルトの名無しさん
2010/05/26(水) 17:57:55その仕様で頑張って作ってみた。 どう?
#include <stdio.h>
typedef enum { EVEN, ODD, FIN } MODE;
int main(void) {
MODE mode = EVEN, pre_is_odd = FIN, is_odd;
int num, odd_sum = 0, even_sum = 0;
for(;;) {
printf("Input Number: ");
scanf("%d", &num);
is_odd = num % 2;
if( pre_is_odd == is_odd ) {
if( mode == EVEN && is_odd ) mode++;
else if( mode == ODD ) mode++;
}
pre_is_odd = is_odd;
if( mode == EVEN && !is_odd ) even_sum += num;
else if( mode == ODD && is_odd ) odd_sum += num;
else if( mode == FIN ) break;
}
printf("偶数の和=%d\n奇数の和=%d", even_sum, odd_sum);
return 0;
}
0771デフォルトの名無しさん
2010/05/26(水) 18:53:510772デフォルトの名無しさん
2010/05/26(水) 18:53:550773デフォルトの名無しさん
2010/05/26(水) 18:57:42黙れ
0774デフォルトの名無しさん
2010/05/26(水) 18:58:30黙れ
0775デフォルトの名無しさん
2010/05/26(水) 20:03:210776デフォルトの名無しさん
2010/05/26(水) 22:10:36釣りじゃないなら俺が適当に予想した>>765の挙動でいいのかどうかを教えてくれないか。
それをもとにコーディング済ませちゃった人もいるんだ。
0777デフォルトの名無しさん
2010/05/26(水) 22:28:13http://pc12.2ch.net/test/read.cgi/tech/1269438098/986
あっちは実力者ぞろいだから、多少の煽りなぞものともせずにコードがあがってくる。宿題以外の質問でも、それにもかかわらず間髪いれずに回答が出てくる。
このスレいらないんじゃない?
0778デフォルトの名無しさん
2010/05/27(木) 00:34:08例えば名札の部分をswitch(x)で名札の部分を(1 < x && x < 10)
とかできないんですか?
0779デフォルトの名無しさん
2010/05/27(木) 00:35:23できません
0780デフォルトの名無しさん
2010/05/27(木) 00:40:37では1≦x≦10のときxに対して関数f(x)
10≦x≦20のときxに対して関数g(x)をする
構文何ですか?whileですかねぇ?while使ったけど
できませんでした。どうやりますか?
0781デフォルトの名無しさん
2010/05/27(木) 00:41:47if を使います
0782デフォルトの名無しさん
2010/05/27(木) 00:42:060783デフォルトの名無しさん
2010/05/27(木) 00:45:43ありがとうございます。何故whileはだめなのでしょうか?
あとwhileでやるとコンパイル成功してもバグっってカーソルが
出てきたまま止まったり、printfを中に入れると、ずらずらーと
永遠に同じ計算が出てきてこれもばぐるのですが何故ですか?
0784デフォルトの名無しさん
2010/05/27(木) 00:47:09さすがにエスパーでないので分かりません
0785デフォルトの名無しさん
2010/05/27(木) 00:49:381日で習得出来た
0786デフォルトの名無しさん
2010/05/27(木) 00:52:41あっちでもこっちでも時間があるときしかしないよ。
0787デフォルトの名無しさん
2010/05/27(木) 00:53:07質問する前に本でも読んで考えろよ
0788デフォルトの名無しさん
2010/05/27(木) 00:54:02覚えるだけならCのが楽だと思うんだが
0789デフォルトの名無しさん
2010/05/27(木) 00:59:15まずはソースをご覧ください
ttp://www.dotup.org/uploda/www.dotup.org916660.txt
ソート方法としては、バブルソートと言うんでしょうか
隣同士の数字を交換していく、基本的なものを作りたいのですが
コンパイルしても、数値が交換されていません
他にも色んな問題(配列の最後の値が不正)はありますが、それは置いといて
とりあえず値は交換できるはずなのですが、出来ていません
何が問題なのでしょうか?
0790デフォルトの名無しさん
2010/05/27(木) 01:04:24交換できているよ。ほれ。
ttp://codepad.org/33aNo4Zu
0791デフォルトの名無しさん
2010/05/27(木) 01:12:30i<6「-1」は>>790さんが付け足したもののようですね
とりあえず、なぜ-1で正常になるのか、もう少し考えを練ってみます
ヒント有難うございます
0792デフォルトの名無しさん
2010/05/27(木) 01:16:13ループ内で[i+1]にアクセスしているから、ループ終端がi<6だと配列をオーバランしてしまう。
0793デフォルトの名無しさん
2010/05/27(木) 01:23:56たしかに、コンパイルした結果も最後の数値はムチャクチャでした
一応、ちゃんと表示されるようになりましたが
なんかきちんとソートできないので、もう少し作り方を考えて見ます
0794デフォルトの名無しさん
2010/05/27(木) 01:30:44本読んで分からないからここきたんだろww
0795デフォルトの名無しさん
2010/05/27(木) 01:33:39ということは全てchar型で変数を取るということなのでしょうか?
int やfloatではアルファベットあつかってませんよね?
0796デフォルトの名無しさん
2010/05/27(木) 01:37:110797デフォルトの名無しさん
2010/05/27(木) 02:03:33float f(float a)
{
a = a + 1e-20;
return (a);
}
float g(float a)
{
a = a * 1;
return (a);
}
void main()
{
float x = 0;
while ((x > -10000000) && (x < +10000000)) {
if ((x >= 1) && (x <= 10)) { f(x); }
if ((x >=10) && (x <= 20)) { g(x); }
x += 1;
}
}
0798デフォルトの名無しさん
2010/05/27(木) 02:04:02単純に文章としては「自身を呼び出す関数」と理解できるのですが
それが一体どういう状況で必要になるのか疑問です
0799795
2010/05/27(木) 02:07:05Aとかaとかを計算に代入するときって
このA,aはchar型ってことですか?
0800デフォルトの名無しさん
2010/05/27(木) 02:08:02書くのが簡単になるだけ
0801デフォルトの名無しさん
2010/05/27(木) 02:10:490802デフォルトの名無しさん
2010/05/27(木) 02:18:55再帰的にデータを構成したときには便利に使えます。ループで書くのは大変です。
こちらをどうぞ。http://pc12.2ch.net/test/read.cgi/tech/1269438098/996
0803デフォルトの名無しさん
2010/05/27(木) 02:19:11フィボナッチ数列で必要になる。
部分の処理を全体の処理と同じアルゴリズムで処理できる場合に、必要ではないが、簡単に書けるようになるのでよく使われる。
0804デフォルトの名無しさん
2010/05/27(木) 02:25:00素朴に再帰で書いたらコストが跳ね上がるタイプの問題なんだから
0805デフォルトの名無しさん
2010/05/27(木) 02:28:370806デフォルトの名無しさん
2010/05/27(木) 02:28:58再帰だと関数の呼び出しを何度もしなくちゃいけないから糞遅くなるしメモリもその分消費する
普通に繰り返しで書いた方がずっと速い
0807デフォルトの名無しさん
2010/05/27(木) 02:31:550808デフォルトの名無しさん
2010/05/27(木) 02:33:270809デフォルトの名無しさん
2010/05/27(木) 02:39:39再帰でも記述出来るのは事実でも、どんな時に使うかという質問の答えとしては不適切だな
例題としてあって、しかもそれは効率が悪いということを示している
つまりどんな時にも使わないと言ってるようなものだ
0810デフォルトの名無しさん
2010/05/27(木) 02:50:36// a は配列の先頭アドレス
// a_length は配列 a の長さ
void AAA(int* a, int a_length)
{
if (a_length == 1) {return;} // もしも長さが1なら、なにもしないで終了
int center = a_length / 2; // 真ん中
// 左側の先頭アドレスと、その長さ
int* left = &(a[0]);
int left_length = center;
// 右側の先頭アドレスと、その長さ
int* right = &(a[center]);
int right_length = a_length - center;
}
// 配列 a を、真ん中から半分にしていき、長さが1になるまで続ける関数の場合
void BBB(int a, int a_length)
{
/* AAA() と同じ */
BBB(left, left_length); // 左側を、その真ん中から半分に(この中の結果の左右も、さらにそれぞれ半分に。1までくりかえす)
BBB(right, right_length); // 右側を、その真ん中から半分に(この中の結果の左右も、さらにそれぞれ半分に。1までくりかえす)
}
BBB と同じことを、ループで書こうとすると、すごく難しい。
0811デフォルトの名無しさん
2010/05/27(木) 02:55:090812795
2010/05/27(木) 03:01:42そうですよね、ありがとうございます。
char型の文字を全てみたいのですがどこにそういうの載ってますか?
}とかョみたいな文字ありますね?これはint型どの整数に値するのか
など。
あとchar型でcharで変数名int scanf("%c",&int)でintに数字で30とか
代入するとprintf("%c\n"int)=1とかなったりするんですが・・・・・
全く意味がわかりません。ただし僕の日本語が分からないというのは
ナシで・・
どういうことでしょう?1週間考えて分かりません。
0813デフォルトの名無しさん
2010/05/27(木) 03:03:08大変なことになる
0814デフォルトの名無しさん
2010/05/27(木) 03:07:21そうですね。http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/joyful.htm なんかに書いたコードと、期待していた結果を書いてもらえればお話がすすむかもしれませんね。
0815795
2010/05/27(木) 03:09:47100とか30とか。どうなんでしょう?本当にすいません・・
くだらない質問かもしれませんが一週間悩んでます。
0816デフォルトの名無しさん
2010/05/27(木) 03:24:39んー、>>814 を希望。ちょっと御知りになりたいことが伝わってこない。
0818デフォルトの名無しさん
2010/05/27(木) 03:32:32できますよ。
char a;
scanf("%c", &a);
printf("%d\n", a);
100を入れるときはdと入力してくださいね。
0819デフォルトの名無しさん
2010/05/27(木) 03:32:500820795
2010/05/27(木) 03:35:44ありがとうございます
1000を入れるときは?100はdに対応してたのですよね?
では743,1000など文字に対応してない数字は?
0821デフォルトの名無しさん
2010/05/27(木) 03:36:361000はcharに入りません
743,1000もcharに入りません
0822デフォルトの名無しさん
2010/05/27(木) 03:36:47んー、できるといえばできるのですが。
#include <stdio.h>
int main() {
char c;
scanf("%d", &c);
printf("%d\n", c);
return 0;
}
/* end */
コードを書いてお話したほうが意図が伝わりやすいと思うのですが‥‥‥。
0823デフォルトの名無しさん
2010/05/27(木) 03:38:29char は -256〜+255 までしか格納できないので、その範囲をはずれるような数値を扱いたいのなら、別の型を使用します。
0824デフォルトの名無しさん
2010/05/27(木) 03:39:17ずいぶんおおきなcharだな
0825デフォルトの名無しさん
2010/05/27(木) 03:42:53おもいっきりアウト
charに対してint分のデータを書き込むことになる
0826デフォルトの名無しさん
2010/05/27(木) 03:44:49あはは、-128〜127 でしたね。すまそ。
0827デフォルトの名無しさん
2010/05/27(木) 03:48:35んー、じゃ、>>817 は「できない」のですかね?
0828デフォルトの名無しさん
2010/05/27(木) 03:50:40んだから、>>818だって。
0829デフォルトの名無しさん
2010/05/27(木) 04:09:58>>818 は 'a' とか 'b' とかをキー入力したときに、そのアスキーコードが入るコードでしょう?
そうではなくて、'100' とキー入力したときに、100が char で宣言された変数に入るコードはないのでしょうか。
>>822 ではだめでしょうか。
>>817 がそれを求めているかどうかは、ちょっとよくわかりませんが。
0830デフォルトの名無しさん
2010/05/27(木) 04:15:140と1だけで、数を表すために2進数を使います。
たとえば 00000000 と8桁並んでるうちの、最初の桁(最も右側)が1の位、次の桁が2の位、次の桁が4の位、、、、と、対応が決められてます。
0 0 0 0 0 0 0 0
128 64 32 16 8 4 2 1
文字も同様に、数字で表します。
たとえば 「A に対応する数字は 123 である」 という具合に、『各文字に対応する番号』が決められています。
アルファベットや$記号など、主に欧米で使われる文字の、数字と文字との対応表のことを アスキーコード表 といいます。
『アスキー文字』とは、アスキーコード表で、数字との対応が決められてる文字のことです。
たとえばアスキー文字で A に対応してるのが 123 だったとします。(実際の数字は違うとおもいます)
コンピューターに、123という数字を、
「数字として表示しろ」と言えば、数字の123として表示されますし、
「文字として表示しろ」と言えば、文字の A として表示されます。
ためしに printf( "%d", (int)'A' ); とすれば、A に『対応した数字』がわかります。
また、printf( "%c", (char)123 ); とすれば、123 という数字に『対応した文字』がわかります。
printf( "%d は %c \n", (int)i, (char)i ); として、変数 i を、 0から255 まで増やすループの中で実行すれば、数字と文字の対応表を知ることができます。
コンピューターは結局、文字も数字として解釈してます。
だから char 型の変数にも、実際に記録されるのは 文字A に対応した 数字 です。
数字を記録できる変数なら、float でも long でも、原理的には char 同様に1文字を記憶できるはずです。(変換にすこし手間がかかりますが)
余談:
最近主流の UTF8 も、根本の原理は同じで、結局、数字と文字の対応表にすぎません。 ただ、アスキーコード表よりも膨大なだけです。
(あと長さが可変なので、読むのが難しいだけの違いです。) 日本語の shift-jisコードも、原理は同じです。 数字と文字の対応表にすぎません。
0831デフォルトの名無しさん
2010/05/27(木) 04:19:17#include <stdio.h>
int main()
{
char c[] = {'a', 'b', 'c', 'd', 'e'};
printf("%c%c%c%c%c\n", c[0], c[1], c[2], c[3], c[4]);
scanf("%c", &c[0]);
printf("%c%c%c%c%c\n", c[0], c[1], c[2], c[3], c[4]);
scanf("%d", &c[0]);
printf("%c%c%c%c%c\n", c[0], c[1], c[2], c[3], c[4]);
}
これの実行結果を見てだめでないと思う奴がいたら危ない
0832818
2010/05/27(木) 04:24:23> }とかョみたいな文字ありますね?これはint型どの整数に値するのか
彼がアスキーコードを利用することを望んでいるからそう書いたんだよ
0833829
2010/05/27(木) 04:33:17おー、これはわかりやすい。確かに、>>822 はアウトですね。%c を %d にかえると一目瞭然ですね。
「'100' とキー入力したときに、100が char で宣言された変数に入るようにすることは、 scanf() ではできない。」
のですね。
0834デフォルトの名無しさん
2010/05/27(木) 04:37:20亀レスになるけど、この場合、テーブルで管理したほうが判りやすいし柔軟性がありますよ。
サンプルコードは、>>835
0835デフォルトの名無しさん
2010/05/27(木) 04:38:09入る環境もあるだろ。
char は 1 ビットであるという定義しかない。
CHAR_BIT マクロが 8 とは限らない。
>>829
Alt 押しながらテンキーで入力。
0836デフォルトの名無しさん
2010/05/27(木) 04:38:16typedef enum { EVEN, ODD, FIN } MODE;
int main(void) {
MODE mode = EVEN, pre_is_odd = FIN, is_odd;
MODE state_tbl[][2] = {
{ EVEN, ODD },
{ FIN, FIN } };
MODE bool_tbl[][2] = {
{ 1, 0 },
{ 0, 1 },
{ 0, 0 } };
int num, sum[2] = { 0 };
for(;;) {
printf("Input Number: ");
scanf("%d", &num);
is_odd = num % 2;
if( pre_is_odd == is_odd ) mode = state_tbl[mode][is_odd];
pre_is_odd = is_odd;
sum[mode] += bool_tbl[mode][is_odd] ? num : 0;
if( mode == FIN ) break;
}
printf("偶数の和=%d\n奇数の和=%d", sum[EVEN], sum[ODD]);
return 0;
}
0837デフォルトの名無しさん
2010/05/27(木) 04:42:23そんな定義無い
0838デフォルトの名無しさん
2010/05/27(木) 04:54:57char = 1 バイト
バイトのビット幅は 8 とは限らない。
昔のメインフレームとか。
C の規格に機種依存する部分はないから
環境依存するビット幅は CHAR_BIT に定義されてる。
0839デフォルトの名無しさん
2010/05/27(木) 05:00:01そこをついてくるレスはあるだろうなとは思ったが、charは1バイトね。
あとどうせならEBCDICではdが100にならないという突っ込みも一緒にしてほしいところだな。
0840デフォルトの名無しさん
2010/05/27(木) 05:01:440841デフォルトの名無しさん
2010/05/27(木) 05:14:50で、Alt + テンキーはもう試したか?
[Alt押す]→テンキーで 1 0 0 →[Alt離す]
PC/AT 初代からこの機能はあるからな。
本来は CP437 の 256 文字を入力するためのものだが、
S-JIS コードでもなんでも入れられるぞ。
分かったらさっさと寝ろバーカ!
0842デフォルトの名無しさん
2010/05/27(木) 05:17:54で、Alt + テンキーはもう試したか?
[Alt押す]→テンキーで 1 0 0 →[Alt離す]
PC/AT 初代からこの機能はあるからな。
本来は CP437 の 256 文字を入力するためのものだが、
S-JIS コードでもなんでも入れられるぞ。
0843デフォルトの名無しさん
2010/05/27(木) 07:09:06俺が最初初心者質問したのがいけなかったみたい
ごめんね
0844デフォルトの名無しさん
2010/05/27(木) 07:32:070845デフォルトの名無しさん
2010/05/27(木) 08:27:08int a[2][3] = {{2, 3, 4}, {5, 6, 7}};
これってどっちが正しいのですか?
それは、どのような理由なのですか?
以上、宜しくお願いいたします。
0846デフォルトの名無しさん
2010/05/27(木) 08:33:000847デフォルトの名無しさん
2010/05/27(木) 09:03:260848デフォルトの名無しさん
2010/05/27(木) 09:05:18いやその説明でわからないならCは諦めるべし
0849デフォルトの名無しさん
2010/05/27(木) 09:05:370850デフォルトの名無しさん
2010/05/27(木) 09:05:50COLUMNS=桁
てことだよ。
0851デフォルトの名無しさん
2010/05/27(木) 09:06:340852846
2010/05/27(木) 09:12:59int a[2][3]は、intの3個の配列の2個の配列だから。
0853デフォルトの名無しさん
2010/05/27(木) 09:14:17入門書で勉強してから来い
面倒くさいわ
0854デフォルトの名無しさん
2010/05/27(木) 09:17:580855デフォルトの名無しさん
2010/05/27(木) 09:19:43↑
コピペ用
0856デフォルトの名無しさん
2010/05/27(木) 09:23:29逝って良し
0857デフォルトの名無しさん
2010/05/27(木) 10:50:130858デフォルトの名無しさん
2010/05/27(木) 12:46:21□ x 4
{
□□□□
}
(□□□□) x 3
{
□□□□ □□□□ □□□□
}
(□□□□ □□□□ □□□□) x 2
{
□□□□ □□□□ □□□□ □□□□ □□□□ □□□□
}
コンニチワ ワタシタチ ハ タイヨウケイ ニ スンデマス
0859デフォルトの名無しさん
2010/05/27(木) 13:12:22int a[2][3][4][5][6][7][8][9][10]の場合の説明を是非お願いしたい。
0860デフォルトの名無しさん
2010/05/27(木) 13:30:47>>846じゃないが、あのながれならtables(or sheets) lines columnsになるんじゃないかな
0861デフォルトの名無しさん
2010/05/27(木) 14:17:23これは何も考えずに見ると
int 整数型
int a 整数型で名前がa
int a[2] 整数型で名前が aの配列
int a[2][3] 整数型で名前が aの配列が3つ並んでいる配列
となる。しかし、どこかが間違っている。
0862デフォルトの名無しさん
2010/05/27(木) 14:23:15a
a[2]
a[2][3]
int a[2][3]
a is array of array of int
0863デフォルトの名無しさん
2010/05/27(木) 16:54:46[3,2,1]
[3,4,5]
[2,6,8]
[1,5,0]
・
・
・
と、値を保存していきたいのですが効率のよい保存方法はありますか?
いちいち変数を定義するのも無駄が多い気がして
0864デフォルトの名無しさん
2010/05/27(木) 16:55:41配列か構造体で
0865デフォルトの名無しさん
2010/05/27(木) 17:56:04レジストリ。
ini ファイルでもいいな。
0866デフォルトの名無しさん
2010/05/27(木) 18:47:30馬鹿は答えなくていいから
0867デフォルトの名無しさん
2010/05/27(木) 18:49:300868デフォルトの名無しさん
2010/05/27(木) 18:55:43main(){
int data[][3] = {
{1,2,3},
{3,2,1},
{3,4,5},
{2,6,8},
{1,5,0}
};
}
0869デフォルトの名無しさん
2010/05/27(木) 20:05:44まぁ関数に渡さなければいいんだが。
0870デフォルトの名無しさん
2010/05/27(木) 20:30:06で、使うときに必要に応じてキャストすればいい
Cは必要なだけの手間で出来るのがいいところ
0871デフォルトの名無しさん
2010/05/27(木) 20:40:34じゃあレジストリより高効率な方法を挙げてみろよ。
0872デフォルトの名無しさん
2010/05/27(木) 20:45:17>関数に渡すときは、先頭アドレスを char * にでもキャストして渡せばいい
一次元配列になら対応してそうだけど多次元はchar **とかもっと複雑な型を作らないといけなくない?
0873デフォルトの名無しさん
2010/05/27(木) 20:49:530874デフォルトの名無しさん
2010/05/27(木) 20:54:51うまくいかない。ご教授を。
#include <stdio.h>
#define N 3
void f(char *a) {
printf("%d\n", (int [][N][N])a[0][1][2]);
}
int main() {
int v[N][N][N];
v[0][1][2] = 345;
f((char *)v);
return 0;
}
0875デフォルトの名無しさん
2010/05/27(木) 21:28:290876デフォルトの名無しさん
2010/05/27(木) 21:28:480877デフォルトの名無しさん
2010/05/27(木) 21:30:09void f(int a[][N][N]) {
printf("%d\n", a[0][1][2]);
}
0878デフォルトの名無しさん
2010/05/27(木) 21:32:03printf("%d\n", ((int (*)[N][N])a)[0][1][2]);
これでうまくいくはず
0879870
2010/05/27(木) 21:35:47うまく多次元配列に戻せないね。すまん
#include <stdio.h>
#define N 3
#define value(p,x,y,z) *(p + x * N * N + y * N + z)
void f(char *a) {
int *p = (int *)a;
printf("%d\n", value(p, 0, 1, 2));
}
int main() {
int v[N][N][N];
v[0][1][2] = 345;
f((char *)v);
return 0;
}
0880デフォルトの名無しさん
2010/05/27(木) 21:36:45>>878でうまく行くよ
一見見にくいキャストだが、ちゃんとシグネチャが一致しているとわかるはず
0881870
2010/05/27(木) 21:37:080882デフォルトの名無しさん
2010/05/27(木) 21:54:10do、for,whileの違い何ですか?全て同じ条件である限りプログラムを実行し続ける
って構文じゃないですか?
0883デフォルトの名無しさん
2010/05/27(木) 21:54:38使えば分かる
0884デフォルトの名無しさん
2010/05/27(木) 21:56:59どう違うんですか?
0885デフォルトの名無しさん
2010/05/27(木) 21:57:24do while(x) はループの1回目は必ず実行されるという点で、上記と違う。
0886デフォルトの名無しさん
2010/05/27(木) 21:58:21どういうことですか?一回目って何のことでしょう?
0887デフォルトの名無しさん
2010/05/27(木) 21:59:33{
0888デフォルトの名無しさん
2010/05/27(木) 22:00:06while(x) /*ここ*/
0889デフォルトの名無しさん
2010/05/27(木) 22:02:36まじすいません。最初の実行はforでもwhileでも
doでも一回目は一回目じゃないですか・・・全く
理解できん。俺頭悪すぎる。
0890デフォルトの名無しさん
2010/05/27(木) 22:04:02while(x) /*xの値によってはここは1回も実行されない*/
0891デフォルトの名無しさん
2010/05/27(木) 22:04:45さあコンパイラをインストールするんだ
0892デフォルトの名無しさん
2010/05/27(木) 22:07:38全く意味がわからん・・
具体的に例で教えてください。
みかん1個1円、りんご1個2円、簡単プログラムで頼む。
ソースみても分からんから日本語で頼む。まじ頼みます。
0893デフォルトの名無しさん
2010/05/27(木) 22:08:540894デフォルトの名無しさん
2010/05/27(木) 22:09:37入門書では頻出なんだがなー
0895デフォルトの名無しさん
2010/05/27(木) 22:14:33/*xの値によらずここは1回実行される*/
do民主党政権()
} while(!is財政破綻());
while(is革命()) {
/*xの値によってはここは1回も実行されない*/
do共産党政権();
}
0896デフォルトの名無しさん
2010/05/27(木) 22:18:46よーわからん・・
0897デフォルトの名無しさん
2010/05/27(木) 22:19:320898デフォルトの名無しさん
2010/05/27(木) 22:22:26分かるのか分からないのかはっきりしろ
0899デフォルトの名無しさん
2010/05/27(木) 22:23:37わからなくてもいいから先に進め
0901デフォルトの名無しさん
2010/05/27(木) 22:25:360902デフォルトの名無しさん
2010/05/27(木) 22:26:010903デフォルトの名無しさん
2010/05/27(木) 22:26:28使えるPCにまずはCコンパイラをインストールして使えるようにするんだ
話はそれからだ
0904795
2010/05/27(木) 22:30:19それはしてる。
{}の中の実行ってのはwhileやdoやforの中の条件を満たすまでするってこと
でしょ?
最初の?何それ?何の最初なの?みたいな・・・
0905デフォルトの名無しさん
2010/05/27(木) 22:36:05先に判定するか後で判定するかってだけじゃねえか。
0906795
2010/05/27(木) 22:36:24死にたい、誰か助けてくれ。
0907デフォルトの名無しさん
2010/05/27(木) 22:38:53Aを実行してBで判定してまたAへ
while( A ){ B }
Aで判定してからBを実行してまたAで判定
ってだけじゃないのかよ
0908デフォルトの名無しさん
2010/05/27(木) 22:41:330909デフォルトの名無しさん
2010/05/27(木) 22:42:480910デフォルトの名無しさん
2010/05/27(木) 22:45:23条件を満たす限り実行する、な
for ( ; ; ) {} と while () {} はまず条件を判定し、真なら {} の中を実行する
do {} while (); はまず {} の中を実行してから条件を判定し、真なら継続する
つーか実際に書いてみれば「誰でも」わかる簡単なことだ
0911795
2010/05/27(木) 22:46:34人類の発展から遅れた脳みそを持ったディスアビリティな人もいることを
理解してくれ。完全に左脳しか働かない脳みそだ俺は。
俺の脳みそスキャンにかけてほしい。
>>907
ありがとうございます
do{A}while(B);のAを実行するってのはどういうことですか?
Aは勝手に決めていいんですか?
0912デフォルトの名無しさん
2010/05/27(木) 22:47:030913デフォルトの名無しさん
2010/05/27(木) 22:48:26いい加減、釣りか何かわからんが、ちゃんとさせておく
1)while (式) 文
式を評価して真ならば文を実行することを繰り返す。
2)for (式1; 式2; 式3) 文
はじめに1回だけ式1が評価される。
その後式2を評価して真ならば、文を実行し式3を評価することを繰り返す
3)do 文 while (式)
文を実行し、式を評価して真ならば、文を実行することを繰り返す。
1,2と3のもっとも大きな違いは、3では文は必ず1回は実行されること。
0914913
2010/05/27(木) 22:56:12補足。913は注意して用語を選んで使っているけど、それまでの説明は用語が適当なので
注意。
「式を評価する」→式を計算すること
「真」→評価結果が0以外であること
「偽」→評価結果が0であること
「式」、「文」を正確に説明するのはめんどいので、略する。
0915795
2010/05/27(木) 22:56:34うん?? whileとforも違うじゃないですか。
forは式2を評価して真=文を実行、そのあと
式3をほ評価して実行して終了ってことですか?
つまりforってのは3回で終わる構文ですか?
いや違う、式1は評価されるだけだから2回で
終わる構文か。
whil、forはいいがやっぱりどうしてもdoがわからん。
ミカン1円、リンゴ2円だとして、リンゴとミカンという
条件を決めているのだから実行は当たり前じゃないです
か?
0916795
2010/05/27(木) 22:57:53式を計算?実行とどう違うのですか?
計算したら条件変わるんじゃないですか?
ここまで複雑だと何が結果で何が条件か
全くわからん・・・・
0917デフォルトの名無しさん
2010/05/27(木) 23:02:25みかん1円りんご2円というのは、(おそらく)ループ条件に入れるべき要素ではない
これらを使って何がしたいんだ?って話だ
0918デフォルトの名無しさん
2010/05/27(木) 23:03:190919デフォルトの名無しさん
2010/05/27(木) 23:03:520920デフォルトの名無しさん
2010/05/27(木) 23:04:00実際にプログラム書いて動かしてみたのか?
0921デフォルトの名無しさん
2010/05/27(木) 23:10:310922デフォルトの名無しさん
2010/05/27(木) 23:10:38無条件で{}内へ→f1()を実行しxに結果が入る→xが1でなければ{}内へ→f1()を実行しxに結果が入る→xが1でなければ{}内へ→f1()を実行しxに結果が入る→xが1でなければ{}内へ→…→xが1なら終了
while(x != 1){ x = f(); }
xが1でなければ{}内へ→f1()を実行しxに結果が入る→xが1でなければ{}内へ→f1()を実行しxに結果が入る→xが1でなければ{}内へ→f1()を実行しxに結果が入る→xが1でなければ{}内へ→…→xが1なら終了
0923デフォルトの名無しさん
2010/05/27(木) 23:12:18math.hとkimits.hを見る
0924デフォルトの名無しさん
2010/05/27(木) 23:17:42前者 「(一度ヤラせてみようと言ってヤラせてみたら、)財政破綻するまで民主党政権が続く。」
後者 「革命が起き(続け)なければ共産党政権にはならない。」
0925795
2010/05/27(木) 23:22:40俺まだ20代前半だぞ・・・・
>>917
1円ならみかん、2円ならりんごを出すプログラムだ。
あれ?おかしいな、1円のスイカがあるかもしれんが、
1円っていうだけでみかんに、いや本気でわからんww
設定、結果、条件がこんがらがって何が何だか・・・
0926795
2010/05/27(木) 23:24:25whileの中は関数なんだよな?1円ならみかんならswitchか。
0927デフォルトの名無しさん
2010/05/27(木) 23:25:27アルコールでも飲んでるんじゃないのか?
それか、
0928デフォルトの名無しさん
2010/05/27(木) 23:27:450929デフォルトの名無しさん
2010/05/27(木) 23:28:00何をしたいのか箇条書きにしてくれ
0930デフォルトの名無しさん
2010/05/27(木) 23:32:24みかんが3より少なければ、みかんを買う。
while(みかん > 3){ みかんを食う(); }
みかんが3より多い間、みかんを食い続ける。
do { みかんを食う(); } while(美味しい());
みかんを食ってみて、美味しい間、さらにみかんを食い続ける。
0931795
2010/05/27(木) 23:34:20もう一番簡単なプログラム頼む。
x=1〜10ならx-1
x=10〜20ならx-10
これをwhile文でやる。
しかしこれがどうしてもできない。
頼む。そしてこのプログラムがdo whileでできるのかも
頼む。プログラム適当に書く。
while(1<x<10) t=x-1
while(10<x<20)t=x-10
これが上手くできん。おそらくtがかぶるから・・
0932デフォルトの名無しさん
2010/05/27(木) 23:37:58例1
while (おなかすいた) {
みかんをたべる
}
例2
do {
りんごをたべる
} while (おなかすいた);
例1では、お腹が空いてるあいだ、みかんを食べつづけます。
最初からお腹がいっぱいなら、最初からなにも食べません。
例2では、考える前に、まず1回りんごを食べます。 そしてお腹が空いてるあいだ、ずっと、りんごを食べつづけます。
最初からお腹がいっぱいでも、お腹に関係なく、かならず1回はりんごを食べます。
0933デフォルトの名無しさん
2010/05/27(木) 23:38:090934デフォルトの名無しさん
2010/05/27(木) 23:39:39この書き方はどこで習ったんだ
0935デフォルトの名無しさん
2010/05/27(木) 23:39:44if(1<=x && x<=10) x = x-1;
else if(10<=x && x<=20) x = x-10;
break;
}
do{
if(1<=x && x<=10) x = x-1;
else if(10<=x && x<=20) x = x-10;
}while(0);
0936795
2010/05/27(木) 23:40:13の奴コンパイルしたら
a.exe
_←こんなんが出てきてフリーズするんだが何故だ?
コンパイルできたのにフリーズって意味がわからん・・・・
0937デフォルトの名無しさん
2010/05/27(木) 23:41:17単に無限ループしてるだけだ
0938795
2010/05/27(木) 23:44:35やっぱり論理記号使うのか、、
論理記号使わないといけないなら
ちょっとまって他に
x=x-1???俺t=x-1ってしたらフリーズしたんだけど
何故?あとx=x-1の=の部分は+=とかとどう違うの?
0939デフォルトの名無しさん
2010/05/27(木) 23:45:36↓
while((1<x)<10) t=x-1
↓xが1より大なら
while(1<10) t=x-1
↓
while(1) t=x-1
↓
無限ループ
↓xが1以下なら
while(0<10) t=x-1
↓
while(1) t=x-1
↓
無限ループ
0940デフォルトの名無しさん
2010/05/27(木) 23:47:210941デフォルトの名無しさん
2010/05/27(木) 23:49:110942デフォルトの名無しさん
2010/05/27(木) 23:49:560943795
2010/05/27(木) 23:50:30いや無限ループの場合
コンパイルしたら
x=t-1
x=t-1
.
..
.
..
と出てくる
x=としたらxがかぶるので
正しい数値が出てこない。
0945デフォルトの名無しさん
2010/05/27(木) 23:52:11> 何故?あとx=x-1の=の部分は+=とかとどう違うの?
x = x-1 と x += -1 と x -= 1 は同じ。
0946795
2010/05/27(木) 23:52:260947デフォルトの名無しさん
2010/05/27(木) 23:53:300948795
2010/05/27(木) 23:56:35ちょw
やめてくれ、まじで人生かかってるんで・・
何となく分かってきました。
ただ論理記号使うんですね
x<2を条件としたいときはどうしたらいいのですか?
x< 2$$2
ですか?
0949795
2010/05/28(金) 00:01:23明日また時間考えて来ます。
とりあえず>>948だけ答えてほしいな。
そしたら寝ます。
本当に迷惑かけました。
0950デフォルトの名無しさん
2010/05/28(金) 00:03:31if(x < 2)
0951デフォルトの名無しさん
2010/05/28(金) 00:09:07入門書1冊読んでこい。
0953デフォルトの名無しさん
2010/05/28(金) 00:11:30いえいえ
0954デフォルトの名無しさん
2010/05/28(金) 00:13:54よろしくお願いします
#include <stdio.h>
double daikei(double, double, int);
int main(void)
{
double a,b,sekibun,exact;
int n;
printf("x^2をaからbまで台形則を用いて数値積分します。\n");
printf("aとbを入力してください。\n");
scanf("%lf %lf",&a,&b);
printf("分割数nを入力してください\n");
scanf("%d",&n);
sekibun=daikei(a, b, n);
exact=(b*b*b-a*a*a)/3.0;
printf("数値積分値は%20.15lfです。\n",sekibun);
printf("厳密値は%20.15lfです。\n",exact);
printf("誤差は%20.15lfです。\n",exact-sekibun);
return 0;
}
/* ここに関数daikeiを記述する */
0955デフォルトの名無しさん
2010/05/28(金) 00:22:56#define func(x) ((x)*(x))
double daikei(double a, double b, int n)
{
double d = b-a/n;
double s = 0;
for(int i = 0; i < n-1; i++){
s += func(a+d*i)*func(a+d*i+d)*d/2;
}
return s;
}
0957デフォルトの名無しさん
2010/05/28(金) 00:27:06ありがとうございました
でもコンパイルできません。。。orz
0958デフォルトの名無しさん
2010/05/28(金) 00:27:5832行目の
for(int i = 0; i < n-1; i++)
が未定義のiを含めるって。。。
0959デフォルトの名無しさん
2010/05/28(金) 00:28:29/* ここに関数daikeiを記述する */
#define func(x) ((x)*(x))
double daikei(double a, double b, int n)
{
double d = (b-a)/n;
double s = 0;
for(int i = 0; i < n; i++){
s += (func(a+d*i)+func(a+d*i+d))*d/2;
}
return s;
}
0960デフォルトの名無しさん
2010/05/28(金) 00:30:27これもコンパイルが。。。
0961デフォルトの名無しさん
2010/05/28(金) 00:31:12#define func(x) ((x)*(x))
double daikei(double a, double b, int n)
{
int i;
double d = (b-a)/n;
double s = 0;
for(i = 0; i < n; i++){
s += (func(a+d*i)+func(a+d*i+d))*d/2;
}
return s;
}
0962デフォルトの名無しさん
2010/05/28(金) 00:34:56ありがとうございました
なるほど、forの中でiを定義してもだめですね。。
ちゃんと関数の頭のほうで定義しないとw
0963デフォルトの名無しさん
2010/05/28(金) 00:37:01単にコンパイラが古いCの仕様を使っているだけ。
新しい仕様では全く問題ないよ。
0964デフォルトの名無しさん
2010/05/28(金) 00:40:48なんだか大学の授業ではプログラミングを勉強してもうまくできないな。。。
みんな独学してるかね
課題の中でいつも勝手に見たことないものが出てきてる
0965デフォルトの名無しさん
2010/05/28(金) 00:42:39あたりまえだ。
知ってることばかりなら教わる必要ないじゃん。
0966デフォルトの名無しさん
2010/05/28(金) 00:45:15でも教えてないことを出すのは困るよww
0967デフォルトの名無しさん
2010/05/28(金) 00:46:41大抵学則の単位認定の項目に、学外での準備も単位に含まれるなどと明記されているはず。
0968デフォルトの名無しさん
2010/05/28(金) 00:47:04今は大学受験も小学生みたいに教わってくるから
大学入って挫折する人が多いね。
0969デフォルトの名無しさん
2010/05/28(金) 00:48:26分かりましたw
0970デフォルトの名無しさん
2010/05/28(金) 00:50:010971デフォルトの名無しさん
2010/05/28(金) 00:59:540972デフォルトの名無しさん
2010/05/28(金) 01:03:37http://pc12.2ch.net/test/read.cgi/tech/1274976173/l50
>>971
猫
0973デフォルトの名無しさん
2010/05/28(金) 01:10:42アドレスを教えてくださいw
0974デフォルトの名無しさん
2010/05/28(金) 01:12:40http://www.kumei.ne.jp/c_lang/
0975デフォルトの名無しさん
2010/05/28(金) 01:15:54本当の基礎だったら苦cがいいかもしれん
http://9cguide.appspot.com/
ただこの程度の知識じゃ何もできるようにならないので注意
0976デフォルトの名無しさん
2010/05/28(金) 01:16:09ありがとうございました
これは助かります
0977デフォルトの名無しさん
2010/05/28(金) 01:19:57知識の収集は適当に本1冊買って移動時間やその他のすき間時間でこなさないともったいない。
0978デフォルトの名無しさん
2010/05/28(金) 01:31:06BOX[1]=-51(10進数)
これを16進数で表示すると
printf(%x,box[1]);
結果:FFFFFFCD
と表示されてしまいます。
これを16進数でCDと表示するにはどうすればよいのでしょうか?
0979デフォルトの名無しさん
2010/05/28(金) 01:37:59printf(%x,box[1]&0xff);
0980デフォルトの名無しさん
2010/05/28(金) 01:39:41FFF…の部分が間違いだと思ってるんだろうが、正しい。
0981デフォルトの名無しさん
2010/05/28(金) 01:54:11下2桁だけ表示したいんだろ
顧客の隠された要望を正確に汲み取るのも
プログラマの仕事の一つだぜ
0982デフォルトの名無しさん
2010/05/28(金) 01:54:54出来ましたありがとうございました!
printfの最後にそうやってつければいいんですね。
box=box+1みたいなことやってて出来ませんでしたw
>>980
暗号化などで使うんです
-1=FFFFになるのは大丈夫です。
どうもありがとうごxざいました。
0983デフォルトの名無しさん
2010/05/28(金) 02:27:02今、もう一度読み直してみたらどうみても説明不足でしたよね…
出力結果:
255 -1 →FF FFFFFFFF
となりますが、16進数表示で→FF 1
と表示したかったんです。
エスパーレスしてもらえたので助かりましたが。
0985デフォルトの名無しさん
2010/05/28(金) 07:18:52「メモリの管理を自分で行わなければならず、メモリの確保・開放忘れにより、アプリケーションやOSが
不安定になるアプリケーションが作成できてしまいます。」
↑
これの意味はちょっと良くわからないのですが
スレ違いかな?
0986デフォルトの名無しさん
2010/05/28(金) 07:30:17色々情報不足なのだが、box[N]の型がunsigned charということなら
printf("%hhx\n", box[0]);
でよい。hhはサイズを指定している。
0987デフォルトの名無しさん
2010/05/28(金) 09:47:45あるサイトがどこかわからないと何とも言えないが。
関数呼び出しの時はスタックに積んで、とか、
mallocのときはヒープからメモリをとか、などという話に関連する。
知らなかったら、↓を一通り読めば、何となくわかると思う。
ttp://www.amazon.co.jp/exec/obidos/ASIN/4891003383
0988デフォルトの名無しさん
2010/05/28(金) 10:09:20本当に"%x"でFFFFFFCDって出力された?
変だな、ansi/isoでは"%x"のときは"abcdef"で"%x"のときは"ABCDEF"って決まっていた筈なんだが。
で、BOXとboxの関係がよく判らないけれど、boxがsigned charか暗黙のsignedであるcharのどちらかへのポインタならば
暗黙の型変換でsigned intに昇格してしまっている。強制的にunsigned charにキャストしてしまえばいいよ。
0989デフォルトの名無しさん
2010/05/28(金) 11:40:43意味ワカンネ!!
お前こそ %X と %x の違いがわかってないんじゃないか
くらだん揚げ足取りばかりすんな
0990デフォルトの名無しさん
2010/05/28(金) 11:52:26まぁ、%xではabcdef、%XではABCDEFであることには間違いないよ。
要は、>978は他の記述からも判るように大文字小文字を頓着していないんだろうな。
0991デフォルトの名無しさん
2010/05/28(金) 12:20:30お前大丈夫か?
それは普通に書き間違えてだってわかるだろ、
それを指摘しようとしたお前でさえ間違えてんだぞ
なんでそんなことに執着するの?????
0992デフォルトの名無しさん
2010/05/28(金) 12:29:23書き間違えてると、バカだなあと思う。
0993デフォルトの名無しさん
2010/05/28(金) 12:30:530994デフォルトの名無しさん
2010/05/28(金) 17:16:420995デフォルトの名無しさん
2010/05/28(金) 17:24:15自演乙
0997デフォルトの名無しさん
2010/05/28(金) 18:37:110998デフォルトの名無しさん
2010/05/28(金) 18:58:060999デフォルトの名無しさん
2010/05/28(金) 19:00:391000デフォルトの名無しさん
2010/05/28(金) 19:02:0910011001
Over 1000Threadもう書けないので、新しいスレッドを立ててくださいです。。。
レス数が1000を超えています。これ以上書き込みはできません。