c语言递归函数求万年历,c语言递归求幂

求一万年历c语言

PIC16F877A LCD1602液晶式万年历

成都创新互联长期为上千多家客户提供的网站建设服务,团队从业经验10年,关注不同地域、不同群体,并针对不同对象提供差异化的产品和服务;打造开放共赢平台,与合作伙伴共同营造健康的互联网生态环境。为新民企业提供专业的成都网站设计、成都网站制作、外贸网站建设新民网站改版等技术服务。拥有十载丰富建站经验和众多成功案例,为您定制开发。

默认分类 2011-03-23 23:27:51 阅读10 评论0   字号:大中小 订阅

#includepic.h#define uchar unsigned char#define uint  unsigned int#define RS RA1#define RW RA2#define E  RA3#define s1 RB1#define s2 RB2#define s3 RB3 __CONFIG(0x1832);int Hours=0;//定义小时int Minutes=0;//定义分钟int Seconds=0;//定义秒int Day=20;int Months=03;int Years=2011;const char Table[]="0123456789";   ////1602:0-9 数字uint Y[16]; //8字节的显示缓冲区uchar set_2=0;int incone(int n);int decone(int m);void delay(uint x)///延时 { uint a,b;  for(a=x;a0;a--)   for(b=30;b0;b--);   }

void interrupt time0 (){uchar temp,intnum;    T0IF=0;    TMR0=63;    intnum++;   if(intnum==40)     {   intnum=0;        Seconds++;  if(Seconds==60)    {   Seconds=0;   Minutes++;   if(Minutes==60)     {    Minutes=0;    Hours++;    if(Hours==24)      {     Hours=0;                    Day++;                  if(Day==31)                    {       Day=0;                      Months++;                                         if(Months==12)                       {                         Months=0;                         Years++;                       }                     }                 }                  }    }     }  }

void write_Directive(uchar a)//写指令{RS=0;RW=0;delay(1);E=0;PORTD=a;delay(1);E=1;delay(1);E=0;delay(1);}

void write_Data(uchar a)//写数据{RS=1;RW=0;delay(1);E=0;PORTD=a;delay(1);E=1;delay(1);E=0;delay(1);

}void init()//初始化{   ADCON1=0X07;  PORTB=0xFF;  TRISB=0XFF;  PORTC=0x00;  TRISC=0X00;  TRISD=0;  TRISA=0;  OPTION=0X06;  TMR0=63;  INTCON=0XA0;Y[14]=':';delay(15);write_Directive(0x38);delay(5);write_Directive(0x38);delay(5);write_Directive(0x38);write_Directive(0x01);write_Directive(0x02);//初始化后数据地址为0x80;即第一行,第一个位置write_Directive(0x0c);//不显示光标}

void write_Data_String()//显示时间函数{ Y[0]=Hours/10;//转换成10进制显示Y[1]=Hours%10;Y[2]=Minutes/10;Y[3]=Minutes%10;Y[4]=Seconds/10;Y[5]=Seconds%10;Y[6]=Years/1000;Y[7]=Years/100%10;Y[8]=Years/10%10;Y[9]=Years%10;//Y[6]=Years/1000;//Y[7]=Years%1000/100;//DispBuf[8]=Years%100/10;//DispBuf[9]=Years%10;Y[10]=Months/10;Y[11]=Months%10;Y[12]=Day/10;Y[13]=Day%10;Y[14]=':';Y[15]='.';Y[0]=Table[Y[0]];//查表取字符Y[1]=Table[Y[1]];Y[2]=Table[Y[2]];Y[3]=Table[Y[3]];Y[4]=Table[Y[4]];Y[5]=Table[Y[5]];Y[6]=Table[Y[6]];//查表取字符Y[7]=Table[Y[7]];Y[8]=Table[Y[8]];Y[9]=Table[Y[9]];Y[10]=Table[Y[10]];Y[11]=Table[Y[11]];Y[12]=Table[Y[12]];Y[13]=Table[Y[13]];write_Directive(0x80+0x04);//第一行,第五个位置地址

write_Data(Y[0]);//第一行,第五个位置write_Data(Y[1]);//第一行,第六个位置

write_Data(Y[14]);//第一行,第七个位置

write_Data(Y[2]);//第一行,第八个位置write_Data(Y[3]);//第一行,第九个位置

write_Data(Y[14]);//第一行,第十个位置

