打印出二维数组中的某些元素
Printing out certain elements in a 2D array
我对 C 编程有点陌生,我有一项学校作业需要帮助解决。
Assignment
因此,我应该在任意给定大小的数组中打印出这些黄色标记的元素。
所以,这是我到目前为止提出的代码:
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
int main()
{
int i,j,n;
printf("Matrix dimension: ");
scanf("%d",&n);
int matrix[n][n];
srand((unsigned)time(NULL));
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
{
matrix[i][j]=100+(float)rand()/RAND_MAX*900; //filling out matrix with random integers
}
}
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
{
printf("%d\t",matrix[i][j]); //printing out matrix itself
}
printf("\n");
}
printf("\nLeft:\n"); //elements below main diagonal, above secondary diagonal
for(i=1;i<n-1;i++)
{
printf("\n");
for(j=0;j<(n-1)/2;j++)
{
if((j<i) && (j+i!=n-1))printf("%d\t",matrix[i][j]);
else printf("-\t");
}
}
printf("\n\nRight:\n"); //elements above main diagonal, below secondary diagonal
for(i=1;i<n-1;i++)
{
printf("\n");
for(j=n-1;j>(n/2);j--)
{
if((j>i) &&(i+j!=n-1) )printf("%d\t",matrix[i][j]);
else printf("-\t");
}
}
printf("\n\nUp:\n"); //elements above main and secondary diagonal
for(i=0;i<(n-1)/2;i++)
{
printf("\n");
for(j=1;j<n-1;j++)
{
if((j>i) && (j+i!=n-1 && j+i!=n))printf("%d\t",matrix[i][j]);
else printf("-\t");
}
}
printf("\n\nDown:\n"); //elements below main and secondary diagonal
for(i=n-1;i>(n/2);i--)
{
printf("\n");
for(j=1;j<n-1;j++)
{
if((i>j) &&(i+j!=n-1) )printf("%d\t",matrix[i][j]);
else printf("-\t");
}
}
return 0;
}
此代码有效,但不适用于维度等于或大于 7 的矩阵。在那些情况下总有一个额外的元素。
我意识到我可以添加一些额外的语句来解决问题,但只是暂时的。
示例:
if((j<i) && (j+i!=n-1 && j+i!=n))
那么它将适用于最大 8x8 的矩阵。
然后我又加了一句
if((j<i) && (j+i!=n-1 && j+i!=n && j+i!=n+1))
然后它可以处理最大 10x10 的矩阵。
所以我注意到我需要每 2 次将 j+i 语句递增 1 "dimensions"。
但是,我真的不知道该怎么做。我尝试添加类似
的内容
j+i!=n-1+c
我会将 c 设置为零,并在循环中递增,但它不起作用。
另外,我想打印矩阵中的元素。
所以,如果我打印正确 "triangle",我希望元素按照矩阵中的方式排列,而不是像这样:
Example of incorrect output
我只想反映这些数字,所以它们就在它们的位置上。
所以,是的,那是我的问题。
我确信对此有更简单的解决方案,但我是 C 菜鸟,可能会使事情变得比应有的更复杂。
无论如何,我们将不胜感激!
如何
当你需要打印数组时,你需要两个条件以避免那些不是黄色的。第一个条件很明显。
if(i==j){
// do not print
}
第二个条件不太明显,但从未如此。
else if(i+j == maxCellSize-1){ //in your case maxCellSize=7
//do not print
}
最后在检查了这两个条件(最好合并为一个 if 语句)之后,您就可以打印数组的单元格了。
else{
printf("%d", matrix[i][j]);
}
整个代码
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
int main()
{
int i,j,n;
printf("Matrix dimension: ");
scanf("%d",&n);
int matrix[n][n];
srand((unsigned)time(NULL));
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
{
matrix[i][j]=100+(float)rand()/RAND_MAX*900; //filling out matrix with random integers
}
}
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
{
if(!(i==j || i+j==n-1)){
printf("%d\t",matrix[i][j]); //printing out matrix itself
}
else{ printf("X\t");}
}
printf("\n");
}
printf("\n\n");
//left
printf("Left triangle: ");
for(i=0; i <n; i++){
for(j=0; j<n/2; j++){
if(i+j<n && i>j && !(i+j==n-1))
{
printf("%d\t",matrix[i][j]);
}
}
}
printf("\n");
//right
printf("Right triangle: ");
for(i=1; i <n; i++){
for(j=n/2; j<n; j++){
if(!(i==j || i+j==n-1)){
if(i+j>=n && i<j)
{
printf("%d\t",matrix[i][j]);
}
}
}
}
//top
printf("\n");
printf("Top triangle: ");
for(i=0; i < n/2; i++){
for(j=1; j<n; j++){
if(!(i==j || i+j==n-1)){
if(i+j<n && i<j)
{
printf("%d\t",matrix[i][j]);
}
}
}
}
return 0;
}
我对 C 编程有点陌生,我有一项学校作业需要帮助解决。 Assignment
因此,我应该在任意给定大小的数组中打印出这些黄色标记的元素。
所以,这是我到目前为止提出的代码:
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
int main()
{
int i,j,n;
printf("Matrix dimension: ");
scanf("%d",&n);
int matrix[n][n];
srand((unsigned)time(NULL));
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
{
matrix[i][j]=100+(float)rand()/RAND_MAX*900; //filling out matrix with random integers
}
}
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
{
printf("%d\t",matrix[i][j]); //printing out matrix itself
}
printf("\n");
}
printf("\nLeft:\n"); //elements below main diagonal, above secondary diagonal
for(i=1;i<n-1;i++)
{
printf("\n");
for(j=0;j<(n-1)/2;j++)
{
if((j<i) && (j+i!=n-1))printf("%d\t",matrix[i][j]);
else printf("-\t");
}
}
printf("\n\nRight:\n"); //elements above main diagonal, below secondary diagonal
for(i=1;i<n-1;i++)
{
printf("\n");
for(j=n-1;j>(n/2);j--)
{
if((j>i) &&(i+j!=n-1) )printf("%d\t",matrix[i][j]);
else printf("-\t");
}
}
printf("\n\nUp:\n"); //elements above main and secondary diagonal
for(i=0;i<(n-1)/2;i++)
{
printf("\n");
for(j=1;j<n-1;j++)
{
if((j>i) && (j+i!=n-1 && j+i!=n))printf("%d\t",matrix[i][j]);
else printf("-\t");
}
}
printf("\n\nDown:\n"); //elements below main and secondary diagonal
for(i=n-1;i>(n/2);i--)
{
printf("\n");
for(j=1;j<n-1;j++)
{
if((i>j) &&(i+j!=n-1) )printf("%d\t",matrix[i][j]);
else printf("-\t");
}
}
return 0;
}
此代码有效,但不适用于维度等于或大于 7 的矩阵。在那些情况下总有一个额外的元素。 我意识到我可以添加一些额外的语句来解决问题,但只是暂时的。 示例:
if((j<i) && (j+i!=n-1 && j+i!=n))
那么它将适用于最大 8x8 的矩阵。
然后我又加了一句
if((j<i) && (j+i!=n-1 && j+i!=n && j+i!=n+1))
然后它可以处理最大 10x10 的矩阵。
所以我注意到我需要每 2 次将 j+i 语句递增 1 "dimensions"。
但是,我真的不知道该怎么做。我尝试添加类似
的内容j+i!=n-1+c
我会将 c 设置为零,并在循环中递增,但它不起作用。 另外,我想打印矩阵中的元素。 所以,如果我打印正确 "triangle",我希望元素按照矩阵中的方式排列,而不是像这样: Example of incorrect output
我只想反映这些数字,所以它们就在它们的位置上。 所以,是的,那是我的问题。 我确信对此有更简单的解决方案,但我是 C 菜鸟,可能会使事情变得比应有的更复杂。 无论如何,我们将不胜感激!
如何
当你需要打印数组时,你需要两个条件以避免那些不是黄色的。第一个条件很明显。
if(i==j){
// do not print
}
第二个条件不太明显,但从未如此。
else if(i+j == maxCellSize-1){ //in your case maxCellSize=7
//do not print
}
最后在检查了这两个条件(最好合并为一个 if 语句)之后,您就可以打印数组的单元格了。
else{
printf("%d", matrix[i][j]);
}
整个代码
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
int main()
{
int i,j,n;
printf("Matrix dimension: ");
scanf("%d",&n);
int matrix[n][n];
srand((unsigned)time(NULL));
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
{
matrix[i][j]=100+(float)rand()/RAND_MAX*900; //filling out matrix with random integers
}
}
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
{
if(!(i==j || i+j==n-1)){
printf("%d\t",matrix[i][j]); //printing out matrix itself
}
else{ printf("X\t");}
}
printf("\n");
}
printf("\n\n");
//left
printf("Left triangle: ");
for(i=0; i <n; i++){
for(j=0; j<n/2; j++){
if(i+j<n && i>j && !(i+j==n-1))
{
printf("%d\t",matrix[i][j]);
}
}
}
printf("\n");
//right
printf("Right triangle: ");
for(i=1; i <n; i++){
for(j=n/2; j<n; j++){
if(!(i==j || i+j==n-1)){
if(i+j>=n && i<j)
{
printf("%d\t",matrix[i][j]);
}
}
}
}
//top
printf("\n");
printf("Top triangle: ");
for(i=0; i < n/2; i++){
for(j=1; j<n; j++){
if(!(i==j || i+j==n-1)){
if(i+j<n && i<j)
{
printf("%d\t",matrix[i][j]);
}
}
}
}
return 0;
}