为什么后面还有四行0?

有5个学生,每个学生有四门课程,将有不及格课程的学生的所有成绩输出(注意不要重复输出一个学生的成绩)。

img


怎么确保不重复输出一个学生的成绩?为什么后面还有四行零?

因为你定义的二维数组是5行四列,但设置默认值的只有4个学生的成绩即4行,第5行没有设置,所以第5行的默认值被设置为0,都小于60,所以多打印了4次,再补上一个学生成绩即可,测试代码如下:

#include <stdio.h>
#include <string.h>

int main(void){
    
    int a[5][4] = {{80,43,100,90},{56,76,90,90},{59,80,70,99},{60,60,67,68},{60,70,80,90}},i,j,k;
    
//    printf("所有学生的成绩为:\n");
//    for(i=0;i<5;i++){
//        for(j=0;j<4;j++){                
//            printf("%4d",a[i][j]);                            
//        }
//        printf("\n");
//    }
//    printf("\n");
    
    for(i=0;i<5;i++){
        for(j=0;j<4;j++){
            
            if(a[i][j]<60){
                for(k=0;k<4;k++){
                    printf("%4d",a[i][k]);                
                }
                putchar('\n');
                break;
            }
            
        }
    }
}
 

img

在if语句里面加入break,另外数组没有赋值完整,少一行,系统默认为0,修改如下:

#include <stdio.h>
#include <string.h>
int main()
{    
    int a[5][4] = {{80,43,100,90},{56,76,90,90},{59,80,70,99},{60,60,67,68},{60,70,80,90}},i,j,k;
    for(i=0;i<5;i++){
        for(j=0;j<4;j++){
            
            if(a[i][j]<60)
            {
                for(k=0;k<4;k++)
                {
                    printf("%4d",a[i][k]);                
                }
                putchar('\n');
                break;
            }
            
        }
    }
   return 0;
}