write_Data(Y[4]);//第一行,第十一个位置write_Data(Y[5]);//第一行,第十二个位置

write_Directive(0x80+0x43);//第二行,第四个位置地址

write_Data(Y[6]);//第二行,第四个位置write_Data(Y[7]);//第二行,第五个位置write_Data(Y[8]);//第二行,第六个位置write_Data(Y[9]);//第二行,第七个位置

write_Data(Y[15]);//第二行,第八个位置

write_Data(Y[10]);//第二行,第九个位置write_Data(Y[11]);//第二行,第十个位置

write_Data(Y[15]);//第二行,第十一个位置

write_Data(Y[12]);//第二行,第十二个位置write_Data(Y[13]);//第二行,第十三个位置}void key_set() //时间按键设置{if(s1 == 0){   delay(20);   if(s1 == 0)   {    set_2++;    while(!s1);    if(set_2 == 8)    {     set_2 = 0;    }   }}}void set_time()   //设置时间函数{   if(set_2==1)     {      RC0=1;     }      if(set_2==2)          ////s2即RB1按1次调秒     {     Seconds=incone(Seconds);     if(Seconds59)      {       Seconds=0;      }    Seconds=decone(Seconds);    if(Seconds0)      {       Seconds=59;      }      }    if(set_2==3)             ////s2即RB1按2次调分    {     Minutes=incone(Minutes);     if(Minutes59)       {        Minutes=0;       }    Minutes=decone(Minutes);    if(Minutes0)       {       Minutes=59;       }     }    if(set_2==4)             ////s2即RB1按3次调时   {    Hours=incone(Hours);    if(Hours23)    {     Hours=0;    }    Hours=decone(Hours);    if(Hours0)    {     Hours=23;    }   }       if(set_2==5)          ////s2即RB1按4次调天     {     Day=incone(Day);     if(Day31)      {       Day=1;      }    Day=decone(Day);    if(Day1)      {       Day=31;      }     }    if(set_2==6)             ////s2即RB1按4次调月    {     Months=incone(Months);     if(Months12)       {        Months=1;       }    Months=decone(Months);    if(Months1)       {        Months=12;       }     }    if(set_2==7)             ////s2即RB1按5次调年   {    Years=incone(Years);    if(Years2050)    {     Years=1986;    }    Years=decone(Years);    if(Years1986)    {     Years=2010;    }   }   }

int incone(int n)   //加“1”函数{ if(s2==0)  {    delay(20);   if(s2==0)   {    n++;     while(!s2);     write_Data_String();   }  }}

int decone(int m)    //减“1”函数{ if(s3==0) {   delay(20);   if(s3==0)   {    m--;    while(!s3);    write_Data_String();   } }}void main(){init();while(1)   {   key_set();   set_time();   write_Data_String();   }}

C语言递归函数(请确认问题后再回答)

这个题用循环语句比较简单,递归的话稍微复杂点,下面是我刚写的:

Hand和Hand2是递归函数;Test是测试函数,用来检验x1,x2,x3的值是否满足条件,满足的话输出(这个函数不是重点,我只写了句提示,你把它补充完整就行);fun函数直接调用Hand函数,主函数中把fun函数放进去就行了。

void fun(bool x1,bool x2,bool x3){

static int count=0;

Hand(x1,x2,x3,count);

}

void Test(bool X,bool Y,bool Z){ //测试函数

if((x1 || !x2 || x3)(!x1 || x2 || x3)) ..... 输出X,Y,Z的值

}

bool Hand2(int x){ //递归函数,按顺序为x1x2x3赋值

if(x=0) return false;

ruturn !Hand(x-1);}

void Hand(bool x1,bool x2,bool x3,count) //递归函数,依次赋值并检测(调用了Hand2和Test)

{

if (count=8) return ;

x1=Hand2(count%4);x2=Hand2(count%2);x3=Hand2(count);

Test(x1,x2,x3);

Hand(x1,x2,x3,count++);

}

采用就给分吧。

C语言万年历程序

#include"stdio.h"

#include"stdlib.h"

main( )

