Board logo

标题: 关于C语言一个小问题,望兄弟姐妹解答一下,谢谢 [打印本页]

作者: 贝壳    时间: 2004-7-30 20:35

是这样,让用户先输入自己的生日(年月日分别用INT定义),再输入当前日期(年月日分别用INT定义),求用户的实足年龄.这个~~~有闰年,还有每月天数不一样等因素在内啊,怎么做啊,我想的好复杂啊所以算不出来啊
希望高手不要笑我啊,我写了整整两页的程序啊.这样肯定不对啊
作者: 贝壳    时间: 2004-7-30 20:36

忘了说,程序环境要求TURBO C 2.0
作者: Kong_84    时间: 2004-7-30 21:18

判断闰年得要一个函数了,这个各个教科书上都有的吧
至于每个月的天数可以开一个数组解决了
年数之差得出年龄,再根据月数的差的正负进行调整,这样可以搞定年龄的年的部分
月的部分如果月数差是负数,就用12减。同样也要通过日期差的正负进行微调
日期部分不用微调了
临时想的,仅供参考
这段代码可能会常些,没什么好怕的
代码越长越有成就感了 呵呵 加油
作者: 逆风飞扬    时间: 2004-7-30 22:11

biggrin.gif 顶!!没什么好说的了! wink.gif
作者: 摆渡接班人    时间: 2004-8-2 20:48

//判断是否是闰年的函数
bool leap_year(int year)
{
if(year%4==0&&year%100!=0)return true;
else if(year%100==0)
if(year%400==0)
return true;
else return false;
}
//主函数
main()
{
int birth_year,birth_month,birth_day,
current_year,current_month,current_day,
age_year,age_day, //结果用年又天的形式来表示
days1[12]={31,28,31,30,31,30,31,31,30,31,30,31},//平年每月天数
days2[12]={31,29,31,30,31,30,31,31,30,31,30,31},//闰年每月天数
birth_days=0/*出生那天到年初的天数*/,current_days=0/*现在到目前年初的天数*/;
//输入过程从略
if(!leap_year(birth_year))
for(int i=0;i<birth_month;i++)birth_days+=days1;
else
for(int i=0;i<birth_month;i++)birth_days+=days2;
if(!leap_year(current_year))
for(int i=0;i<current_month;i++)current_days+=days1;
else
for(int i=0;i<current_month;i++)current_days+=days2;
age_year=current_year-birth_year-(current_days<birth_days);
if(current_days>birth_days)age_day=current_days-birth_days;
else
if(leap_year(current_year))age_day=current_days-birth_days+366;
else age_day=current_days-birth_days+365;
//输出部分从略
}
作者: 贝壳    时间: 2004-8-4 10:31

强&#33;谢谢哥们&#33;你绝对高手&#33;
作者: 吴林    时间: 2004-8-4 11:34

俺晕。。。强人呢。。
作者: 摆渡接班人    时间: 2004-8-4 12:43

不客气~
俺也学计算机的
有空加我
QQ:53286704
作者: 贝壳    时间: 2004-8-4 15:22

强人兄,纠正一下,俺的专业不是计算机.俺纯粹自学.拜大哥为师&#33;请受徒儿一拜&#33;
作者: 摆渡接班人    时间: 2004-8-4 17:09

自学还是有难度的
我最近也在自学MFC编程技术
可是没有老师教真的是苦不堪言啊~~

p.s.贝壳老弟,我很早的时候读过你的文章~非常钦佩你的文采 laugh.gif
作者: 小南    时间: 2004-8-4 22:27

引用 (摆渡接班人 @ 2004-08-04 17:09:54)
自学还是有难度的
我最近也在自学MFC编程技术
可是没有老师教真的是苦不堪言啊~~

p.s.贝壳老弟,我很早的时候读过你的文章~非常钦佩你的文采 laugh.gif

你不是学vc.net吗,我最近因为工作需要用c#呢
作者: 贝壳    时间: 2004-8-4 22:38

引用 (摆渡接班人 @ 2004-08-04 17:09:54)
自学还是有难度的
我最近也在自学MFC编程技术
可是没有老师教真的是苦不堪言啊~~

p.s.贝壳老弟,我很早的时候读过你的文章~非常钦佩你的文采 laugh.gif

谢谢了哦,文采?不要用这个词呵呵,我玷污这个词啊,我写东西说白了就是哗众取宠,大走痞子文学的路线!
作者: 摆渡接班人    时间: 2004-8-5 10:24

引用 (小南 @ 2004-08-04 22:27:07)
引用 (摆渡接班人 @ 2004-08-04 17:09:54)
自学还是有难度的
我最近也在自学MFC编程技术
可是没有老师教真的是苦不堪言啊~~

p.s.贝壳老弟,我很早的时候读过你的文章~非常钦佩你的文采 laugh.gif

你不是学vc.net吗,我最近因为工作需要用c#呢

是啊
我双管齐下
呵呵~~ biggrin.gif
VC.NET中也用MFC的啊~~
C#暂时先不用了,放一边了
南哥学过C#吗??有什么心得或者是问题一定要记得和我分享啊~ cool.gif
作者: 小南    时间: 2004-8-5 12:00

