• ベストアンサー

if と配列の組み合わせ

なにやら思いつかなかったのでこちらで相談します。 配列のaと変数bがこんな感じだったとします。 int a[4]={1,3,4,7}; b=6; もしbが配列aのどの数字にも当てはまらないならこうしますよ もしbが配列aのどれかの数字に当てはまるならこうしますよ といったプログラムを作りたいのですが短く処理できる プログラムを思いつきません。(理論演算子を使えば長くなる) どうすれば短く処理できますか?

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

  • ベストアンサー
  • hitomura
  • ベストアンサー率48% (325/664)
回答No.1

C++なら、 #include <algorithm> int main(int argc, char** argv) {   int a[4] = {1, 3, 4, 7};   int b = 6;   if (std::find(a, a + 4, b) == a + 4){     printf("どれにも当てはまらない\n");   } else {     printf("どれかに当てはまる\n");   }   return 0; } Cなら、 int main(int argc, char** argv) {   int a[4] = {1, 3, 4, 7};   int b = 6;   int found = 0;   int i;   for (i = 0; i < 4; i++){     if (a[i] == b){       found = 1;       break;     }   }   if (found){     printf("どれかに当てはまる\n");   } else {     printf("どれにも当てはまらない\n");   }   return 0; }

nanaka2223
質問者

お礼

無事に文字列でもできました while で見かけた手法だったのですが変数に1を入れての判定はifでもできるんですね

nanaka2223
質問者

補足

すみません よく考えたらswitchを使えば簡単とか言う答えが来ると思ったのですが 例として書いたのがint 型ではまずかったですね 実際は 文字列での 型で聞きたかったのですが、どうやら心配が杞憂だったようですね Cのほうです 開発可能なパソコンに戻して試してみますね ありがとうございました。

