ログインしてさらにmixiを楽しもう

コメントを投稿して情報交換!
更新通知を受け取って、最新情報をゲット!

明解C言語 絶対習得するぞ!コミュの■第三章■ プログラムの流れの分岐

  • mixiチェック
  • このエントリーをはてなブックマークに追加
第三章について不明点や演習についてのトピックです。

○演習3-1
下に示すように、二つの整数値を読み込んで、後者が前者の約数であれば「BはAの約数です。」と表示し、そうでなければ「BはAの約数ではありません。」と表示するプログラムを作成せよ。

○演習3-2
等価演算子や関係演算子が、1あるいは0の値を生成することを確認するプログラムを作成せよ。

○演習3-3
下に示すように、整数値を読み込んで、その値を表示するプログラムを作成せよ。
---------------------------
整数を入力してください:-8
絶対値は8です。
---------------------------

○演習3-4
下に示すように、二つの整数値を読み込んで、それらの値が等しければ「AとBは等しいです。」と、Aの方が大きければ「AはBより大きいです。」とBの方が大きければ、「AはBより小さいです。」と表示するプログラムを作成せよ。
------------------------------
二つの整数を入力してください。
整数A:12
整数B:6
AはBより大きいです。
------------------------------

○演習3-5
三つの整数値を読み込んで、その最小値を求めて表示するプログラムを作成せよ。

○演習3-6
四つの整数値を読み込んで、その最大値を求めて表示するプログラムを作成せよ。

○演習3-7
printf("それらの差は%dです。\n",(n1>n2)?n1-n2:n2-n1);
このプログラムを、条件演算子ではなくif文を用いて書き換えよ。

○演習3-8
演習3-5のプログラムを、if文ではなく条件演算子を用いて書き換えよ。

○演習3-9
下に示すように、三つの整数値を読み込んで、それらの値が全て等しければ、「三つの値は等しいです。」と、どれか二つの値が等しければ「二つの値が等しいです。」と、そうでなければ「三つの値は異なります。」と表示するプログラムを作成せよ。
------------------------------
三つの整数を入力してください。
整数A:12
整数B:6
整数C:12
二つの値が等しいです。
------------------------------

○演習3-10
下に示すように、二つの整数値を読み込んで、それらの値の差が10以下であれば、「それらの差は10以下です。」と、そうでなければ、「それらの差は11以上です。」と表示するプログラムを作成せよ。
論理OR演算子を使うこと。

○演習3-11
#include <stdio.h>
int main(void)
{
  int no;
  scanf("%d",no);
  if(no%2){
    puts("その数は奇数です。");
  }else{
    puts("その数は偶数です。")
  }
  retun(0);
}
このプログラムをif文ではなくswitch文を用いて書き換えよ。

○演習3-12
#include <stdi.h>
int main(void)
{
  int month;

  if(month>=3 && month<=5){
    puts("春です。");
  }else if(month>=6 && month<=8){
    puts("夏です。");
  }else if(month>=9 && month<=11){
    puts("秋です。");
  }else if(month==1 || month==2 || month==12){
    puts("冬です。");
  }else{
    puts("そんな月はありませんよ!!\a");
  }
  rerun(0);
}
このプログラムを、if文ではなくswitch文を用いて書き換えよ。


■第四章■ プログラムの流れの繰り返し
http://mixi.jp/view_bbs.pl?id=22046432&comm_id=2501078

コメント(22)

>>インフォキングさん

猫スキーです。お疲れさまです。今日も問題を解いてみました。3-3の演習なのですが、無駄なところ、直すべきところがあれば教えていただきたいのですが...


#include<stdio.h>
#include<math.h>

main(){

int a;

printf("整数?:");
scanf("%d",&a);

if(a<0){
printf("絶対値は%d",abs(a));
}else{printf("絶対値は%d",a);
}
return 0;
}