引用 (摆渡接班人 @ 2004-08-05 10:24:39)
引用 (小南 @ 2004-08-04 22:27:07)
引用 (摆渡接班人 @ 2004-08-04 17:09:54)
自学还是有难度的
我最近也在自学MFC编程技术
可是没有老师教真的是苦不堪言啊~~

p.s.贝壳老弟,我很早的时候读过你的文章~非常钦佩你的文采 laugh.gif

你不是学vc.net吗,我最近因为工作需要用c#呢

是啊
我双管齐下
呵呵~~ biggrin.gif
VC.NET中也用MFC的啊~~
C#暂时先不用了,放一边了
南哥学过C#吗??有什么心得或者是问题一定要记得和我分享啊~ cool.gif

最近刚刚学,没有心得,嘿嘿
作者: 吴林    时间: 2004-8-5 14:06

两个强人,就别谦虚了。。
以后跟你们混了
作者: 逆风飞扬    时间: 2004-8-5 15:34

我也刚刚开始肯C#!感觉这个写的挺帅的!大家学习一下~!
用C#来实现对局域网IP地址的扫描
原作者姓名 落叶夏日
先介绍一下使用的类:
1. DNS类:在.net中的System.net命名空间下,主要的功能是从 Internet 域名系统 (DNS) 检索关于特定主机的信息。
2. IPHostEntry类:将一个域名系统 (DNS) 主机与一组别名和一组匹配的 IP 地址关联,和DNS类一起使用。
3. IPAddress 类:IP 网络上的地址。
使用的命名空间有:
System.Net 命名空间为当前网络上使用的多种协议提供了简单的编程接口.
System.IO命名空间包含允许在数据流和文件上进行同步和异步读取及写入的类型。
System.Thread 命名空间主要是用来多线程序编程。
程序实现以下几个功能:
1. 获取本地主机IP地址
//对Button控件的事件的响应
private void buttion1_click(object sender,System.Event.Args e)
{
IPHostEntry myHost = new IPHostEntry();
Try
{
// Dns.GetHostName()获取本地计算机的主机名
// Dns.GetHostByName()获取指定 DNS 主机名的 DNS 信息
//得到本地主机的DNS信息
myHost = Dns.GetHostByName(Dns.GetHostName());
//显示本地主机名
textBox1.Text = myHost.HostName.ToString();
//显示本地主机的IP地址表
for(int i=0; i<myHost.AddressList.length;i++)
{
richTextBox1.AppendText(“本地主机IP地址à”+myHost.AddressList.ToString()+”\r”);
}
catch(Exception error)
{
MessageBox.Show(error.Message);
}
}//private
2. 远程查询
private void buttion2_click(object Sender,System.EventArgs e)
{

IPHostEntry myDnsToIP = new IPHostEntry();
//Dns.Resolve 方法: 将 DNS 主机名或以点分隔的四部分表示法格式的 // IP 地址解析为 IPHostEntry实例
myDnsToIP =Dns.Resolve(textBox2.Text.ToString());
//显示此域名的IP地址的列表
for(int i=0;i<myDnsToIPAddressList.Length;i++)
{
rich.TextBox1.AppendText(textBox2.Text+”的IP地址是”+myDnsToIP.AddressList.ToString()+”\r”);
}
}
3. 实现网段的扫描,确定网络中正在使用的主机数目。这里使用了多线程技术,增加了一个线程,为了防止程序扫描的时间过长,影响程序的响应。不过在.net中由于使用了垃圾收集技术所以对线程的控制也不是很复杂的。
private void button3_click(object sender, System.EventArgs e)
{
//Thread 类: 创建并控制线程
Thread thScan = new thread(new ThreadStrart(ScanTarget));
//Thread.Start 方法:启动线程
thScan.Strart();
}
private void ScanTarget()
{
//构造IP地址的31-8BIT 位,也就是固定的IP地址的前段
// numericUpDown1是定义的System.Windows.Forms.NumericUpDown控件
string strIPAddress=numericUpDown1.Text+”.”+numericUpDown2.Text+”.”+numericUpDown3.Text+”.”;
//开始扫描地址
int nStrat = Int32.Parse(numericUpDown4.Text);
//终止扫描地址
int nEnd =Int32.Parse(numericUpDown5.Text);
//扫描的操作
for(int i=nStrat;i<=nEnd;i++)
{
string strScanIPAdd = strIPAddress +i.ToString();
//转换成IP地址
IPAddress myScanIP = IPAddress.Parse(strScanIPAdd);
try
{
//你可以加入自已的,增强功能
// Dns.GetHostByAddress 方法: 根据 IP 地
//址获取 DNS 主机信息。
IPHostEntry myScanHost =
Dns.GetHostByAddress(myScanIP);
//获取主机的名
string strHostName =myScanHost.HostName.ToString();
richTextBox1.AppendText(strScanIPAdd+”à”+strHostName+”\r”);
}
catch(Exception error)
{
MessageBox.Show(error.Message);
}
}//for
}//private






欢迎光临 摆渡论坛 (http://bbs.wakin.org/) wakinchau.net