C语言代码训练(一)
今天我们先来讲解一道C语言的经典例题,也是从零开始系列中的一道课后练习题。
请用控制台程序绘制如下图案。

循环经典例题
分析情况
这个题目是要求打印30行"*",每行打印的个数不同。通过这个信息,我们应该立刻反映出运用循环来完成。那么我们想想,在循环部分我们都学到了什么。
关于循环,我首先会想到一些例题:
例题1
打印30个"*",每个"*"占一行。
int i;for (i = 0; i < 30; i++)
{ printf("*\n");
}
例题2
打印一行"*",个数为30
int i;for (i = 0; i < 30; i++)
{ printf("*");
}
这两个题目的代码只差一个\n,结果却完全不同。掌握了这两个例题,我们自然能够完成下面这个例题了。
例题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;
}
执行结果如下:

30*30矩阵
我们再把例3的要求改一改,要求如下
例题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 <stdio.h>#define LINE 30int main(){ int i, j; for (i = 0; i < LINE; i++)
{ for (j = 0; j < 2 * i + 1; j++)
{ printf("*");
} printf("\n");
} return 0;
}
执行结果如下:

例题4
这里要说一个问题,其实for循环有两种常见形式:
for (i = 0; i < n; i++)
和
for (i = 1; i <= n; i++)
这种写法执行的次数相同,可以相互代替。大部分C语言程序员喜欢第一种方式,因为数组的下标访问是从0开始的,这样写更方便。目前大家可以选择自己喜欢的方法。
好了,回到例题中来。现在我们的代码距离目标输出已经很接近了,缺少的是在每行“*”之前需要输入不同数量的空格。我们分析i和空格数量,可以得到如下关系:
每行输出LINE - i个空格
于是,我们得到了最终的实现程序。
答案
#include <stdio.h>#define LINE 30int 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;
}
运行一下这段代码,你会看到打印结果就是最前面的那张图。
课后练习
自己编写代码,打印出下面这张图。

菱形 更多的题型请点击这里
C语言代码训练(一)的更多相关文章
- 机器学习十大算法总览(含Python3.X和R语言代码)
引言 一监督学习 二无监督学习 三强化学习 四通用机器学习算法列表 线性回归Linear Regression 逻辑回归Logistic Regression 决策树Decision Tree 支持向 ...
- Latex中插入C语言代码
Latex是一个文本排版的语言,能排版出各种我们想要的效果.而且用代码排版的优点是易于修改板式,因此在文本内容的排版时,Latex应用十分广泛. 当我们需要在Latex中插入代码时,就需要用到 \us ...
- loadrnner添加C语言代码的几种方式
今天有人在群里问,想直接把自己的C语言代码让lr调用,该怎么搞. 这东西说来简单,只是对Loadrunner这工具不熟悉可能才会有这种问题吧.个人理解,一般有三种方法吧,废话不多,直接干货. 1.直接 ...
- HTML之一语言代码
HTML的lang属性可用于网页或部分网页的语言.这对搜索引擎和浏览器是有帮助的. 同时也可以是指HTTP Header中的Accept-Language/Content-Language. ISO ...
- 让你的Windows不断重启的C语言代码
原文:让你的Windows不断重启的C语言代码 没有写Linux的原因是因为搞不定Linux下的权限问题,而Windows下基本上使用电脑的用户都是管理员,所以钻个空了,不多说下面是代码#includ ...
- 国家语言,语言代码,locale id对应表
国家语言,语言代码,locale id对应表.比如 en_US对应的id为1033, 中文的locale=zh_CN,id=2052. Locale Languagecode LCIDstring L ...
- 如何提高单片机C语言代码效率
代码效率包括两个方面内容:代码的大小和代码执行速度.如果代码精简和执行速度快,我们就说这个代码效率高.一般情况下,代码精简了速度也相应提上来了.单片机的ROM和RAM的空间都很有限,当您编程时遇到单片 ...
- 使用highlight.js高亮静态页面的语言代码
显示静态的代码其实html的pre标签基本可以满足需求了,至少不会将换行的文本显示成一堆字符串. 不过能使静态的文本能高亮显示,倒更炫酷一点.其实很简单的,引入highlight.js包,可以使用cd ...
- HTML5 脚本 语言代码 URL 符号实体 ASCII码 颜色
1.HTML<noscript> 标签 <noscript> 标签提供无法使用脚本时的替代内容,比方在浏览器禁用脚本时,或浏览器不支持客户端脚本时. <noscript& ...
随机推荐
- (转)Nginx的启动、停止与重启
启动 启动代码格式:nginx安装目录地址 -c nginx配置文件地址 例如: [root@LinuxServer sbin]# /usr/local/nginx/sbin/nginx -c /us ...
- Ch.3 Aray and String
3-1 scrore Here is a string with o and x. The length is between 1 to 80. Calcuate the score. The sc ...
- 关于XAMPP环境配置
关于XAMPP软件 * Apache - 软件服务器(运行PHP) * 启动失败 * 原因 - 端口号被占用 * 错误信息 - Error: Apache shutdown unexpectedly ...
- 利用document的readyState去实现页面加载中的效果
打开新的网页时,为了增强友好性体验,告知用户网页正在加载数据需要呈现一个"页面加载中"之类的提示,只需要利用document就可以实现. 实现示例代码如下: <style&g ...
- Ubuntu16.04更换漂亮绚丽flatabulous主题
作者:tongqingliu 转载请注明出处: Ubuntu16.04更换漂亮绚丽flatabulous主题 更新 sudo apt-get update sudo apt-get upgrade 安 ...
- Spring+TaskExecutor实例
1 taskExcutor package com.test; import org.springframework.core.task.TaskExecutor; public class Main ...
- Android 音乐播放
android简单音乐播放控制代码 这个几个月业余时间一直在做一个android项目,里面涉及到了音乐播放功能.很简单那种,播放.暂停.上一曲.下一曲.音量调节等. 音乐播放主要使用的对象是Media ...
- Kotlin基本语法和使用
Kotlin 是一个基于 JVM 的新的编程语言,由 JetBrains 开发.与Java相比,Kotlin的语法更简洁.更具表达性,而且提供了更多的特性. Kotlin是使用Java开发者的思维被创 ...
- 【LeetCode】217. Contains Duplicate
题目: Given an array of integers, find if the array contains any duplicates. Your function should retu ...
- static方法和非static方法的区别
●生命周期(Lifecycle):静态方法(Static Method)与静态成员变量一样,属于类本身,在类装载的时候被装载到内存(Memory),不自动进行销毁,会一直存在于内存中,直到JVM关闭. ...