输出每行坐标的的c语言算法,C语言输出空心菱形的实现
http://www.cnblogs.com/liutogo/archive/2013/05/31/3110394.html
输出空心菱形是c语言初学者经常遇到的问题,由于涉及c语言的基础知识较多,也是经常在考试中出现的题型。
第一个程序是我自己想的,要是要找方便记忆的简便方法,请直接跳过前半部分,看后半部分的其他代码,我觉得这些代码的思想很好
在写程序之前要仔细观察空心菱形的规律。先分析,不要急于写程序。
将问题化整为零:
1、输入行数
printf("please input n:");
scanf("%d",&n);
3、在输出n行的空心菱形时,发现第一行和最后一行与其他行有些区别,可以使用单独的语句将此两行输出,为了使代码整洁,使用子函数完成。
void star_end(int n)
{
int i;
for(i=1;i<=(n-1)/2;i++)
printf(" ");
printf("*");
printf("\n");
}
传递参数:要完成的菱形行数n
使用循环输出空格数:(n-1)/2
2、以9行的空心菱形为例,讨论中间部分的情况:
上图中部黑色数列为中间每行的空格数,用右侧红色数列为表示黑色数列(见箭头)。
使用一数列a,将a初始化,使a为上图右侧的的红色数列形式。
int a[20];
for(i=1;i<=(m+1)/2;i++)
a[m-i+1]=a[i]=i;
例如:n=7时 a[1]-a[7]为 1 2 3 4 3 2 1
此时左侧的红色数列可表示为 (m+1)/2-a[i]
3、使用循环输出每行的” ”与”*”
for(i=1;i<=m;i++)
{
for(j=1;j<=(m+1)/2-a[i];j++)
printf(" ");
printf("*");
for(j=1;j<=2*a[i]-1;j++)
printf(" ");
printf("*");
printf("\n");
}
对于每行,
先输出(m+1)/2-a[i]个” ”,
再输出一个”*”,
再输出2*a[i]-1个” ”,
再输出一个”*”
完整程序:
#include
void star_end(int n);
main()
{
int n,m,i,j,a[20];
printf("please input n:");
scanf("%d",&n);
m=n-2;
for(i=1;i<=(m+1)/2;i++)
a[m-i+1]=a[i]=i;
star_end(n);
for(i=1;i<=m;i++)
{
for(j=1;j<=(m+1)/2-a[i];j++)
printf(" ");
printf("*");
for(j=1;j<=2*a[i]-1;j++)
printf(" ");
printf("*");
printf("\n");
}
star_end(n);
}
void star_end(int n)
{
int i;
for(i=1;i<=(n-1)/2;i++)
printf(" ");
printf("*");
printf("\n");
}
其他算法:(这些思想很好)
一、//空心菱形图,原理是建立坐标系,原点为菱形中心
#include
void main()
{
int y,x,n,k;
printf("please input number of rows:");
scanf("%d",&n);
k=n/2;
for(y=-k;y<=k;y++)
{
for(x=-k;x<=k;x++)
{
if((x==y+k)||(x==y-k)||(x==k-y)||(x==-k-y))
printf("%c",'*');
else
printf(" ");
}
printf("\n");
}
}
二、以上程序可使用math.h中的abs()函数,用于求绝对值。
Abs函数 描述 返回数字的绝对值。 语法 Abs(number)
代码简化为
#include
#include
main()
{
int i,j,n,k;
printf("Please input the number of rows:");
scanf("%d",&n);
k=n/2;
for(i=-k;i<=k;i++)
{
for(j=-k;j<=k;j++)
{
if(abs(i)+abs(j)==k)
printf("*");
else
printf(" ");
}
printf("\n");
}
}
/************水平有限,仅供参考,欢迎批评指正****************/
转载于:https://www.cnblogs.com/liutogo/archive/2013/05/31/3110394.html
标签:输出,int,空心,菱形,printf,input,C语言
来源: https://blog.csdn.net/weixin_30455365/article/details/96695127
输出每行坐标的的c语言算法,C语言输出空心菱形的实现相关推荐
- c语言打印空心数字图形,(完整word版)C语言编写打印实心和空心菱形【源码】
<(完整word版)C语言编写打印实心和空心菱形[源码]>由会员分享,可在线阅读,更多相关<(完整word版)C语言编写打印实心和空心菱形[源码](13页珍藏版)>请在人人文库 ...
- 加法接力赛C语言算法,C语言循环结构
<C语言循环结构>由会员分享,可在线阅读,更多相关<C语言循环结构(47页珍藏版)>请在人人文库网上搜索. 1.UML和需求建模,第六章,循环控制,UML和需求建模,主要内容, ...
- 田忌赛马c语言算法,C语言里关于田忌赛马的问题
C语言里关于田忌赛马的问题0 limmettle2014.10.24浏览83次分享举报 这是题目 题目描述 赛马是一古老的游戏,早在公元前四世纪的中国,处在诸侯割据的状态,历史上称为"战国时 ...
- 学校门口的树C语言算法,C语言校园导游程序设计汇报.doc
C语言校园导游程序设计汇报 <应用程序设计 课程设计>报告 班级: 学号: 姓名: 指导教师: 成绩评定: 目录 题目: 设计一个校园导游程序,为来访的客人提供各种信息查询服务 一.需求分 ...
- 必背C语言算法 C语言小写转大写
算法思想 在计算机中,大小写字母的ASCII值差32,字符a的ASCII值为97,字符A的ASCII值为65. 程序代码 #include <stdio.h> int main() {ch ...
- mm1模型的c语言算法,C语言动画程序源码(1).pdf
C 语言动画程序 #include #include #include #include #define pi 3.1415926535 double ca3mm1(double m1,double ...
- 必背C语言算法 C语言求自然底数e
自然底数 e=2.718281828-,e 的计算公式如下: e=1+1/1!+1/2!+1/3!+- 要求当最后一项的值小于 10-10 时结束. 算法思想 使用循环实现累加求和,并在求和后计算下一 ...
- 残缺棋盘问题c语言算法,c语言算法--分而治之算法---残缺棋盘
残缺棋盘(defective chessboard)是一个有2k×2k 个方格的棋盘,其中恰有一个方格残缺.图2 - 3给出k≤2时各种可能的残缺棋盘,其中残缺的方格用阴影表示.注意当k= 0时,仅存 ...
- 三个月可以入门c语言吗,c语言输出2015年日历,要求三个月在一行上(就是按照季度输出)...
满意答案 h0p2znym 推荐于 2017.09.26 采纳率:56% 等级:9 已帮助:513人 根据闰年定义,能被400整除的年,或者能被4整除且不是100的倍数的,是闰年.于是C中判断y ...
最新文章
- Java多线程干货系列—(一)Java多线程基础
- php var_dump()函数的详解
- DCMTK:测试CT Table Dynamics FG类
- 建模实训报告总结_数学建模实训报告
- lamba统计最大值,最小值,平均值,总和,个数
- 原始socket例子
- 使用 position: sticky 达到粘性元素区域悬浮效果
- 大数据workshop:《在线用户行为分析:基于流式计算的数据处理及应用》之《实时数据分析:海量日志数据多维透视》篇...
- 天天酷跑php源码_使用Java实现天天酷跑(附源码)
- jsp taglib指令_JSP指令–页面,包含和taglib示例
- AI人机对战五子棋游戏【Python(pygame)+AI】并实现软件输出
- python爬虫使用seleium+超级鹰+Image模块自动登录12306(附源码和登录视频)
- Unity游戏开发背景知识
- 单片机三角波c语言程序,基于51单片机的三角波发生器
- 使用Python获取股票的基金持仓数据
- 王者战力查询接口(免费)
- navicat 优化mysql_navicat怎么实现查询优化
- 华为大数据云管理平台实测
- [计算机网络] 实验 5 电子邮件
- 技术解析:一文看懂 Anolis OS 国密生态