你的问题是除了第一次能达到你的要求外,其他的都不行吧。首先是你输出空格的那个循环有问题,应该每一次都要将b重新赋值,这样才能保证你的空格个数输出没问题。跟着就是你的*号的输出,你可以自己读读循环,只有第一次是可以符合你的要求,从第二次开始就不能进入这个循环了,所以你也应该每一次都重新赋值。你在做这些题的时候要掌握规律,你看看你的题目,第一次是1·个,第二次是3个,第三次是5个……那你应该看出跟2x+1或2x-1有关,所以你就要用到。其实这题目是不是还有下半部吧,是逐渐减少的吧,你应该想想其他更好的方法,我觉得这种方法的可读性不太好,你可以试试从整个整体来想想,我之前做的就是整个输出地,不用分成两部分。
应该改成这样
#include
int main (void)
{
int a, b = 0, c = 0;
for (a = 4;a >= 0; a--)
{
for ( b = 0; b <= a; b++)
{
printf (" ");
}
for ( c = 0; c < 5-2*a; c++)
{
printf ("*");
}
printf ("\n");
}
} 还有你在写完后,自己读一读,看看哪里不对劲,多读读
因为你有b++,后面还有b=b+1。在for(; b <= a; b++)
这里已经把b=5,后面b=b+1让b=6,以此类推,所以你的结果一定是错的。
望采纳
这个是因为你编写的代码和这个你要打出的东西不一样。是在内层的两个for循环中出了差错。因为对于for(初始化表达式;循环条件表达式;修正表达式)你的初始化表达式省略。所以呢当a为4的时候,两个内层的for循环都运行了,第一个内层for循环运行五次输出五个空格此时b的值变为4接着运行第二个内层for循环,运行一次输出一个*号此时c变成4.然后执行外层的for循环的修正表达式,a变为3.此后这个程序的每次判断条件均为假,所以最后退出循环