C中的嵌套循环练习-我能写得更好吗



练习是:

使用嵌套循环生成以下模式

A
BC
DEF
GHIJ
KLMNO
PQRSTU

我写的是:

#include <stdio.h>
int main(void)
{
char ch[]="ABCDEFGHIJKLMNOPQRSTUVWXYZ";
int x,y;
int min,max,i;
min=max=0;
i=1;
for(x=0;x<6;x++)
{
for(y=min;y<=max;y++){
printf("%c",ch[y]);
}
min=max+1;
max+=i+1;
i++;
printf("n");
}
return 0;
}

有没有一种我想不出的更简单、更好的方法?

这里有一个替代方案:

#include <stdio.h>
int main(void)
{
char c = 'A';
for(int i = 5 ; i >= 0 ; --i)
{
for(int j = i ; j < 6 ; ++j)
printf("%c", c++);
printf("n");
}
}

它不存储所有可能的字符,而是单独打印每个字符,然后在打印后递增字母。正如预期的那样,输出是:

A
BC
DEF
GHIJ
KLMNO
PQRSTU

我没有测试这段代码,但当您使用char c = 'A';变量并递增它时,可以避免保留不同的计数器变量。

#include <stdio.h>
int main(void)
{
char c = 'A';
int x;
for(x = 0; x < 6; x++)
{
for(int y = 0; y <= x; y++){
printf("%c", c++); //No need of the array
}
printf("n");
}
return 0;
}

内部循环可以迭代到外部循环的值
使用计数器跟踪要打印的字符
使用计数加上外部值和ch的长度来限制外部循环的迭代次数。

#include <stdio.h>
#include <string.h>
int main ( void) {
char ch[]="ABCDEFGHIJKLMNOPQRSTUVWXYZ";
int count = 0;
int len = strlen ( ch);
for ( int outer = 0; outer + count < len; ++outer) {
for ( int inner = 0; inner <= outer; ++inner) {
printf ( "%c", ch[count]);
++count;
}
printf ( "n");
}
return 0;
}

我的尝试

#include <stdio.h>
int main(void) {
char *p = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
for (int row = 0; row < 6; row++) {
for (int col = 0; col <= row; col++) putchar(*p++);
putchar('n');
}
}

https://ideone.com/I9kAC1

您可以完全去掉那个字符数组:

#include <stdio.h>
int main(void)
{
int x, y;
int min, max, i;
min = max = 0;
i = 1;
for(x = 0; x < 6; x++)
{
for(y = min; y <= max; y++)
printf("%c",'A'+y); //No need of the array
min = max + 1;
max += i + 1;
i++;
printf("n");
}
return 0;
}
int a = 65;
int bound = 5;
for (int i = 0; i < bound ++i)
{   
for (int j = 0; j <= i; ++j)
printf("%c",(char)a++);
printf("n");
}

如果你所说的容易是指更少的行数,试试这个。这使用ASCII值。

最新更新