どうでしょうか?
>猫スキー さん
演習問題のご回答お疲れ様です。
コンパイルは正常に通りました。
問題は無いようです。
猫スキーさんのプログラムコードで素晴らしいところは、
<math.h>関数を使用して絶対値を求めているところです。
関数を使うことでスッキリしたプログラムになります。
他にも絶対値を求める方法がありますので、
お時間がありましたらチャレンジしてみてください。
>>インフォキングさん

今日もご教授ありがとうございました。う〜ん、そうですか...絶対値を求めるだけでもいろいろありそうですね...奥が深い....


今回のはネット上にて調べて、自分なりにやってみました。ねらってやったわけではないんですが(笑)

Cの経験を積んで、いつかは仕事でできるようになれば、と思っています。これからもよろしくお願いします。
C言語以外にも言えることですが何かに取り組む際に、明確な目標を掲げると良いことだと思います。これからもご不明な点や相談等お気軽にお問い合わせくださいわーい(嬉しい顔)
当コミュニティでは頑張る皆様を応援しております指でOK
>>インフォキングさん


こんばんは。今日も問題を解いていたのですがまた壁にぶつかりました。演習の3-6(4つの数字のmaxを抽出する)なのですが、その前の3-5はなんとか解く事ができました。で、似たような問題だったので簡単に解けると思ったのですが、これがなかなかうまくいかず、苦戦しております。何かヒントをいただけないでしょうか?よろしくお願いいたします。
演習ご苦労様です。
まず、プログラムを頭の中で整理しましょう。

・4つの整数値を読み込む
・最大値を求める
・最大値を表示する

この3つの処理を行うことで答えを導き出すことができます。
重要となる処理は最大値を求める処理です。
さて、通常最大値を求める際はどのように行いますか?

通常、数値と数値を比較をして大きい方を最大値と判断します。
この比較した値の大きい方を変数に入れ、
次の値と変数の値とを再度比較し大きい方を変数に入れます。
この処理を繰り返すことで最終的に変数には最大値が入ります。

どうでしょうか?
ご理解いただけましたか?

まずはノートに処理を書くと理解しやすいと思います。
インフォキングさん

一応、ヒントをもとにやってみたのですが...うまく結果がでません。なにが原因なんでしょうか?



#include<stdio.h>

main(){

int a,b,c,d,max;

scanf("%d%d%d%d",&a,&b,&c,&d);

if(a>b)
a=max;
else if(b>c)
b=max;
else if(c>d)
c=max;
else d=max;



printf("%d",max);


return 0;
}
演習お疲れ様です。
プログラムソースを確認したところコンパイルは通りますがプログラムは動きませんでした。

動かない原因の一つにscanfの使い方が挙げられるます。
猫スキーさんのソースの場合一度にまとめて読み込もうとする書き方ですが、
この記述方法ですとプログラムは動きません。
原則、一つの数値を取り込むには一つのscanfを記述します。

例、
----------------------------------------------------------
printf("4つの数値を入力してください\n");
printf("数値1:");
scanf("%d",&a);
printf("数値2:");
scanf("%d",&b);
printf("数値3:");
scanf("%d",&c);
printf("数値4:");
scanf("%d",&d);
----------------------------------------------------------

また、最大値の比較については変数の代入に誤りがあるようです。
評価する変数は=の左側に記述します。

×
a = max;


max = a;

上記の記述方法ですとaの中にmaxが入ってしまいます。
読み込んだ値に対してmaxを代入することで不明な値がaに上書きされてしまいます。

入れ物は左 = 入れたい数値や変数は右

以上の点を踏まえて再度チャレンジしてみてください。

>>インフォキングさん

ありがとうございます!!無事にプログラムが組めました!次の課題に移りたいと思います!
>>インフォキングさん

猫スキーです。

演習3-8についてです。

#include<stdio.h>

main(){

int num;
scanf("%d",&num);

num=0?puts("0"):puts("0意外");



return 0;
}


これでいいと思ったら0を入力しても違う答えが出てしまいます。自分的には合っていると思うのですが....ヒントをいただけますでしょうか。
演習御苦労さまです。
猫スキーさんのプログラムを拝見させていただきました。

num=0?puts("0"):puts("0意外");

