
🔥个人主页:艾莉丝努力练剑 ❄专栏传送门:《C语言》、《数据结构与算法》、C语言刷题12天IO强训 🍉学习方向:C/C++方向 ⭐️人生格言:为天地立心,为生民立命,为往圣继绝学,为万世开太平

前言:上一篇博客又带大家刷了一些相对来说简单的代码题目,本篇文章我们将继续练习下面的题目。刷前提醒:从本文开始会有大量图案打印题,有的题目挖了大坑,大家做的时候要留意,如果做不出来,看了代码演示后要自己多敲几遍,去理解代码的逻辑。 宇宙安全声明:鉴于博主能力有限,本专栏适用于代码小白刷题,大佬们多多包涵(抱拳)!



1、多组输入; 2、控制好行数,控制好每一行前面的空格数。
#include <stdio.h>
int main()
{
int n = 0;
while(scanf("%d",&n) != EOF)
{
int i = 0;
for(i = 0;i < n;i++)
{
int j = 0;
for(j = 0;j < i;j++)
{
printf(" ");
}
for(j = 0;j < n-i;j++)
{
printf("* ");
}
printf("\n");
}
}
return 0;
}

1、首先把菱形的打印分为上下2个部分; 2、上下分别控制好行数和空格的个数; 3、多组输入。
#include <stdio.h>
int main()
{
int n = 0;
while(scanf("%d",&n) != EOF)
{
int i = 0;
for(i = 0;i < n;i++)
{
int j = 0;
for(j = 0;j < n - i;j++)
{
printf(" ");
}
for(j = 0;j <= i;j++)
{
printf("* ");
}
printf("\n");
}
for(i = 0;i < n + 1;i++)
{
int j = 0;
for(j = 0;j < i;j++)
{
printf(" ");
}
for(j = 0;j <n+1-i;j++)
{
printf("* ");
}
printf("\n");
}
}
return 0;
}

1、多行输入; 2、图形的打印分为上下2个部分; 3、每一行的打印完,后边还有空格,可能牛客网的题目处理不严谨,在题目中也没提现,怎么都做不 出来,不过选中输出样例,会发现后边有空格。
#include <stdio.h>
int main()
{
int n = 0;
while(scanf("%d",&n) != EOF)
{
int i = 0;
for(i = n;i >= 0;i--)
{
int j = 0;
for(j = 0;j <= i;j++)
{
printf("* ");
}
for(j = i;j < n;j++)
{
printf(" ");
}
printf("\n");
}
for(i = 1;i <= n;i++)
{
int j = 0;
for(j = 0;j <= i;j++)
{
printf("* ");
}
for(j = i;j< n;j++)
{
printf(" ");
}
printf("\n");
}
}
return 0;
}

1、多组输入; 2、 图形分为上下2个部分打印; 3、 每一行前面是空格,后边是*(前面2个空格为1组)。
#include <stdio.h>
int main()
{
int n = 0;
while(scanf("%d",&n) != EOF)
{
int i = 0;
for(i = 0;i < n;i++)
{
int j = 0;
for(j = 0;j <n - i;j++)
{
printf(" ");
}
for(j = 0;j <= i;j++)
{
printf("*");
}
printf("\n");
}
for(i = 0;i < n + 1;i++)
{
int j = 0;
for(j = 0;j < i;j++)
{
printf(" ");
}
for(j = 0;j < n + 1 - i;j++)
{
printf("*");
}
printf("\n");
}
}
return 0;
}
1、多组输入; 2、控制好每行的打印,前面是空格,后边是*; 3、*的后边还有空格,一行要打印够n和字符的; 4、方法2找出打印*的行号和列号的规律是 i == j 。
思路(1):
一般的思路——
#include <stdio.h>
int main()
{
int n = 0;
while (scanf("%d", &n) != EOF)
{
int i = 0;
for (i = 0; i < n; i++)
{
int j = 0;
for (j = 0; j < i; j++)
{
printf(" ");
}
printf("* ");
for(j = 0;j < n;j++)
{
printf(" ");
}
printf("\n");
}
}
return 0;
}思路(2):
我们发现:i 等于j 的时候,打印 * ,其它就打印空格,我们就能把反斜线形图案打印出来了——
#include <stdio.h>
int main()
{
int n = 0;
while (scanf("%d", &n) != EOF)
{
int i = 0;
for (i = 0; i < n; i++)
{
int j = 0;
for(j = 0;j < n;j++)
{
if(i == j)
printf("* ");
else
printf(" ");
}
printf("\n");
}
}
return 0;
}
1、多组输入; 2、控制好每行的打印,前面是空格,后边是*; 3、*的后边还有空格,一行要打印够n和字符的; 4、方法2找出打印*的行号和列好的规律是i+j == n-1。
写法(1):
#include<stdio.h>
int main()
{
int n = 0;
while(scanf("%d",&n) != EOF)
{
int i = 0;
for(i = 0;i < n;i++)
{
int j = 0;
for(j = 0;j < n - 1 - i;j++)
{
printf(" ");
}
printf("*");
for(j = n - i;j < n;j++)
{
printf(" ");
}
printf("\n");
}
}
return 0;
}写法(2):
#include <stdio.h>
int main()
{
int n = 0;
while(scanf("%d",&n) != EOF)
{
int i = 0;
for(i = 0;i < n;i++)
{
int j = 0;
for(j = 0;j < n;j++)
{
if(i + j == n-1)
printf("*");
else
printf(" ");
}
printf("\n");
}
}
return 0;
}

