我有以下C代码:
void BubbleSort(int a[], int array_size)
{
int i, j, temp;
for (i = 0; i < (array_size - 1); ++i)
{
for (j = 0; j < array_size - 1 - i; ++j)
{
if (a[j] > a[j+1])
{
temp = a[j+1];
a[j+1] = a[j];
a[j] = temp;
}
}
}
}
如何仅根据goto
重写此代码?
答案 0 :(得分:6)
由于与{C}相比,while
和for
的语义在C ++中略有改变,我认为引用C ++标准是可以的。它提供了关于for
和while
如何转换为goto
的直接规则(他们在第6.5节中讨论过):
while (T t = x) statement
相当于
label:
{
T t = x;
if (t) {
statement
goto label;
}
}
for (for-init-statement; condition; expression) statement
相当于
{
for-init-statement
while ( condition ) {
statement
expression ;
}
}
因此它相当于:
{
for-init-statement
label:
if ( condition ) {
statement
expression ;
goto label;
}
}
答案 1 :(得分:4)
void BubbleSort(int a[], int array_size)
{
int i, j, temp;
// for (i = 0; i < (array_size - 1); ++i)
i = 0;
BEGINFOR:
if (i >= (array_size - 1)) goto ENDFOR;
// for (j = 0; j < array_size - 1 - i; ++j)
j = 0;
BEGININNERFOR:
if (j >= array_size - 1 - i) goto ENDINNERFOR;
if (a[j] > a[j+1])
{
temp = a[j+1];
a[j+1] = a[j];
a[j] = temp;
}
++j;
goto BEGININNERFOR;
ENDINNERFOR:
++i;
goto BEGINFOR;
ENDFOR:
}
答案 2 :(得分:2)
要完全删除所有块,但代码看起来比原始的恕我一样丑陋
void BubbleSort(int a[], int array_size)
{
int i, j, temp;
// for (i = 0; i < (array_size - 1); ++i)
i = 0;
BEGINFOR:
if (i >= (array_size - 1)) goto ENDFOR;
// for (j = 0; j < array_size - 1 - i; ++j)
j = 0;
BEGININNERFOR:
if (j >= array_size - 1 - i) goto ENDINNERFOR;
if (a[j] <= a[j+1]) goto ENDOFCOMPARISON
temp = a[j+1];
a[j+1] = a[j];
a[j] = temp;
EDNOFCOMPARISON:
++j;
goto BEGININNERFOR;
ENDINNERFOR:
++i;
goto BEGINFOR;
ENDFOR:
}
答案 3 :(得分:0)
i = 0;
label:
//loop action here
i++;
if (i < somevalue)
goto label;
这是您的代码......
void BubbleSort(int a[], int array_size)
{
int i, j, temp;
i=0;
first_loop:
j = 0;
second_loop:
if (a[j] > a[j+1])
{
temp = a[j+1];
a[j+1] = a[j];
a[j] = temp;
}
j++;
if (j < array_size - 1 - 1) {
goto second_loop;
}
i++;
if (i < array_size - 1) {
goto first_loop;
}
}