笔者在pta写题的时候碰见了一道题目
打印乘法口诀表。(注意对齐方式)
1*1=1
1*2=2 2*2=4
1*3=3 2*3=6 3*3=9
1*4=4 2*4=8 3*4=12 4*4=16
1*5=5 2*5=10 3*5=15 4*5=20 5*5=25
1*6=6 2*6=12 3*6=18 4*6=24 5*6=30 6*6=36
1*7=7 2*7=14 3*7=21 4*7=28 5*7=35 6*7=42 7*7=49
1*8=8 2*8=16 3*8=24 4*8=32 5*8=40 6*8=48 7*8=56 8*8=64
1*9=9 2*9=18 3*9=27 4*9=36 5*9=45 6*9=54 7*9=63 8*9=72 9*9=81
输入格式:
请在这里写输入格式。例如:输入一个不大于9的正整数n。
输出格式:
请在这里描述输出格式。例如:输出对应的n的乘法表。
输入样例:
在这里给出一组输入。例如:
5
输出样例:
在这里给出相应的输出。例如:
1*1=1
1*2=2 2*2=4
1*3=3 2*3=6 3*3=9
1*4=4 2*4=8 3*4=12 4*4=16
1*5=5 2*5=10 3*5=15 4*5=20 5*5=25
题解思路
在之前一篇文章中刚介绍了循环结构在数列中的使用,那么我们利用循环结构是否能够输出某一行的内容呢?
试着用如下代码(片段)实现了(其中n为行数,i为列数)
for(int i=1;i<=n;i++)
{
printf("%d*%d=%d",i,n,n*i);
}
那么我们已经能打印一行的话,怎么输出一列呢?让我们把思维逆转过来
我们要竖着打印一列
于是我们可以将刚才的内容嵌套进另一个循环
for (int l = 1; l <= n; l++)
{
for (int i = 1; i <= l; i++)
{
printf("%d*%d=%-3d", i, l, i * l);
}
}
但是此时我们能够输出,但是输出结果却只有一行,不能和输出样例一致
在循环中加入判断语句,使一行满的时候自动换行,即i=l
for (int l = 1; l <= n; l++)
{
for (int i = 1; i <= l; i++)
{
printf("%d*%d=%-3d", i, l, i * l);
if (i == l)
{
printf("\n");
}
}
}
那么我们关于循环嵌套的构建就结束了,将内容放进主函数中得到
#include <stdio.h>
int main()
{
int n = 0;
scanf("%d", &n);
if (n > 0 && n <= 9)
{
for (int l = 1; l <= n; l++)
{
for (int i = 1; i <= l; i++)
{
printf("%d*%d=%-3d", i, l, i * l);
if (i == l)
{
printf("\n");
}
}
}
}
return 0;
}
运行结果就非常的完美了。
接下来看几道例题
例1
输入n,打印下面图形的前n行。
1
22
333
……
输入格式:
请在这里写输入格式。例如:输入正整数n。
输出格式:
请在这里描述输出格式。例如:按要求图形输出。
输入样例:
在这里给出一组输入。例如:
3
输出样例:
在这里给出相应的输出。例如:
1
22
333
题解
我们只需要对母题的内容稍加改动即可得到
#include <stdio.h>
int main() {
int n = 0;
scanf("%d", &n);
if (n > 0 )
{
for (int l = 1; l <= n; l++)
{
for (int i = 1; i <= l; i++)
{
printf("%d",l);
if(i==l)
{
printf("\n");
}
}
}
}
return 0;
}
例2
输入正整数n,打印由“*”组成的(2*n-1)×(2*n-1)菱形图案。例如,输入为3,输出以下图案:
*
***
*****
***
*
输入格式:
请在这里写输入格式。例如:输入正整数n。
输出格式:
请在这里描述输出格式。例如:输出要求的图形。
输入样例:
在这里给出一组输入。例如:
3
输出样例:
在这里给出相应的输出。例如:
*
***
*****
***
*
题解
本题除打印“*”外还有两侧空格需要打印
稍加修饰:用通项公式计算星号数量并且添加空格的打印
#include <stdio.h>
int main() {
int n;
scanf("%d", &n);
for (int i = 1; i <= n; i++) {
for (int j = 1; j <= n - i; j++) {
printf(" ");
}
for (int k = 1; k <= 2 * i - 1; k++) {
printf("*");
}
for (int j = 1; j <= n - i; j++) {
printf(" ");
}
printf("\n");
}
for (int i = n - 1; i >= 1; i--) {
for (int j = 1; j <= n - i; j++) {
printf(" ");
}
for (int k = 1; k <= 2 * i - 1; k++) {
printf("*");
}
for (int j = 1; j <= n - i; j++) {
printf(" ");
}
printf("\n");
}
return 0;
}
C语言乘法口诀表及图形打印题解
1830

被折叠的 条评论
为什么被折叠?