{

int Year,Month; //年、月

int FirstDay_Year,FirstDay_Month; //某年的第一天是星期几,某年某月的第一天是星期几(范围是0~6,其中0代表星期日)

int IsLeapYear; //是否为闰年,0表示不是闰年,1表示是闰年

int i,d,y; //临时变量

char YN; //Yes No,程序是否要继续

int Days[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};

//Days[1~12]存储每个月有多少天,其中二月的天数是可变的(闰年29天,平年28天),这里初始化为28天

printf(" C语言简单万年历\n"); //打印标题

XunHuan: //循环标号(可以通过goto跳转到这里)

printf("请输入年份: "); //提示输入年份(0~9999)

scanf("%d",Year); //把输入的年份赋值给变量Year

printf("请输入月份: "); //提示输入月份(1~12)

scanf("%d",Month); //把输入的月份赋值给变量Month

y=Year;

FirstDay_Year=5*(y/4)+(y%4)-(y/100)+(y/400);//蔡勒公式(计算某年的第一天是星期几)

IsLeapYear=(y%4==4y%100!=100||y%400==0)?1:0;

//判断是否为闰年

Days[2]=(IsLeapYear==1)?29:28; //闰年二月29天,非闰年二月28天

for(i=1,d=0;iMonth;i++)

d=d+Days[i];

FirstDay_Month=(d+FirstDay_Year)%7; //当月的第一天是星期几(0代表星期日)

printf("\n****************************************************\n");

printf("\t\t公元 %d 年 %2d 月",Year,Month); //打印年月

printf("\n****************************************************\n");

printf(" 星期日 星期一 星期二 星期三 星期四 星期五 星期六\n");

//打印星期表头

for(i=0;iFirstDay_Month;i++)

printf("%7c",' '); //当某月的第一天不是星期日时打印空格占位

for(d=1;d=Days[Month];d++) //循环,从每个月的第一天开始打印

{

printf("%7d",d);

if(((d+FirstDay_Month)%7)==0 dDays[Month])

printf("\n"); //当输出了星期六而且还未输出所有天数时,换行

}

printf("\n****************************************************\n");

printf("\n");

printf("是否继续(Y/N)?\n");

scanf("%c",YN);

scanf("%c",YN);

if(YN=='Y' || YN=='y')

goto XunHuan;

}

讲一下c语言中递归函数的使用方法

递归函数有三点要求:

1,递归的终止点,即递归函数的出口

2,不断的递归调用自身

3,递归函数主体内容,即递归函数需要做的事情

ps:3一般可以放在2的前面或者后面,一般1放最前面。另外,2和3可以根据不同的需要合并,比如,有时候递归函数的主体就是返回调用下层函数所得到的结果。

具体例子如下:

void fun(int n)

{

if(n=0) return;   //1 这是递归的终点,即出口

fun(n-1);        //2、递归函数自身的调用

coutnendl;     //3 递归函数的主体内容

}

2,3合并的情况

int fun(int n)

{

if(n=0) return 0;

return fun(n-1)+fun(n-2);  //2 3合并

}

求C语言万年历程序 要求能满足下列要求

C语言设计简单万年历源代码[含阳历阴历转化、密码登陆功能]

C语言课程设计简单万年历源代码[含阳历阴历转化、密码登陆功能]发布:极乐鸟 | 发布时间: 2009年6月23日

万年历

一.基本要求

1. 万年历是简单实用的单机软件。考虑到学生们对日历的认知比较熟悉,所以需要他们实现日历的诸多功能。在编码前先提供清晰的设计框架,再用C语言的程序源完成主要模块的详细设计。即:先构想好流程图,然后利用流程图编写C语言源代码,编写的源代码在TC上运行,运行通过后再进行测试。

2. 一人一组完成程序的分析和编码。

3. 熟悉各个流程步骤,理解各个环节之间的控制流程。

4. 熟练掌握TC或Visual C++下C程序的运行环境。

5. 熟练掌握C语言,调用子程序和函数进行读写数据的操作。程序编写过程中必须用到函数、指针、文件操作等C语言技能。

二、任务分解

本软件能查询0~20000年的公历并能查询1900-2200年的农历,是真正的“万年历”。

1. 显示封面模块(初始界面)

(1)执行本软件后首先显示欢迎信息、版本号、作者姓名、日期及其它信息。

(2)进入方式:按回车进入日历系统,按‘ESC’键退出。

2. 密码检测模块

(1)进入日历系统时,需要密码验证,若密码输入正确则课选择进入日历系统或进入重设新密码页面,否则若密码输入连续3次错误按任意键退出程序。

(2)若需重设新密码,则按‘Y’键即进入重设新密码系统。

