文章目录
20201022-成信大-C语言程序设计-20201学期《C语言程序设计B》C-trainingExercises11
P211

/*
编写一程序P211.C实现以下功能
根据输入的n在屏幕上显示对应的以#组成的菱形图案。
编程可用素材:
printf("Please input n: ");
程序的运行效果应类似地如图1和图2所示,图1中的1和图2中的5是从键盘输入的内容。
Please input n: 1
#
###
#
图1 程序运行效果示例(n=1时)
Please input n: 5
#
###
#####
#######
#########
###########
#########
#######
#####
###
#
*/
#include <stdio.h>
/*
函数声明
*/
void printfBlank(int n);
void printfDiamond(int n);
int main(void)
{
int data, i;
printf("Please input n: ");
scanf("%d", &data);
// 上三角
for (i = 0; i <= data; i++)
{
// 打印空格
printfBlank(data - i);
// 打印#号
printfDiamond(i * 2 + 1);
// 打印回车
printf("\n");
}
// 下三角
for (i = data ; i > 0; i--)
{
// 打印空格
printfBlank(data - i + 1); // 从一个空格开始打印
// 打印#号
printfDiamond(i * 2 - 1); // 从2*data-1个开始打印#
// 打印回车
printf("\n");
}
return 0;
}
/*
函数实现
用的于输出n个空格
*/
void printfBlank(int n)
{
int i;
for (i = 0; i < n; i++)
{
printf(" ");
}
}
/*
函数实现
用于输出n个#
*/
void printfDiamond(int n)
{
int i;
for (i = 0; i < n; i++)
{
printf("#");
}
}
另一种思路,见代码如下
#include <stdio.h>
/*
这个程序,算法上还没有完全想清楚
1. 可以一行一行地分析
2. 可以"%*.*s"来输出,但s串要足够长
2.1 第一个*即位宽,第二个*即输出字符个数,【位宽-字符数,即前面补充的空格数】
2.2 转化为对整个一行【宽度】的控制,以及【#数】的控制,相减即为之前的【空格】补位的数量
2.3 整个一行,仍然由三个部分构成:【空格+#+回车】
*/
int main(int argc,char *argv[])
{
int i,n;
const char *s = "########################################";
printf("Please input n: ");
scanf("%d", &n);
// 上三角
for ( i = 1; i <= n+1; i++)
{
printf("%*.*s\n", n+i,2*i-1, s);
}
// 下三角
for ( i = n; i >=1 ; i--)
{
printf("%*.*s\n", n+i,2*i-1, s);
}
return 0;
}
这个思路要更简单一些,但要求大家对printf格式化输出里的
%*.*s
要有深入的理解。
P212

/*
编写一程序P212.C实现以下功能
根据输入的n(约定n>1)在屏幕上显示对应的图案。
编程可用素材:
printf("Please input n: ");
程序的运行效果应类似地如图1和图2所示,图1中的2和图2中的5是从键盘输入的内容。
Please input n: 2
a
b b
a
图1 程序运行效果示例(n=2时)
Please input n: 5
a
b b
c c
d d
e e
d d
c c
b b
a
图2 程序运行效果示例(n=5时)
分析
1 任意一行:若干空格 + 一个字母 + 若干空格 + 一个字母 + 回车
2 字符随行的变化而自增
3 前部空格,上三角是减少,下三角是增加
4 中间空格,上三角是增加,下三角是减少
*/
#include <stdio.h>
void printfBlank(int n);
void printfAlpha(int n);
int main(void)
{
int n;
int i;
printf("Please input n: ");
scanf("%d", &n);
// 上三角
for (i = 0; i < n;i++)
{
printfBlank(n - i - 1);
printfAlpha(i);
printfBlank(2 * i - 1);
if(i==0)
{
}
else
{
printfAlpha(i);
}

最低0.47元/天 解锁文章
6264

被折叠的 条评论
为什么被折叠?



