• 締切済み

c言語で同じ処理をそのつど呼出したい

c言語で同じ処理を何度も使う場合どうすればよいのでしょう?  たとえば      for(i=0;i<=10;i++) [ここでAのプログラム処理] for(j=0;j>10;j++) [ここでもAの処理] 同じ内容のプログラムをその都度書くのは非常に面倒! ベーシックのGOSUBやCALLと同じようにできる方法はないでしょうか?

  • den33
  • お礼率50% (1/2)

みんなの回答

  • koko_u_
  • ベストアンサー率18% (459/2509)
回答No.2

>だった場合の例題を教えてもらえないでしょうか。 まずはそのコードブロックが何をしているかを考えます。 「k の値に応じて y に値をセットする」 ですね。 int codeA(int k) {  if ( k == 0 ) {   return 0;  }  if ( k == 1 ) {   return 1;  }  return -1; } などと関数を定義すると 「 k の値に応じて値を戻す」 ことが出来るので、それを y に代入するだけです。 for ( i = 0 ; i <= 10 ; i++ ) {  y = codeA(k); } for ( j = 0 ; j > 10 ; j++ ) {  y = codeA(k); } な感じ。ただし、後半はループがまったく回らないので意味のないコードブロックになってますが。

den33
質問者

お礼

貴重な回答ありがとうございます。 とても参考になりました。 またわからないことがありましたら投稿します。 いまさらながらの質問かもしれませんがそのときはどうぞよろしく お願いします。 本当にありがとうございます。

  • koko_u_
  • ベストアンサー率18% (459/2509)
回答No.1

>ベーシックのGOSUBやCALLと同じようにできる方法はないでしょうか? それが関数呼び出しです。 [Aのプログラム処理]なるものを関数にして都度呼びましょう。

den33
質問者

補足

回答ありがとうございます。 ただ今までベーシックばかりやってたものでCの関数なるものが いまいち? Aを if(k==0) y=0; if(k==1) y=1; だった場合の例題を教えてもらえないでしょうか。 あつかましいお願いで申し訳ありません。