(3)在重设新密码时,要求输入正确的旧密码2次,才能输入新密码进行重设。

(4)若输入旧密码3次错误,重设新密码失败,按任意键退出到初始界面。

(5)定义文件指针,用来读取密码文件中的密码数据和将新的密码数据写入密码文件。

3. 查询显示日历模块

(1)查询并显示某一个月的日历(公历);

(2)查询并显示某一年的日历(公历);

(3)查询并显示某一天是星期几,属于该月的第几个星期;

(4)查询并显示某一天是该年的第几天;

(5)查询并显示某一天对应的农历是哪一天;

(6)能够查询中国传统的24节气所对应的公历和农历

(7)当所查询日历完成,按上下光标键可以进行向前向后翻屏查询;按‘ENTER’键重新输入年月,进行新的查询;按‘ESC’键退出程序。

4. 特殊功能模块:用函数实现特殊功能子模块(子程序)。

(1)通过文件操作设置自己的备忘录;

(2)中国传统节日自动提醒或特殊显示。

5. 学生们可以自由发挥增添更丰富的功能。

#include stdio.h

int day,year,month;

int isLeap()

{int isleap;

if(((year%4==0)!(year%100==0))||(year%400==0))isleap=1;

else isleap=0;

return isleap;}

int lastdayofmonth()

{int lastday,isleap;

switch (month)

{case 1: case 3: case 5: case 7:case 8: case 10: case 12: lastday=31;break;

case 4: case 6: case 9: case 11: lastday=30;break;

case 2: {isleap=isLeap();

if (isleap==1) lastday=29;

else lastday=28;}}

return lastday;}

int ValidDate()

{int valid;

int yearOK,monthOK,dayOK;

if ((year1811)(year=2012)) yearOK=1;

else yearOK=0;

if ((month0)(month=12)) monthOK=1;

else monthOK=0;

if ((day0)(day=lastdayofmonth())) dayOK=1;

else dayOK=0;

if(yearOK monthOK dayOK) valid=1;

else valid=0;

return valid;}

int getday(){printf("Enter a month/a day/a year");scanf("%d %d %d",month,day,year);

return ValidDate();}

void incrementdate()

{if (daylastdayofmonth()) day+=1;

else

{day=1;

if (month==12)

{month=1;year+=1;}

else month+=1;}}

void print()

if (ValidDate())printf("nextday is %d/%d/%d",month,day,year);elseprintf("Date error");}

void main(){getday();incrementdate();print();}

补充一下,又发现一个问题。输入之后虽然你做了输入检查,但是现在的写法,这个检查起不到任何作用。可以把main里的getday();改写成if(getday()==0){printf("Date error");return;}意思是如果输入的日期不正常的话打出出错信息并结束程序

主要功能包括

1.查询某年某月每一天对应星期几

2.可以查询某年某月的上个月或是下个月的日历情报

3.查询某年某月某日是这一年的第几天,并查询改天是星期几

4.判断该年是闰年还是平年,判断这一年的生肖

#include stdio.h

#include conio.h

#include dos.h

void rili(int,int);

int runniansub(int);

int week(int,int,int);

int monthday[12]={31,28,31,30,31,30,31,31,30,31,30,31};

int main()

{ struct date d;

getdate(d);

printf("今天是:%d年 %d月 %d日\n",d.da_year,d.da_mon,d.da_day);

rili(d.da_year,d.da_mon-1);

system("pause");

return 0; }

void rili(int year,int month)

{ int d,w,i,s,c,p;

char x;

while(month11) {

month-=12;

year++; }

while(month0) { year--;

month+=12; }

if(runniansub(year)) monthday[1]=29;

printf("%d年%d月\n",year,month+1);

printf("S M T W T F S\n");

s=week(year,month+1,1);

for(i=0; i3*s; i++ ) printf(" ");

c=s;

for(d=1;d=monthday[month];d++) {

if(c6) {

printf("\n");

c=0; }

c++;

printf("%d",d);

printf("%s",(d10)?" ":" "); }

printf("\n");

printf("下月N,上月P,退出Q");

x=getch();

printf("%c\n",x);

if(x=='N' || x=='n') { rili(year,month+1); }

else if(x=='P' || x=='p') { rili(year,month-1); }

else { printf("感谢使用!88\n"); return;} }

int runniansub(int year)

{ return ((year%4==0 year%100!=0) || (year%4==0 year%400==0)); }

int week(int y,int m,int d)

