C言語質問スレ【激初心者】

このエントリーをはてなブックマークに追加
952デフォルトの名無しさん:2005/12/01(木) 20:34:05
ああああああぁぁぁぁぁぁ.....orz
やってしまった・・・見落とし・・。orz
次からは注意します。
953デフォルトの名無しさん:2005/12/02(金) 00:35:30
で、そのプログラムは結局なにがしたいのさ
年数を入力する必要はないし、仮に元日からの日数を求めるんであれば、
1月31日を指定したら62日と帰ってきそうなんだが。
954デフォルトの名無しさん:2005/12/02(金) 09:14:26
//演習3.6
#include<stdio.h>
void main()
{
int month[12] = {31,28,31,30,31,30,31,31,30,31,30,31};
int yy,mm,dd;
int monc,con=0;

printf("Please input date (yyyy.mm.dd) ==> ");
scanf("%d.%d.%d",&yy,&mm,&dd);

if(mm > 0 && mm < 13)
if((month[mm-1]+1)>dd){
if(yy%4==0 && yy%100!=0)
month[1]=29;
for(monc=1;monc!=mm;monc++){
con+=month[monc-1];
}
con+=dd;
}
else
printf("ERROR\n");
else
printf("ERROR\n");
printf("Total %d days",con);
}
完成しました。
入力した年月日を入力し、元日からの日数を求めるプログラムです。
年を入力する必要があったのは閏年の判定をする為です。
955デフォルトの名無しさん:2005/12/02(金) 09:24:40
>>954
100年判定入れるなら400年判定入れないと2000年がおかしくなる。
956デフォルトの名無しさん:2005/12/02(金) 09:27:07
細かいけどこうね
if(yy%400==0 || (yy%4==0 && yy%100!=0))
957956:2005/12/02(金) 09:27:52
かぶった・・・
958デフォルトの名無しさん:2005/12/02(金) 09:36:36
if(mm > 0 && mm < 13){
if(yy%400==0 || (yy%4==0 && yy%100!=0))
month[1]=29;
if((month[mm-1]+1)>dd){
for(monc=1;monc!=mm;monc++){
con+=month[monc-1];
}
con+=dd;
}
}
お早いレスありがとうございます。判定の位置もおかしかったので修正
しました。これからも精進します。
959デフォルトの名無しさん:2005/12/02(金) 10:28:54
>>955
過去は振り返らないのさ。
960デフォルトの名無しさん:2005/12/02(金) 22:29:32
>>959
長い未来を見据えず、mktime()で算出するのはいかが?(w
961デフォルトの名無しさん:2005/12/03(土) 10:44:15
FreeBSDで下の式のグラフを書いて表示させたい。どうすりゃいいんだ
f(x) = x*x ( x=-4, -3, ..., 0, 1, ..., 4)
962デフォルトの名無しさん:2005/12/03(土) 10:50:29
gnuplot
963デフォルトの名無しさん:2005/12/03(土) 11:07:20
ありがとう
964国士:2005/12/03(土) 14:18:55
僕もどしろうとなんですけど代入演算子ってなにかわかりますか?
965デフォルトの名無しさん:2005/12/03(土) 14:22:25
もちろんだ
966デフォルトの名無しさん:2005/12/03(土) 14:42:42
char a = '+'
とかやったときのaが代入演算子。ようするに演算子を代入するもののことだ
967デフォルトの名無しさん:2005/12/03(土) 14:51:28
>>966
ワロタ
968デフォルトの名無しさん:2005/12/03(土) 16:20:50
任意の関数f(x)の x=n における微分係数を求めるにはどのような方法がありますか

f(x),g(x),h(x)とあれば、diff_fx(float x),diff_gx( float x),diff_hx( float x)みたいに3つ作るくらいしか考えられませんでした
diff_fx( float x) の内容は、手計算でf(x)の導関数を求めて、それを書き込んでというどうしようもない状態です(ノд`)
969デフォルトの名無しさん:2005/12/03(土) 16:30:53
>>968
あらかじめ関数が決まっているなら精度的にはそれが一番いい方法。
970デフォルトの名無しさん:2005/12/03(土) 16:39:25
>>968
関数決まってないなら
f'(c) = lim[h→0]{(f(h+c) - f(c))/h}
を使って、h=0.000000001とでもしてやるしかないんじゃまいか?
971デフォルトの名無しさん:2005/12/03(土) 16:48:51
>>969
確かにこれでも問題なく動くのですが、汎用性が全くないなぁと思いまして
関数変える度に、導関数も求め直すのも結構手間ですし

>>970
定義に従って微分していくということですか
試してみます

ありがとうございました
972デフォルトの名無しさん:2005/12/03(土) 16:51:38
>>970
それは小さすぎ。普通の多項式でもひどい誤差になる。
中心差分でも10の-5乗くらいが限度かと。
973デフォルトの名無しさん:2005/12/03(土) 16:54:10
近似式ってもんを知らない馬鹿しかいないんだな
974デフォルトの名無しさん:2005/12/03(土) 16:54:46
>>972
hは適当に書いてみた。スマンカッタ
975デフォルトの名無しさん:2005/12/03(土) 16:57:17
>>973
>>1を読んで出直したら?
976デフォルトの名無しさん:2005/12/03(土) 17:00:19
これがCの質問だと思ってる奴の脳味噌じゃその程度か。
977デフォルトの名無しさん:2005/12/04(日) 15:45:41
キーボードから「c」を入力した時に「OK!」、それ以外の時には「NG!」と出力するプログラムはどう書けばいいですか?
978デフォルトの名無しさん:2005/12/04(日) 16:02:01
if( キーボードから入力された文字 == 'c' ) puts("OK!");
else puts("NG!");
979977:2005/12/04(日) 16:17:46
else if文でお願いしますorz

自分ではこう書きましたがダメでした。
#include<stdio.h>
int main(void)
{
  int x;
  scanf("%c",&x);
  if(x=='c'){
   printf("OK!\n");
  }
  else{
   printf("NG!\n");
  }
  return 0;
}
980デフォルトの名無しさん:2005/12/04(日) 16:38:07
>>979
intで宣言して%cで受けるのはおかしいだろがッ
とりあえずchar xに汁
981977:2005/12/04(日) 16:58:59
>>980
出来ました。
でも、「cc」でも「OK!」と出てしまいます。
982デフォルトの名無しさん:2005/12/04(日) 17:25:52
>>981
・・・・scanfが何してるか考えてるか?
983977:2005/12/04(日) 17:30:52
>>982
キーボードから数値を取り込む関数?
すみません。激初心者ですorz
984デフォルトの名無しさん:2005/12/04(日) 17:33:00
985977:2005/12/04(日) 17:42:37
char x;
scanf("%c",&x);
if(a=='c')

この辺が間違ってる様な希ガス
986977:2005/12/04(日) 17:47:33
char x;
scanf("%c",&x);
if(x=='c')

こうか
987デフォルトの名無しさん:2005/12/04(日) 17:48:43
988デフォルトの名無しさん:2005/12/04(日) 17:52:24
char型は文字一文字が入るサイズのデータ型です。所謂1バイト。これは全処理系共通です。
scanfの%cは文字一文字を受け取ることを示します。
つまり

char c;
scanf("%c",&c);

は標準入力からcに一文字入れるということです。
989977:2005/12/04(日) 17:55:26
#include<stdio.h>
int main(void)
{
  char x;
  scanf("%c",&x);
  if(x=='c'){
   printf("OK!\n");
  }
  else{
   printf("NG!\n");
  }
  return 0;
}

ccと入力してもON!にするにはどうしたら?
990977:2005/12/04(日) 17:56:16
↑NG!ですorz
991デフォルトの名無しさん:2005/12/04(日) 18:09:51
>>990
fgetsぐらい使え」
992デフォルトの名無しさん:2005/12/04(日) 18:33:30
#include <stdio.h>
#include <string.h>

int main(void){
char c[3];

fgets(c,sizeof(c),stdin);
if(c[strlen(c)-1]=='\n')
c[strlen(c)-1]='\0';
else{
puts("NG");
return 0;
}

if(!strcmp(c,"c")) puts("OK");
else puts("NG");

return 0;
}

冗長だと思ったら改行文字除去削って比較文字列に改行文字加えれ
993977:2005/12/04(日) 18:40:46
>>991-992
すいません。そこまで習っていません。
習ったのは
printf関数
scanf関数
if文
else if文
for文
等です。
これらで>>977は出来るはずなんだけどなぁ
994デフォルトの名無しさん:2005/12/04(日) 18:48:39
>>993
配列は習った?
習っていないなら2文字以上の入力は考えなくてもいいはずだ
995977:2005/12/04(日) 19:17:21
>>994
習っていません。
996デフォルトの名無しさん:2005/12/04(日) 19:18:19
>>987

でも,そしたら993のような香具師はスルーされるかもな
初心者は2chじゃなくて,K&R読んで勉強汁ってことか
997デフォルトの名無しさん:2005/12/04(日) 19:19:05
>>995は薬師ね
998デフォルトの名無しさん:2005/12/04(日) 19:20:34
>>997
薬師?
999デフォルトの名無しさん:2005/12/04(日) 19:25:37
>>993
これでおk
#include<stdio.h>
int main(void)
{
  char x,y;
  if((scanf("%c%[^\n]%*c",&x,&y)==1)&&(x=='c'){
   printf("OK!\n");
  }
  else{
   printf("NG!\n");
  }
  return 0;
}
1000デフォルトの名無しさん:2005/12/04(日) 19:28:04
次スレ

C言語なら俺に聞け! Part 117
http://pc8.2ch.net/test/read.cgi/tech/1131282679/
10011001
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。