打印金子塔的三个循环

做过点题目的都知道,这种题至少要三个for循环来实现,首个for控制行数,内部两个控制空格和打印内容,总结为如下:

//正金字塔
forint i=1;i<=n;i++){ //行数
for(int j=0;j<n-i;j++){//控制在第i行内的空格数
printf(" ");
}
for(int k=;k<=2*i-1;i++){//控制在第i行内的字符
printf("*");
}
printf("\n");//跳出这一行,到i+1行
}

倒金字塔与正的类似,内部两个语句相同,但是控制行数的语句不同。

forint i=n;i>0;i--){ //行数
for(int j=0;j<n-i;j++){//控制在第i行内的空格数
printf(" ");
}
for(int k=;k<=2*i-1;i++){//控制在第i行内的字符
printf("*");
}
printf("\n");//跳出这一行,到i+1行
}

所以菱形就是将这两种代码加起来(这里的n指的是行数/2),但要注意只是简单的加起来的话,会有一行重复,所有下一行要写i=n-1

forint i=1;i<=n;i++){ //行数
for(int j=0;j<n-i;j++){//控制在第i行内的空格数
printf(" ");
}
for(int k=;k<=2*i-1;i++){//控制在第i行内的字符
printf("*");
}
printf("\n");//跳出这一行,到i+1行
}
forint i=n-1;i>0;i--){ //和之前的不一样
for(int j=0;j<n-i;j++){//控制在第i行内的空格数
printf(" ");
}
for(int k=;k<=2*i-1;i++){//控制在第i行内的字符
printf("*");
}
printf("\n");//跳出这一行,到i+1行
}

金子塔的输出内容

上面讲了金字塔的大致输出格式,现在我们细分到金字塔的特殊样式,例如数字,字母,变化的数字和字母。(我们接下来的演示都是正金字塔)

最基础的 字符金字塔

#include<stdio.h>

int main(){
int n;
scanf("%d",&n);
forint i=1;i<=n;i++){ //行数
for(int j=0;j<n-i;j++){//控制在第i行内的空格数
printf(" ");
}
for(int k=;k<=2*i-1;i++){//控制在第i行内的字符
printf("*");//可以是数字,字符,字母
}
printf("\n");//跳出这一行,到i+1行
}
return 0;
}

改变的金字塔

不同于输出同一种字符形式的金子塔,变化的金字塔要在控制输出内容上在加上for语句来控制输出形式的变化

递增数字的金字塔

#include<stdio.h>

int main(){
int n;
scanf("%d",&n);
forint i=1;i<=n;i++){ //行数
for(int j=0;j<n-i;j++){//控制在第i行内的空格数
printf(" ");
}
for (int k=1; k<=i; k++) {
printf("%d",k);
}
// 打印递减的数字
for (int k =i-1;k>=1; k--) {
printf("%d", k);
}
printf("\n");//跳出这一行,到i+1行
}
return 0;
}

相较于普通的输出,数字金字塔多了两个for语句来控制数字的递增和递减。

字母金字塔

#include<stdio.h>

int main(){
int n;
scanf("%d",&n);
forint i=1;i<=n;i++){ //行数
for(int j=0;j<n-i;j++){//控制在第i行内的空格数
printf(" ");
}
//打印递增字母
for (int k=1; k<=i; k++) {
printf("%c",'A' + k - 1);
}
// 打印递减的字母
for (int k =i-1;k>=1; k--) {
printf("%c", 'A' + k - 1);
}
printf("\n");//跳出这一行,到i+1行
}
return 0;
}

相较于上一个金字塔,我们在输出的时候改边了输出变量的值,也就是说我们递增或是递减的形式不变,通过改变变量由输出数字变为输出字母