ページ 11

宿題?あと質問です。

Posted: 2012年1月16日(月) 23:02
by カメロンパン
先ほどbeatleさんより、アドバイスをいただき早速問題を解いてみました。
一応、上手く動作したのですが書き方など、アドバイスをいただけるとうれしいです。
こちらは上記の質問のページです。→http://dixq.net/forum/viewtopic.php?f=3&t=10019

コード:

#include <stdio.h>
main()
{
	int    number    ,number2;
	printf("数値を入力してください。\n:");
	scanf("%d",&number);
	
	number2=number/2;
	
	if(number)
		printf("入力された数値を2で割った数は「%d」です。\n",number2);
	else
		printf("入力された数値は0なので割れません。\n");
}
質問
只今、「学習用C言語開発環境」を使用してるのですが、それ以前は「Microsoft Vsual C++ 2010」を使用していたのですが、何故か当時持っていた書籍に書いてあったソースがエラーが出てしまいました。
そのソースは基本の文字出力でした。
今その書籍を見ても間違っていません。
Cは相互性が無いのでしょうか?
それとも環境がいけないのでしょうか?
開発環境は
OS:windows7
メモリ:1GB
ノートブックタイプPC
上記の情報は要らないと思いますが、一応書いておきます。
他に必要な情報等があればお願いします。

Re: 宿題?あと質問です。

Posted: 2012年1月16日(月) 23:18
by box
0は2で割れない、というのは、数学的に正しくないような気がします。

0÷2=0
だと思います。

Re: 宿題?あと質問です。

Posted: 2012年1月16日(月) 23:19
by beatle
僕は
問題:2つの整数を標準入力から入力し,割り算した結果を表示せよ.ただし,割る数として0を入力されたらエラーメッセージを表示してプログラムを終了せよ.
という問題を出しました.あなたは整数を1つしか入力していませんので,間違いです.

X÷Yという式において,割る数というのはYを指します.Xは割られる数です.

Re: 宿題?あと質問です。

Posted: 2012年1月16日(月) 23:21
by beatle
カメロンパン さんが書きました:只今、「学習用C言語開発環境」を使用してるのですが、それ以前は「Microsoft Vsual C++ 2010」を使用していたのですが、何故か当時持っていた書籍に書いてあったソースがエラーが出てしまいました。
そのソースは基本の文字出力でした。
今その書籍を見ても間違っていません。
Cは相互性が無いのでしょうか?
それとも環境がいけないのでしょうか?
書籍が間違っていないというのはなぜ分かるのでしょうか?書籍の記述を書いてもらってもいいですか?
往々にして書籍は間違いを書く場合があります.たとえばmain関数の戻り値型を書かないとか,voidにするとか.

Re: 宿題?あと質問です。

Posted: 2012年1月16日(月) 23:30
by カメロンパン
改めて作成してみましたが何故か二つ目の数値の割った答えが意味分からない数?
出鱈目になってしまいます。
自分なりには頑張ってみたのですが、やはり分かりませんでした。
なので、ヒント等を頂けると幸いです。

コード:

#include <stdio.h>
main()
{
	int    number    ,number2    ,number3    ,number4;
	printf("1つ目の数値を入力してください。\n:");
	scanf("%d",&number);
	
	printf("2つ目の数値を入力してください。\n:");
	scanf("%d",&number2);
	
	number2=number/2;
	number4=number3/2;
	
	if(number)
		printf("1つ目の数値を2で割った数は「%d」です。\n",number2);
	else
		printf("1つ目の数値\nerror[0÷2=0]\n");
	
	if(number3)
		printf("2つ目の数値を2で割った数は「%d」です。\n",number4);
	else
		printf("2つ目の数値\nerror[0÷2=0]\n");
}


書籍に付いて
書籍に付いての詳細は以下の通りです。
名称:改訂 新C言語入門 スーパービギナー編
出版:1999年7月23日

ソースは以下の通りです。

コード:

#include <stdio.h>

main()
 {
 	printf("How are you?\n");
 }

Re: 宿題?あと質問です。

Posted: 2012年1月16日(月) 23:34
by h2so5
number3へ数値が一度も代入されていません。

Re: 宿題?あと質問です。

Posted: 2012年1月16日(月) 23:36
by Cr
問題を正しく理解なされてないのでは?
beatle さんが書きました: 問題:2つの整数を標準入力から入力し,割り算した結果を表示せよ.ただし,割る数として0を入力されたらエラーメッセージを表示してプログラムを終了せよ.
ですよ
2で割れとも、2回計算をしろ とも言ってません。

Re: 宿題?あと質問です。

