[问题]我也发习题帖

C、C++和Java语言
回复
robert870119
帖子: 768
注册时间: 2007-03-05 20:45
送出感谢: 0
接收感谢: 0

[问题]我也发习题帖

#1

帖子 robert870119 » 2007-11-27 22:48

两个习题,都搞了半天搞不定的。。
哪位给个提示? 给个答案?

代码: 全选

Exercise 7-2: Write a program to perform date arithmetic such as how many days 
there are between 6/6/90 and 4/3/92. Include a specification and a code design.

这道题据说要用到time.h、difftime之类的。。这些书上都没讲到啊。。 还有一说用 结构体,也没讲到。。
要不自己全重编,要考虑的就很多,比如闰年、两个日期是否是在闰年,在3月前还是3月后。。总之感觉要很多判断语句,也不好写。。   但这题现在倒不急,慢慢会学到那2个方法吧。

代码: 全选

Exercise 8-1: Print a checker board (8-by-8 grid). Each square should be 5 -by-3 
characters wide. A 2-b y-2 example follows:
+-----+-----+ 
|     |     | 
|     |     | 
|     |     | 
+-----+-----+ 
|     |     | 
|     |     | 
|     |     | 
+-----+-----+


这个题,做不来啊。很郁闷,数组最终的表示不会(不用数组?)。要是行特定,而列遍历,该怎么表示?
printf能重复在一个地方打印吗。。。


这些问题很2,没法,自学C,没正规老师教。。 习题没答案,做出来了,可以运行,看结果,做不出来,就只好到这里了求助了。。

望各位帮个忙啊。谢谢 。
头像
madoldman
帖子: 599
注册时间: 2006-02-27 20:19
来自: works system
送出感谢: 0
接收感谢: 0
联系:

#2

帖子 madoldman » 2007-11-28 14:57

第一个题目,日期按月/日/年的格式算的,不用判断什么闰月问题,先把日期转成time_t,就是从1900年开始到该时间的秒数,然后两个数相减,再除以一天的秒数就可以了

代码: 全选

#include <time.h>
#include <stdio.h>
int main(void)
{
        struct tm tm1, tm2;
        int seconds;
        tm1.tm_mday = 6;
        tm1.tm_mon = 6;
        tm1.tm_year = 90;
        tm1.tm_hour=0;
        tm1.tm_min=0;
        tm1.tm_sec=0;
        tm2.tm_mday = 3;
        tm2.tm_mon = 4;
        tm2.tm_year = 92;
        tm2.tm_hour=0;
        tm2.tm_min=0;
        tm2.tm_sec=0;
        seconds = mktime(&tm2) - mktime(&tm1);
        printf("There are %d days between 6/6/90 and 4/3/92.\n", seconds / 24 /60 / 60);
        return 0;
}



第二个题目,不用什么数组吧,直接输出就完了

代码: 全选

int main(void)
{
        int i,j;
        for(i = 0;i < (3+1)*8 + 1; i ++)
        {
                for(j = 0;j < (5+1)*8 + 1; j ++)
                {
                        if((i % (3 + 1) == 0) && (j % (5 + 1) == 0))
                                putchar('+');
                        else if((i % (3 + 1) != 0) && (j % (5 + 1) == 0))
                                putchar('|');
                        else if((i % (3 + 1) == 0) && (j % (5 + 1) != 0))
                                putchar('-');
                        else
                                putchar(' ');
                }
                putchar('\n');
        }
        return 0;
}

东西路,南北走
十字路口人咬狗
拿起狗来打砖头
砖头咬了狗一口
图片
robert870119
帖子: 768
注册时间: 2007-03-05 20:45
送出感谢: 0
接收感谢: 0

#3

帖子 robert870119 » 2007-11-28 20:34

madoldman 写了:第一个题目,日期按月/日/年的格式算的,不用判断什么闰月问题,先把日期转成time_t,就是从1900年开始到该时间的秒数,然后两个数相减,再除以一天的秒数就可以了

代码: 全选

#include <time.h>
#include <stdio.h>
int main(void)
{
        struct tm tm1, tm2;
        int seconds;
        tm1.tm_mday = 6;
        tm1.tm_mon = 6;
        tm1.tm_year = 90;
        tm1.tm_hour=0;
        tm1.tm_min=0;
        tm1.tm_sec=0;
        tm2.tm_mday = 3;
        tm2.tm_mon = 4;
        tm2.tm_year = 92;
        tm2.tm_hour=0;
        tm2.tm_min=0;
        tm2.tm_sec=0;
        seconds = mktime(&tm2) - mktime(&tm1);
        printf("There are %d days between 6/6/90 and 4/3/92.\n", seconds / 24 /60 / 60);
        return 0;
}



第二个题目,不用什么数组吧,直接输出就完了

代码: 全选

int main(void)
{
        int i,j;
        for(i = 0;i < (3+1)*8 + 1; i ++)
        {
                for(j = 0;j < (5+1)*8 + 1; j ++)
                {
                        if((i % (3 + 1) == 0) && (j % (5 + 1) == 0))
                                putchar('+');
                        else if((i % (3 + 1) != 0) && (j % (5 + 1) == 0))
                                putchar('|');
                        else if((i % (3 + 1) == 0) && (j % (5 + 1) != 0))
                                putchar('-');
                        else
                                putchar(' ');
                }
                putchar('\n');
        }
        return 0;
}




非常感谢,上面的第一题,我听说是要用time_h后结构体。还没看到那一部分,还是很感谢。


8-1 这题,您写的,我看懂了,非常感谢。 这个思路一直没想到。 

Thanks a lot. :lol:
头像
madoldman
帖子: 599
注册时间: 2006-02-27 20:19
来自: works system
送出感谢: 0
接收感谢: 0
联系:

#4

帖子 madoldman » 2007-11-29 15:52

就是用的time.h里的tm结构,呵呵,如果要一个月一个月的加,还得分31天的,30天的,还得考虑2月份的天数,那就太麻烦了,呵呵。
东西路,南北走
十字路口人咬狗
拿起狗来打砖头
砖头咬了狗一口
图片
robert870119
帖子: 768
注册时间: 2007-03-05 20:45
送出感谢: 0
接收感谢: 0

#5

帖子 robert870119 » 2007-11-29 22:57

madoldman 写了:就是用的time.h里的tm结构,呵呵,如果要一个月一个月的加,还得分31天的,30天的,还得考虑2月份的天数,那就太麻烦了,呵呵。

就是,我说,如果全部自己写,就很麻烦。。
用time.h等,就简单多了。

再次感谢你。
回复

回到 “C/C++/Java”