题目:
首先奉上答案:
#include<stdio.h>
int main(){
char shuzi[11][4][4]={
{{' ','_',' '},{'|',' ','|'},{'|','_','|'}},
{{' ',' ',' '},{' ',' ','|'},{' ',' ','|'}},
{{' ','_',' '},{' ','_','|'},{'|','_',' '}},
{{' ','_',' '},{' ','_','|'},{' ','_','|'}},
{{' ',' ',' '},{'|','_','|'},{' ',' ','|'}},
{{' ','_',' '},{'|','_',' '},{' ','_','|'}},
{{' ','_',' '},{'|','_',' '},{'|','_','|'}},
{{' ','_',' '},{' ',' ','|'},{' ',' ','|'}},
{{' ','_',' '},{'|','_','|'},{'|','_','|'}},
{{' ','_',' '},{'|','_','|'},{' ','_','|'}},
};
int n[5];
while(scanf("%d%d%d%d", &n[0], &n[1], &n[2], &n[3]) != EOF){
for(int j=0; j<3; j++){
for(int k=0; k<4; k++){
printf("%s", shuzi[n[k]][j]);
}
printf("\n");
}
}
return 0;
}
此答案思路:
其实刚开始看到要打印3x3的字符时,立即想到的是定义0~9十个二维字符组即矩阵。 这里提醒新手同学一点:有人看到3x3直接定义"变量名 [3][3]"的变量,这是错误的。因为字符串末尾还有’\0’结束符,所以3x3个字节是不够的。言归正传继续思路叙述。当我定义了十个二维字符组时,发现0~9十个变量取用等很不方便,于是,我定义了一个三维字符组shuzi[11][4][4],直接对他初始化。
这里shuzi[p][m][l]里的p为几时就是数字几对应的3x3二维字符组,之后我又定义了数组n[5]来存储用户输入的四个数字。然后输出shuzi[n[i]]这里没有移动光标所以首先打印的是字符组[n[0]],[n[1]],[n[2]],[n[3]]的第一行然后再打印第二第三行。
这里还有一个小技巧,因为这是字符组有专门的占位符’%s’。所以我只用了两层循环,而并没有像多维数组一样三层循环逐个打印。
收获:
对多维数组的理解,运用更加深一层。
其他方法:
#include<stdio.h>
int main(){
int s[4];
int j;
while(scanf("%d%d%d%d", &s[0], &s[1], &s[2], &s[3]) != EOF){
for(j=0; j<4; j++){
switch(s[j]){
case 1: case 4:
printf(" ");
break;
default:
printf(" _ ");
break;
}
}
printf("\n");
for(j=0; j<4; j++){
switch(s[j]){
case 1: case 7:
printf(" |");
break;
case 2: case 3:
printf(" _|");
break;
case 4: case 8: case 9:
printf("|_|");
break;
case 5: case 6:
printf("|_ ");
break;
default:
printf("| |");
break;
}
}
printf("\n");
for(j=0; j<4; j++){
switch(s[j]){
case 1: case 4: case 7:
printf(" |");
break;
case 6: case 8: case 0:
printf("|_|");
break;
case 3: case 5: case 9:
printf(" _|");
break;
default:
printf("|_ ");
break;
}
}
printf("\n");
}
return 0;
}
思路:
以清楚每一种数字的三行分别的内容。
所以只要进行三次乘四判断判断当前是数字几,再进行对应输出。
编写不易,求转发点赞,谢谢!!! |
---|