下面的程序是菱形打印的【终结者】,改变下设置,就基本可以满足所有菱形碧核打印的题目。程序主体 for 语句只裤滚有9行,简单而强大 */#include <stdio.h>#include <stdlib.h>#include <string.h>// 这个小函数用来输出 repeatTimes 个字符
#includevoid main(){printf(" *\n")printf(" ***\n")printf(" *****\n")printf("胡慧余 ***\n")printf(" *\n")} 这是最简单的。下面一个稍微复杂一点。#includevoid main(){int i=0,j=0,k=0for(i=0i{for(j=6-ij>=0j--){putchar(' ')...
手机党输入#include"stdio.h"main(){printf(" *\n")printf(" * *\n")printf(" * *\n")printf(" * *\n")printf(" *\n")}
菱形,就是如下所示的图形,总行数与总列数相等:
写一个程序,根据用户输入的总行数,打印出菱形。
这个题目主要是找出规律,考察读者的逻辑思维。
你可以从第一行开始,遍历所有的列,也可以从第一列开始,遍历所有的行。
下面的程序从第一行开始,遍历所有的列。
设菱形的总行数为line,总列数为column,当前行为i,当前列为j。上半部分与下半部分的规律不一样,应该分开讨论。
我们着眼于星号(*),思考什么条件下输出星号,总宴雹结出如下的规律。
1) 对于上半部分(包括中间一行),当前行与当前列满足如下关系输出星号:
j>=(column+1)/2-(i-1) (column+1)/2-(i-1)为第i行最左边的星号
j<=(column+1)/2+(i-1) (column+1)/2+(i-1)为第i行最右边的星号
2) 对于下半部分,当前行与当前列满足如下关系输出星号:
j>=(column+1)/2-(line-i) (column+1)/2-(line-i)为第i行最左边的星号
j<晌凯帆=(column+1)/2+(line-i) (column+1)/2+(line-i)为第i行最右边的星号
不满足上述条件,则输出空格。
于是写出如下的代码:纯文本复制
#include <stdio.h>#include <stdlib.h>int main(){int line // 菱形总行数int column // 菱形总列数int i // 当前行int j // 当前列printf("请输入菱形的行数(奇数):")scanf("%d", &line)if(line%2==0){ // 判断是否是奇数printf("必须输入奇数!\n")exit(1)}column = line // 总行数和总列数相同for(i=1i<=linei++){ // 遍历所有行if(i<(line+1)/2+1){ // 上半部分(包括中间一行)for(j=1j<=columnj++){ // 遍历上半部分的所有列if( (column+1)/2-(i-1)<=j &&j<=(column+1)/2+(i-1) ){printf("*")}else{printf(" ")}}}else{ // 下半部分for(j=1j<=columnj++){ // 遍历下半部分孙唯的所有列if( (column+1)/2-(line-i)<=j &&j<=(column+1)/2+(line-i) ){printf("*")}else{printf(" ")}}}printf("\n")}return 0}
运行结果:请输入菱形的行数(奇数):11
*
***
*****
*******
*********
***********
*********
*******
*****
***
*
/*下面的程序是菱形打印的【终结者】,改变下设置,就基本可以满足所有菱形打印的题目。
程序主体 for 语句只有9行,简单而强大
*/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
// 这个小函数用来输出 repeatTimes 个字符 c
void printChar(char c,int repeatTimes)
{
int i
for(i=0i<repeatTimesi++)
printf("%c",c)
}
/*
特别的函数,获取当前要打印的下一个菱形图案
height : 菱形的高
shapeVariantStep : 变化的步数
baseShape : 菱形的基本图案
row : 当前打印的菱形图案的行坐标。
col : 当前打印的菱形图案的列坐标。
*/
char _buffer_[2]={0}
char* getShape(int height,int shapeVariantStep,char baseShape[],int row,int col)
{
int first = baseShape[0],last = first +(height-1)/2*shapeVariantStep
if(shapeVariantStep==0 || strlen(baseShape)!=1)
return baseShape
else
{
if( first>='0'&&first<='9'&&last<='9' ||
first>='a'&&first<='z'&&last<='z' ||
first>='A'&&first<='Z'&&last<='Z'
)
{
_buffer_[0] = first + ((height-2*abs(row)-1)/2 - abs(col))*shapeVariantStep
_buffer_[1] = '\0'
return _buffer_
}
else
{
return baseShape
}
}
}
int main(int argc, char *argv[])
{
//棚含扮 菱形的图案
char shape[]="*"
// 菱形图案间的空白图案
char space=' '
// 每个图案之间的最小间隔(以一个字符为单位,不足用空白图案填充)
int interval=5
// 菱形的高(要求是奇数)
int height=7
// 菱形是否空心(只有边上的图案)。是:1,否 0
int isHollow=0
/* 特别的参数:设定菱形的图案是变化。
只有指定 shape 为 :
"0","1",...,"9",
或者 "a","b",...,"z",
或者 "老宴A","B",...,"Z" 其中之一,
并且要保证从指定图形开始,后面至少还有连续的:
(height-1)/2*shapevariantStep
个可选的图形,菱形的图形才会是可变的。
*/
int shapeVariantStep = 0
int i,j,k,n
interval = interval <strlen(shape)?strlen(shape):interval
for(i=-(height-1)/2i<=(height-1)/2i++)
{
// 用来输出每行前的空白
printChar(space,abs(i)*interval)
// 这个 for(j) 语句用来输出每行的菱形图案
for(j=-(height-2*abs(i)-1)/2j<=(height-2*abs(i)-1)/2j++)
{
// 如果是非空心,输出所有图案;否则只输出两端的图案。
if(!isHollow || (isHollow &&(j==0 || j==height-2*abs(i)-1)))
{
n=printf("%s",getShape(height,shapeVariantStep,shape,i,j))
//链灶 补齐为到宽度为 interval
printChar(space,interval-n)
}
// 对于空心的菱形,在本应该输出图案的地方,输出空白。
else
{
printChar(space,interval)
}
}
// 这个 for(j) 语句用来输出每行后的空白
printChar(space,abs(i)*interval)
printf("\n")
}
return 0
}
/*
运行结果:
shape[]="*"
space[]=" "
interval=5
height=7
isHollow=0
shapevariantStep = 0
*
***
*****
*******
*****
***
*
shape[]="**"
space[]=" "
interval=5
height=7
isHollow=0
shapevariantStep = 0
**
** ** **
** ** ** ** **
** ** ** ** ** ** **
** ** ** ** **
** ** **
**
shape[]="*"
space[]=" "
interval=5
height=7
isHollow=0
shapevariantStep = 0
...............*...................
..........*....*....*..............
.....*....*....*....*....*.........
*....*....*....*....*....*....*....
.....*....*....*....*....*.........
..........*....*....*..............
...............*...................
shape[]="*"
space[]=" "
interval=0
height=7
isHollow=0
shapevariantStep = 0
*
***
*****
*******
*****
***
*
shape[]="*"
space[]=" "
interval=5
height=11
isHollow=0
shapevariantStep = 0
*
***
*****
*******
*********
***********
*********
*******
*****
***
*
shape[]="*"
space[]=" "
interval=5
height=7
isHollow=1
shapevariantStep = 0
*
* *
* *
* *
* *
* *
*
shape[]="A"
space[]=" "
interval=5
height=17
isHollow=0
shapevariantStep = 1
A
ABA
ABCBA
ABCDCBA
ABCDEDCBA
ABCDEFEDCBA
ABCDEFGFEDCBA
ABCDEFGHGFEDCBA
ABCDEFGHIHGFEDCBA
ABCDEFGHGFEDCBA
ABCDEFGFEDCBA
ABCDEFEDCBA
ABCDEDCBA
ABCDCBA
ABCBA
ABA
A
shape[]="a"
space[]=" "
interval=5
height=17
isHollow=0
shapevariantStep = 1
a
aba
abcba
abcdcba
abcdedcba
abcdefedcba
abcdefgfedcba
abcdefghgfedcba
abcdefghihgfedcba
abcdefghgfedcba
abcdefgfedcba
abcdefedcba
abcdedcba
abcdcba
abcba
aba
a
shape[]="1"
space[]=" "
interval=5
height=9
isHollow=0
shapevariantStep = 2
1
131
13531
1357531
135797531
1357531
13531
131
1
*/
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)