C 练习实例23
题目:打印出如下图案(菱形)。
* *** ***** ******* ***** *** *
程序分析:先把图形分成两部分来看待,前四行一个规律,后三行一个规律,利用双重for循环,第一层控制行,第二层控制列。
程序源代码:
实例
// Created by www.runoob.com on 15/11/9.
// Copyright © 2015年 菜鸟教程. All rights reserved.
//
#include <stdio.h>
int main()
{
int i,j,k;
for(i=0;i<=3;i++) {
for(j=0;j<=2-i;j++) {
printf(" ");
}
for(k=0;k<=2*i;k++) {
printf("*");
}
printf("\n");
}
for(i=0;i<=2;i++) {
for(j=0;j<=i;j++) {
printf(" ");
}
for(k=0;k<=4-2*i;k++) {
printf("*");
}
printf("\n");
}
}
以上实例输出结果为:
* *** ***** ******* ***** *** *
C 语言经典100例
红途
471***417@qq.com
参考解法:
#include <stdio.h> int main() { int i, j, space_num = 3, start_num = 1; for ( i = 1; i <= 7; i++ ) { for ( j = space_num; j > 0; j-- ) printf( " " ); for ( j = start_num; j > 0; j-- ) printf( "*" ); if ( i > 7 / 2 ) { space_num++; start_num -= 2; } else { space_num--; start_num += 2; } printf( "\n" ); } return(0); }红途
471***417@qq.com
fairyice
202***9997@qq.com
参考方法:
#include <stdio.h> int main() { int i,j,k,stars,spaces; for(i=1;i<8;i++) { if(i<5) { stars=i*2-1; spaces=4-i; }else{ stars=7-(i-4)*2; spaces=i-4; } for(k=1;k<=spaces;k++) { printf(" "); } for(k=1;k<=stars;k++) { printf("*"); } printf("\n"); } return 0; }fairyice
202***9997@qq.com
Xipron
153***179@qq.com
参考方法:
#include <stdio.h> int main() { int i=1,j; for(j=5;j>1;j--) { while(i<j) { printf(" "); i++; } int k=1; while(k<10-2*j) { printf("*"); k++; } while(i>0) { printf(" "); i--; } printf("\n"); } for(j=1;j<5;j++) { while(i<j) { printf(" "); i++; } int k=1; while(k<10-2*j) { printf("*"); k++; } while(i>0) { printf(" "); i--; } printf("\n"); } return 0; }Xipron
153***179@qq.com
Andy Wayne
and***ayne@foxmail.com
参考方法:
#include <stdio.h> #define MAX 10 int main() { int i, j; int ctl = 0; if(MAX % 2 != 0) ctl = MAX + 1; else ctl = MAX; for(i = 1; i <= MAX; i++) { for(j = 1; j <= MAX; j++) { if(i <= ctl/2) { if(j > ctl/2 - i && j < ctl/2 + i) printf("*"); else printf(" "); } else { if(j > i - ctl/2 && j < ctl/2 + ctl - i) printf("*"); else printf(" "); } } printf("\n"); } return 0; }Andy Wayne
and***ayne@foxmail.com
内拉小付
fux***afx@163.com
参考方法:
#include<stdio.h> int main() { int s[7][7]={ {0,0,0,1,0,0,0}, {0,0,1,1,1,0,0}, {0,1,1,1,1,1,0}, {1,1,1,1,1,1,1}, {0,1,1,1,1,1,0}, {0,0,1,1,1,0,0}, {0,0,0,1,0,0,0}, }; int i,j; for(i=0;i<7;i++) { for(j=0;j<7;j++) { if(s[i][j]==1) printf("*"); else printf(" "); } printf("\n"); } return 0; }内拉小付
fux***afx@163.com
TSD
210***2129@qq.com
参考方法:
#include<stdio.h> int main(void) { int i, j; int n; printf("我也不知道你要打印多大的图案:"); scanf("%d", &n); for (i = 0; i < 2*n+1; i++) { for (j = 0; j < 2*n+1; j++) { if (i+j >= n && i+j <= 3*n && j-i <= n && i-j <= n) { printf("*"); } else printf(" "); } putchar(10); } return 0; }TSD
210***2129@qq.com
HIT_CCC
117***2963@qq.com
参考方法:
#include<stdio.h> int main(void) { int i,j,k; for(i = 0;i <= 3; i++) { for(j = 1;j <= 3 - i; j++) printf(" "); for(k = 1; k <= 2*i+1; k++) printf("*"); printf("\n"); } for(i = 1; i <= 3; i++) { for(j = 1; j <= i; j++) printf(" "); for(k = 1; k <= 7-2*i; k++) printf("*"); printf("\n"); } return 0; }HIT_CCC
117***2963@qq.com
huanhuan
992***291@qq.com
找到行数与列数之间的关系可以更好的简化程序。
参考方法:
#include<stdio.h> #include<stdlib.h> #include<math.h> int main() { int i,j; for(i=0;i<7;i++) { for(j=0;j<7-fabs(i-3.0);j++) if(j<fabs(i-3.0)) putchar(' '); else putchar('*'); putchar('\n'); } system("pause"); }huanhuan
992***291@qq.com
JCGZ1314520
JCG***1452@163.COM
利用等差数列:
/*************************** 实例中的空格可以看作等差数列(空格数)前4项{4,3,2,1}=an3; 后3项为{2,3,4}=an4; 前四项" * "也是等差数列(个数){1,3,5,7}=an1; 后三项的等差数列{5,3,1}=an2; ***************************/ #include<stdio.h> int main(void) { int i,j,an1=0,an2=0,an3=0; int k=0,n=1; int an4=2; for(i=1;i<8;i++) { an3=5-i;//an3=4+(i-1)*(-1) for(k=0;k<an3;k++) { printf(" "); } if(i<5) { an1=2*i-1;//an1=1+(i-1)*2 for(j=0;j<an1;j++) { printf("*"); } } else { for(k=0;k<an4;k++) { printf(" "); } an2=7-2*n;//an2=5+(n-1)*(-2) for(j=0;j<an2;j++) { printf("*"); } an4++; n++; } printf("\n"); } return 0; }JCGZ1314520
JCG***1452@163.COM
侯白丁
534***947@qq.com
利用坐标系;
横向 i 轴,左到右递增,纵向 j 轴,上到下递增。
将所有的 * 取点得到一个坐标系上菱形的区域 ,菱形区域的四个顶点分别为(3,0)、(0,3)、(6,3)、(3.6),得到四条直线围成的区域,四条直线的 i,j 关系分别是:
题所求 * 即为四条直线围成区域内以及边界上的点;该区域内的点满足以下条件:
根据以上四个条件进行遍历;
#include<stdio.h> int main() { int i, j; //行,列 for (i = 0; i < 7; i++) { for (j = 0; j < 7; j++) { if (i + j >= 3 && i + j <= 9 && j - i >= -3 && j - i <= 3) { printf("*"); } else printf(" "); } printf("\n"); } return 0; }侯白丁
534***947@qq.com