按照如下形式,用循环编程输出九九乘法表:
1 2 3 4 5 6 7 8 9
2 4 6 8 10 12 14 16 18
3 6 9 12 15 18 21 24 27
4 8 12 16 20 24 28 32 36
5 10 15 20 25 30 35 40 45
6 12 18 24 30 36 42 48 54
7 14 21 28 35 42 49 56 63
8 16 24 32 40 48 56 64 72
9 18 27 36 45 54 63 72 81
==================================
1
2 4
3 6 9
4 8 12 16
5 10 15 20 25
6 12 18 24 30 36
7 14 21 28 35 42 49
8 16 24 32 40 48 56 64
9 18 27 36 45 54 63 72 81
==================================
1 2 3 4 5 6 7 8 9
4 6 8 10 12 14 16 18
9 12 15 18 21 24 27
16 20 24 28 32 36
25 30 35 40 45
36 42 48 54
49 56 63
64 72
81
注意:每一项占4位,灰色背景相当于屏幕。
我们先来看第一种乘法表:
显然,很容易想到用9x9的二维数组来处理,只需先规定第一行和第一列的数其余,则由它们相乘即可得到,所以:
#include <stdio.h>
#include <stdlib.h>
int main() {
int i,j;
int a[9][9];
for(i=0;i<9;i++){
for(j=0;j<9;j++){
if(i==0){
a[i][j]=j+1; //若在第一行,则该值即为纵坐标+1
}
else if(j==0){
a[i][j]=i+1; //若在第一列,则该值即为横坐标+1
}
else{
a[i][j]=a[i][0]*a[0][j]; //其余项由它们相乘即可得出
}
}
}
for(i=0;i<9;i++){
for(j=0;j<9;j++){
printf("%4d",a[i][j]);//因为每一位占四位。所以写上"%4d"
}
printf("\n");
}
return 0;
}
再来看,第二种乘法表,显然找出规律,当横坐标大于等于纵坐标时才有值,否则没有,所以依据此条件来控制是否打印即可,只需在上述代码的打印部分加入该条件即可:
#include <stdio.h>
#include <stdlib.h>
int main() {
int i,j;
int a[9][9];
for(i=0;i<9;i++){
for(j=0;j<9;j++){
if(i==0){
a[i][j]=j+1;
}
else if(j==0){
a[i][j]=i+1;
}
else{
a[i][j]=a[i][0]*a[0][j];
}
}
}
for(i=0;i<9;i++){
for(j=0;j<9;j++){
if(i>=j){ //新增条件:横坐标>=纵坐标
printf("%4d",a[i][j]);
}
}
printf("\n");
}
return 0;
}
接着再来看第三种乘法表:也很容易找出规律,横坐标<=纵坐标时打印,否则不打印,
但是还没完,因为,系统默认时从左往右打印,而如果只单单加此条件,会出现错误,
所以不符合条件的不再是不打印就可以了,而是打印空格来控制,
题中要求每一项占四位,所以不符合条件的打印四个空格即可,如下:
#include <stdio.h>
#include <stdlib.h>
int main() {
int i,j;
int a[9][9];
for(i=0;i<9;i++){
for(j=0;j<9;j++){
if(i==0){
a[i][j]=j+1;
}
else if(j==0){
a[i][j]=i+1;
}
else{
a[i][j]=a[i][0]*a[0][j];
}
}
}
for(i=0;i<9;i++){
for(j=0;j<9;j++){
if(i<=j){
printf("%4d",a[i][j]);
}
else{
printf(" ");//多加的分支,意为不符合打印条件则打印四个空格
}
}
printf("\n");
}
return 0;
}