练习是:
使用嵌套循环生成以下模式
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值。