20201022-成信大-C语言程序设计-20201学期《C语言程序设计B》C-trainingExercises11

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);
        }
        
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值