まず注意しなければならないことはnumを代入してしまっていることです。
numを比較する際は==と記述しなければなりません。
また比較する値は()で囲む必要があります。

以上の点を踏まえて再チャレンジしてみてください。
>>インフォキングさん

できました!


#include<stdio.h>

main(){

int num;
scanf("%d",&num);

(num==0)?puts("0"):puts("0意外");



return 0;
}



比較するときは==だったんですねー!ありがとうございました!
>>インフォキングさん

たびたびすみません....

演習3-9についてなのですが,考え方がわかりません。これもすべてif文をつかえば解けるものなのでしょうか?ヒントをくださいm(_ _)m
演習ご苦労様です。(^^ゞあせあせ(飛び散る汗)
本日も頑張っていらっしゃいますね指でOK

3-9の問題に関しましては表示されるパターンの数を考えてください。

三つの値が等しい場合は
「三つの値は等しいです。」

ということはすべての値が同じということです。
この判定は前の問題を解いた際に使用した==を使用することで実現可能です。
複数の値をif文の()中に記述する際には(比較A&&比較B)と記述します。
上記を踏まえて考えることで下記の表示も可能です。

どれか二つの値が等しければ
「二つの値が等しいです。」

そうでなければ
「三つの値は異なります。」


ご理解いただけましたか?
>>インフォキングさん

#include<stdio.h>

main(){


int a,b,c;
scanf("%d",&a);
scanf("%d",&b);
scanf("%d",&c);


if(a==b&&b==c){printf("3つの数字は同じ");}
else if(a==b){printf("どれか二つが同じ");}
else if(a==c){printf("どれか二つが同じ");}
else if(b==c){printf("どれか二つが同じ");}
else printf("3つの数字は異なる");




return 0;
}


できましたー!!もやもやしてたものが晴れました!次もがんばります!!
>>インフォキングさん

演習3-10

#include<stdio.h>
#include<math.h>

main(){


int a,b,c;
scanf("%d",&a);
scanf("%d",&b);


c=a-b;

if(abs(c)<=10){printf("10以下");}

else printf("11以上");


return 0;
}

とりあえず論理OR演算子を使わないで作ってみました。このプログラムでORが必要な部分がわからないのですが....ヒントをくださいm(_ _)m
演習御苦労さまです。
猫スキーさんのプログラムソースを拝見いたしました。
そこで気になったのが変数cの使い方です。
いま一度問題を読み返してみましょう。
 【二つの整数値を読み込んで、それらの値の差が10以下であれば、「それらの差は10以下です。」と、そうでなければ、「それらの差は11以上です。」と表示するプログラムを作成せよ。論理OR演算子を使うこと。 】
とあります。

猫スキーさんのプログラムソースを見てみると、

c=a-b;

変数cにa-bの答えを代入していますが、
この場合a-bの答えのみに対応した答えがcへ代入されます。
そこで、正確な値を求める為には、
b-aの計算を考慮にいれる必要があります。

a-bもしくはb-aの値が10以下だったら…。

という考え方です。
どうでしょうか?


>>インフォキングさん

ようやく辿り着きました!


#include<stdio.h>

int main(void){



int a,b;
scanf("%d",&a);
scanf("%d",&b);

if(a-b>=11||b-a>=11){printf("11以上です");
}else printf("10以下です");

return 0;
}


なるほど.....こういう使い方があったんですね....感謝です!
>ヤミーさん
インフォキングです。
ご指摘ありがとうございます。修正いたしました。
>ヤミーさん
こんばんは。インフォキングです。

ご理解いただけたようですね。

解らないことがありましたら出来る限りお答いたしますので

お気軽にご質問ください。

今後とも学習の方を頑張ってください。

ログインすると、残り2件のコメントが見れるよ

mixiユーザー
ログインしてコメントしよう!

明解C言語 絶対習得するぞ! 更新情報

明解C言語 絶対習得するぞ!のメンバーはこんなコミュニティにも参加しています

星印の数は、共通して参加しているメンバーが多いほど増えます。

人気コミュニティランキング