1.C语言打印菱形图案
题目描述:
输入一个正整数 n,并输出一个菱形,这个菱形有 2n−1 行,第一行有 2 个字母 A,之后的 n−1 行每行字母 A 的数量会递增 2 个,后面的 n+1 行至 2n−1 行,每行字母 A 的数量会递减 2 个,同时,我们需要在每行前输出一定数量的空格,以保证菱形居中,注意末尾不要有多余的输出。
输入格式:
输入一个正整数 n。(0<n<40)
输出格式:
样例输入:2
样例输出:
AA
AAAA
AA
样例输入:3
样例输出:
AA
AAAA
AAAAAA
AAAA
AA
案例分析:
首先菱形有2n-1行,在这里我们先只看前n行,先实现前n行的打印,然后后面对称输出即可。
分析:第1行有2个字母A,第2行4个,第3行6个,第j行就有2j个,仔细观察会发现第j行会先打印 n - j 个空格,然后在打印2j个字母 A ,最后换行,这样这一行的输出就完成了。
前n行输出打印实现:
#include<stdio.h>
int main(){
int n;
int i,j,k;
scanf("%d",&n);//输入n
for(i = 1; i <= n; i++){//表示从第1行到第n行
for(j = 1; j <= n-i; j++){//从第1列开始,这一行需要打印 n-i 个空格
printf(" ");
}
for(k = 1; k <= 2*i; k++){//实现打印每一行需要打印的字符数量
printf("A");
}
printf("\n");//每打印完成一行则换行
}
return 0;
}
运行结果:
n+1–2*n-1行的打印实现:
我们会发现第k行打印的空格数量为 k - n,每一行需要打印的字符数量则为 2*n - 2*(i - n)个//这里是从第n+1行开始,每一行都比第n行少了2*(i-n)个字符。
n+1行—2*n行打印实现代码:
for(i = n+1; i <= 2*n-1; i++){//表示从第n+1--2*n+1行
for(j = 1; j <= i-n; j++){//从第一列开始,打印 i - n 个空格
printf(" ");
}
for(k = 1; k <= 4*n-2*i; k++){//打印每一行的字符数量
printf("A");
}
printf("\n");//每打印一行换行
}
总代码实现:
#include<stdio.h>
int main(){
int n;
int i,j,k;
scanf("%d",&n);//输入n
for(i = 1; i <= n; i++){//表示从第1行到第n行
for(j = 1; j <= n-i; j++){//实现每一行需要打印的空格数量
printf(" ");
}
for(k = 1; k <= 2*i; k++){//实现打印每一行需要打印的字符数量
printf("A");
}
printf("\n");//每打印完成一行则换行
}
for(i = n+1; i <= 2*n-1; i++){//表示从第n+1--2*n+1行
for(j = 1; j <= i-n; j++){//从第一列开始,打印 i - n 个空格
printf(" ");
}
for(k = 1; k <= 4*n-2*i; k++){//打印每一行的字符数量
printf("A");
}
printf("\n");//每打印一行换行
}
return 0;
}
运行结果:
2.打印沙漏型图案
题目描述:
输入一个正整数 n,并输出一个沙漏形,这个沙漏形有 2n+1 行,第一行有 2n+1 个字母,其中前 n+1 个字符是从 A 开始依次递增的,而后 n 个字符是由第 n+1 个字符开始依次递减的。之后的 n行每行会少头尾两个字母。再之后的 n 行则正好是前 n 行反过来输出的结果。注意末尾不要有多余的输出。
输入: 输入一个正整数 n(0<n<26)
输出:按照样例输出
样例输入:
2
样例输出:
ABCBA
BCB
C
BCB
ABCBA
案例分析:
首先我们分析每一行的字符数 ,第一行有2n+1个字符,之后每一行都会比自己所在行的上一行少两个字符,所以第k行比第一行少了 (k-1) * 2 个字符,第k行就会有2n-1-2*(k-1) 个字符;
然后,第一行打印了0个空格,第二行1个,三行2个,…第k行就是k-1个;
其次就是打印的字符从什么开始,第一行从‘A’,第二行‘B’,…第k行就是 A+(k-1); ( k < 27)
代码实现:
for(i = 0; i <= n; i++){
for(j = 1; j <= k-1; j++){
printf(" ");
}//打印每一行的空格数量
for(j = k-1; j <= n; j++){
printf("%c",symbol+j);
}//打印每一行前n个字符
for(j = n-1; j >= k-1; j-- ){
printf("%c",symbol+j);
}//打印每一行(n+1)-(2*n+1)个字符
printf("\n");//打印一行换行
k++;
}
运行结果:
(n+1)-(2*n+1)行代码实现:
k = n;
for(i = 2; i <= n+1; i++){//后面只有n-1行代码,把第n+1行看成第2行,从这一行开始
for(j = 1; j <= k-1; j++){
printf(" ");//k=n,第k行比第n行少机就打印几个空格
}
for(j = k-1; j <= n; j++){
printf("%c",symbol+j);//打印每一行的前n个字符
}
for(j = n-1; j >= k-1; j--){
printf("%c",symbol+j);//打印每一行(n+1)-(2*n+1)个字符
}
printf("\n");
k--;
}
总代码:
#include<stdio.h>
int main(int argc,char *argv[]){
int n;
int i,j,k = 1;
char symbol = 'A';
scanf("%d",&n);
for(i = 0; i <= n; i++){
for(j = 1; j <= k-1; j++){
printf(" ");
}
for(j = k-1; j <= n; j++){
printf("%c",symbol+j);
}
for(j = n-1; j >= k-1; j-- ){
printf("%c",symbol+j);
}
printf("\n");
k++;
}
k = n;
for(i = 2; i <= n+1; i++){
for(j = 1; j <= k-1; j++){
printf(" ");
}
for(j = k-1; j <= n; j++){
printf("%c",symbol+j);
}
for(j = n-1; j >= k-1; j--){
printf("%c",symbol+j);
}
printf("\n");
k--;
}
return 0;
}
运行结果:
最后创作不易,记得点赞收藏哦!