- ベストアンサー
C言語での配列初期化について
int a ,b; int wk[100][100]; for(a = 0 ; a < 100 ; a++){ for(b = 0 ; b < 100 ; b++){ wk[a][b] = 0; } } を行うと、処理がフリーズしてしまいます。 wk[a][b] の行を外すとフリーズは起こらなくなるようです。 printfで中身がどこで止まっているかを調べて見ましたが、 aは0のままで、bは80くらいまでは動いているようです。 コンパイラはlccを使用しています。 原因のわかる方、教えていただけないでしょうか。
- みんなの回答 (6)
- 専門家の回答
関連するQ&A
- C言語プログラム 配列
C言語プログラム初心者です。以下のプログラムに対して、実行結果がなぜそうなるかがわからないので、詳しく教えてください。 #include<stdio.h> int func(int a[ ],int b[ ],int n); main(){ int i,k; static int a[12] ={1,2,3,4,5,(省略)・・・,12}; static int b[12] ={21,22,23,24,(省略)・・・,32}; k = func(a,b,6); k = func(b+3,a+3,6); printf("a = "); for(i=0;i<12;i++)printf("%d",a[i]); printf("\n = b"); for(i=0;i<12;i++)printf("%d",b[i]); printf("\n k = %d\n",k); } int func(int a[ ],int b[ ],int n){ int i,x=0; for(i=0;i<n;i++);{ a[i] = b[i]; x = x+a[i]; } return(x); } 結果: a = 21 22 23 .... 26 7 8 9 10 11 12 b = 21 22 23 .... 26 7 8 9 30 31 32 k = 99
- 締切済み
- C・C++・C#
- c言語で分からないところがあるので教えてください。
http://www9.plala.or.jp/sgwr-t/c/Q/ens06-61.html の問題がわかりません。 回答の #include <stdio.h> int main( void ) { int kekka[51]; int a, b, i; int amari; printf( "整数値を2つ入力してください " ); scanf( "%d%d", &a, &b ); if( b == 0 ){ printf( "処理終了\n" ); return 0; } printf( "%d / %d = ", a, b ); kekka[0] = a/b; for ( i = 1; i < 51;i++ ) { amari = a%b; if ( amari == 0 ) break; a = amari * 10; kekka[i] = a/b; } printf( "%d.", kekka[0] ); ここまでの部分はわかったのですが、 下の for ( a = 1; a < i; a++ ) { printf( "%d", kekka[a] ); } の部分がわかりません。 この部分は何を表わしているのか 教えてください。
- ベストアンサー
- C・C++・C#
- C言語 2次元配列の積について
<演習> 4行3列の行列と3行4列の行列の積を求めるプログラムを作成 せよ。各構成要素の値はキーボードから読み込むこと。 ここに出てくる「行列」とは、数学で出てくるあの「行列」のこと でしょうか。 そうなると私が作成したプログラムは意味が違ってきます。 4回同じ事をする様になっていて1回分の計算結果だけにしたいのですが、方法が分かりません。 入門レベルの知識しかありません。ご指導の程、お願いしたいで す。 下記、プログラムを送付します。 <プログラム> #include <stdio.h> int main(void) { int i,j=0; int o,p; int a[4][3]; int b[3][4]; int m[4][4]; for (i = 0;i < 4; i++){ for (j = 0; j < 3 ; j++) { printf("a[%d][%d] = ",i,j); scanf("%d",&a[i][j]); } } printf("\n"); for (i= 0; i < 3; i++){ for (j = 0; j < 4; j++){ printf("b[%d][%d] = ",i,j); scanf("%d",&b[i][j]); } } printf("\n"); for (o = 0; o < 4; o++){ for (p = 0; p < 4; p++){ for (j = 0; j < 4; j++){ for ( i=0 ; i < 4 ;i++ ) { m[o][p] = a[i][j] * b[i][j]; printf ("a[%d][%d] = %d ," ,i, j, a[i][j]); printf ("b[%d][%d] = %d ," ,i, j, b[i][j]); printf("m[%d][%d] = %d \n",o,p,m[o][p]); } } } } return 0; }
- ベストアンサー
- C・C++・C#
- 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 }
- ベストアンサー
- その他(学問・教育)
- 配列について(C言語)
配列の要素において一番目の要素以外を0にするプログラムを以下のように作成したのですが(while文を*b != 0という条件で作りたい)、while文内のところが間違っているためだと思われるのですが、うまく実行されません(実行しても何も表示されない)。どのようにしたらいいのでしょうか。または、何かが抜けている、ほかの部分が間違っている等もあるためにうまく実行されないということなのでしょうか。 #include <stdio.h> int main(void) { int a[5] = {5, 78, 2, 9, 0}; int i, *b; b = &a[0]; while (*b != 0){ if(*!=a[0]) *ptr=0; else *ptr=a[0]; } for (i = 0; i < 5; i++){ printf("ptr値 =%d ptrアドレス =%p \n", *ptr, ptr); } printf("\n"); return (0); }
- ベストアンサー
- C・C++・C#
- c言語について
#include <stdio.h> MakeData(int *a,int n){ int i,b[5]={5,1,4,7,2}; for(i=0;i<5;i++){a[i]=b[i];} } BubbleSort(int n,int *a){ ここに流れ図に沿ったプログラムを作る } main(){ int i,n,a[100]; n=5; MakeData(a,n); for(i=0;i<n;i++){printf("%4d ",a[i]);}printf("¥n"); printf("並べ替え後¥n"); BubbleSort(n,a); for(i=0;i<n;i++){printf("%4d ",a[i]);}printf("¥n"); } この課題が分かりません。 もし詳しい方がいらっしゃいましたら教えて頂けると助かります。
- 締切済み
- その他(学問・教育)
- c言語迷路問題!!!緊急
以下のプログラム毎行一つずつ、コマンド書いてほしいです。地図大きから書いてないでず、他のコマンドよろしくお願いします、ありがとうございます。 #include <stdio.h> #define MAP_X 39 // X座標 #define MAP_Y 43 // Y座標 #define LOL 24 void map() ; // 地図 void cm() ; void trap() ; void map1() ; int ws[ LOL * MAP_X ] ; int wk[ MAP_X * MAP_Y ] = { }; int a = 1 ; char com ; int pz = 1599 ; int main( void ) { int flg = 1 ; map() ; while( flg != 0 ) { cm() ; switch( com ) { case 'w' : if( wk[ pz - 39 ] == 0 ) { wk[ pz - 39 ] = 2 ; wk[ pz ] = 0 ; pz -= 39 ; map() ; } else { printf( "コマンド入力 : " ) ; } break ; case 's' : if( wk[ pz + 39 ] == 0 ) { wk[ pz + 39 ] = 2 ; wk[ pz ] = 0 ; pz += 39 ; map() ; } else { printf( "コマンド入力 : " ) ; } break ; case 'a' : if( wk[ pz - 1 ] == 0 ) { wk[ pz - 1 ] = 2 ; wk[ pz ] = 0 ; pz -= 1 ; map() ; } else { printf( "コマンド入力 : " ) ; } break ; case 'd' : if( wk[ pz + 1 ] == 0 ) { wk[ pz + 1 ] = 2 ; wk[ pz ] = 0 ; pz += 1 ; map() ; } else { printf( "コマンド入力 : " ) ; } break ; case 'j' : if( wk[ pz + 2 ] == 0 ) { wk[ pz + 2 ] = 4 ; wk[ pz ] = 0 ; pz += 2 ; map() ; } else { printf( "コマンド入力 : " ) ; } break ; case 'e' : printf( "GAME OVER\n" ) ; flg = 0 ; break ; } } } void map() { int i ; map1() ; for( i = 0 ; i < MAP_X * LOL ; i++ ) { if( ( i / MAP_X ) == a ) { printf( "\n" ) ; a++ ; } switch( ws[ i ] ) { case 1 : printf( "■" ) ; break ; case 2 : printf( "※" ) ; break ; case 3 : printf( "宝" ) ; break ; case 4 : printf( "☆" ) ; break ; case 5 : printf( "" ) ; break ; default : printf( " " ) ; break ; } } a = 1 ; printf( "\n" ) ; printf( "コマンド入力 : " ) ; } void map1() { int i ; for ( i = 0 ; i < (LOL * MAP_X) ; i++ ) { ws[i] = wk[i + (MAP_X * 19 ) ] ; } } void cm() { scanf( "%s" , &com ) ; }
- 締切済み
- C・C++・C#
- C言語の配列について
配列を20 定義し値を入力して合計値を出したいのですがどうすればよいのでしょうか 下のソースでエラーはおこりませんでした 何がちがうのでしょうか #include <stdio.h> int main() { int a[20]={}; int i, sum; printf("整数を入力してください:"); scanf("%d",&a); printf("\n"); for (i = 0; i < 10; i++) { sum += a[i]; } printf("sum= %d\n", sum); return 0; }
- 締切済み
- C・C++・C#
- c言語 配列 返り値
0~255の数を2進数に変換し、各8ビットずつに格納するというを作りたいのですが、 以下のような場合、reutrnで配列を返すにはどうしたらよいのですか? int bina(int r2,int g2,int b2){ int i; char binary[23]={0}; for(i=0;b2>0;i++){//2進数に変換する binary[i]=b2%2; b2=b2/2; } for(i=8;g2>0;i++){ binary[i]=g2%2; g2=g2/2; } for(i=16;r2>0;i++){ binary[i]=r2%2; r2=r2/2; } printf(" 2進数 = "); for(i=0;i<24;i++){ printf("%d", binary[23-i]); } printf("\n"); return binary[23]; } int main(void) { r=124,g=235,b=30 char sStr1[23]; sStr1[23]=bina(r,g,b); for(i=0;i<24;i++){ printf("%d"sStr1[i]); } return(0); }
- 締切済み
- 情報工学
- C言語初心者です。
大学に入ってからC言語を授業で習い始めました。なので、すごい初歩的なことですが丁寧に教えてくださると嬉しいです。いくつか分からないことがあるので教えてください。 1・よくprintf("");なので%dや%fを使いますが、これはint(整数)の時が%dで、double(小数点付)の時に%fを使えばいいのか。 2・mul(呼び出す)、return(戻る)の意味、使い方 3・if(aaaa%4==0){ if(aaaa%100!=0)printf("閏年である。\n"); else{if(aaaa%400==0)printf("閏年である。\n"); else printf("閏年ではない。\n"); の意味は、もしaaaaが4で割り切れ、100で割り切れなかったら閏年で、そうではなく100で割り切れ400で割り切れたら閏年である。という意味でいいのか。 4・andとor,whileの使い方が分からない。 5・授業でやったことなのですが、 # include<studio.h> int passWordInput(); main(){ int a, pw=1234, a=passWordInput(); if(a==pw)printf("ok\n"); else{a=passWordInput(); if(a==pw)printf("ok\n"); else{a=passWordInput(); if(a==pw)printf("ok\n"); else printf("Byw!!\n"); } } } int passWordInput(){ int wk; printf("パスワード:");scanf("%d",&wk); return wk; } がよく分かりませんでした。特にwkが出てくるあたりからです。 一応全て自分なりに本とか見てみましたが、あまり理解出来なかったので詳しい回答をしてくださると嬉しいです。よろしくお願いします。
- ベストアンサー
- C・C++・C#
- 本日Amazonから届いたHL-L3230CDWの製品でカラー印刷を行っても白黒で出力される問題について相談です。
- Mac OS12.2.1でUSBケーブル接続しており、関連するソフトとしてエクセルを使用しています。
- 電話回線はひかり回線を使用しています。
補足
コンパイラはLSI C-86のもので、 DOS上でコンパイルを行っています。