こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

C言語の配列の入れ方について質問です。

以下のプログラムは配列opに"+-*/"の四則演算子を入れています。
配列に入れた四つの文字を三つ取り出して組み合わせを全て表示させたいのです。
修正箇所を教えていただけますか?
組み合わせは重なっても可とする。
例:
+++ OK
**+ OK
+** OK
#include <stdio.h>

int main()
{
inti,j, k,l;/*i=1桁目 j=2桁目 k=3桁目 l=4桁目*/
charop[4] = "+-*/";

for(op[i]=0; op[i]<4; op[i]++){
for(op[j]=0; op[j]<4; op[j]++) {
for(op[k]=0; op[k]<4; op[k]++) {
for(op[l]=0; op[l]<4; op[l]++){
printf("%c%c%c%c\n", op[i], op[j], op[k], op[l]);
}
}
}
}
return 0;
}

投稿日時 - 2011-07-27 15:41:34

QNo.6903050

すぐに回答ほしいです

質問者が選んだベストアンサー

「四つの文字を三つ取り出して組み合わせを全て表示させたい」
とありますが、順番は考慮する必要があるのですか。

要するに「+ー/」と「/+ー」は別扱いになるのか。ということです。
両方表示する必要があるのか、ないのか。

また、「+++」は組み合わせではないと思いますが、
表示する必要があるのですか。

プログラミングというのは、まず、期待する処理結果があって
その実現方法を記述することです。

ご質問の内容ですと、期待する処理結果が曖昧です。

=============
曖昧なところを想像で補完して回答すると

for(op[i]=0; op[i]<4; op[i]++){
  ↓
for( i = 0 ; i < 4 ; i++ ){

でいいんじゃないですかね。

同様に、j、k、l のループも。

あと、

printf("%c%c%c%c\n", op[i], op[j], op[k], op[l]);

これだと4文字表示しているから、
1つ削ればいいと思います。

投稿日時 - 2011-07-28 14:54:56

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(3)

ANo.2

同意>#1. この問題に対して何をどう考えた結果このプログラムに至ったのか, さっぱり理解できない.

投稿日時 - 2011-07-27 23:30:40

ANo.1

なぜ、op[何とか] をループ制御用に使っているんでしょうか。

投稿日時 - 2011-07-27 19:45:34

あなたにオススメの質問