1、多组输入; 2、找出打印*的打印空格的规律,直接按照规律实现就行。
博主展示了这么多次可行的代码,也给大家看看博主翻车的代码,大家帮博主看看,博主写的为什么会报错——
//失败案例
#include <stdio.h>
int main()
{
int n = 0;
while(scanf("%d",&n) != EOF)
{
int i = 0;
for(i = 0;i < n;i++)
{
int j = 0;
for(j = 0;j < n;j++)
{
if(i == j)
printf("*");
else
printf(" ");
}
printf("\n");
}
for(i = 0;i < n;i++)
{
int j = 0;
for(j = 0;j < n;j++)
{
if(i + j == n - 1)
printf("*");
else
printf(" ");
}
printf("\n");
}
}
return 0;
}接下来是代码实现:
#include <stdio.h>
int main()
{
int n = 0;
while(scanf("%d",&n) != EOF)
{
int i = 0;
for(i = 0;i < n;i++)
{
int j = 0;
for(j = 0;j < n;j++)
{
if(i == j)
printf("*");
else if(i + j == n - 1)
printf("*");
else
printf(" ");
}
printf("\n");
}
}
return 0;
}

1、多行输入; 2、找出打印*的规律,剩余的打印空格,直接打印就行。
本题博主也展示一下失败案例——
//失败案例
#include <stdio.h>
int main()
{
int n = 0;
while(scanf("%d",&n) != EOF)
{
int i = 0;
for(i = 0;i < n;i++)
{
int j =0;
for(j = 0;j < n;j++)
{
for(i = 1;i < n-1;i++)
{
for(j = 1;j < n - 1;j++)
{
printf(" ");
}
}
printf("*");
}
printf("\n");
}
}
return 0;
}可以通过的写法——
#include <stdio.h>
int main()
{
int n = 0;
while(scanf("%d",&n) != EOF)
{
int i = 0;
for(i = 0;i < n;i++)
{
int j = 0;
for(j = 0;j < n;j++)
{
if(i == 0 || i == n - 1)
printf("* ");
else if(j == 0 || j == n - 1)
printf("* ");
else
printf(" ");
}
printf("\n");
}
}
return 0;
}
1、多组输入; 2、找出打印*的规律,然后直接按照要求打印就行。
#include <stdio.h>
int main()
{
int n = 0;
while(scanf("%d",&n) != EOF)
{
int i = 0;
for(i = 0;i < n;i++)
{
int j = 0;
for(j = 0;j < n;j++)
{
if(i == j || j == 0 || i == n-1)
printf("* ");
else
printf(" ");
}
printf("\n");
}
}
return 0;
}往期回顾:
【C语言刷题】第六天:继续加量加餐,代码题训练,熟练IO模式
【C语言刷题】第五天:继续加量加餐,代码题训练,熟练IO模式
【C语言刷题】第四天:继续加量加餐,代码题入门,熟练IO模式
【C语言刷题】第三天:继续加量加餐,代码题入门,熟练IO模式
结语:本篇文章带大家刷了九道题目,依旧是成堆的图案题,大家要结合二维数组的图像,认真思考一下,就能想出来。本文到这里就结束了,希望对友友们有所帮助。本文的代码相比起之前的题目,难度上已经有了加深,大家要上手操作,后面的代码题难度上整体是逐渐递增的,博主控制了难度,这样友友们能比较丝滑地上手敲下去。