使用C语言输出菱形详解
// Written by Harry
一、思维过程
观察要输出的形状 --- 确定大体思路 --- 转化为数学模型 --- 将问题逐个击破
二、完整代码(以7*7菱形为例)
#include <stdio.h>int main()
{int i,j,k; //定义菱形行数i、每行输出次数j、每行中输出空格计数器kfor(i=1;i<=4;i++) //上半部分有四行{k = 1; //空格计数器for(j=1;j<=i+3;j++) //每行输出4~7次{if(k<=4-i){printf(" ");k++;}else printf("*");}printf("\n");}for(i=1;i<=3;i++) //下半部分有三行{ k = 1; //计数器for(j=1;j<=7-i;j++){if(k<=i){printf(" ");k++;}elseprintf("*");}printf("\n");}system("pause");return 0;
}
输出结果:
三、分步说明
1.观察要输出的形状
将菱形分为上下两部分编程,这里分为上4行 + 下3行。
2.确定大体思路
每一部分有固定行数,可使用变量i借助 for循环 控制行数;
每一行有固定输出个数,可使用变量j借助 for循环 控制输出次数;
每一行输出的有空格或符号“*”,可使用 条件判断语句if 控制输出谁。
综上所述,菱形的每半部分都需要使用两个嵌套的for循环 + 一个if判断,这样大致结构(即架构 / 代码骨架)就构思出来了。
3.转化为数学模型
以上半部分举例,在第一个for循环里,变量i共要输出4行,故:
for(i=1;i<=4;i++)
第二个for循环要控制每行输出字符个数,变量j在第一行要输出4次,即i = 1时j = 4,以此类推:
| i = 1 | j = 4 |
| i = 2 | j = 5 |
| i = 3 | j = 6 |
| i = 4 | j = 7 |
可知,j输出范围为[4,7],随i变化而变化,即:
for(j=1;j<=i+3;j++)
这样两个for循环都解决,只剩如何判断每一行每一个字符输出的到底是谁这个问题,我们使用if判断语句,同样,先找出空格计数器(即变量k)的数学关系,这里如果找k与j的关系会很繁琐,所以直接跟i关联,转化为文字解释就是:“哪一行输出多少个 空格 又输出多少个 ‘*’ 呢”,数学关系如下:
| i = 1 | j = 3 |
| i = 2 | j = 2 |
| i = 3 | j = 1 |
| i = 4 | j = 0 |
显而易见,i + k恒等于4,这段代码如下:
if(k<=4-i){printf(" ");k++;}else printf("*");
因为每一行开始前计数器要归为1,所以在第一个for循环下,第二个for循环前赋值给空格计数器k = 1
k = 1;
又因为每行之间要换行,接着在第一个for循环最后增加换行语句:
printf("\n");
所以,菱形上半部分完整输出代码块如下:
for(i=1;i<=4;i++) //上半部分有四行
{k = 1; //空格计数器for(j=1;j<=i+3;j++) //每行输出4~7次{if(k<=4-i){printf(" ");k++;}else printf("*");}printf("\n");
}
4.将问题逐个击破
菱形下半部分与上部分同理,代码块如下:
for(i=1;i<=3;i++) //下半部分有三行
{ k = 1; //计数器for(j=1;j<=7-i;j++){ if(k<=i){ printf(" ");k++;}elseprintf("*");}printf("\n");
}
将上下两块代码组合在一起,问题解决。
四、写在最后
CSDN是我在考研期间查资料发现的网站,很多高质量的文章与分享解决了我许多计算机领域的问题与困惑,非常棒。
这是我第一次发博客,因希望将知识分享给更多人、帮助更多人、也想以后方便回顾自己所学而写下了这篇文章,才疏学浅,如有错误之处望指正。每天都在向大家学习中,以后会继续分享一些小知识的,谢谢!
使用C语言输出菱形详解相关推荐
- python语言格式化输出_Python format()格式化输出方法详解
原标题:Python format()格式化输出方法详解 format() 方法的语法格式如下: str.format(args) 此方法中,str 用于指定字符串的显示样式:args 用于指定要进行 ...
- C语言再学习 -- 详解C++/C 面试题 2
(经典)C语言测试:想成为嵌入式程序员应知道的0x10个基本问题. 参看:嵌入式程序员面试问题集锦 1.用预处理指令#define 声明一个常数,用以表明1年中有多少秒(忽略闰年问题) #define ...
- python自动解析json_Python语言解析JSON详解
本文主要向大家介绍了Python语言解析JSON详解,通过具体的内容向大家展示,希望对大家学习Python语言有所帮助. JSON 函数使用 JSON 函数需要导入 json 库:import jso ...
- 【C语言】函数详解(入门到进阶)
目录 前言 一.什么是函数 二.函数的构成 三.函数的调用和声明 四.函数的参数 五.函数的递归 总结 写在后面 前言 最近帮家里的小朋友整理一些学习C语言的知识点 有整体入门基础文章--[C语言]拯 ...
- 一个简单的C语言程序(详解)
C Primer Plus之一个简单的C语言程序(详解) #include <stdio.h>int main(void) //一个简单的 C程序 {int num; //定义一个名为 n ...
- C语言字符集中可显示字符,C++_C语言转义字符实例详解,在字符集中,有一类字符具有 - phpStudy...
C语言转义字符实例详解 在字符集中,有一类字符具有这样的特性:当从键盘上输入这个字符时,显示器上就可以显示这个字符,即输入什么就显示什么.这类字符称为可显示字符,如a.b.c.$.+和空格符等都是可显 ...
- 坐标移动c语言,C语言 坐标移动详解及实例代码
搜索热词 题目描述 开发一个坐标计算工具, A表示向左移动,D表示向右移动,W表示向上移动,S表示向下移动.从(0,0)点开始移动,从输入字符串里面读取一些坐标,并将最终输入结果输出到输出文件里面. ...
- [C语言] for循环详解 循环 for循环实例巧解
前言>>> 嘿嘿,本文要讲的小方法实例使用牛客网的这道题 ↑↑↑ .怎么样!!? ^ ^ 100% 到底是系统太假还是我写得好??? 开始>>> 题目:线段 ...
- 【C语言】字符变量详解
[C语言]字符变量详解 作为计算机语言中的一种基本数据类型,字符型数据在编写计算机程序时经常用到.在C语言中,字符型数据是以char类型来表示的.在本篇博客中,我们将对C语言中的字符变量进行详细的讲解 ...
- 国密算法Go语言实现(详解)(十) ——SM2(椭圆曲线公钥密码算法)
国密算法Go语言实现(详解)(十) --SM2(椭圆曲线公钥密码算法) 原创代码:https://github.com/ZZMarquis/gm 引用时,请导入原创代码库.本文仅以注释方式详解代码逻辑 ...
最新文章
- 怎么复制链接伟html,index.html
- 图解:消息传输的架构模式
- 用html做12进制时钟特效,js+css3实现简单时钟特效
- ubuntu12.04+fuerte 下跑通lsd-slam——数据集
- git如何忽略已经提交的文件 (.gitignore文件无效)
- viewPager开启界面导航之旅
- SolverParameter
- python点线图_Python | 点线图
- python元素定位input button_python+selenium 定位到元素,无法点击的解决方法
- Atitit 控制中心快速启动面板quick launcher
- J2SDK 安装配置指南
- 华为网络,模拟器ensp的基本使用
- 所爱隔山海,山海皆可平
- Android rom开发:recovery取消校验Vbmeta version和framework matrix
- 我是怎么定位线上问题的?
- 【ESP32】Arduino+LVGL 如何使用PSRAM优化显示
- Java 实现用户登录项目
- 详解ShellShock 漏洞复现原理,内附ShellShock的修复方法
- 取消input默认提示框
- ARM Linux异常处理之data abort(一)