[英]converting a FOR loop to a DO WHILE loop in C++
我正在嘗試將其轉換為使用時間; 它應該根據您輸入的數字顯示一個金字塔:
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 :)
一個for循環
for (BEGIN; COND; INC)
{
WORK;
}
相當於while循環
{
BEGIN;
while (COND)
{
WORK;
INC;
}
}
…除了WORK
部分中的continue
語句的效果(帶有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)
}
}
編譯器實際上傾向於將for循環轉換為等效於do-while循環的代碼。 結果看起來像這樣(使用尼爾·柯克的元變量):
BEGIN;
if(COND) {
do {
WORK;
INC;
} while(COND);
}
請注意, COND
出現在兩個不同的位置。 如果檢查生成的程序集是否存在for循環,通常會看到這種效果,除非優化器足夠聰明地弄清楚(或由程序員使用__assume
) COND
第一次不會__assume
。
#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);
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.