宿題?あと質問です。

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
カメロンパン
記事: 21
登録日時: 8年前
連絡を取る:

宿題?あと質問です。

#1

投稿記事 by カメロンパン » 8年前

先ほど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
上記の情報は要らないと思いますが、一応書いておきます。
他に必要な情報等があればお願いします。
最後に編集したユーザー カメロンパン on 2012年1月17日(火) 00:34 [ 編集 1 回目 ]

box
記事: 1745
登録日時: 9年前

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

#2

投稿記事 by box » 8年前

0は2で割れない、というのは、数学的に正しくないような気がします。

0÷2=0
だと思います。
バグのないプログラムはない。
プログラムは思ったとおりには動かない。書いたとおりに動く。

beatle
記事: 1280
登録日時: 8年前
住所: 埼玉
連絡を取る:

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

#3

投稿記事 by beatle » 8年前

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

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

beatle
記事: 1280
登録日時: 8年前
住所: 埼玉
連絡を取る:

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

#4

投稿記事 by beatle » 8年前

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

カメロンパン
記事: 21
登録日時: 8年前
連絡を取る:

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

#5

投稿記事 by カメロンパン » 8年前

改めて作成してみましたが何故か二つ目の数値の割った答えが意味分からない数?
出鱈目になってしまいます。
自分なりには頑張ってみたのですが、やはり分かりませんでした。
なので、ヒント等を頂けると幸いです。

コード:

#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");
 }
最後に編集したユーザー カメロンパン on 2012年1月17日(火) 00:35 [ 編集 3 回目 ]

アバター
h2so5
副管理人
記事: 2212
登録日時: 9年前
住所: 東京
連絡を取る:

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

#6

投稿記事 by h2so5 » 8年前

number3へ数値が一度も代入されていません。

アバター
Cr
記事: 93
登録日時: 8年前

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

#7

投稿記事 by Cr » 8年前

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

カメロンパン
記事: 21
登録日時: 8年前
連絡を取る:

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

#8

投稿記事 by カメロンパン » 8年前

何度もすいません^^;
どうやら、まず日本語を理解してなかったらしく、今やっと理解しなおしました。
一応やってみました。
ソースは以下になります。

コード:

#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);
}
最後に編集したユーザー カメロンパン on 2012年1月17日(火) 00:36 [ 編集 1 回目 ]

box
記事: 1745
登録日時: 9年前

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

#9

投稿記事 by box » 8年前

割る数(つまりnumber2)が0だったらエラーメッセージを出す、というプログラムになっていません。
バグのないプログラムはない。
プログラムは思ったとおりには動かない。書いたとおりに動く。

Ryo

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

#10

投稿記事 by Ryo » 8年前

今その書籍を見ても間違っていません。
これは、書籍に書かれていることに間違いがない
という意味ではなく、自分が書籍に書かれていることを
一字一句間違いなく書いたはず
という意味ではないでしょうか?

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

カメロンパン
記事: 21
登録日時: 8年前
連絡を取る:

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

#11

投稿記事 by カメロンパン » 8年前

多分これでいけると思います。
コンパイルしてもどちらでも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);

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

アバター
沖 滉均
記事: 237
登録日時: 9年前
住所: K県F市

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

#12

投稿記事 by 沖 滉均 » 8年前

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

コード:

printf("error[%d÷0=0]\n",number);
この部分ですが、N÷0=0にはなりません。
それ以前にエラー判定をする前に0で割りに行ってしまいますね。
There is no royal road to learning.
codeタグで指定できる言語
画像

beatle
記事: 1280
登録日時: 8年前
住所: 埼玉
連絡を取る:

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

#13

投稿記事 by beatle » 8年前

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で試したところ,プログラムが強制終了しました.

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

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 9年前
住所: 東海地方
連絡を取る:

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

#14

投稿記事 by softya(ソフト屋) » 8年前

書き方としてifやelseは必ず{}を使うクセを付けましょう。初心者はミスのもとです。

本に関しては

コード:

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

コード:

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


それとマルチポスト問題がありますので、もう一つのトピックの方も対応をお願いします。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

閉鎖

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