c语言程序训练营,C语言代码训练营(1)(示例代码)

欢迎大家每天前来打卡~

训练营规则

每天出一道练习题,请大家自己完成编码

第二天的文章中会告诉大家一种或几种经典解决方法

完成练习的同学,欢迎大家把代码贴在留言中

如果有问题,也请留言,我会找机会集中解答

希望这种手把手的方式能够帮助大家尽快掌握C语言编程。

1. 例题

今天我们先来讲解一道C语言的经典例题,也是从零开始系列中的一道课后练习题。

请用控制台程序绘制如下图案。

fb7931f8113a451663dca5bed66c09b9.png

循环经典例题

2. 分析

这个题目是要求打印30行"*",每行打印的个数不同。通过这个信息,我们应该立刻反映出运用循环来完成。那么我们想想,在循环部分我们都学到了什么。

关于循环,我首先会想到一些例题:

2.1 例题1

打印30个"*",每个"*"占一行。

int i;

for (i = 0; i < 30; i++)

{

printf("*\n");

}

2.2 例题2

打印一行"*",个数为30

int i;

for (i = 0; i < 30; i++)

{

printf("*");

}

这两个题目的代码只差一个\n,结果却完全不同。掌握了这两个例题,我们自然能够完成下面这个例题了。

2.3 例题3

打印一个由"*"组成的30行30列的矩阵。

int main()

{

int i, j;

for (i = 0; i < 30; i++)

{

for (j = 0; j < 30; j++)

{

printf("*");

}

printf("*\n");

}

return 0;

}

执行结果如下:

3b4e0fae07c33928cf7923b4b13b6cbb.png

30*30矩阵

我们再把例3的要求改一改,要求如下

2.4 例题4

打印30行“*”。第一行打印1个“*”,第二行打印3个“*”,第三行打印5个“*”,... ,第三十行打印59个“*”。

在前面的程序中,我们用变量i控制行的循环,变量j控制列的循环。i的范围0~29,j的范围0~29。那么在例题4中,i和j有什么样的关系呢?

找规律

第一行

i = 0;

j循环1次

第二行

i = 1;

j循环3次

第三行

i = 2;

j循环5次

...

...

...

第三十行

i = 29;

j循环59次

于是得到这样一个关系:

规律

第n行

i = n - 1;

j循环2i + 1次

那么如何实现循环2i + 1次呢,就是让j从0到2i + 1。

按照这个思路,可以得到下面的代码:

#include

#define LINE 30

int main()

{

int i, j;

for (i = 0; i < LINE; i++)

{

for (j = 0; j < 2 * i + 1; j++)

{

printf("*");

}

printf("\n");

}

return 0;

}

执行结果如下:

0718378e22015acf653c8ac1e7ad761d.png

例题4

这里要说一个问题,其实for循环有两种常见形式:

for (i = 0; i < n; i++)

for (i = 1; i <= n; i++)

这种写法执行的次数相同,可以相互代替。大部分C语言程序员喜欢第一种方式,因为数组的下标访问是从0开始的,这样写更方便。目前大家可以选择自己喜欢的方法。

好了,回到例题中来。现在我们的代码距离目标输出已经很接近了,缺少的是在每行“*”之前需要输入不同数量的空格。我们分析i和空格数量,可以得到如下关系:

每行输出LINE - i个空格

于是,我们得到了最终的实现程序。

3. 答案

#include

#define LINE 30

int main()

{

int i, j;

for (i = 0; i < LINE; i++)

{

for (j = 0; j < (LINE - i); j++)

{

printf(" ");

}

for (j = 0; j < 2 * i + 1; j++)

{

printf("*");

}

printf("\n");

}

return 0;

}

运行一下这段代码,你会看到打印结果就是最前面的那张图。

4. 课后练习

自己编写代码,打印出下面这张图。

224c9f7da98e5ef0892e9369e819d013.png

菱形

明天解析

学习过程中遇到什么问题或者想获取学习资源的话,欢迎加入学习交流群

639368839,我们一起学C/C++!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值