A
BBB
CCCCC
DDDDDDD
解法一:
#include <stdio.h> int main(void) { int n,i,b,c; char ch = 'A'; printf("请输入你要打印的行数:\n"); scanf("%d",&n); for(i = 1;i <= n;i++) //i是金字塔行数 大小由输入值n确定 { for(b = 0;b < n - i;b++) //b是一行中空格的个数 { putchar(' '); } for(c = 0;c < 2 * i - 1;c++) //c是一行中的字母的个数 { printf("%c",ch); } printf("\n"); ch++; //打印完一行,ch再进行++; } return 0; }
解法二:
#include<stdio.h> int main() { int i,j,n; scanf("%d",&n); while(n>=1) {if(n>26)n=26; for(i=1;i<=n;i++) {for(j=1;j<=n-i;j++)printf(" "); for(j=1;j<=2*i-1;j++)printf("%c ",i+'A'-1); printf("\n");} scanf("%d",&n); } getchar(); }
A B C D E F G H I J K L M N O P Q R S T U V W X Y Z 0 1 2 3 4 5 6 7 8 9
Press any key to continue
#include <stdio.h> void main() { char zm[]={'A','B','C','D','E','F','G','H','I', 'J','K','L','M','N','O','P','Q','R','S','T', 'U','V','W','X','Y','Z','0','1','2','3','4', '5','6','7','8','9' }; int i,j,k,cnt = 0; for(i = 0;i < 8;i++) { for(k = 10 - i;k >= 0;k--) printf(" "); for(j = 0;j < i + 1;j++) printf("%c ",zm[cnt++]); printf("\n"); } }
解法二:
#include "stdio.h" void main() { char j=1; int i=1,k=1,s=1; while(i<=8) { if(k<9-i) { printf(" "); k++; } else { if(j<=s) { if(j<=26) printf("%c ",j+64); else printf("%c ",j+21); j++; } else { printf("\n"); i=i+1; s=s+i; k=1; } } } }
结果为:
A ABA ABCBA ABCDCBA
提示:使用一个外部循环来处理行,在每一行中使用三个内部循环,一个处理空格,一个以升序打印字母,一个以降序打印字母。
解法一:
#include <stdio.h> int main() { int i,j; //用于计数 char ch ; char ch1 = 'A';//从ch1开始 char ch2; printf("请输入一个大写字母:"); ch = getchar(); for(i = 0; i < ch-'A'+1; i++) //行数 { for(j = 0; j < ch-'A'+1-i; j++) //每行的空格数 { printf(" "); } for(j = 0; j < 2*(i+1)-1; j++) { if(j <= i)//前半段 { printf("%c",ch1+j); //通过 j++实现字母的递增 ch2 = ch1+j-1; //接收累加结束时最大的值 } if(j > i) //后半段 { printf("%c",ch2--); //通过ch--实现递减 } ch1 = 'A'; //重置循环初始值 } printf("\n"); } return 0; }
结果为:
解法二:
#include <stdio.h> #include <stdlib.h> int main() { int line;//代表行数 int i; char letter,ch; printf("请输入一个大写字母:"); scanf("%c",&letter); for(line=0;line<=letter-'A';line++) { for(i=0;i<letter-'A'-line;i++) printf(" "); for(ch='A';ch<=('A'+line);ch++) //升序输出字母 printf("%c",ch); ch-=2; while(ch!='A'-1) printf("%c",ch--); printf("\n"); } return 0; }
解法三:
#include<stdio.h> int main() { int num,i; char c1,c3,c4; char c2='A'; printf("请输入一个金字塔底层的字母:\n"); //提示用户输入数据 scanf("%c",&c1); //读取用户输入的数据 num=c1-c2; for(;c2<=c1;c2++) { for(i=0;i<num;i++) //使用嵌套循环打印金字塔左侧的空格区域 { printf(" "); } for(c4='A';c4<=c2;c4++) //使用嵌套循环打印左侧正序字母 { printf("%c",c4); } for(c4-=2;c4>='A';c4--) //使用嵌套循环打印金字塔右侧倒序字母 { printf("%c",c4); } printf("\n"); //切换金字塔层数 num--; } getchar(); getchar(); return 0; }
解法四:
/* 输出字母金字塔 */ #include <stdio.h> int main() { int i, j; // 循环变量 int n; // 输出的行数 char maxLetr; // 最大的字母 char ch[26]; // 存储26个字母 for(i=0; i<26; i++) { ch[i] = 'A' + i; } printf("请输入一个大写字母作为金字塔最大的英文字母: \n"); scanf("%c", &maxLetr); getchar(); // 吸收回车 // 排除非法输入 while(maxLetr<'A' || maxLetr>'Z') { printf("输入错误,请重新输入\n"); scanf("%c", &maxLetr); getchar(); // 吸收回车 } for(i=0; i<26; i++) // 用以确定行数n { if(ch[i] == maxLetr) { n = i + 1; } } printf("根据您的输入,生成字母金字塔\n"); for(i=1; i<=n; i++) // 外层控制行数 { for(j=0; j<n-i; j++) // 输出空格 { printf(" "); } for(j=0; j<i; j++) // 打印升序字母 { printf("%c",ch[j]); } for(j=0; j<i-1; j++) // 打印降序字母 { printf("%c",ch[i-j-2]); // 唯一的难点: 找规律 } printf("\n"); } return 0; }
解法五:
#include <stdio.h> int main(void) { char letter; char temp; int flag; //相当与一个“指针”,用来判断何时到达中间位置 int i, j; //两层循环因子 i用来循环行数,j用来循环字符输出 printf("input letter:\n"); fflush(stdout); scanf_s("%c", &temp); for (i = 0; i < 5; i++) { flag = 0; letter = temp - 1; for (j = 4; j > i; j--) { printf(" "); } while (flag <= i) { letter += 1; printf("%c", letter); flag++; } flag -= 1; if (flag != 0) { while (flag) { letter -= 1; printf("%c", letter); flag--; } } printf("\n"); } system("pause"); return 0; }
从键盘输入一个整数n,输出n行的字母金字塔.如下图所示的是一个n为6的字母金字塔Input输入一个整数n。Output输出n行的字母金字塔。SampleInput6SampleOutputABBCCCDDDDEEEEEFFFFFFHINT… 从键盘输入一个整数n,输出n行的字母金字塔.如下图所示的是一个n为6的字母金字塔Input输入一个整数n。Output输出n行的字母金字塔。Sample Input6Sample Output A B B C C C D D D D E E E E EF F F F F FHINT每个字符后面都有空格
#include <stdio.h> void main() { unsigned long a[35]={0,1}; unsigned int i,j,n; printf("请输入字母金字塔的层数(最多26层)="); scanf("%d",&n); if(n>26)n=26; for(i=0 ;i<n ;i++,printf("\n")) //i表示层,每次结束后换行 { for(j=i ;j<n ;j++) printf(" "); //加空格维持金字塔形状 for(j=0 ;j<=i ;j++)printf("%c ",'A'+i); //打印字母 } }
结果为:
解法二:
#include <stdio.h> int main() { int i, j; char input, alphabet = 'A'; printf("输入大写字母: "); scanf("%c",&input); for(i=1; i <= (input-'A'+1); ++i) { for(j=1;j<=i;++j) { printf("%c", alphabet); } ++alphabet; printf("\n"); } return 0; }
A BAB CBABC DCBABCD EDCBABCDE FEDCBABCDEF GFEDCBABCDEFG
#include<stdio.h> int main() { int i,j; char c='A'; for(i=0;i<7;i++) { for(j=0;j<7-i;j++) putchar(' '); for(j=0;j<=i;j++) putchar(c+i-j); for(j=j-2;j>=0;j--) putchar(c+i-j); printf("\n"); } return 0; }
结果为:
题目:
输入一个大写的英文字母,输出空心的字母金字塔。
输入格式:
一个大写英文字母。
输出格式:
一个空心的大写英文字母金字塔,其中第1层的“A”在第1行的第40列,列从1开始计数。
输入样例:
E
1
输出样例:
A B B C C D D EEEEEEEEE
解法一:
#include<stdio.h> int main(){ char x; scanf("%c",&x); //输入最大的字母 int z = -1; //计数从第二行开始两次打印之间所需空格数 int a = x; int i = 65; //表示从A开始(ascll码) int q = 1; while(q){ char b = i; for(int k = 39; ;k--){ //注意从第40列打印A则前面需要39个空格 for(int j = k;j>0;j--){ printf(" "); } printf("%c",b); if(k<39){ //用来判断是否不是第一行 for(int w = z;w>0;w--){ if(i!=x){ //判断不是最大字母值 printf(" "); }else{ printf("%c",b); } } printf("%c",b); } if(i!=x){ printf("\n"); } z+=2; i++; b = i; if(i>a){ //如果i大于所输入最大值则跳出循环 q = 0; break; } } } return 0; }
解法二:
#include<stdio.h> /* A 40第0行用i表示 B B 41 C C 42 D D 43 EEEEEEEEE 44 */ int main() { char letter,A='A';//金字塔尖字母A scanf("%c",&letter);//输入金字塔底端字母 int cnt = letter - 'A' + 1;//应该有cnt行输出 int i = 0,line = 40;//第0行有40个字符 while(i < cnt){//如果输出未完成 int idx = line - (2 * i + 1);//第i行字母前应有idx个空格 int bottle = idx;//保留第i行字母前应有空格数idx while(idx--){//第i行第一个字母前输出空格,数量为idx printf(" "); } if(i < cnt - 1){//如果不是最后一行 printf("%c",A);//那么输出第一个字母 bottle++;//idx(索引)+1 while(++bottle < line){//如果不是第i行最后一个字符 printf(" ");//输出空格 } // if(A!='A'){ if(i != 0){//如果不是第一行 printf("%c\n",A);//输出最后一个字母 }else{//如果是第一行 printf("\n");//回车 }//已经完成一行输出 A++;//字母+1 }else{//如果是最后一行 while(bottle++ < line){//用金字塔底端字母补齐该行字符数 printf("%c",letter); } }//完成金字塔底端字母输出 i++;//走到下一行 line++;//下一行的字符数+1 }//输出完成 return 0; }
解法三:
#include <stdlib.h> #include <stdio.h> #include <string.h> //函数功能:输出input层金字塔的第num行的内容。 //注意这里函数需要2个int参数 void a(int input,int num){ int i=1; for(i=1;i<=40-num;i++){ printf(" "); } printf("%c",64+num); if(num>1&&num<input){ int j=1; for(j=1;j<=2*num-3;j++){//打印2n-3个空格 printf(" "); } printf("%c",64+num); }else if(num==input){ int k=1; for(k=1;k<=2*num-2;k++){//打印2n-2个字符 printf("%c",64+num); } } printf("\n"); } int main(void){ char input; scanf(" %c",&input); int input2=input-64;//将题目输入转化成我们需要的输入 int count=1; for(count=1;count<=input2;count++){ a(input2,count); } return 0; }
结果为: