我对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。
但是,我真的不知道该怎么做。我尝试添加类似
的内容j+i!=n-1+c
我将c设置为零,并在循环中递增,但它不起作用。 另外,我想在矩阵中打印元素。 所以,如果我打印出正确的“三角形”,我想如果这些元素按照它们在矩阵中排列,并且不是这样的: Example of incorrect output
我只是喜欢镜像这些数字,所以他们就在他们的位置。 所以,是的,这是我的问题。 我确信有更简单的解决方案,但我是一个C菜鸟,可能会让事情变得更加复杂。 无论如何,任何帮助表示赞赏!
答案 0 :(得分:0)
当您需要打印阵列时,您需要两个条件才能避免那些不是黄色的条件。第一个条件很明显。
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;
}