描述 :* 组成的菱形图案,用户输入一个奇数n,表示菱形的最大宽度(即中间一行的星号数)。程序应该使用while循环生成这个菱形图案。
1.利用while循环实现操作
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main(int argc, const char *argv[])
{
int n,i=1,j=1,b,c;
printf("请输入一个奇数:");
scanf("%d",&n);
b=(n+1)/2;
while(i<=b){
j=i;
while(j<b){
printf(" ");
j++;
}
c=1;
while(c<=i*2-1){
printf("*");
c++;
}
printf("\n");
i++;
}
while(i<=n){
j=1;
while(j<=i-b){
printf(" ");
j++;
}
c=1;
while(c<=n-(i-b)*2){
printf("*");
c++;
}
printf("\n");
i++;
}
return 0;
}
2.利用数组和for循环实现操作
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main(int argc, const char *argv[])
{ int n,i,j,a=0,b=0;
printf("请输入一个奇数:");
scanf("%d",&n);
char s[n][n];
for(i=0;i<n;i++){
for(j=0;j<n;j++){
s[i][j]=' ';
}
}
for(i=(n-1)/2;i>=0;i--){
for(j=a;j<n-b;j++){
s[i][j]='*';
s[n-i-1][j]='*';
}
a++;
b++;
}
for(i=0;i<n;i++){
for(j=0;j<n;j++){
printf("%c",s[i][j]);
}
printf("\n");
}
return 0;
}
3.利用for循环和if语句实现操作
分析过程:运用数学思维将问题转化成直角坐标系菱形区域的求解,首先建立一个直角坐标系,将x轴用i代替,y轴用j代替;其次做出一个边长为n的正方形;将菱形ABCD的四条边用方程的形式表示出,直线AB、CD、AC、BD围起的区域就是 * 的位置,菱形外的区域就是空格的位置。
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main(int argc, const char *argv[])
{
int i,j,n,a,b;
printf("请输入一个奇数:");
scanf("%d",&n);
a=(n-1)/2,b=(n-1)*3/2;
for(i=0;i<n;i++){
for(j=0;j<n;j++){
if(j>=i-a&&j<=i+a&&j>=-i+a&&j<=-i+b){
printf("*");
}else{
printf(" ");
}
}
printf("\n");
}
return 0;
}
————————————————