c语言如何打印矩形图形的程序 五行七列,怎么用C语言输出一个7行7列菱形,对角线用#,其他用*...

满意答案

00e27ab806e4881f8254fe7ae8741834.png

25899我

2013.06.04

00e27ab806e4881f8254fe7ae8741834.png

采纳率:51%    等级:12

已帮助:9377人

分析:这个题有三个思路,上面也有人提到:直接printf,二维数组,循环前两者比较简单,这里就不多说了。这里使用循环与分支结构完成,代码如下:#include #include #define TotalRow 3#define TotalColumn 7int main (int argc, char *argv[]){ int RowCount = 0, ColumnCount = 0; int HalfPosition = (TotalColumn / 2) + 1; for (RowCount = 1; RowCount <= TotalRow; RowCount++) { for (ColumnCount = 1; ColumnCount <= TotalColumn; ColumnCount++){ if (ColumnCount == HalfPosition) { printf ("#"); continue; } if (ColumnCount <= ((TotalColumn - HalfPosition) - (RowCount - 1)) || ColumnCount >= (RowCount + HalfPosition)) { printf (" "); continue; } printf ("*");} printf ("\n"); } for (ColumnCount = 1; ColumnCount <= TotalColumn; ColumnCount++) { printf ("#"); } printf ("\n"); for (RowCount = 1; RowCount <= TotalRow; RowCount++) { for (ColumnCount = 1; ColumnCount <= TotalColumn; ColumnCount++){ if (ColumnCount == HalfPosition) { printf ("#"); continue; } if (ColumnCount <= RowCount || ColumnCount >= (TotalColumn - RowCount + 1)) { printf (" "); continue; } printf ("*");} printf ("\n"); } system ("pause"); return 0;}代码详解:第1行至第2行,是两个头文件包含,一个是大家熟悉的标准输入输出头文件,第二个杂项函数库,我们在文件结尾会调用其中的system函数来暂停运行,使得我们能看清楚运行结果。第3行和第4行,宏定义了两个常量,分别是总行数TotalRow,和总列数TotalColumn。这里我们使用有意义的词语来定义变量与常量,以提高代码的可读性。需要注意的是TotalRow的值是实际行数的一半,因为整个图形我们是分为三个部分完成的。第5行是入口函数(主函数)定义,后面带有两个参数,是以后生成可执行文件时传递命令行参数用的,对我们这个程序意义不大,只是使用默认写法罢了,这里就不详解了。第7到第8行,是主函数内变量的定义及初始化,RowCount和ColumnCount用于循环行计数和循环列计数。HalfPosition记录列数的中心位置。第9行我们遇到处理上半部分的最外层的循环,从1循环到TotalRow,循环体到第28行。第11行到25行是一个嵌套循环,从1到TotalColumn按条件打印字符,条件由内嵌if语句控制,先判断循环计数是不是处于当前列中心位置,是的话就打印字符#。(13-17行)。其中continue语句的作用一会再说。18到23行的语句是关键,它判断空格字符的位置。条件中使用了逻辑或运算符,因为两边空格的规律不同。第一次字符出现之前的空格与当前行数的关系是,第一行三个空格,第二行两个,第三行一个,正好等于总列数减去中心值在减去行数减1。因此有:ColumnCount <= ((TotalColumn - HalfPosition) - (RowCount - 1)时输出空格。另一边的条件就条件就比较简单,ColumnCount >= RowCount + HalfPosition即可。如果两个条件都不满足(既不是中心也不满足空格的条件),则打印*(24行),所以上面两组if语句,要使用continue跳出当前行的循环,以免满足条件的语句也被打印*号。27行为循环内换行,不多说。30-34行打印中间一行的#。35,换行。38到56行处理下半部分图形,原理与上面类似,条件略微不同,这里也不详细说了。57行调用system函数,暂停屏幕,前面已经说过了。最后说明一下,其实基本原理并不难,就是判断什么位置打印什么字符,这里是判断#和空格的位置,其实判断#和*会更简单。希望楼主自己试一试,学习编程一定要请自实践才会有收获。附件里有编译好的可执行文件能直接看到结果。另外本代码具有一定的通用性,例如9行11行这些奇数也都可以。(请注意TotalRow的数值应该是它的一半)。当然由于循环很多,太大的数字会影响运行效率,请不用使用太大的数实验。本程序在DEV C++最新版下编译运行通过(vs2010装起来太麻烦),使用的均为标准C语句与函数库,在大部分编译器下应该都没问题。运行结果图:

查看原帖>>

03分享举报

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值