C语言图形输出习题解析
-
【
4.4
】输入
n
p>
值,输出如图所示矩形。
【
4.5
】输入
n
值,输出如图所示平行四边形。
【
4.6
】输入
n
值,输出如图所示高为
n
的等腰三角形。
p>
【
4.7
p>
】输入
n
值,输出如图所示高为
n
的等腰三角形。
<
/p>
【
4.8
】输入
n
值,输出如图所示高和上底均为
n
的
等腰梯形。
【
4.9
】输入
n
值,输出如图所示
高和上底均为
n
的等腰空心梯形。
【
4.10
】输入
n
值,输出如图所示边长为
n<
/p>
的空心正六边型。
< br>【
4.11
】输入
n
值,输出如图所示图形。
【
4.12
】输入
n
值,输出如图所示图形。
【
4.13
】输入
n
值,输出如图所示图形。
【
4.14
】输入
n
< br>值,输出如图所示图形。
【
4.15
】输入
n
值,输出如图所示图形。
<
/p>
【
4.16
】输入
n
值,输出如图所示图形。
(例为
n
=6
时)
【
4.17
】编写程序,输出如图所示
sin(x)
函数
0
到
2
π
的图形。
【
< br>4.18
】编写程序,在屏幕上输出一个由
*
号围成的空心圆。
【
4.19
】编写程序,在屏幕上绘制如图余弦曲线和直线。若屏
幕的横向为
x
轴,纵向为
y
轴,
在屏幕上显
示
p>
0
~
360
度的<
/p>
cos(x)
曲线与直线
x=f(y)=
45*(y-1)+31
的迭加图形。
其中
cos
图形用
表示,
f(y)
用
表示,
在两个图形的交点处则用
f(y)
图形的符号。
4.20
】编写程序,输出如图所示
高度为
n
的图形。
4.21
】编写程序,输出如图所示
高度为
n
的图形。
4.22
】输入
n
值,输出如图所示图形。
【
【
【
<
/p>
【
4.23
】输入
n
值,输出如图所示的
n
×
n(n<10)
阶螺旋方阵。
1 2 3 4 5
16 17 18 19 6
15 24 25 20 7
14 23 22 21 8
13 12 11 10 9
图
4.19
n=5
时的螺旋方阵
【
4.24
】输入
n
值,输出如图所示回型方阵。
【
4.25
】输出如图所示的数字金字塔
【
4.26
】输入
n
值,输出如图所示图形。
【
4.27
】输入顶行字符和图形的高,输出如图所示图形。
【
4.2
8
】输入首字符和高后,输出如图所示回型方阵。
A A A A A
A B B
B A
A B C B A
A B B B A
A A A
A A
图
4.24
首字符为
'A'
、高为
5
的方阵
【
4.29
】输入中心字符和高后,输出如图所示回型方阵。
X X X
X X
X Y Y Y X
X Y Z Y X
X Y Y
Y Y
X X X X X
图
4.25
中心字符为
'Z'
、高为
5
的方阵
p>
【
4.30<
/p>
】编写程序,输出如图所示上三角形式的乘法九九表。
【
4.3
1
】编写程序,输出如图所示下三角乘法九九表。
【
4.4
】分析:打印此图形用两重循环实现。
图形要重复
n
行,故采用循环结构实现循环
< br>n
次,循环体内部打印一行
'*'
号
,
把上述思路表
示为:
for(i=1
;
i<
=n
;
i++)
打印一行
'*'
号;
每行有
p>
n
个
'*'
号,再
采用循环结构实现
n
次循环,循环内部用格式输出语句打印一个
'*'
号,
即:
for(j=1
;
j<=n
;
j++)
printf(
;
按照上述思路,实现打印矩形。
参考答案:
main()
{ int i,j,n
;
printf(
;
scanf(
;
for(i=1
;
i<=n
;
p>
i++)
{ for(j=1
;
j<=n
;
j++)
printf(
;
printf(
;
}
}
【
4
.5
】分析:此图形和上题的区别在于在每一行先要打印空格,然后再打印
n
个
'*'
号
,
在上
题第一层循环体内打印
'*'
号的循环前面增加一个循环打印空格。
每行空格的个数
是逐行减少
的,由于第一层循环的控制变量
i
< br>是逐行增
1
,所以用一个固定值的数减去
i
就可实现对空
格个数的控制,在此题中固定值可使用
变量
n
。
参考答案:
main( )
{ int
i,j,n
;
printf(
;
scanf(
;
for(i=1
;
i<=n
;
p>
i++)
{ for(j=1
;
j<=n-i
;
j++)
printf(
;
< br>for(j=1
;
j<=n
;<
/p>
j++)
printf(
;
printf(
;
}
}
【
4
.6
】分析:此题和上题的区别在于每行
'*'
的数量逐行减少,可以使用上题控制空格个数
的思路来控制
'*'
号的个数,请注意每行
'*'
的个数都是奇数。
参考答案:
main( )
{ int
i,j,n
;
printf(
;
scanf(
;
for(i=1
;
i<=n
;
p>
i++)
{ for(j=1
;
j<=n-i
;
j++)
printf(
;
< br>for(j=1
;
j<=2*i-1
;
j++)
printf(
;
printf(
;
}
}
【
4
.7
】分析:此题图形是第
3
题图形的
垂直反转,在编程上我们可以变换一个思路。对于
图形中的第
i
行(
1
≤
i<
/p>
≤
n
)
,共需要
输出
2n-i
个字符,其中前面的
i-
1
个字符为空格,后面
的字符为
'*'
号。按照这一思路可以编写出如下程序。
参考答案:
main( )
{ int i,j,n
;
printf(
;
scanf(
;
for( i=1
;
i<=n
;
i++ ) /*
重复输出图形的
n
行
*/
{ for( j=1
;
j<=2*n
-i
;
j++ ) /*
重复输出图形一行中的每个字符
*/
if(j<=i-1)
printf(
;
/*
输出前面的空格
*/
else printf(
;
/*
输出后面的
*
< br>号
*/
printf(
;
}
}
【
4
.8
】分析:此题和第
3
题的区别仅是
每行的
'*'
个数增加
n-1
个。
参考答案:
main( )
{ int
i,j,n
;
printf(
;
scanf(
;
for(i=1
;
i<=n
;
p>
i++)
{ for(j=1
;
j<=n-i
;
j++)
printf(
;
< br>for(j=1
;
j<=2*i-1+(n-1)
;
j++)
printf(
;
printf(
;
}
}
【
4
.9
】分析:对于空心图形,我们可以在上题的基础上,对于打印
'*'
号的循环进行修改,
仅在循环开始值
< br>(j=1)
和循环结束值
(j=2*(i-1)+n)<
/p>
时打印
'*'
号,其它位置都打印空格。
另一种
思路是将每行打印的空格和
'*'
的两个循环合为一体考虑,
在判断出需要打印
'*'
的两个位置及
第一行和最后一行相应位置外,其余位置都打印空格。
p>
参考答案:
main( )
{ int
i,j,n
;
printf(
;
scanf(
;
for(i=1
;
i<=n
;
p>
i++)
{ for(j=1
;
j<=2*n+i-3
;
j++)
if(j==n-i+1 || j>n-i+1 && (i==1||i==n))
printf(
;
else
printf(
;
printf(
;
}
}
【
4
.10
】分析:此图形可以理解为两个空心梯形反向连接而成,因此可以利用上题的思路
进
行输出。
参考答案:
main( )
{ int i,j,n
;
printf(
;
scanf(
;
for(i=1
;
i<=n
;
p>
i++) /*
输出图形的上半部分
(<
/p>
含中心行
) */
{ for(j=1
;
j<=2*n-i-1
;
j++)
if(j==i)
printf(
;
else
printf(
;
printf(
;
}
for(i=1
;
<
br>号的位置不同,编程时要找出应打印
i
;
i++) /*
输出图形的下半部分(不含中心行)
*/
{ for(j=1
;
j<=n+i
;
j++)
if(j==n-i)
printf(
;
else
printf(
;
printf(
;
}
}
【
4.1
1
】分析:此题与上题的区别在于打印
'*'
'*'
号的位
置和两个循环变量
i
、
j
以及行数
n
的关系。
-