我试图将其转换为do-while;它应该根据您输入的数字显示金字塔:
int size,a,b,c;
printf("Enter a Number: ");
scanf("%d",&size);
printf("\n");
// for loop starts here
for(a=1; a<=size; a++)
{
for(b=1; b<=size-a; b++)
{
printf(" ");
}
for(c=1; c<=(2*a)-1; c++)
{
printf("*");
}
printf("\n");
}
getch();
}
这是我到目前为止所做的:
int size;
int a=1;
int b=1;
int c=1;
do {
a++;
do {
c++;
printf("*");
} while(c<=((2*a)-1));
do {
printf(" ");
b++;
} while(b<=(size-a));
printf("\n");
} while(a<=size);
getch();
}
Aaaa并没有显示相同的输出,任何建议人? TIA:)
答案 0 :(得分:11)
for循环
for (BEGIN; COND; INC)
{
WORK;
}
等同于while循环
{
BEGIN;
while (COND)
{
WORK;
INC;
}
}
...除了continue
部分中WORK
语句的效果(for
循环continue
跳转到INC
),除了在for
循环的BEGIN
中声明的名称与声明的名称在同一个声明区域中
COND
。
然而,它并没有做出优雅的do-while循环。
{
BEGIN;
do
{
if (! COND) break;
WORK;
INC;
} while (true)
}
或者(尽管它重复代码)
{
BEGIN;
if (COND)
{
do
{
WORK;
INC;
} while (COND)
}
}
答案 1 :(得分:0)
编译器实际上倾向于将for循环转换为等同于do-while循环的代码。结果看起来像这样(使用Neil Kirk的metavariables):
BEGIN;
if(COND) {
do {
WORK;
INC;
} while(COND);
}
请注意COND
出现在两个不同的地方。如果你检查生成的for循环程序集,你通常会看到这种效果,除非优化器足够巧妙地弄清楚(或程序员使用__assume
告诉)COND
永远不会第一次通过时是假的。
答案 2 :(得分:0)
#include <stdio.h>
void main()
{
int size;
int i=1;
int j;
int k;
printf("Enter the number:\n");
scanf("%d",&size);
do
{
j=i;
do
{
printf(" ");
j++;
}while(j<=size);
k=1;
do
{
printf("*");
k++;
}while(k<=(2*i)-1);
printf("\n");
i++;
}while(i<=size);
}