ページ 1 / 1
C言語初心者で宿題が全然分からなくて困ってます…。
Posted: 2007年11月18日(日) 11:42
by アルフレッサ
初めまして。アルフレッサと申します。
今回このサイトを訪問したのは、大学の授業でやってるC言語の授業の課題が全然分からなくて困り果てていたからです。
まだC言語を初めて1ヶ月なんですが、早くも授業のスピードについていけなくなりつつあります…。
もしよろしければ、今から書く内容のプログラムを教えて頂ければ幸いです。
1.整数型配列sqrを利用して、1から20までの数字を2乗した数のうち7で割り切れる数を画面に出力するプログラムを作成せよ。
2.西暦1年から2005年までのうるう年をもとめ、それを画面に出力するプログラムを作成せよ。
部分的には出来る箇所もあるんですが、上手く全体をつなぎ合わせることができなくて…。
よろしくお願いします。
Re:C言語初心者で宿題が全然分からなくて困ってます…。
Posted: 2007年11月18日(日) 11:49
by box
> 部分的には出来る箇所もある
その箇所を提示してみるお考えはありますか?
Re:C言語初心者で宿題が全然分からなくて困ってます…。
Posted: 2007年11月18日(日) 11:58
by アルフレッサ
早速のご返事ありがとうございます。
1に関しては、
#include <stdio.h>
int main(void)
int i;
int sqr[20];
for(i=1; i<=20; i++){
sqr = i * i;
}
printf("数 2乗 \n");
ぐらいまではなんとか分かってまして、
2に関しましては、お恥ずかしいことにうるう年を求める
n%4 == 0 && n%100 ! = 0
しか分からないんです…。
もしお時間がありましたら、これを元にどういう形にすればいいのか教えて頂けたら幸いです。
Re:C言語初心者で宿題が全然分からなくて困ってます…。
Posted: 2007年11月18日(日) 12:09
by box
まず、課題1を片付けましょう。
実は、課題1は配列を使わなくてもできます。
しかし、今回は配列を使うとの指示なので、それに従います。
> int sqr[20];
>
> for(i=1; i<=20; i++){
> sqr = i * i;
> }
というコードには、大きな問題があります。それは、
配列sqrでアクセスできるのはsqr[0]~sqr[19]の20要素であるため、
for文によるループの中でsqr[20]にアクセスすることはできない、
という点です。
C言語の配列を使う際の添字はゼロ始まりである点を再確認してください。
上のコードをどのように修正すればよいかはわかりますか?
Re:C言語初心者で宿題が全然分からなくて困ってます…。
Posted: 2007年11月18日(日) 12:51
by アルフレッサ
お返事ありがとうございます。
ご指摘頂いたものを修正するとしたら、
int sqr[20];
for(i=0; i<=19; i++){
sqr = i * i;
}
でよろしいのでしょうか?
Re:C言語初心者で宿題が全然分からなくて困ってます…。
Posted: 2007年11月18日(日) 13:01
by box
> for(i=0; i<=19; i++){
> sqr = i * i;
これですと、0~19の2乗を配列に入れています。
題意と食い違っています。
解決するには、2つほど方法があります。
1)配列のn番目の添字に、(n + 1) * (n + 1) を入れる。
この場合、ループを回すのは0~19です。
2)配列のn番目の添字に n * n を入れるために、わざと1個分
余計に配列の要素を確保しておく。つまり、
int sqr[21];
と定義します。こうすると、sqr[0]~sqr[20]の21要素に
アクセスできます。今回、sqr[0]は使わないまま放っておくことになります。
こちらでは、ループを回すのは1~20です。
上記1)2)について、おわかりになりますか?
2)は、ちょっとしたテクニックです。
どちらの方法をお採りになってもかまいません。
Re:C言語初心者で宿題が全然分からなくて困ってます…。
Posted: 2007年11月18日(日) 13:10
by アルフレッサ
すみません…、ホントに初心者なんでよく分かりません…。
要するに、
int sqr[20];
for(i=0; i<=19; i++){
sqr = (i+1) * (i+1);
}
とすればよいのでしょうか?
理解力がなくてすみません。
Re:C言語初心者で宿題が全然分からなくて困ってます…。
Posted: 2007年11月18日(日) 13:17
by box
> for(i=0; i<=19; i++){
> sqr = (i+1) * (i+1);
そのとおりです。
これで、
sqr[0] には 1 * 1 = 1 が、
sqr[1] には 2 * 2 = 4 が、
(中略)
sqr[19]には 20 * 20 = 400 が、それぞれ入ります。
ここまではいいですか?
理解できたら、次の段階に進みましょう。
いったん配列sqrのことは脇へ置いておきます。
ある数値 n が 7 で割り切れるかどうかを判定する方法はおわかりですか?
Re:C言語初心者で宿題が全然分からなくて困ってます…。
Posted: 2007年11月18日(日) 13:31
by アルフレッサ
ありがとうございます。
ご指摘されたものですが、それは、
n%7=0
でいいのでしょうか?
Re:C言語初心者で宿題が全然分からなくて困ってます…。
Posted: 2007年11月18日(日) 13:40
by box
> n%7=0
「n を 7 で割った余りが 0 と等しいならば」という
内容のif文を書くとき、等号は1つでいいですか?
Re:C言語初心者で宿題が全然分からなくて困ってます…。
Posted: 2007年11月18日(日) 22:05
by アルフレッサ
返事遅れて申し訳ございません。
等号の件ですが、おそらく1つでいいんではないかと…。
2つ必要ならどこで使えばいいんでしょうか?
Re:C言語初心者で宿題が全然分からなくて困ってます…。
Posted: 2007年11月19日(月) 08:09
by 組木紙織
等号一つの意味は何でしょうか?
そして等号二つ並べること(==)の意味は何でしょうか?
Re:C言語初心者で宿題が全然分からなくて困ってます…。
Posted: 2007年11月19日(月) 13:59
by F
等号一つだと代入になります
aにbを代入
a = b
比較するときは
aと同じ a==
a以外 a<>
a以外 a!=
aより大きい a<
aより小さい a>
a以上 a<=
a以下 a>=
などが基本です
Re:C言語初心者で宿題が全然分からなくて困ってます…。
Posted: 2007年11月19日(月) 14:12
by 組木紙織
一つ目のa以外はCの仕様にはなかったと思います。
確かVBの仕様だと記憶しています。
Re:C言語初心者で宿題が全然分からなくて困ってます…。
Posted: 2007年11月19日(月) 14:52
by F
すいません
a以外 a<>はVBでした、いろいろやってるので混じりました