问题
编写一个程序,使用for循环打印中心有名字的心形图案。
解决方案
用户必须输入应在中心打印的名称以及必须打印星星的行数。
算法
请参阅下面给出的算法,以通过以下方式打印心形图案中的名称:使用 for 循环。
第 1 步 - 声明变量。
第 2 步 - 在运行时读取应打印在中心的名称。
第 3 步 - 读取行数。
第 4 步 - 计算名称的长度。
第 5 步 - 打印心形的上半部分。
第 6 步 - 打印下半部分
第 7 步 - 在屏幕上打印名称。
示例
以下是使用 for 来以心形图案打印名称的 C 程序循环 -
现场演示
'#include <stdio.h>
#include <string.h>
int main(){
int i, j, n;
char name[50];
int len;
printf("Enter your name: ");
gets(name);
printf("Enter no of rows: ");
scanf("%d", &n);
len = strlen(name);
// Print upper part of the heart shape with stars
for(i=n/2; i<=n; i+=2){
for(j=1; j<n-i; j+=2){
printf(" ");
}
for(j=1; j<=i; j++){
printf("*");
}
for(j=1; j<=n-i; j++){
printf(" ");
}
for(j=1; j<=i; j++){
printf("*");
}
printf("<p>");
}
// Prints lower triangular part with stars
for(i=n; i>=1; i--){
for(j=i; j<n; j++){
printf(" ");
}
// Print the name on screen
if(i == n){
for(j=1; j<=(n * 2-len)/2; j++){
printf("*");
}
printf("%s", name);
for(j=1; j<(n*2-len)/2; j++){
printf("*");
}
}else{
for(j=1; j<=(i*2)-1; j++){
printf("*");
}
}
printf("</p><p>");
}
return 0;
}</p>
输出
执行上述程序时,会产生以下输出 -
'Enter your name: Tutorials POint
Enter no of rows: 10
***** *****
******* *******
********* *********
**Tutorials POint*
*****************
***************
*************
***********
*********
*******
*****
***
*