例题5-6 矩阵输出

题目描述

输出以下4*5的矩阵

  1  2  3  4  5

  2  4  6  8 10

  3  6  9 12 15

  4  8 12 16 20

要求使用循环实现,注意每行输出5个数字,每个数字占3个字符的宽度,右对齐。

 

输入

输出

每行输出5个数字,每个数字占3个字符的宽度,右对齐。

 

样例输入

样例输出

  1  2  3  4  5
  2  4  6  8 10
  3  6  9 12 15
  4  8 12 16 20


C语言对齐方式 (百度知道)

 
 
%md,m为指定的输出字段的宽度。如果数据的位数小于m,则左端补以空格,若大于m,则按实际位数输出。(长整型%mld,八进制%mo,十六进制%mx)

对于字符同理有%mc

对于float型,可用%m.nf,输出数据共占m列,n位小数,如果数据长度小于m那么左边补空格
        %-m.nf,为左靠齐,右补空格

对于字符串,%ms,输出的字符串占m列,字符串长度小于m,左边补空格,如果超出则全部输出.
      %-ms,右补空格
      %m.ns,输出占m列,但只取字符串左端n个字符。这n个字符输出在m列的右边,然后左边补空格.
      %-m.ns,右补空格

代码

#include<stdio.h>
int main()
{
	int i,j,sum=1;
	
	for(i=1;i<5;i++){
		for(j=1;j<=5;j++)
		{
			sum=i*j;
			printf("%3d",sum);			
		if(j%5==0)
		{
			printf("\n");
		}	
		}
	}
	return 0;
}

代码很简单,但是做的时候发现一个有点意思的平时没注意的地方,就是在for循环不加花括号,它的作用域如

for(j=1;j<=5;j++)
printf("%3d",i*j);
printf("\n");

这个时候for语句的作用域仅包含下面一句的printf语句所以不会影响下一句换行,这样的话可以简化代码而不用再来一个if语句判断如

#include<stdio.h>
int main()
{
  int i,j;
  for(i=1;i<=5;i++)
 {
    for(j=1;j<=5;j++)
     printf("%3d",i*j);
    printf("\n");
 }
  return 0;
}

猜你喜欢

转载自blog.csdn.net/changyuyang/article/details/81017275
5-6