怎么用C语言输出一个7行7列菱形,对角线用#,其他用*
就是用c#在屏幕上打印出这个: # *#* **#** ####### **#** *#* #虽然不太像,但是差不多拉,怎么写程序啊?
答案:分析:这个题有三个思路,上面也有人提到:直接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语句与函数库,在大部分编译器下应该都没问题。运行结果图:
到卡饭论坛网站查看回答详情>>你放礼貌一点!你是谁的蜀黍?!这道题考的就是for循环,你用printf做?要是1万行1万列呢?你也用printf?用for,就算是1万行1万列,小小地修改几个地方,就可以了。这就是编程的真谛。
到卡饭论坛网站查看回答详情>>表示学的C++……怎么连头文件都不一样[:347:]
到卡饭论坛网站查看回答详情>>熬了时间帮你写个,来点分吧。 c语言的。 c#应该兼容c吧?? 这个不太清楚,不行自己就将输入输出改改这个n是对角线-1, 是可以设定的代码:#include "stdio.h"int main(){int n = 20;for(int j=0; j<n; j+=2){for(int i=0; i<(n-j)/2; i+=1) { putchar(32); }for(int i=0; i<=j; i+=1) { putchar('*'); }for(int i=0; i<(n-j)/2; i+=1) { putchar(32); }printf("\n");}// 打印对角线for(int k=0; k0; j-=2){for(int i=0; i<=(n-j)/2; i+=1) { putchar(32); }for(int i=0; i<j-1; i+=1) { putchar('*'); }for(int i=0; i<(n-j)/2; i+=1) { putchar(32); }printf("\n");}getchar();return 0;}
到卡饭论坛网站查看回答详情>>HelloWorld改下就行,好好学吧,自己要努力,这个最基本的,以后太难的上水木清华。[:01:]
到卡饭论坛网站查看回答详情>>这个是二维数组的 看见大神写的本来不想发的,最后还是厚着脸皮发上来
到卡饭论坛网站查看回答详情>>21楼正解 刚考过计算机c语言二级 此题目书上有类似例题。
到卡饭论坛网站查看回答详情>>呵呵,你好啊,小盆与。蜀黍跟你说哈,老师只在考试和作业中有权威,在实际的编程实践中只有计算机说了算,你的编程让计算机顺从的输出了想要的结果你就对了,否则神马老师都是浮云。
到卡饭论坛网站查看回答详情>>对26楼写的程序 指出一点错误1 i 重复定义了for(int j=0; j<n; j+=2){ for(int i=0; i<(n-j)/2; i+=1)应该改为int main() { int i,j ,k;for( j=0; j<n; j+=2) { for( i=0; i<(n-j)/2; i+=1)2. 楼主要求是7行7列菱形 int n=20; 太太多了改为 int n=6; 3. # *#* **#** ####### **#** *#* #要求是横竖的对角线都要用“ # ” 26l楼只是在中间加了一行####### 不符希望26楼楼主加以改正
到卡饭论坛网站查看回答详情>>作业自己做。这个都不会,考试要不及格的。
到卡饭论坛网站查看回答详情>>
上一个:C语言用数列和和函数编一个3个人输出成绩的程序
下一个:C语言输入字符型指针数组怎么输