当前时区为 UTC + 8 小时



发表新帖 回复这个主题  [ 5 篇帖子 ] 
作者 内容
1 楼 
 文章标题 : [问题]我也发习题帖
帖子发表于 : 2007-11-27 22:48 

注册: 2007-03-05 20:45
帖子: 768
送出感谢: 0 次
接收感谢: 0 次
两个习题,都搞了半天搞不定的。。
哪位给个提示? 给个答案?
代码:
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,没正规老师教。。 习题没答案,做出来了,可以运行,看结果,做不出来,就只好到这里了求助了。。

望各位帮个忙啊。谢谢 。


_________________
my blog :
http://tiancai1hao.blogbus.com


页首
 用户资料  
 
2 楼 
 文章标题 :
帖子发表于 : 2007-11-28 14:57 
头像

注册: 2006-02-27 20:19
帖子: 599
地址: works system
送出感谢: 0 次
接收感谢: 0 次
第一个题目,日期按月/日/年的格式算的,不用判断什么闰月问题,先把日期转成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;
}



_________________
东西路,南北走
十字路口人咬狗
拿起狗来打砖头
砖头咬了狗一口
图片


页首
 用户资料  
 
3 楼 
 文章标题 :
帖子发表于 : 2007-11-28 20:34 

注册: 2007-03-05 20:45
帖子: 768
送出感谢: 0 次
接收感谢: 0 次
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:


_________________
my blog :
http://tiancai1hao.blogbus.com


页首
 用户资料  
 
4 楼 
 文章标题 :
帖子发表于 : 2007-11-29 15:52 
头像

注册: 2006-02-27 20:19
帖子: 599
地址: works system
送出感谢: 0 次
接收感谢: 0 次
就是用的time.h里的tm结构,呵呵,如果要一个月一个月的加,还得分31天的,30天的,还得考虑2月份的天数,那就太麻烦了,呵呵。


_________________
东西路,南北走
十字路口人咬狗
拿起狗来打砖头
砖头咬了狗一口
图片


页首
 用户资料  
 
5 楼 
 文章标题 :
帖子发表于 : 2007-11-29 22:57 

注册: 2007-03-05 20:45
帖子: 768
送出感谢: 0 次
接收感谢: 0 次
madoldman 写道:
就是用的time.h里的tm结构,呵呵,如果要一个月一个月的加,还得分31天的,30天的,还得考虑2月份的天数,那就太麻烦了,呵呵。

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

再次感谢你。


_________________
my blog :
http://tiancai1hao.blogbus.com


页首
 用户资料  
 
显示帖子 :  排序  
发表新帖 回复这个主题  [ 5 篇帖子 ] 

当前时区为 UTC + 8 小时


在线用户

正在浏览此版面的用户:没有注册用户 和 2 位游客


不能 在这个版面发表主题
不能 在这个版面回复主题
不能 在这个版面编辑帖子
不能 在这个版面删除帖子
不能 在这个版面提交附件

前往 :  
本站点为公益性站点,用于推广开源自由软件,由 DiaHosting VPSBudgetVM VPS 提供服务。
我们认为:软件应可免费取得,软件工具在各种语言环境下皆可使用,且不会有任何功能上的差异;
人们应有定制和修改软件的自由,且方式不受限制,只要他们自认为合适。

Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
简体中文语系由 王笑宇 翻译