题目:输入一个奇数n;输出由*组成的n阶实心菱形。
源程序:
#include <stdio.h>
int main(void)
{
int n,a,k,i,j;
scanf("%d",&n); //提示输入n
a=(n+1)/2; //a为边长
//上半行
for(i=1;i<=a;i++){
for(j=1;j<=a-i;j++){
printf(" "); //输出空格
}
for(k=1;k<=2*i-1;k++){
printf("*"); //打印*
}
printf("\n"); //换行
}
//下半行
for(i=n-a;i>=1;i--){
for(j=1;j<=a-i;j++){
printf(" "); //输出空格
}
for(k=1;k<=2*i-1;k++){
printf("*"); //打印*
}
printf("\n"); //换行
}
return 0;
}
解题要点:
1.明确边数,每行空格数以及每行打印*的个数。并正确写出循环条件。
2.分上下两半行来编写程序。
3.运用了for循环嵌套。循环套循环。
同类题型:课本P97 第九题。
该题与acwing上不同的是,注意在输出*时:printf("* ");有一个空格。并且对于上半行空格输出的循环条件是:j<=n-2*i+1 ,下半行:j<=n-(2*i-1)。
源程序:
#include <stdio.h>
int main(void)
{
int n,i,j,k;
printf("Enter n:");
scanf("%d",&n);
k=(n+1)/2; //边长
for(i=1;i<=k;i++){
for(j=1;j<=n-2*i+1;j++){
printf(" ");
}
for(j=1;j<=2*i-1;j++){
printf("* ");
}
printf("\n");
}
for(i=n-k;i>=1;i--){
for(j=1;j<=n-(2*i-1);j++){
printf(" ");
}
for(j=1;j<=2*i-1;j++){
printf("* ");
}
printf("\n");
}
return 0;
}