Matrix Arrayのゼロを1にして印刷するために使用した、いくつかのコードがあります。私は最初に40から1を作成していますが、2番目のループの配列に51があると表示されます。それを理解できませんでした。私のコードの何が悪いのか説明してもらえますか?御時間ありがとうございます
#include <stdio.h>
main(){
int n;
printf("Desenin buyuklugunu giriniz: ");
scanf("%d",&n);
int satirlar[n][n]= {0};
int i=0, j=n-1;
while(i<(n/2) && j>n/2) {
satirlar[i][j] = 1;
i++;
j--;
}
for(int i=0; i< n; i++) {
for(int j=0; j< n; j++) {
if(satirlar[i][j] == 1) {
printf("*");
}
else printf("k");
}
printf("\n");
}
}
ループが何回機能したかを確認するために「k」を出力します。このような出力が得られます。
kkkk
笑
あなたは完全なプログラムを示していないので、私たちはあなたのプログラムが実際に何であるかを推測しなければなりません。int arr[9][9];
関数内で宣言したようです。その場合、それは初期化されず、その要素の値は不確定です。それらはゼロかもしれません。彼らはそうではないかもしれません。それらは使用ごとに変わるかもしれません。
配列を初期化するには、定義をに変更しますint arr[9][9] = { 0 };
。
配列が可変長配列として定義されている場合は、定義の直後に配列全体をゼロに設定するループを記述します。
…
int array[n][n];
for (int i = 0; i < n; ++i)
for (int j = 0; j < n; ++j)
arr[i][j] = 0;
または、選択した要素を1に設定し、他の要素を0に設定するループを記述します。
for (int i = 0; i < n; ++i)
for (int j = 0; j < n; ++j)
arr[i][j] = i == j && i < n/2 ? 1 : 0;
既存のループテストでは、i<(n/2) & j>n/2
仕事に起こるが、Cでこれを表現する従来の方法は次のようになりi < n/2 && j > n/2
「&&ので、is for the Boolean AND of two expressions, while
&is for the bitwise AND of two integers. Additionally, there seems to be little point in testing both
I and
j`。ループが記述されているので、将来のコードリビジョンでループが非正方行列を処理することを意図していない限り、ループを制御するにはそのうちの1つだけをテストするだけで十分です。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加