Posted: 2012年1月16日(月) 23:49
by カメロンパン
何度もすいません^^;
どうやら、まず日本語を理解してなかったらしく、今やっと理解しなおしました。
一応やってみました。
ソースは以下になります。

コード:

#include <stdio.h>
main()
{
    int    number    ,number2    ,number3;
    printf("1つ目の数値を入力してください。\n:");
    scanf("%d",&number);
    
    printf("2つ目の数値を入力してください。\n:");
    scanf("%d",&number2);
    
    number3=number/number2;
    
    if(number3)
        printf("1つ目の数値を2つ目の数値で割った数は「%d」です。\n",number3);
    else
        printf("error[0÷%d=0]\n",number2);
}

Re: 宿題?あと質問です。

Posted: 2012年1月16日(月) 23:57
by box
割る数(つまりnumber2)が0だったらエラーメッセージを出す、というプログラムになっていません。

Re: 宿題?あと質問です。

Posted: 2012年1月17日(火) 00:07
by Ryo
今その書籍を見ても間違っていません。
これは、書籍に書かれていることに間違いがない
という意味ではなく、自分が書籍に書かれていることを
一字一句間違いなく書いたはず
という意味ではないでしょうか?

なんとなく
cppファイルで作って、mainの型が指定されていないとかエラーがでたんじゃないかと推測

Re: 宿題?あと質問です。

Posted: 2012年1月17日(火) 00:24
by カメロンパン
多分これでいけると思います。
コンパイルしてもどちらでも0の場合エラーが出るようにしました。

コード:

#include <stdio.h>
main()
{
    int    number    ,number2    ,number3;
   
    printf("1つ目の数値を入力してください。\n:");
    scanf("%d",&number);
    
    printf("2つ目の数値を入力してください。\n:");
    scanf("%d",&number2);
    
    number3=number/number2;
    
    if(number2)
    	printf("2つ目の数値は0ではありません\n");
    else
    	printf("error[%d÷0=0]\n",number);
    
    if(number3)
		{
		printf("1つ目の数値は0ではありません\n");
		printf("1つ目の数値を2つ目の数値で割った数は「%d」です。\n",number3);
		}
    else
		printf("error[0÷%d=0]\n",number2);

}
書籍に付いて。
多分そうだと思います。
色々とありがとうございます。

Re: 宿題?あと質問です。

Posted: 2012年1月17日(火) 01:59
by 沖 滉均
まだ日本語を正しく理解できていないように思えますが?
beatle さんが書きました:問題:2つの整数を標準入力から入力し,割り算した結果を表示せよ.ただし,割る数として0を入力されたらエラーメッセージを表示してプログラムを終了せよ.
あなたのコードですと、number2が0でもプログラムは終了しません。
そして17行目の

コード:

printf("error[%d÷0=0]\n",number);
この部分ですが、N÷0=0にはなりません。
それ以前にエラー判定をする前に0で割りに行ってしまいますね。

Re: 宿題?あと質問です。

Posted: 2012年1月17日(火) 07:27
by beatle
beatle さんが書きました:問題:2つの整数を標準入力から入力し,割り算した結果を表示せよ.ただし,割る数として0を入力されたらエラーメッセージを表示してプログラムを終了せよ.
問題文の,特に「割る数として0を入力されたらエラーメッセージを表示してプログラムを終了せよ」の真意を書いておいたほうがよさそうですね.

ご存知かと思いますが,数学では何かの数値を0で割ることは許されません.同様に,プログラムでも0で割ってはいけないのです.
試しに以下のプログラムを実行してみましょう.

コード:

#include <stdio.h>

int main(void)
{
	int a = 3;
	int b = 0;
	int result = 0;

	result = a / b;

	printf("%d\n", result);
	return 0;
}
正常に計算結果が出力されましたか?僕がVisual C++ 2010, Windows 7 64bitで試したところ,プログラムが強制終了しました.

こういうのを「ゼロ割」と言いまして,プログラマなら常に気をつけておくべきことです.ということで,僕はこれを問題に入れたわけです.

Re: 宿題?あと質問です。

Posted: 2012年1月17日(火) 10:11
by softya(ソフト屋)
書き方としてifやelseは必ず{}を使うクセを付けましょう。初心者はミスのもとです。

本に関しては

コード:

#include <stdio.h>
 
main()
 {
    printf("How are you?\n");
 }
は書き方が古いのでお勧めできません。本が古いためだと思います。

コード:

#include <stdio.h>
 
int main(void)
 {
    printf("How are you?\n");
 }
と書いて下さい。


それとマルチポスト問題がありますので、もう一つのトピックの方も対応をお願いします。