関連するQ&A

  • 配列の疑問。

    もうすぐC言語のテストがあるので適当に自分で問題を作って プログラムを作る練習をしていたのですが配列の所でちょっと疑問に思いました。 問題 ひとつずつ数字を入力していき、それまでの数字の合計と平均を求めるプログラム。 0を入力するとプログラム終了(配列、ポインタ、関数を用いること) #include <stdio.h>    int wa(int *a,int b); main() {    int a[10],ans,i=0,c;    double ave=0,j;    while(1)    {      scanf("%d",&a[i]);      c=a[i];      i++;      if(c==0){         exit(1);      }      ans=wa(&a[0],i);      printf("合計%d\n",ans);      j=i;      ans=wa(&a[0],i);      ave=ans/j;      printf("平均%lf\n",ave);      printf("計算回数%d回\n",i);    } } int wa(int *a,int b) {    int ans=0,i;    for(i=0;i<b;i++){      ans+=*(a+i);    }    return ans; } このようなプログラムで一応自分の期待通りには動いてくれたのですが、 こういう「0」を入力しない限り終わらないプログラムのときに配列を利用すると どれぐらい領域を取っておくかがわからないんですよ。 今回はa[10]としてますが、結局10しか確保してないから10回しか入力できないかな? っと思って実行してみますが普通に10回以上でもエラーがでることもなく実行できるんですよね。 これはなぜでしょうか? 私の配列の考え方がまちがっているのでしょうか?

  • 「配列変数」て何ですか!?

    #include <stdio.h> #include <string.h> int main() { int suuretsu[10]; int *p; for ( p = suuretsu; *p != 0; p++ ){ printf("p=%p *p=%d\n", p, *p); } }  以上のプログラムで!  「配列変数」が”どこ”に当たるのか  ?いまいちピンとこないです!。  参考書にも「配列変数」の解説がありません!  ググッたら・違ったプログラムでの解説はあり、  なんとなく分かりはしました。   しかし!プログラムが変わるとニュアンスの違いで!  また違った関係があるみたいでいまいち分かりません--    ここでいう、「配列変数」はどこに当たりますか!?  宜しくお願いします。  

  • 引数になっている二次元配列の大きさを知る

    行列の掛け算をする関数で Matrix(int a[2][2], int b[2][2], int result[2][2]) のようにすると[3][3]用、[4][4]用、・・・と似たようなプログラムをいっぱい作る羽目になる。 Matrix(int *a, int *b, int *result) のようにすると*aから配列の大きさがわかれば その大きさ/4の平方根をとってnとでればn×n行列とわかって解決と考えましたが、*aから配列の大きさをわかるにはどうしたらいいですか?

  • Perlで二次配列は可能?

    毎度御世話になっております。 Perlスクリプトで二次配列のような配列の使い方は可能でしょうか? (A*B)種類の変数を配列の形で操作したいと考えています。 A,B共に8~256ぐらいで、処理の途中で増やせる様にしたいのです。 連想配列を用いればそれらしいことが出来るのではないかと思ったのですが、 うまく行きません。どうかお知恵を御貸し下さい。

    • ベストアンサー
    • Perl
  • 2次配列の事で悩んでいます。

    題名とおりプログラムの配列の事で悩んでいます。 一次配列だと (例) int a[5]={1,2,3,4,5}だとすると  a[0]=1, a[1]=2, a[2]=3だという事は何とかわかります。 でも2次配列になると全然わからなくなってしまいます。 (例)   int a[6][4] = { { 1, 2, 3, 4 }, { 5, 6, 2, 6 }, { 7, 8, 9, 10 }, { 11, 12, 13, 14 }, { 15, 16, 17, 18 }, { 19, 20, 21, 22 } }; のような2次関数があったとして      a[0][0],a[1][0],a[2][0],a[3][0] a[0][1],a[1][1],a[2][1],a[3][1] a[0][2],a[1][2],a[2][2],a[3][2] a[0][3],a[1][3],a[2][3],a[3][3] などは、int a[6][4]の中の数字にどのように対応しているのかが教えて頂けないでしょうか? できれば一つ一つ具体的に答えて頂ければ幸いです。 ずっと考えていたんですが自分ではどうしてもわかりません。  

  • 配列の要素追加・・・

    プログラミングというものは結構やっていて最近Java・iアプリを作っているものです。 質問なんですが、プログラムが進行すると要素が増える~みたいなプログラムで ーーーーーーーーーー int[] a;//みたいな感じで起動。 ・・・ a[b]=0;//b番目の要素(int)をいきなり追加記述... ーーーーーーーーーー 上の様にするとエラーなようです。 配列の要素の追加について、あんまりいいサイトも見つからなかったので、教えてください。

    • ベストアンサー
    • Java
  • 配列に添え字を書かないと・・・

    java初心者です。 配列として宣言した変数(?)に、添え字を書かないとどういう処理をするのでしょうか? 例えば、 int[] n = new int[10]; という書き方をしたのに、使うときに n というのを何の添え字もつけずに使っているようなのですが・・。 よろしくお願いします。

  • 配列の数を途中で増やすには?

    はじめまして。 この度、以下のようなプログラムを作りました。 が、途中で配列の数を増やすことになってしまいました。 ------------------------------------------------ struct a{ int int_a; long int_b; }; struct b{ a *aa; }; void main(void){ b *bb; bb = new b[3]; bb[0].aa = new a[5]; bb[1].aa = new a[4]; . . . } ------------------------------------------------ 具体的には、'bb'の配列を3から5に増やすようなやり方を探しています。 元の配列より大きい配列をつくり、そこにコピーすればいいと考えたのですが、 'bb'内の'aa'の配列も動的に作成しているため、それも出来ない状況です。 どなたかやり方を知っている方がいましたら、教えていただきたいです。 下手な説明ですいません。

  • 配列について。

    配列について質問なんですが int a[6]={1,2,3,4,5,6}; int b[3]={6,32,4}; という配列を宣言し、この二つの配列を足す方法はどのようなやりかたがあるのでしょうか? つまり cc[]という新たな配列を作り cc[9]={1,2,3,4,5,6,6,32,4}; とするにはどのように記述すればいいのでしょうか? 教えて頂ければ幸いです。

  • インクリメント/デクリメント演算子を使った計算

    Javaでのインクリメント演算子とデクリメント演算子を 使った計算についての質問です。 int a = 10; int b = a++ + ++a + --a - a--; このコード処理後の変数a,bの値の計算方法(考え方)が つかめず苦戦しています。 解答はa=10,b=22だそうです。 ちなみに例えば次のコードのb=a++;のように 右辺と左辺が1つずつの場合は理解しやすいです。 int a = 1; int b = 0; b = a++; //処理A 処理A後の変数a,bの値は b=aをした後でa=a+1を行うので a=2,b=1 となることは理解できます。 ご教授のほどよろしくお願いします。

専門家に質問してみよう