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

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
ぎゃーてー

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

#1

投稿記事 by ぎゃーてー » 12年前

初めて質問させていただきます。

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

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

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

#2

投稿記事 by beatle » 12年前

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

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

ぎゃーてー

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

#3

投稿記事 by ぎゃーてー » 12年前

beatleさん早速の回答ありがとうございます。

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

non
記事: 1097
登録日時: 13年前

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

#4

投稿記事 by non » 12年前

間違っても良いので、プログラムを作って貼ってください。
何かC言語の本は持ってますよね。forのところを少し調べてみてね。
non

たかぎ
記事: 328
登録日時: 13年前
住所: 大阪
連絡を取る:

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

#5

投稿記事 by たかぎ » 12年前

ぎゃーてー さんが書きました:標準入力から 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));
}

アバター
さかまき
記事: 92
登録日時: 13年前

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

#6

投稿記事 by さかまき » 12年前

B≠0の時、A*B=A/(1/B)だから乗算の代わりに除算で出来そうな気がします。
それで、評価が上がるか下がるかは先生次第。

たかぎ
記事: 328
登録日時: 13年前
住所: 大阪
連絡を取る:

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

#7

投稿記事 by たかぎ » 12年前

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

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

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

#8

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

素直に作って見ました。このまま提出したらヤバイと言うより習っていない機能を使っています。

コード:

#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));
}
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

たかぎ
記事: 328
登録日時: 13年前
住所: 大阪
連絡を取る:

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

#9

投稿記事 by たかぎ » 12年前

よく考えたら、算術演算子の*を使わなければよいので...

コード:

#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でしょう。
最後に編集したユーザー たかぎ on 2012年1月10日(火) 16:26 [ 編集 1 回目 ]

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

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

#10

投稿記事 by beatle » 12年前

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;
}

たかぎ
記事: 328
登録日時: 13年前
住所: 大阪
連絡を取る:

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

#11

投稿記事 by たかぎ » 12年前

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;
}
これで十分です。

閉鎖

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