标题:刚接触C,遇到问题求解
只看楼主
乌云不可爱
Rank: 1
来 自:德州
等 级:新手上路
帖 子:1
专家分:0
注 册:2015-11-8
 问题点数:0 回复次数:1 
刚接触C,遇到问题求解
原题:
Description

已知每月1号是星期几,输出当月月历。每个月都按30天算。
Input

输入为一个整数n,1<=n<=7。n为1表示本月1日是星期一,n为2表示1号为星期二,以此类推,n为7时表示1日为星期天。
Output

输 出月历。月历的第一行为表头"Sun Mon Tue Wen Thu Fri Sat",表示星期日~星期六。第二行开始的每行为一个星期,把每月的1日~30日的阿拉伯数字填入其中。每列占3个字符,其中的数字右对齐,每两列之间 一个空格分隔,每行最后一个数字后面不要有空格。1日不为星期天的前面补足空格,30日后面不输出空格。
Sample Input

3

Sample Output

Sun Mon Tue Wen Thu Fri Sat
              1   2   3   4
  5   6   7   8   9  10  11
 12  13  14  15  16  17  18
 19  20  21  22  23  24  25
 26  27  28  29  30

HINT

首先分析清楚输出和日期之间对应的规律,用循环内嵌套判断条件很容易实现不同格式日期的输出。


我的代码:
#include<stdio.h>
int main()
{
    int x, i, j, T, t;
    scanf("%d", &x);
    printf("Sun Mon Tue Wen Thu Fri Sat\n");
    if(x==6)
        T=6;//T为日历的行数
    else
        T=5;
    for(i=1; i<=x; i++)//用循环来空出前面的空格
    {
        if(i==1)
            printf("   ");
        else
            printf("    ");
    }
    for(t=1; t<=T; t++)
    {
        if(t==1)//先讨论第一行和最后一行的情况,最后再讨论中间几行
        {
            for(j=1; j<=(7-x); j++)
            {
                printf("   %d", j);
            }
            printf("\n");
        }
        if(t==T)//先讨论第一行和最后一行的情况,最后再讨论中间几行
        {
            for(j=(7-x)+7*(T-2)+1; j<=30; j++)
            {
                if(j==30)
                {
                    printf(" %d\n", j);
                }
                else
                {
                    printf(" %d ", j);
                }
            }
        }
        if(t>1&&t<T)//讨论中间几行
        {
            for(j=(7-x)+7*(t-2)+1; j<=(7-x)+7*(t-1); j++)
            {
                if(j<10&&j==(7-x)+7*(t-2)+1)
                    printf("  %d", j);
                if(j<10&&j!=(7-x)+7*(t-2)+1)
                    printf("   %d", j);
                if(j<10&&j==(7-x)+7*(t-1))
                    printf("\n");
                if(j>=10&&j==(7-x)+7*(t-2)+1)
                    printf(" %d", j);
                if(j>=10&&j!=(7-x)+7*(t-2)+1)
                    printf("  %d", j);
                if(j>=10&&j==(7-x)+7*(t-1))
                    printf("\n");
            }
        }
    }
    return 0;
}


运行出来以后,当输入1~6都没问题,输入7的时候格式会乱,不知道错在哪里,求大神帮忙,感激不尽!
搜索更多相关主题的帖子: 星期六 阿拉伯 
2015-11-08 11:02
lzl123321
Rank: 3Rank: 3
等 级:论坛游侠
威 望:1
帖 子:41
专家分:148
注 册:2015-10-15
得分:0 
  for(i=1; i<=x; i++)//用循环来空出前面的空格
    {
        if(i==1)
            printf("   ");
        else
            printf("    ");
    }
..........................................
n==7时,此时循环其次,输出七次“   ”,字符下面肯定空一行了
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    for(t=1; t<=T; t++)//用x=7,T=5测试流程
    {
        if(t==1)//先讨论第一行和最后一行的情况,
        {
            for(j=1; j<=(7-x); j++)//t=1, for(j=1;j<=0;j++)------这里已经有问题了
            {
                printf("   %d", j);
            }
            printf("\n");
        }
        if(t==T)//先讨论第一行和最后一行的情况,最后再讨论中间几行
        {
            for(j=(7-x)+7*(T-2)+1; j<=30; j++)// for(j=36; j<=30;j++)-----同样的问题
            {
                if(j==30)
                {
                    printf(" %d\n", j);
                }
                else
                {
                    printf(" %d ", j);
                }
            }
        }

首行与尾行都出现错误,最后肯定输出有问题的!

[此贴子已经被作者于2015-11-8 21:20编辑过]

2015-11-08 14:26



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-459002-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.375929 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved