C言語初心者で宿題が全然分からなくて困ってます…。

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
アルフレッサ

C言語初心者で宿題が全然分からなくて困ってます…。

#1

投稿記事 by アルフレッサ » 18年前

初めまして。アルフレッサと申します。
今回このサイトを訪問したのは、大学の授業でやってるC言語の授業の課題が全然分からなくて困り果てていたからです。
まだC言語を初めて1ヶ月なんですが、早くも授業のスピードについていけなくなりつつあります…。
もしよろしければ、今から書く内容のプログラムを教えて頂ければ幸いです。


1.整数型配列sqrを利用して、1から20までの数字を2乗した数のうち7で割り切れる数を画面に出力するプログラムを作成せよ。

2.西暦1年から2005年までのうるう年をもとめ、それを画面に出力するプログラムを作成せよ。


部分的には出来る箇所もあるんですが、上手く全体をつなぎ合わせることができなくて…。
よろしくお願いします。

box

Re:C言語初心者で宿題が全然分からなくて困ってます…。

#2

投稿記事 by box » 18年前

> 部分的には出来る箇所もある

その箇所を提示してみるお考えはありますか?

アルフレッサ

Re:C言語初心者で宿題が全然分からなくて困ってます…。

#3

投稿記事 by アルフレッサ » 18年前

早速のご返事ありがとうございます。
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

しか分からないんです…。
もしお時間がありましたら、これを元にどういう形にすればいいのか教えて頂けたら幸いです。

box

Re:C言語初心者で宿題が全然分からなくて困ってます…。

#4

投稿記事 by box » 18年前

まず、課題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言語初心者で宿題が全然分からなくて困ってます…。

#5

投稿記事 by アルフレッサ » 18年前

お返事ありがとうございます。
ご指摘頂いたものを修正するとしたら、

int sqr[20];

for(i=0; i<=19; i++){
sqr = i * i;
}

でよろしいのでしょうか?

box

Re:C言語初心者で宿題が全然分からなくて困ってます…。

#6

投稿記事 by box » 18年前

> 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言語初心者で宿題が全然分からなくて困ってます…。

#7

投稿記事 by アルフレッサ » 18年前

すみません…、ホントに初心者なんでよく分かりません…。
要するに、


int sqr[20];

for(i=0; i<=19; i++){
sqr = (i+1) * (i+1);
}


とすればよいのでしょうか?
理解力がなくてすみません。

box

Re:C言語初心者で宿題が全然分からなくて困ってます…。

#8

投稿記事 by box » 18年前

> 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言語初心者で宿題が全然分からなくて困ってます…。

#9

投稿記事 by アルフレッサ » 18年前

ありがとうございます。
ご指摘されたものですが、それは、

n%7=0

でいいのでしょうか?

box

Re:C言語初心者で宿題が全然分からなくて困ってます…。

#10

投稿記事 by box » 18年前

> n%7=0

「n を 7 で割った余りが 0 と等しいならば」という
内容のif文を書くとき、等号は1つでいいですか?

アルフレッサ

Re:C言語初心者で宿題が全然分からなくて困ってます…。

#11

投稿記事 by アルフレッサ » 18年前

返事遅れて申し訳ございません。
等号の件ですが、おそらく1つでいいんではないかと…。
2つ必要ならどこで使えばいいんでしょうか?

組木紙織

Re:C言語初心者で宿題が全然分からなくて困ってます…。

#12

投稿記事 by 組木紙織 » 18年前

等号一つの意味は何でしょうか?
そして等号二つ並べること(==)の意味は何でしょうか?

F

Re:C言語初心者で宿題が全然分からなくて困ってます…。

#13

投稿記事 by F » 18年前

等号一つだと代入になります
aにbを代入
a = b

比較するときは
aと同じ a==
a以外 a<>
a以外 a!=
aより大きい a<
aより小さい a>
a以上 a<=
a以下 a>=
などが基本です

組木紙織

Re:C言語初心者で宿題が全然分からなくて困ってます…。

#14

投稿記事 by 組木紙織 » 18年前

一つ目のa以外はCの仕様にはなかったと思います。

確かVBの仕様だと記憶しています。

F

Re:C言語初心者で宿題が全然分からなくて困ってます…。

#15

投稿記事 by F » 18年前

すいません
a以外 a<>はVBでした、いろいろやってるので混じりました

閉鎖

“C言語何でも質問掲示板” へ戻る