• 2019年寒假作业1


    7-1 打印沙漏 (20 分)
    本题要求你写个程序把给定的符号打印成沙漏的形状。例如给定17个“*”,要求按下列格式打印





    所谓“沙漏形状”,是指每行输出奇数个符号;各行符号中心对齐;相邻两行符号数差2;符号数先从大到小顺序递减到1,再从小到大顺序递增;首尾符号数相等。

    给定任意N个符号,不一定能正好组成一个沙漏。要求打印出的沙漏能用掉尽可能多的符号。

    输入格式:
    输入在一行给出1个正整数N(≤1000)和一个符号,中间以空格分隔。

    输出格式:
    首先打印出由给定符号组成的最大的沙漏形状,最后在一行中输出剩下没用掉的符号数。

    输入样例:
    19 *
    输出样例:





    2

    1实验代码#include <stdio.h>
    int main()
    {
    int n;
    char c;
    scanf("%d %c",&n,&c);
    int sum=1;//沙漏需要的字符个数
    int i=1;//层数
    while(sum<=n)
    {
    sum+=2(2(i+1)-1);//2n-1是一层的个数,乘以2代表两层一共需要的
    if(sum=n)
    i++;
    }
    int j,k;
    for(j=0;j<i;j++)//打印上半部分
    {
    for(k=0;k<j;k++)
    printf(" ");
    for(k=0;k<2(i-j)-1;k++)
    {
    printf("%c",c);
    }//输出

    printf(" ");
    }
    for(j=2;j<=i;j++)
    {
    for(k=0;k<i-j;k++)
    printf(" ");
    for(k=0;k<2j-1;k++)
    {
    printf("%c",c);
    }
    printf(" ");
    }
    printf("%d",n-(sum-2
    (2*(i+1)-1)));

    }

    2)设计思路
    第一步: 定义变量n,符号型变量op,scanf语句输入变量值;
    第二步:定义变量a,i,a表示所需要的符号数的最大值,将沙漏以中心为界分成两部分,i表示半个三角的行数,用while循环计算共需要多少个符号,及所得到的行数,以中心为起点,每增加一行符号增加2个;
    第三步:定义变量j,h,j表示行,先打印上半部分,每行的空格数为行数减1,j的初始值是1,则每行打印的符号数为2(i-j)+1个,打印完一行就换行。
    第四步:打印下半部分,打印上部分时已经打印了中心,则下部分从j=2开始,打印空格,打印符号,每行打印2*j-1个,打印完就换行;
    第五步:输出剩余符号数。
    3)本题调试过程碰到的问题及其解决办法
    1.不知如何在符号两边都打印空格;
    解决方案:只需打印符号左边的空格,右边直接换行。
    2.最后输出剩余符号数错误;
    解决方案:a在结束while循环后多加了个2(2(i+1)-1),a需减去1个2(2(i+1)-1),n再减a。
    错误截图:
    4.运行截图

  • 相关阅读:
    Android笔记之interface
    Android笔记之数据库操作
    Android笔记之sharedPrefenses
    Android笔记之数组的使用
    Android笔记之TableLayout布局
    Android笔记之Progress进度条
    StringBuffer调整空间
    git创建与合并分支
    git版本回退
    github设置分支push权限
  • 原文地址:https://www.cnblogs.com/xudo/p/10410143.html
Copyright © 2020-2023  润新知