{ if((m==1)||(m==2)) {

m+=12;

y--; }

return ((d+2*m+3*(m+1)/5+y+y/4-y/100+y/400)+1)%7;

#include stdio.h

int IsLeapYear(int); /*定义子函数*/

main()

{int i,day,year,temp,temp_i; /*定义变量*/

long int Year_days=0;

int Year_Start=1;

int Per_Year_Days;

int month_day[]={31,28,31,30,31,30,31,31,30,31,30,31,29};/*定义

月份*/

printf("We know that 2000.01.01 is saturday!\n");

printf("Please enter the year and month:"); /*提示信息*/

while(1)

{scanf("%d %d",year,temp);

if(getchar()=='q')

exit(0);

while(Year_Start year)

{ if(IsLeapYear(Year_Start)) /*调用IsLeapYear函数判断是否为

闰年*/

Per_Year_Days=366; /*闰年一年366天*/

else

Per_Year_Days=365; /*平年一年365天*/

Year_days=Year_days + Per_Year_Days;

Year_Start++;

} /*输出每个月的日历*/

// for(temp=1;temp=12;temp++)

{switch(temp)

{ case 1: printf("January (%d) \n",year);break;

case 2: printf("February (%d) \n",year); break;

case 3: printf("March (%d) \n",year); break;

case 4: printf("April (%d) \n",year); break;

case 5: printf("May (%d) \n",year); break;

case 6: printf("June (%d) \n",year);break;

case 7: printf("July (%d) \n",year);break;

case 8: printf("Auguest (%d) \n",year); break;

case 9: printf("September (%d) \n",year);break;

case 10:printf("October (%d) \n",year);break;

case 11:printf("Novermber (%d) \n",year); break;

case 12:printf("December (%d) \n",year); break;

default:printf("error\n");

}

i=Year_days%7;

printf("Mon Tue Wed Thu Fri Sat Sun\n"); /*星期提示信息*/

if(i!=0)

for(temp_i=0;temp_ii;temp_i++)

printf(" ");

day=1;

if(IsLeapYear(year)temp==2)

while(day=month_day[12])

{if(day1)

if(Year_days%7==0)

printf("\n");

if(day=10)

printf("%d ",day);

else

printf("%d ",day);

Year_days++;

day++;}

else

while(day=month_day[temp-1])

{ if(day1)

if(Year_days%7==0)

printf("\n");

if(day=10)

printf("%d ",day);

else

printf("%d ",day);

Year_days++;

day++; } /*依次输入日期*/

printf("\n") ;}}}

int IsLeapYear(int year) /*判断是否是闰年*/

{ if((year%4==0)(year%100!=0)||(year%400==0))

return 1;

else

return 0;}}

#include stdio.h

int leap (int year)

{if(year%4==0year%100!=0||year%400==0) //判断是否是闰年

return 1;

else return 0; }

int days_month (int month,int year) //判断大月和小月

{ if(month==1||month==3||month==5||month==7||month==8||month==10||month==12) //找出大月

return 31;

if(month==4||month==6||month==9||month==11) //找出小月

return 30;

if(month==2leap(year)==1) return 29; //判断二月是29天还是29天

else return 28; }

int firstday(int month,int year)

{int w;

w=(1+2*month+3*(month+1)/5+year+year/4+year/400-year/100)%7+1; //判断每个月开始的第一天是星期几

return w; }

main()

{int i,j=1,k=1,a,b,month,year;

printf("\n input month and year:\n");

scanf("%d%d",month,year); //输入月和年

b=days_month(month,year);

a=firstday (month,year);

printf(" Sun Mon Tue Wed Thu Fri Sat \n"); //输出对应当月的日历

if(a==7)

{for(i=1;i=b;i++)

{printf("%4d",i);

if(i%7==0)

{printf("\n"); } } }

if(a!=7)

{while (j=4*a)

{printf(" ");

j++; }

for(i=1;i=b;i++)

{printf("%4d",i);

if(i==7*k-a)

{printf("\n");

k++; } } }

printf("\n"); }

PS:这份是山东交通学院信息工程系电气类专业2009年6月C语言课程设计的题目之一。以上程序核心是一学妹写的,因为她写出后出现了一些bug,本人负责了调试及bug修补工作。


网站标题:c语言递归函数求万年历,c语言递归求幂
转载来于:http://myzitong.com/article/dsedpcs.html