• ベストアンサー

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

以下のプログラムは配列opに"+-*/"を入れて考えられる組み合わせを三通り作るプログラムを作りたいのですが、どこを修正したら宜しいですか? #include <stdio.h> int main() { int i,j, k,l; /*i=1桁目 j=2桁目 k=3桁目 l=4桁目*/ char op[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; }

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

  • ベストアンサー
  • piroin654
  • ベストアンサー率75% (692/917)
回答No.1

このようなこと? #include <stdio.h> int main() { int i,j, k,l;/*i=1桁目 j=2桁目 k=3桁目 l=4桁目*/ char op[4] = "+-*/"; for(i=0; i<4; i++){ for(j=0; j<4; j++) { for(k=0; k<4; k++) { for(l=0; l<4; l++){ printf("%c%c%c%c\n", op[i], op[j], op[k], op[l]); } } } } return 0; }

関連するQ&A

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

  • C言語の2次配列

    4行5列の配列を用意し、その配列の要素をtij(i=1~4, j=1~5)とするとき、tij=i×j となるように配列に値を入れ、 それを表の形で画面に表示するプログラムを作りなさい。  という問題なんですが、自分は下の様に組みましたがうまく動きません。どこが悪いのか教えてください。よろしくお願いします。あまりC言語を理解していないので申し訳ないですが、なるべく簡単に教えて頂ければ幸いです。 #include<stdio.h> int main(void) { int i,j; int t[4][5]; for(i=0;i<=3;i++) { for(j=0;j<=4;j++) t=i*j; printf("%5d",t); printf("\n"); } return 0; }

  • c言語配列の問題について

    c言語配列の問題について 以下のプログラムは10個の数値を入力させ重複している文字を表示するプログラムですが match==i[k]でどの様に重複した数値を認識しているのかが解説不足で理解できません。 どの様に処理されているのか詳しく解説できる方がいましたらご教授願います。 #include <stdio.h> int main(void) { int i[10],j,k,match; printf("10個の数字を入力して下さい"); for(j=0;j<10;j++) scanf("%d",&i[j]); for(j=0;j<10;j++){ match=i[j]; for(k=j+1;k<10;k++) if(match==i[k]) printf("%dが重複しています\n",match); } return 0; }

  • C言語の問題

    以下はC言語の問題です。お教えください。 1000以下の素数を求めるプログラム prog.c を作成せよ。各素数を整数4桁で出力し、15個の素数を出力した時点で改行処理 を行うこと。作成したプログラムを提出せよ。 です。 僕の考えでは、 #include <stdio.h> #include <math.h> main(){ int i; int j; int ix; int k; printf("正の整数を入力して下さい: "); scanf("%d",&i); ix=(int)(sqrt((double)i)); k=0; for(j=2;j<=ix;j++) { if(i%j==0) { k=1; } } if(k==0) { printf("%d は素数です\n",i); } else { printf("%d は素数ではありません\n",i); } となると思うのですが。どうやら違うようです。全然わからないので、正しい答えを教えてください。

  • 配列

    配列を使って10×10のマス(□)を表示させたいのですが、型が違いますとエラーが出てしまいます。 どこが違うのかわかりません。 わかる人がいたら教えてください。 #include<stdio.h> main() { signed char land[10][10]; int i, j; for(i=0; i<10; i++){ for(j=0; j<10; j++){ land[i][j] = □; printf("%c",land[i][j]); } printf("\n"); } }

  • 2次元配列を使ったC言語の九九表を作りたいんですが、方法がわかりません。

    C言語で、九九の表を作っているのですが2次配列を使わないでの方法なら出来るんですが、 2次配列を使うと出来なくなってします。 下記のように途中まで組んだのですが、どうしてもエラーがでてしまいます。 #include <stdio.h> int main(void) { int i,j,a[9][9]; printf(" "); for(i=1; i<=9; i++) printf("%3d", i); printf("\n"); for(i=0; i<9; i++){ for(j=0; j<9; j++) a[i][j]= {1,2,3,4,5,6,7,8,9},{2,4,6,8,10,12,14,16,18},{3,6,9,12,15,18,21,24,27},{4,8,12,16,20,24,28,32,36},{5,10,15,20,25,30,35,40,45,6,12,18,24,30,36,42,48,54,7,14,21,28,35,42,49,56,63},{8,16,24,32,40,48,56,64,72},{9,18,27,36,45,54,63,72,81} }; for(i=0; i<9; i++){ printf("%3d", i+1); for(j=0; j<9; j++) printf("%3d",a[9][9]); printf("\n"); } return 0; } とやったのですが…以下に書く部分が間違っているようで。 #include <stdio.h> int main(void) { int i,j,a[9][9]; printf(" "); for(i=1; i<=9; i++) printf("%3d", i); printf("\n"); for(i=0; i<9; i++){ for(j=0; j<9; j++) a[i][j]=□ } for(i=0; i<9; i++){ printf("%3d", i+1); for(j=0; j<9; j++) printf("%3d", □); printf("\n"); } return 0; } 色々調べたり、少しずつ変えながら試しているのですが、できません。 どなたかわかるかたいらっしゃいますか。間違いがわかりません… 配列を使用しなくても出来ることは、わかるのですが、配列を使うバージョンでもできるようになりたいんです。 私がしようとおもっているのは、81個分の値を先に計算し、9×9の2次元配列に格納し、次に81個の配列要素の値を出力したいのですが、 間違いと方法がわかる方いらっしゃいませんか。

  • C言語 素数判定

    1000以下の素数を求めるプログラム kadai7-2.c を作成せよ。各素数を整数4桁で出力し、15個の素数を出力した時点で改行処理 を行うこと。作成したプログラムを提出せよ。 という問題なのですが、以下のプログラムを実行しても動きませんでした。どこが違うのでしょうか。ご指摘お願いします。 #include<stdio.h> #include<math.h> main(){ int i,j,ix,k,h; for (i=2;i<=1000;i++){ ix=(int)(sqrt((double)i)); k=0; for(j=2;j<=ix;j++){ if(i%j==0){ k=1; } } if(k==0){ printf("%4d",i); h+=1 if(h=15){ printf("\n"); h=0; } }

  • C言語のint型の配列が分かりません

    #include<stdio.h> int main(void) { int str[ ]={0,1,2} printf("%s\n", str); return 0; } というプログラムをC言語でつくってみましたが動きません.(012と表示されて欲しかったのですが) int str[ ]={1,2,3}の部分をchar str[ ]={'0','1','2'}とすれば動きます. そこで質問なのですが, printf("~%s~", (配列名));  はchar型の配列にしか適応できないのですか? ※追記 puts関数の定義は int puts (const char *str); であるそうなので char型の仮引数にはchar型のアドレスを渡さなければいけません. ではprintf関数の定義は一体どんなものなのですか?

  • 二次元配列による文字列の配列の受渡しについての質問です。

    二次元配列による文字列の配列の受渡しについての質問です。 #include <stdio.h> void print_pname(char str[][5], int n) { int i, j; for (i = 0; i < n; i++) { printf("str[%d] = \"", i); for (j = 0; str[i][j] != '\0'; j++) putchar(str[i][j]); printf("\"\n"); } } int main(void) { char ary[][5] = {"Lisp", "C", "Ada"}; print_pname(ary, sizeof(ary) / sizeof(ary[0])); return 0; } 上のプログラム中の関数print_pnameの引数char str[][5]についてですが char (*str)[5](配列のポインタ)と変更した場合にwarningが多数発生します。 これはどうしてでしょうか? また、上のプログラムを配列のポインタを使って変更することは可能でしょうか? 以上、よろしくお願いします。

  • C言語の配列を利用した問題が分からないんです

    学校でC言語を習っているのですが、配列を利用した問題が解けません。 問題は「一致する文字列が、最初に出てくる位置を求める」というもので、穴埋め問題なのですが、どんなに考えても分かりません。 しかも、答えは教えないので自分で調べましょうと言われて困っています。 誰か分かる方、教えて下さい。 (抜かれているところをどう表現していいか分からなかったので、★マークにしています。分かりにくくてスミマセン) --------------------問題----------------------- #include<stdio.h> int main() {   char a[]="abcdefg";   char b[]="cde";   int i,j;   for(i=0; i<★; i++){     if( ★ ){       for(j=1; j<★; j++){         if(  ★  ){            break;         }       }       if(  ★  ){         break /*一致*/       }     }   }   printf("%d\n",i);   return 0; } ---------------------------------------------- 上の実行結果は、「2」と表示されるとの事でした。 どこか1つでもいいので、よろしくお願いします。

専門家に質問してみよう