| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 534 人关注过本帖
标题:蓝桥的第一道题,出错了,高手指点下
只看楼主 加入收藏
赵疯子
Rank: 8Rank: 8
来 自:dream
等 级:蝙蝠侠
威 望:2
帖 子:365
专家分:737
注 册:2013-5-5
结帖率:94.44%
收藏
已结贴  问题点数:20 回复次数:4 
蓝桥的第一道题,出错了,高手指点下
月份自增的那句为什么一直都执行不到,不知道程序出的问题还是我思想出问题了,高手指点下,谢谢
程序代码:
#include<stdio.h>
void pan(int,int*,int,int);
main()
{
    int ryear[13]={0,31,29,31,30,31,30,31,31,30,31,30,31};
    int pyear[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};
    int *p1=ryear,*p2=pyear;
    int (*pr)[13];
    int cyear,cyue,cri,num;//ryear为闰年,pyear为平年,cyear为出生年,cyue为出生月,cri为出生日,num为多少天
    printf("输入日期(yyyy-mm-dd):\n");
    scanf("%d-%d-%d",&cyear,&cyue,&cri);
    printf("多少天?\n");
    scanf("%d",&num);
    pan(&cyear,pr,p1,p2);//判断是否为平年、闰年,用数组指针指向对应的月份
    for(;(num>=1);){//2  天数超过1时运行下面语句
        if(cyue<13){//1  如果月份不超过12月份时
            if(cri<*(pr+cyue)){cri++;num--;}//如果当月日期没有超过月底的日期时,自增
            else{cri=1;cyue++;num--;}//如果超过了就月份自增,日期归1
        }//1
        else{cyear++;cyue=1;}//运行上面语句后,再次判断月份是否超过12月
        pan(&cyear,pr,p1,p2);
    }//2
    printf("%d-%d-%d",cyear,cyue,cri);
}
void pan(int cyear,int *p,int *p1,int *p2)//判断是否为平年闰年
{
    if(((cyear%4==0)&&(cyear%100!=0))||(cyear%400==0)){
        p=p1;
    }
    else p=p2;
}
2013-05-27 20:57
赵疯子
Rank: 8Rank: 8
来 自:dream
等 级:蝙蝠侠
威 望:2
帖 子:365
专家分:737
注 册:2013-5-5
收藏
得分:0 
图片附件: 游客没有浏览图片的权限,请 登录注册
2013-05-27 21:00
baijianmin
Rank: 2
等 级:论坛游民
帖 子:16
专家分:44
注 册:2012-9-5
收藏
得分:10 
函数声明的变量类型错了,不晓得是怎么通过编译的。
pan函数参数怎么出现&符号?
改了以后我运行的结果是正确的额
2013-05-27 22:12
q13678986740
Rank: 4
等 级:业余侠客
帖 子:114
专家分:245
注 册:2012-7-7
收藏
得分:10 
#include<stdio.h>
void pan(int *cyear,int *p,int *p1,int *p2);    //函数声明有问题
main()
{
    int ryear[13]={0,31,29,31,30,31,30,31,31,30,31,30,31};
    int pyear[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};
    int *p1=ryear,*p2=pyear;
    int *pr=ryear;            //这里用指针就行,不过要对其赋值。我随便赋值了ryear,因为对你程序没影响
    int cyear,cyue,cri,num;            
    printf("输入日期(yyyy-mm-dd):\n");
    scanf("%d-%d-%d",&cyear,&cyue,&cri);
    printf("多少天?\n");
    scanf("%d",&num);
    pan(&cyear,pr,p1,p2);               
    for(;(num>=1);)
    {                           
        if(cyue<13)
        {                                                        
            if(cri<=*(pr+cyue))            //这里不加=的话少了月底那天没数
                {
                cri++;
                num--;
                }               
            else
                {
                cri=1;
                cyue++;
                num--;
                }            
        }                                
     else
     {
         cyear++;
         cyue=1;
     }            
     pan(&cyear,pr,p1,p2);
    }                                    
    printf("%d-%d-%d",cyear,cyue,cri);
    getch();
}
void pan(int *cyear,int *p,int *p1,int *p2)               
{
    if(((*cyear%4==0)&&(*cyear%100!=0))||(*cyear%400==0)){        //你这里的cyear是指针,你直接用地址去比较了。
        p=p1;
    }
    else p=p2;
}


这种方法应该效率比较低
2013-05-27 22:26
赵疯子
Rank: 8Rank: 8
来 自:dream
等 级:蝙蝠侠
威 望:2
帖 子:365
专家分:737
注 册:2013-5-5
收藏
得分:0 
回复 4楼 q13678986740
谢谢,问题解决了,是我的指针数组和数组指针弄混了
2013-05-28 17:28
快速回复:蓝桥的第一道题,出错了,高手指点下
数据加载中...
 
   



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

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