C语言编程,打印星号菱形,有人能一步步解释一下吗,看不懂啊

作者&投稿:蓬燕 (若有异议请与网页底部的电邮联系)
C语言程序,打印菱形星号。~

#includeintmain(){ intn,i,j; scanf("%d",&n); for(i=0;i=0;i--) { for(j=0;j

#include
int main()
{
int i,j,k,line,m;
printf("请输入行数:");
scanf("%d",&line);
m=(line+1)/2;
for(i=1;i<=m;i++)
{
for(k=0;k<m-i;k++)
{
printf(" ");
}
printf("*");
if(i==1){printf("
");continue;}
for(j=0;j<2*i-3;j++)
{
printf(" ");
}
printf("*");
printf("
");
}
for(i=m-1;i>0;i--)
{
for(k=0;k<m-i;k++)
{
printf(" ");
}
printf("*");
if(i==1){printf("
");continue;}
for(j=0;j<2*i-3;j++)
{
printf(" ");
}
printf("*");
printf("
");
}
return 0;
}

首先fabs( )函数是一个取绝对值的函数,第一个for循环是决定每一行( printf("\n"); ),第二个for循环决定每一列操作。第一个for循环的i值每增加1,内嵌的for循环(第二个for循环)就执行了7次。举个例子:当i=1的时候,此时的fabs(4-1)=3,7-fabs(4-1)=4。j从1开始,if(((j<=3))或者(j>4)),就输出空格符,否则就输出*号。即当i=1时,j=4就输出*号。因为j=4的时候,不符合j<=3,或j>4的条件,所以就输出*号。其实这个程序改成:
main( )
{
int i,j;
printf("请输入a的值:");
scanf("%d",&a);
for(i=1;i<=a;i++)
{
for(j=1;j<=a;j++)
{
if((j<=fabs((a+1)/2-i))||(j>a-fabs((a+1)/2-i)))
printf(" ");
else
printf("*");
}
printf("\n");
}
}
这样就可以自己定义菱形的边长了。谢谢采纳,如有不懂,可加Q:893290881

第一个for,i表示行,一共要打7行,每一行对应第二个for,j表示要打的字符数,每行7个字符,每次检测if条件看打印空格或者星号,每完成7个字符, 用printf("\n"); 换行。
fabs()求绝对值函数,if是打印空格的条件,用“||”,表示满足两个条件之一即可,
两个条件分别为 1: 4-行数 的绝对值 大于或等于 j,也就是说打印第一行时,i=1,4-i=3;满足条件的j有1,2,3
2: 7-(4-行数 的绝对值) 小于 j,也就是说打印第一行时,i=1,7-(4-i)=4;满足条件的j有5,6,7
由上看第一行j=4时才会打星号。
这两个条件是控制打空格的条件的。楼主可以自己带入不同的i看看,至于怎么来,楼主可以参照我的思路
第1行,要打印4个空格一个星再4个空格
第2行,要打印2个空格3个星再2个空格
到了 第6行又要打印2个空格3个星再2个空格
观察可知 2,6行会满足相同结果,关于4对称(4为中间的一行),故采用行数与4的差的绝对值,这个绝对值又和打印的空格数有和关系,这就要找规律了,楼主可以把数据列出来研究,并不难。
希望能帮到你

这个程序是在一个7行7列的空间中用*号绘制菱形的程序。
for(i=1;i<=7;i++) 从第一行开始逐行绘制。

for(j=1;j<=7;j++) 每一行从第一列开始绘制每一列。

if((j<=fabs(4-i))||(j>7-fabs(4-i))) :fabs是求绝对值,
试想绘制第一行时,i=1, 则小于等于3和大于4的列都是空格,只在第4列绘制*号。
绘制第二行的时候,i=2,则小于等于2和大于5的列都是空格,只在3,4,5列绘制*号,
。。。。
printf("\n"); 每一行绘制好后要回车,使下一行对齐。

以此类推,自己在草稿纸上画一下,出来的就是一个*号的菱形了。
希望对你有帮助。

哎。搞软件的,搞编程的离不开这个破东西。解释可以跟你解释,不过这个破东西其实不怎么需要去纠结的。以后去了开发这东西还是比较少见的。
菱形是2维的吧。有行有列吧。
我们希望,行和列的生成都由for循环来完成。它输出了七行七列对吧。假如每一行每一列都是*或都是“ ”。我想大家都知道怎么写。问题就是,有的地方放“*”,有的地方放“ ”。这个就比较麻烦了。解决这个麻烦的代码体现在内层for中的if·else语句。
i是对行的循环,j是对列的循环。
过程是这样的i为1的时候,开始打列。打打打。。。
i为2时候继续打列。打打打。。。
这样一个过程完成了七行七列。
现在说说最麻烦的ifelse。4,你要理解,4表示这个菱形的上下两个尖尖的点。因为是7所以是4.如果是9,这个4就是5,如果13就是7以此类推。
fabs(4-i)表示判断当前点距离中心的距离。j<=fabs(4-i)和j>7-fabs(4-i)分别表示中心左右距离中心距离。
其他的只能你自己理解了。这是入门,如果这个搞不懂,高深的编程你就放弃吧。其他一些简单的尝试下就好。工作中不会让你去想这个东西怎么写。这一般是给考研人设计的。。。

for(i=1;i<=7;i++) 打印7行,for(j=1;j<=7;j++) 打印7列,总共七行七列
if((j<=fabs(4-i))||(j>7-fabs(4-i))) 前三列与后三列为“ ”(空),估计是个菱形


用C语言输出菱形
for(k=1;k<=2*i-1;k++) \/\/控制要打印的星号数 printf("*"); printf("\\n"); } for(i=1;i<=3;i++) { for(j=1;j<=i;j++) \/\/...举报| 评论 0 8 上百度 搜一下 C语言100例里面就有这题还有其他一些适合初学者的典型例题。 564519 | 发布于2008-11-17 举报| 评论 0 1 为...

c语言打星号题目 用visual c++编写程序如下 为什么一直有一个error...
本书非常地巨大,你打星号的部分可以不要看。基础不太好的,可以看Stanley B.Lippman的Essential C++,这本书份量要轻得多,不过四个C++的范型都讲了,而 且讲得非常清楚。第二本应该停止技术层面的东西,静下心来看看Pike和Kernighan的The Practice of Programming,好好地整理一下,在程序设计中应该...

用C语言如何输出用星号表示的平行四边形
输出平行四边形 代码:#include<stdio.h> intmain(){ inti,j,n;printf("请输入要打印平行四边形的行数:");scanf("%d",&n);for(i=1;i<=n;i++){ for(j=1;j<=n-i;j++){ printf("");} for(j=1;j<=n;j++){ printf("*...

C语言循环题...
include <stdio.h>int main(void){ int i, j; \/\/ 打印上半部分 for (i = 0; i < 4; i++) { \/\/ 打印前面空格 for (j = 0; j < (7- 2*i); j++) { printf(" "); } \/\/ 打印中间* for (j = 0; j < (2*i + 1); j++) { printf("* "); ...

C语言编程问题
include <stdio.h>int main(){ int row,i,j,N ; scanf("%d", &N ); \/\/输入大小 row=1; while(row<=N) \/*前N排星号*\/ { \/\/for(i=1;i<=N-row;i++) \/\/ printf(" "); 放开这两句是菱形 for(j=1;j<=2*row-1;j++) printf("*"); ...

一个C语言的题看不懂,谁给解释一下
for(i=0;i<=3;i++)这是第一个图形的每一行,共四行 { for(j=0;j<=2-i;j++)每行先打一些空格,第一行有三个空格,下一行的空格总是比这一行的少一个 printf(" ");for(k=0;k<=2*i;k++)每行打的星号个数都是奇数,下一行的星号个数比这一行总是多二个,第一行有一个 printf(...

VFP编程:输出星号构成的菱形。
2014-12-22 C++基础题:输出星号组成的菱形,如图所示! 1 2013-11-19 c语言编程用星号输出菱形 2 2010-06-01 用C语言输出星号菱形图 27 2014-08-20 C语言编程,打印星号菱形,有人能一步步解释一下吗,看不懂啊 25 2014-12-06 如何用星号输出菱形,加每个程序的解释 1 2013-11-24 用星号设计一个...

一个C语言编程问题
类似于找规律,考虑第几行前面多少个空格,应该有多少个星号。 n = 4; for(i = n - 1; i >= 1; i--){ for(j = 0; j < n - i; j++) putchar(' '); for(j = 0; j < i * 2 - 1; j++) putchar('*'); putchar('\\n'); } ...

printf("*")意思
换行。printf(“\\n”)表示输出换行符,“\\n”是个转义字符,系统识别到转义字符时会自动换行。窗口是不会显示\\n的,会直接换到下一行。在不同的语言中,换行符的代码也有所不同。在前端网页开发中是,C语言中是"\\n",C++中是"endl"等。

怎样用c语言编写一个输出“苹果图案”的程序
输出苹果图案程序如下:include<stdio.h> int t;\/\/定义全局变量,用于循环 char tab[] = {\/\/储存用于输出图形的数组 0,1,1,0,0,1,1,0,1,0,0,1,1,0,0,1,1,0,0,0,0,0,0,1,1,0,0,0,0,0,0,1,0,1,0,1,1,0,1,0,0,0,1,0,0,1,0,0,};void main(){ for (t ...

德化县15569728772: C语言问题打印菱形星号 -
势高丁酸: #include "stdio.h" #include "conio.h" main() { int i,j,k; for(i=1;i0;i--) { for(j=3;j>=i;j--) printf(" "); for(k=1;k

德化县15569728772: 用C语言输出星号菱形图 -
势高丁酸: #include "stdio.h"#include "conio.h" main() { int i,j,k; for(i=1;i<=4;i++) { for(j=1;j<=4-i;j++) printf(" "); for(k=1;k<2*i;k++) printf("*"); printf("\n"); } for(i=3;i>0;i--) { for(j=3;j>=i;j--) printf(" "); for(k=1;k<2*i;k++) printf("*"); printf("\n"); } getch(); } 在WIN-TC和VC++中都能运行.

德化县15569728772: c语言编程用星号输出菱形
势高丁酸:#include"math.h" #include<stdio.h> int main() { int i,j,k; for(i=0;i<=3;i++) /*上面的三角形,4行*/ {for(j=0;j<=2-i;j++) /*每行第一个*号之前的空格数*/ printf(" "); for(k=0;k<=2*i;k++) /*输出*符号 */ printf("*"); printf("\n"); } for(i=0;i<=2;i++) ...

德化县15569728772: 输出菱形星号的简单c语言小程序??? -
势高丁酸: #include <stdio.h> void main() {char diamond[7][7]={{' ',' ',' ','*',' ',' ',' '},{' ',' ','*','*','*',' ',' '},{' ','*','*','*','*','*',' '},{'*','*','*','*','*','*','*'},{' ','*','*','*','*','*',' '},{' ',' ','*','*','*',' ',' '},{' ',' ',' ','*',' ',' ',' '}}; int i; int j; clrscr(); for (i=0; i<7; i++) { for (j=0; j<7; j++) printf("%c",diamond[i...

德化县15569728772: C语言程序设计 打印星号空心菱形 -
势高丁酸: n = input() for i in range(n): if i > n/2: t = n-1-i else: t = i s1 = ' ' * (n/2 - t) s2 = ' ' * (2*t - 1) if t == 0: print s1 + '*' else: print s1 + '*' + s2 + '*'

德化县15569728772: C语言中怎么用二维数组输出菱形的星号 -
势高丁酸: 写一个程序,根据用户输入的总行数,打印出菱形.这个题目主要是找出规律,考察读者的逻辑思维.你可以从第一行开始,遍历所有的列,也可以从第一列开始,遍历所有的行.下面的程序从第一行开始,遍历所有的列.设菱形的总行数为...

德化县15569728772: c语言 :打印星号空心菱形,求解 -
势高丁酸: #include<stdio.h> int main() { int i,j,k,line,m; printf("请输入行数:"); scanf("%d",&line); m=(line+1)/2; for(i=1;i<=m;i++) { for(k=0;k<m-i;k++) { printf(" "); } printf("*"); if(i==1){printf("\n");continue;} for(j=0;j<2*i-3;j++) { printf(" "); } printf...

德化县15569728772: 用C语言输出菱形 -
势高丁酸: 提供2个 #include<stdio.h> void main() { int i,j,k; for(i=1;i<=4;i++) //先打印上边的四行 { for(j=1;j<=4-i;j++) //控制要打印的空格数量 printf(" "); for(k=1;k<=2*i-1;k++) //控制要打印的星号数 printf("*"); printf("\n"); } for(i=1;i<=3;i++) { for(j=1;j<=i...

德化县15569728772: C语言编程:打印菱形 第一行:输入奇数n 第二行:output n行菱形 -
势高丁酸: //打印菱形的*号#include <stdio.h> int main(void) { int i,j,k,row,n; scanf("%d",&n); if(n%2==0) { printf("Input Error!\n"); return -1; } for(row=0,i=1; row<n; row<n/2?i++:i--,row++) { for(j=0;j<40-i;j++) //打印空格数 printf(" "); for(k=2*i,j=1; j<k; j++) ...

德化县15569728772: 如何用C语言输出星号 用循环的 输出的结果是菱形的行
势高丁酸: #include&lt;stdio.h&gt; int Int_abs(int i) { if(i&gt;0)return i; return -i; } void main() { int i=2,j=5,k; for(;j&gt;0;j--) { k=Int_abs(i); for(;k&gt;0;k--) { printf(" "); } k=5-2*Int_abs(i); for(;k&gt;0;k--) { printf("*"); } i--; printf("\n"); } }

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网