関連するQ&A

  • C言語 ファイル処理

    今、c言語のファイル処理の勉強をしているのですが。 あるファイルfp1に 106 106 106 102 177 183 123 125 105 102 101 111 というデータが入っていたとして、 このファイルfp1からこのデータを2次元配列m[i][j]に入れたいんですけど、 一応プログラム書いてみましたがうまくいきません。 for(i=0;i<3;i++){   for(j=0;j<4;j++){     fscanf(fp1,"%d",&x); /*データ読み込み*/  m[i][j]=x;     }   } for(i=0;i<3;i++){   for(j=0;j<4;j++){     printf("%d ",m[i][i]);   }   putchar('\n'); } 変数宣言部、ファイルオープン部などは省略しました。 このプログラムを実行すると。 106 106 106 106 106 106 106 106 106 106 106 106 102 102 102 102 177 177 177 177 183 183 183 183 123 123 123 123 125 125 125 125 105 105 105 105 102 102 102 102 101 101 101 101 111 111 111 111 みたいな感じで表示されます。何ででしょうか? アドバイスお願いします。

  • C言語

    C言語についてです。 例えば関数中で for(i=0;i<10;i++){ for(j=0;j<10;j++){ A[i][j]=・・・; } } という10×10の配列に1つ1つ値が入っているとします。 このfor文の中で入れた値をfor文の外で使うことは出来ないのでしょうか? 例えば、 for(i=0;i<10;i++){ for(j=0;j<10;j++){ A[i][j]=・・・; } } for(k=0;k<10;k++){ for(l=0;l<10;l++){ B[k][l] = A[i][j]/2; } } みたいな形です。 つまり、A[i][j]の初期化を防ぐ方法はあるのでしょうか? 分かりにくくてすいません。

  • C言語について

    C言語の問題なのですか、作成したのですが内容がわからないです。テキストを読んでも解説が書いていないので、出来ればどなたか簡単な解説でも教えて頂けるとありがたい。 〈7-3〉 #include <stdio.h> int main(void) { int i, j; long kuku[9][9]; // 九九の値の代入処理を記述 for (i = 0; i < 9; i++) { for (j = 0; j < 9; j++) { kuku[i][j] = (i + 1) * (j + 1); } } ///////////////////////////////////// // 九九の表示部(ここは変更しないこと) for (i = 0; i < 9; i++) { for (j = 0; j < 9; j++) { printf(" %2d", kuku[i][j]); } printf("\n"); } return 0; }

  • C言語

    C言語 グループのモードについて 以下のプログラムは20個の数字を入力しモードを表示する物です。 処理の流れを詳しく解説出来る方がいましたらご教授願います。 #include <stdio.h> int main(void) { int stats[20],i,j; int mode,count,oldcount,oldmode; printf("20個の数字を入力して下さい:\n"); for(i=0;i<20;i++) scanf("%d",&stats[i]); oldcount=0; for(i=0;i<20;i++){ mode=stats[i]; count=1; for(j=i+1;j<20;j++) if(mode==stats[j]){ oldmode=mode; oldcount=count; } } printf("モードは%dです\n",oldmode); return 0; }

  • C言語について質問です

    C言語について質問です #include <stdio.h> int main(){ int i,j; double a[8][8],p[8][8],x[8]; for(i=0;i<8;i++){ for(j=0;j<8;j++){ a[i][j]=0.0; } } x[8]={0.182289,0.063801,0.125440,0.097210,0.128485,0.080488,0.189581,0.132706}; p[8][8]={{0,25,24,14,19,5,25,10}, {24,0,50,52,15,40,20,11}, {59,18,0,35,37,24,45,12}, {34,3,28,0,22,51,43,3}, {29,31,21,33,0,22,30,15}, {37,7,75,24,38,0,28,31}, {40,8,32,15,16,21,0,21}, {26,28,28,25,24,18,36,0}}; for(i=0;i<8;i++){ for(j=0;j<8;j++){ a[i][j]=1-(x[i]/(x[i]+x[j]))/(p[i][j]/(p[i][j]+p[j][i])); printf("%f\n",a[i][j]); } } } がコンパイル出来ません。コンパイラはvisual stadio2008です。 ご指摘お願いします。

  • C言語の問題で一部分からないところがあります。

    C言語の問題で2つの4x4行列の2次元配列に格納し、それらの積を求めるというプログラムで以下のような関数を作成しました。 #include <stdio.h> void m_ena(int a0[4][4], int a1[4][4], int result[4][4]); int main(void) { } void m_ena(int a0[4][4], int a1[4][4], int result[4][4]) { int a[4][4], b[4][4], r[4][4]; int i, j; for(i=0; i<4; i++){ for(j=0; j<4; j++){ scanf("%d", &a[i][j]); } } for(i=0; i<4; i++){ for(j=0; j<4; j++){ scanf("%d", &b[i][j]); } } for(i=0; i<4; i++){ for(j=0; j<4; j++){ r[4][4] = a[i][j]*b[i][j]; } } } ここまで出来たのはいいのですが、これ以降どのようにメイン関数に書けばいいのか分からず困っています。 この問題は必ず上記関数を使う必要がありますのでどうぞよろしくお願いします。

  • C言語のscanf関数についての質問です。

    閲覧ありがとうございます。 C言語についての質問です。 nと、2つのn×n行列の各成分をキーボードから入力し、 その和を計算するプログラムを作ろうとして i,j,と行列二つの配列(a[n][n]とb[n][n])をintで定義した後、 printf("行列aの成分を入力してください。\n"); for(i=0; i<=n-1; n++) {for(j=0; j<=n-1; j++) { scanf("%d",&a[i][j]); } } printf("行列bの成分を入力してください。\n"); for(i=0; i<=n-1; n++) {for(j=0; j<=n-1; j++) { scanf("%d",&b[i][j]); } } というプログラムを書いてn=3としたのですが、 「行列aの成分を入力してください」と表示されて 例えば「1 2 3 4 5 6 7 8 9」と入力してEnterキーを押しても 「行列bの成分を入力してください」という文が表示されません。 C言語を学び始めてまもないので、 まだ基本的なところが理解できていないかもしれません。 何が原因だかわかる方、解答頂けると嬉しいです。

  • C言語 ?のついた処理内容

    C言語初心者です。 FFTの勉強をしようと先人の作ったC言語プログラムを 参考に処理内容を勉強中ですが、以下の文が どのような処理を行っているのか理解できません。 ご存知の方たいへんおてすうですが、処理内容を ご教授をお願いします。 よろしくお願いします。  w = (flag? M_PI: -M_PI) / (double)n;

  • C言語の問題です!!

    C言語の問題です。次の問題でプログラムを作ってみたのですがどうでしょうか?もし小さな間違いであったら訂正をお願いします。全然違う場合はそのように回答してください。初心者なものでよろしくお願いします。 ・1~100までの整数値を画面に表示せよ. ただし,数値を10個表示するごとに改行すること. #include<stdio.h> int main(void){ int i,j; for(i=1;i<=100;i++){    for(j=1;j<=9;j++) printf("%3d",i+j); i=i+9; putchar("\n"); } return(0); }

  • C言語 多重配列に関して

    以下のプログラムについての質問です。 10行目 for i = 0 の時、13行目 for j = 0 で scanf("%lf", &a[0][0])に10と代入します。 この時のドス画面は input 1-th line element:10 です。ここまではいいのですが、この次がよくわかりません。私の考えでは、10行目 i = 0 の時 13行目 j = 1 となって j がNMAXまでやったら、10行目のiが1になってまた同じように動いて、10行目の i がNMAXになったら、for文が終わると考えたのですが、このプログラムの実行結果(一番下にあります)を見てみると自分の考えが間違っていることに気がつきました。 3行3列のプログラムなので、a[0][0] a[0][1] a[0][2] a[1][0].......となると考え、scanfでドス画面に9回数字を打ち込むかと思ったのですが実際は3回でした。このプログラムはどのように読んだら良いのでしょうか?? 回答宜しくお願い致します。 1  #include <stdio.h> 2  #define NMAX 3 3 4  main() 5  { 6   double a[NMAX] [NMAX], b[NMAX] [NMAX], c[NMAX] [NMAX]; 7   int i,j,k; 8 9   printf("matrix 1:\n"); 10   for(i=0; i< NMAX; i++) 11   { 12   printf("input %d-th line element:", i+1); 13   for(j=0; j< NMAX; j++); 14   { 15   scanf("%lf", &a[i][j]); 16   } 17   } 18   printf("matrix 2:\n"); 19   for(i=0; i<NMAX; i++) 20   { 21   printf("input %d-th line element:", i+1); 22   for(j=0; j< NMAX; j++); 23   { 24   scanf("%lf", &b[i] [j]); 25   } 26   } 27  for(i=0; i<NMAX; i++) 28   { 29   for(j=0; j<NMAX; j++) 30   { 31   c[i][j] = 0; 32   for(k=0; k <NMAX; k++) 33   { 34   c[i][j] += a[i][k] * b[k][j]; 35   } 36   } 37   } 38 39  printf("matrix 1 * matrix2 = :\n"); 40  for(i=0; i<NMAX; i++) 41   { 42   printf("["); 43   for(j=0;j<NMAX; j++) 44   { 45   printf("%f", c[i][j]); 46   } 47   printf("]\n"); 48   } 49  }

専門家に質問してみよう