C言語初心者の素数出力プログラム

タイピング講座の模擬授業をやろうとしてたら,パソコン講座のサポートデスクから表題のサポートをしてくれとお願いがやってきた.1年生の情報の授業でやる課題らしいが,プログラミング初心者に与えるにしてはちょっと敷居が高いんじゃないかなとか思いつつ話を聞いてみると,ほんとに初心者の子(ちなみに工学部の女の子)でfor文もよくわかってなかった.

まず,最初に一番簡単であろう素数出力アルゴリズムを一緒に考えてみて,次に実装について説明してみるがなかなかわかってもらえない.僕も最初はそうだったけど,ブロックが入れ子になってると途端にややこしく感じるんじゃないかと思う.*1

とりあえず完成品はこれ.

int x,y,z;
// 2から100までについて
for(x=2; x<=100; x++){
  z = 0;
  // それより小さくてかつ2以上の数で割りきれなかったら素数
  for(y=2; y<=x-1; y++){
    if(x % y == 0){
      z++;
    }
  }
  if(z==0){
    printf("%4d", x);
  }
}

途中まで説明した段階で「今日授業でこんなの渡されたんですけど…」って下みたいなのを渡された.(先に出してくれよ)と思ったものの,まさにさっきまで説明してたアルゴリズムのまんまだったのでこれを修正していく方法でまたじっくりねっとり説明する.

int x,y,z;
for(x=2; x<=100; x++){
  for(y=□; y<=x-1; y++){
    if(x % y □ 0){
      z++;
    }
  }
  if(z==□){
    printf("%4d", x);
  }
}

(↑の穴埋めしただけじゃちゃんと動かない…たぶん見間違いだろう)
結局,□の部分を埋めるだけだったみたいだけど,動きを全部理解してもらうまで結局30分かかった.彼女がそこまで求めていたかどうかは分からないが,工学部だったら今頑張った分は損にはならないだろう.(さらなる地獄が待っているとも言う)

*1:一番最初にC言語にさわったときはifブロックの中にさらにifブロックを入れていいのかすごく迷ったものだ