ページ 11

C言語の初歩的な質問ですが...

Posted: 2012年1月10日(火) 14:17
by ぎゃーてー
初めて質問させていただきます。

標準入力から int型の変数 a, b に入力を受け取り,a × b を求めるプログラムを記述せよ.
但し,算術演算子の * を使ってはいけないこととする.
という問題が出されて考えてみて、aをb回足せばいいということはわかるのですが、それ以外まったくわかりません。
これはfor文を使えばいいのでしょうか?
皆さんの知識を貸してください。よろしくお願いします。

Re: C言語の初歩的な質問ですが...

Posted: 2012年1月10日(火) 14:23
by beatle
aをb回足せばいいというのはその通りです.
bが固定されていればa + a + a + ... + aなどと書けますが,bが幾つになるか分かりませんから,仰るとおりfor文を使うか,またはwhile文を使います.
(インラインアセンブラを使って乗算するというテクニックもありますが,レベルが高い技です)

それ以外まったく分からないということは,main関数の定義方法とか,結果の出力方法とか,値の入力方法なども分からないということでしょうか.

Re: C言語の初歩的な質問ですが...

Posted: 2012年1月10日(火) 14:37
by ぎゃーてー
beatleさん早速の回答ありがとうございます。

main関数の定義方法というのはわからないのですが、結果の出力と値の入力はわかります。
for文で書くならば条件式の中はどのようになるのか、break文は必要なのかなどがわかりません。
説明不足ですいません。よければ引き続き回答お願いします。

Re: C言語の初歩的な質問ですが...

Posted: 2012年1月10日(火) 14:49
by non
間違っても良いので、プログラムを作って貼ってください。
何かC言語の本は持ってますよね。forのところを少し調べてみてね。

Re: C言語の初歩的な質問ですが...

Posted: 2012年1月10日(火) 15:58
by たかぎ
ぎゃーてー さんが書きました:標準入力から int型の変数 a, b に入力を受け取り,a × b を求めるプログラムを記述せよ.
但し,算術演算子の * を使ってはいけないこととする.
出題者の裏をかくのであれば、次のようなコードを書くことも出来ます。

コード:

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

int main(void)
{
     int a, b;
     scanf("%d%d", &a, &b);
     printf("a * b = %.0f\n", fma(a, b, 0));
}

Re: C言語の初歩的な質問ですが...

Posted: 2012年1月10日(火) 16:13
by さかまき
B≠0の時、A*B=A/(1/B)だから乗算の代わりに除算で出来そうな気がします。
それで、評価が上がるか下がるかは先生次第。

Re: C言語の初歩的な質問ですが...

Posted: 2012年1月10日(火) 16:15
by たかぎ
さかまき さんが書きました:B≠0の時、A*B=A/(1/B)だから乗算の代わりに除算で出来そうな気がします。
それで、評価が上がるか下がるかは先生次第。
私も一瞬それを考えましたが、誤差が出るのでよくないでしょうね。

Re: C言語の初歩的な質問ですが...

Posted: 2012年1月10日(火) 16:22
by softya(ソフト屋)
素直に作って見ました。このまま提出したらヤバイと言うより習っていない機能を使っています。

コード:

#include <stdio.h>

int mul(int a,int b)
{
	if( b <= 0 ) return 0;
	return a+mul(a,b-1);
}

int main(void)
{
     int a, b;
     scanf("%d%d", &a, &b);
     printf("a * b = %d\n", mul(a,b));
}

Re: C言語の初歩的な質問ですが...

Posted: 2012年1月10日(火) 16:24
by たかぎ
よく考えたら、算術演算子の*を使わなければよいので...

コード:

#include <stdio.h>

int main(void)
{
     int a, b;
     scanf("%d%d", &a, &b);
     double result = a;
     result *= b;
     printf("a * b = %.0f\n", result);
}
これでOKでしょう。

Re: C言語の初歩的な質問ですが...

Posted: 2012年1月10日(火) 16:25
by beatle
bが負の場合にも対処しました

コード:

#include <iostream>

using namespace std;

int product(int a, int b)
{
    return b > 0 ? a + product(a, b - 1)
           : b == 0 ? 0
           : product(-a, -b);
}

int main()
{
    int a, b;
    cin >> a >> b;
    cout << product(a, b) << endl;
}

Re: C言語の初歩的な質問ですが...

Posted: 2012年1月10日(火) 16:31
by たかぎ
C++なら...

コード:

#include <iostream>
#include <functional>

int main()
{
     int a, b;
     std::cin >> a >> b;
     std::cout << "a * b = " << std::multiplies<int>()(a, b) << std::endl;
}
これで十分です。